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.h>
00035 #include <qptrlist.h>
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 virtual const char *ClassName() { return "ListGroup"; }
00103 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00104 virtual void PrintMe(FILE *fd, int nTabs) const;
00105 virtual void Preparation(MHEngine *engine);
00106 virtual void Destruction(MHEngine *engine);
00107 virtual void Activation(MHEngine *engine);
00108 virtual void Deactivation(MHEngine *engine);
00109
00110
00111 virtual void AddItem(int nIndex, MHRoot *pItem, MHEngine *engine);
00112 virtual void DelItem(MHRoot *pItem, MHEngine *engine);
00113 virtual void GetCellItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine);
00114 virtual void GetListItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine);
00115 virtual void GetItemStatus(int nCell, const MHObjectRef &itemDest, MHEngine *engine);
00116 virtual void SelectItem(int nCell, MHEngine *engine);
00117 virtual void DeselectItem(int nCell, MHEngine *engine);
00118 virtual void ToggleItem(int nCell, MHEngine *engine);
00119 virtual void ScrollItems(int nCell, MHEngine *engine);
00120 virtual void SetFirstItem(int nCell, MHEngine *engine);
00121 virtual void GetFirstItem(MHRoot *pResult, MHEngine *) { pResult->SetVariableValue(m_nFirstItem); }
00122 virtual void GetListSize(MHRoot *pResult, MHEngine *) { pResult->SetVariableValue((int)(m_ItemList.count())); }
00123
00124 protected:
00125
00126 void Update(MHEngine *engine);
00127 void Select(int nIndex, MHEngine *engine);
00128 void Deselect(int nIndex, MHEngine *engine);
00129 int AdjustIndex(int nIndex);
00130
00131
00132 MHSequence <QPoint> m_Positions;
00133 bool m_fWrapAround, m_fMultipleSelection;
00134
00135 QPtrList <MHListItem> m_ItemList;
00136 int m_nFirstItem;
00137 bool m_fFirstItemDisplayed, m_fLastItemDisplayed;
00138 int m_nLastCount, m_nLastFirstItem;
00139 };
00140
00141
00142 class MHCallActionSlot: public MHActionInt
00143 {
00144 public:
00145 MHCallActionSlot(): MHActionInt(":CallActionSlot") {}
00146 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->CallActionSlot(nArg, engine); }
00147 };
00148
00149
00150 class MHMove: public MHActionInt
00151 {
00152 public:
00153 MHMove(): MHActionInt(":Move") {}
00154 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->Move(nArg, engine); }
00155 };
00156
00157
00158 class MHMoveTo: public MHActionInt
00159 {
00160 public:
00161 MHMoveTo(): MHActionInt(":MoveTo") {}
00162 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->MoveTo(nArg, engine); }
00163 };
00164
00165 class MHGetTokenPosition: public MHActionObjectRef {
00166 public:
00167 MHGetTokenPosition(): MHActionObjectRef(":GetTokenPosition") {}
00168 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) { pTarget->GetTokenPosition(pArg, engine); }
00169 };
00170
00171 class MHAddItem: public MHElemAction {
00172 public:
00173 MHAddItem(): MHElemAction(":AddItem") {}
00174 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00175 virtual void PrintArgs(FILE *fd, int) const;
00176 virtual void Perform(MHEngine *engine);
00177 protected:
00178 MHGenericInteger m_Index;
00179 MHGenericObjectRef m_Item;
00180
00181 };
00182
00183 class MHDelItem: public MHActionGenericObjectRef {
00184 public:
00185 MHDelItem(): MHActionGenericObjectRef(":DelItem") {}
00186 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pObj) { pTarget->DelItem(pObj, engine); }
00187 };
00188
00189
00190 class MHGetListActionData: public MHElemAction {
00191 public:
00192 MHGetListActionData(const char *name): MHElemAction(name) {}
00193 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00194 virtual void PrintArgs(FILE *fd, int) const;
00195 protected:
00196 MHGenericInteger m_Index;
00197 MHObjectRef m_Result;
00198 };
00199
00200 class MHGetCellItem: public MHGetListActionData {
00201 public:
00202 MHGetCellItem(): MHGetListActionData(":GetCellItem") {}
00203 virtual void Perform(MHEngine *engine) { Target(engine)->GetCellItem(m_Index.GetValue(engine), m_Result, engine); }
00204 };
00205
00206 class MHGetListItem: public MHGetListActionData {
00207 public:
00208 MHGetListItem(): MHGetListActionData(":GetListItem") {}
00209 virtual void Perform(MHEngine *engine) { Target(engine)->GetListItem(m_Index.GetValue(engine), m_Result, engine); }
00210 };
00211
00212 class MHGetItemStatus: public MHGetListActionData {
00213 public:
00214 MHGetItemStatus(): MHGetListActionData(":GetItemStatus") {}
00215 virtual void Perform(MHEngine *engine) { Target(engine)->GetItemStatus(m_Index.GetValue(engine), m_Result, engine); }
00216 };
00217
00218 class MHSelectItem: public MHActionInt {
00219 public:
00220 MHSelectItem(): MHActionInt(":SelectItem") {}
00221 virtual void CallAction(MHEngine *engine, MHRoot *, int nArg) { Target(engine)->SelectItem(nArg, engine); }
00222 };
00223
00224 class MHDeselectItem: public MHActionInt {
00225 public:
00226 MHDeselectItem(): MHActionInt(":DeselectItem") {}
00227 virtual void CallAction(MHEngine *engine, MHRoot *, int nArg) { Target(engine)->DeselectItem(nArg, engine); }
00228 };
00229
00230 class MHToggleItem: public MHActionInt {
00231 public:
00232 MHToggleItem(): MHActionInt(":ToggleItem") {}
00233 virtual void CallAction(MHEngine *engine, MHRoot *, int nArg) { Target(engine)->ToggleItem(nArg, engine); }
00234 };
00235
00236 class MHScrollItems: public MHActionInt {
00237 public:
00238 MHScrollItems(): MHActionInt(":ScrollItems") {}
00239 virtual void CallAction(MHEngine *engine, MHRoot *, int nArg) { Target(engine)->ScrollItems(nArg, engine); }
00240 };
00241
00242 class MHSetFirstItem: public MHActionInt {
00243 public:
00244 MHSetFirstItem(): MHActionInt(":SetFirstItem") {}
00245 virtual void CallAction(MHEngine *engine, MHRoot *, int nArg) { Target(engine)->SetFirstItem(nArg, engine); }
00246 };
00247
00248 class MHGetFirstItem: public MHActionObjectRef {
00249 public:
00250 MHGetFirstItem(): MHActionObjectRef(":GetFirstItem") {}
00251 virtual void CallAction(MHEngine *engine, MHRoot *, MHRoot *pArg) { Target(engine)->GetFirstItem(pArg, engine); }
00252 };
00253
00254 class MHGetListSize: public MHActionObjectRef {
00255 public:
00256 MHGetListSize(): MHActionObjectRef(":GetListSize") {}
00257 virtual void CallAction(MHEngine *engine, MHRoot *, MHRoot *pArg) {Target(engine)->GetListSize(pArg, engine); }
00258 };
00259
00260 #endif