00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined(TOKENGROUP_H)
00024 #define TOKENGROUP_H
00025
00026 #include "Presentable.h"
00027
00028 #include "Ingredients.h"
00029 #include "Root.h"
00030 #include "BaseClasses.h"
00031 #include "BaseActions.h"
00032 #include "Actions.h"
00033
00034 #include <QPoint>
00035 #include <QList>
00036
00037 class MHEngine;
00038
00039 class MHTokenGroupItem
00040 {
00041 public:
00042 MHTokenGroupItem() {}
00043 void Initialise(MHParseNode *p, MHEngine *engine);
00044 void PrintMe(FILE *fd, int nTabs) const;
00045 MHObjectRef m_Object;
00046 MHOwnPtrSequence <MHActionSequence> m_ActionSlots;
00047 };
00048
00049 class MHMovement
00050 {
00051 public:
00052 void Initialise(MHParseNode *p, MHEngine *engine);
00053 void PrintMe(FILE *fd, int nTabs) const;
00054 MHSequence <int> m_Movement;
00055 };
00056
00057
00058
00059 class MHTokenGroup : public MHPresentable
00060 {
00061 public:
00062 MHTokenGroup();
00063 virtual const char *ClassName() { return "TokenGroup"; }
00064 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00065 virtual void PrintMe(FILE *fd, int nTabs) const;
00066
00067 virtual void Activation(MHEngine *engine);
00068 virtual void Deactivation(MHEngine *engine);
00069
00070
00071 virtual void CallActionSlot(int n, MHEngine *engine);
00072 virtual void Move(int n, MHEngine *engine);
00073 virtual void MoveTo(int n, MHEngine *engine) { TransferToken(n, engine); }
00074 virtual void GetTokenPosition(MHRoot *pResult, MHEngine *) { pResult->SetVariableValue(m_nTokenPosition); }
00075
00076 protected:
00077 void PrintContents(FILE *fd, int nTabs) const;
00078 void TransferToken(int newPos, MHEngine *engine);
00079
00080 MHOwnPtrSequence <MHMovement> m_MovementTable;
00081 MHOwnPtrSequence <MHTokenGroupItem> m_TokenGrpItems;
00082 MHOwnPtrSequence <MHActionSequence> m_NoTokenActionSlots;
00083
00084
00085 int m_nTokenPosition;
00086 };
00087
00088
00089
00090
00091 class MHListItem {
00092 public:
00093 MHListItem(MHRoot *pVis): m_pVisible(pVis), m_fSelected(false) {}
00094 MHRoot *m_pVisible;
00095 bool m_fSelected;
00096 };
00097
00098 class MHListGroup : public MHTokenGroup
00099 {
00100 public:
00101 MHListGroup();
00102 ~MHListGroup();
00103 virtual const char *ClassName() { return "ListGroup"; }
00104 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00105 virtual void PrintMe(FILE *fd, int nTabs) const;
00106 virtual void Preparation(MHEngine *engine);
00107 virtual void Destruction(MHEngine *engine);
00108 virtual void Activation(MHEngine *engine);
00109 virtual void Deactivation(MHEngine *engine);
00110
00111
00112 virtual void AddItem(int nIndex, MHRoot *pItem, MHEngine *engine);
00113 virtual void DelItem(MHRoot *pItem, MHEngine *engine);
00114 virtual void GetCellItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine);
00115 virtual void GetListItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine);
00116 virtual void GetItemStatus(int nCell, const MHObjectRef &itemDest, MHEngine *engine);
00117 virtual void SelectItem(int nCell, MHEngine *engine);
00118 virtual void DeselectItem(int nCell, MHEngine *engine);
00119 virtual void ToggleItem(int nCell, MHEngine *engine);
00120 virtual void ScrollItems(int nCell, MHEngine *engine);
00121 virtual void SetFirstItem(int nCell, MHEngine *engine);
00122 virtual void GetFirstItem(MHRoot *pResult, MHEngine *) { pResult->SetVariableValue(m_nFirstItem); }
00123 virtual void GetListSize(MHRoot *pResult, MHEngine *) { pResult->SetVariableValue((int)(m_ItemList.size())); }
00124
00125 protected:
00126
00127 void Update(MHEngine *engine);
00128 void Select(int nIndex, MHEngine *engine);
00129 void Deselect(int nIndex, MHEngine *engine);
00130 int AdjustIndex(int nIndex);
00131
00132
00133 MHSequence <QPoint> m_Positions;
00134 bool m_fWrapAround, m_fMultipleSelection;
00135
00136 QList<MHListItem*> m_ItemList;
00137 int m_nFirstItem;
00138 bool m_fFirstItemDisplayed, m_fLastItemDisplayed;
00139 int m_nLastCount, m_nLastFirstItem;
00140 };
00141
00142
00143 class MHCallActionSlot: public MHActionInt
00144 {
00145 public:
00146 MHCallActionSlot(): MHActionInt(":CallActionSlot") {}
00147 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->CallActionSlot(nArg, engine); }
00148 };
00149
00150
00151 class MHMove: public MHActionInt
00152 {
00153 public:
00154 MHMove(): MHActionInt(":Move") {}
00155 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->Move(nArg, engine); }
00156 };
00157
00158
00159 class MHMoveTo: public MHActionInt
00160 {
00161 public:
00162 MHMoveTo(): MHActionInt(":MoveTo") {}
00163 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->MoveTo(nArg, engine); }
00164 };
00165
00166 class MHGetTokenPosition: public MHActionObjectRef {
00167 public:
00168 MHGetTokenPosition(): MHActionObjectRef(":GetTokenPosition") {}
00169 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) { pTarget->GetTokenPosition(pArg, engine); }
00170 };
00171
00172 class MHAddItem: public MHElemAction {
00173 public:
00174 MHAddItem(): MHElemAction(":AddItem") {}
00175 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00176 virtual void PrintArgs(FILE *fd, int) const;
00177 virtual void Perform(MHEngine *engine);
00178 protected:
00179 MHGenericInteger m_Index;
00180 MHGenericObjectRef m_Item;
00181
00182 };
00183
00184 class MHDelItem: public MHActionGenericObjectRef {
00185 public:
00186 MHDelItem(): MHActionGenericObjectRef(":DelItem") {}
00187 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pObj) { pTarget->DelItem(pObj, engine); }
00188 };
00189
00190
00191 class MHGetListActionData: public MHElemAction {
00192 public:
00193 MHGetListActionData(const char *name): MHElemAction(name) {}
00194 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00195 virtual void PrintArgs(FILE *fd, int) const;
00196 protected:
00197 MHGenericInteger m_Index;
00198 MHObjectRef m_Result;
00199 };
00200
00201 class MHGetCellItem: public MHGetListActionData {
00202 public:
00203 MHGetCellItem(): MHGetListActionData(":GetCellItem") {}
00204 virtual void Perform(MHEngine *engine) { Target(engine)->GetCellItem(m_Index.GetValue(engine), m_Result, engine); }
00205 };
00206
00207 class MHGetListItem: public MHGetListActionData {
00208 public:
00209 MHGetListItem(): MHGetListActionData(":GetListItem") {}
00210 virtual void Perform(MHEngine *engine) { Target(engine)->GetListItem(m_Index.GetValue(engine), m_Result, engine); }
00211 };
00212
00213 class MHGetItemStatus: public MHGetListActionData {
00214 public:
00215 MHGetItemStatus(): MHGetListActionData(":GetItemStatus") {}
00216 virtual void Perform(MHEngine *engine) { Target(engine)->GetItemStatus(m_Index.GetValue(engine), m_Result, engine); }
00217 };
00218
00219 class MHSelectItem: public MHActionInt {
00220 public:
00221 MHSelectItem(): MHActionInt(":SelectItem") {}
00222 virtual void CallAction(MHEngine *engine, MHRoot * , int nArg) { Target(engine)->SelectItem(nArg, engine); }
00223 };
00224
00225 class MHDeselectItem: public MHActionInt {
00226 public:
00227 MHDeselectItem(): MHActionInt(":DeselectItem") {}
00228 virtual void CallAction(MHEngine *engine, MHRoot * , int nArg) { Target(engine)->DeselectItem(nArg, engine); }
00229 };
00230
00231 class MHToggleItem: public MHActionInt {
00232 public:
00233 MHToggleItem(): MHActionInt(":ToggleItem") {}
00234 virtual void CallAction(MHEngine *engine, MHRoot * , int nArg) { Target(engine)->ToggleItem(nArg, engine); }
00235 };
00236
00237 class MHScrollItems: public MHActionInt {
00238 public:
00239 MHScrollItems(): MHActionInt(":ScrollItems") {}
00240 virtual void CallAction(MHEngine *engine, MHRoot * , int nArg) { Target(engine)->ScrollItems(nArg, engine); }
00241 };
00242
00243 class MHSetFirstItem: public MHActionInt {
00244 public:
00245 MHSetFirstItem(): MHActionInt(":SetFirstItem") {}
00246 virtual void CallAction(MHEngine *engine, MHRoot * , int nArg) { Target(engine)->SetFirstItem(nArg, engine); }
00247 };
00248
00249 class MHGetFirstItem: public MHActionObjectRef {
00250 public:
00251 MHGetFirstItem(): MHActionObjectRef(":GetFirstItem") {}
00252 virtual void CallAction(MHEngine *engine, MHRoot * , MHRoot *pArg) { Target(engine)->GetFirstItem(pArg, engine); }
00253 };
00254
00255 class MHGetListSize: public MHActionObjectRef {
00256 public:
00257 MHGetListSize(): MHActionObjectRef(":GetListSize") {}
00258 virtual void CallAction(MHEngine *engine, MHRoot * , MHRoot *pArg) {Target(engine)->GetListSize(pArg, engine); }
00259 };
00260
00261 #endif