MythTV master
TokenGroup.h
Go to the documentation of this file.
1/* TokenGroup.h
2
3 Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
18 Or, point your browser to http://www.gnu.org/copyleft/gpl.html
19
20*/
21
22
23#if !defined(TOKENGROUP_H)
24#define TOKENGROUP_H
25
26#include "Presentable.h"
27// Dependencies
28#include "Ingredients.h"
29#include "Root.h"
30#include "BaseClasses.h"
31#include "BaseActions.h"
32#include "Actions.h"
33
34#include <QPoint>
35#include <QList>
36
37class MHEngine;
38
40{
41 public:
42 MHTokenGroupItem() = default;
43 void Initialise(MHParseNode *p, MHEngine *engine);
44 void PrintMe(FILE *fd, int nTabs) const;
47};
48
50{
51 public:
52 void Initialise(MHParseNode *p, MHEngine *engine);
53 void PrintMe(FILE *fd, int nTabs) const;
55};
56
57// TokenGroup. The standard defines a TokenManager class but that is incorporated in
58// this class.
60{
61 public:
62 MHTokenGroup() = default;
63 const char *ClassName() override // MHRoot
64 { return "TokenGroup"; }
65 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHIngredient
66 void PrintMe(FILE *fd, int nTabs) const override; // MHIngredient
67
68 void Activation(MHEngine *engine) override; // MHRoot
69 void Deactivation(MHEngine *engine) override; // MHRoot
70
71 // Actions
72 void CallActionSlot(int n, MHEngine *engine) override; // MHRoot
73 void Move(int n, MHEngine *engine) override; // MHRoot
74 void MoveTo(int n, MHEngine *engine) override // MHRoot
75 { TransferToken(n, engine); }
76 void GetTokenPosition(MHRoot *pResult, MHEngine */*engine*/) override // MHRoot
77 { pResult->SetVariableValue(m_nTokenPosition); }
78
79 protected:
80 void PrintContents(FILE *fd, int nTabs) const;
81 void TransferToken(int newPos, MHEngine *engine);
82
86
87 // Internal attributes
88 int m_nTokenPosition {1}; // Initial value
89};
90
91// Items in the list group consist of a Visible and a "selected" flag.
92// For simplicity we don't check that we have a Visible and instead use virtual functions
93// which only work on visibles.
95 public:
96 explicit MHListItem(MHRoot *pVis): m_pVisible(pVis) {}
97 MHRoot *m_pVisible { nullptr };
98 bool m_fSelected { false };
99};
100
102{
103 public:
104 MHListGroup() = default;
105 ~MHListGroup() override;
106 const char *ClassName() override // MHTokenGroup
107 { return "ListGroup"; }
108 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHTokenGroup
109 void PrintMe(FILE *fd, int nTabs) const override; // MHTokenGroup
110 void Preparation(MHEngine *engine) override; // MHIngredient
111 void Destruction(MHEngine *engine) override; // MHIngredient
112 void Activation(MHEngine *engine) override; // MHTokenGroup
113 void Deactivation(MHEngine *engine) override; // MHTokenGroup
114
115 // Actions
116 void AddItem(int nIndex, MHRoot *pItem, MHEngine *engine) override; // MHRoot
117 void DelItem(MHRoot *pItem, MHEngine *engine) override; // MHRoot
118 void GetCellItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine) override; // MHRoot
119 void GetListItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine) override; // MHRoot
120 void GetItemStatus(int nCell, const MHObjectRef &itemDest, MHEngine *engine) override; // MHRoot
121 void SelectItem(int nCell, MHEngine *engine) override; // MHRoot
122 void DeselectItem(int nCell, MHEngine *engine) override; // MHRoot
123 void ToggleItem(int nCell, MHEngine *engine) override; // MHRoot
124 void ScrollItems(int nCell, MHEngine *engine) override; // MHRoot
125 void SetFirstItem(int nCell, MHEngine *engine) override; // MHRoot
126 void GetFirstItem(MHRoot *pResult, MHEngine */*engine*/) override // MHRoot
127 { pResult->SetVariableValue(m_nFirstItem); }
128 void GetListSize(MHRoot *pResult, MHEngine */*engine*/) override // MHRoot
129#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
130 { pResult->SetVariableValue(m_itemList.size()); }
131#else
132 { pResult->SetVariableValue(static_cast<int>(m_itemList.size())); }
133#endif
134
135 protected:
136 // MHEG Internal attributes.
137 void Update(MHEngine *engine);
138 void Select(int nIndex, MHEngine *engine);
139 void Deselect(int nIndex, MHEngine *engine);
140 int AdjustIndex(int nIndex); // Added in the MHEG corrigendum
141
142 // Exchanged attributes
144 bool m_fWrapAround {false};
146 //Internal attributes
147 QList<MHListItem*> m_itemList; // Items found by looking up the object refs
148 int m_nFirstItem {1}; // First item displayed - N.B. MHEG indexes from 1.
153};
154
155// Call action slot.
157{
158 public:
159 MHCallActionSlot(): MHActionInt(":CallActionSlot") {}
160 void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override // MHActionInt
161 { pTarget->CallActionSlot(nArg, engine); }
162};
163
164// Move - move the token in a token group according to the movement table.
165class MHMove: public MHActionInt
166{
167 public:
168 MHMove(): MHActionInt(":Move") {}
169 void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override // MHActionInt
170 { pTarget->Move(nArg, engine); }
171};
172
173// MoveTo - move the token to a particular slot.
175{
176 public:
177 MHMoveTo(): MHActionInt(":MoveTo") {}
178 void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override // MHActionInt
179 { pTarget->MoveTo(nArg, engine); }
180};
181
183 public:
184 MHGetTokenPosition(): MHActionObjectRef(":GetTokenPosition") {}
185 void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override // MHActionObjectRef
186 { pTarget->GetTokenPosition(pArg, engine); }
187};
188
189class MHAddItem: public MHElemAction {
190 public:
191 MHAddItem(): MHElemAction(":AddItem") {}
192 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHElemAction
193 void PrintArgs(FILE *fd, int /*nTabs*/) const override; // MHElemAction
194 void Perform(MHEngine *engine) override; // MHElemAction
195 protected:
198
199};
200
202 public:
204 void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pObj) override // MHActionGenericObjectRef
205 { pTarget->DelItem(pObj, engine); }
206};
207
208// Base class for a few actions.
210 public:
211 explicit MHGetListActionData(const char *name): MHElemAction(name) {}
212 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHElemAction
213 void PrintArgs(FILE *fd, int /*nTabs*/) const override; // MHElemAction
214 protected:
217};
218
220 public:
221 MHGetCellItem(): MHGetListActionData(":GetCellItem") {}
222 void Perform(MHEngine *engine) override // MHElemAction
223 { Target(engine)->GetCellItem(m_index.GetValue(engine), m_result, engine); }
224};
225
227 public:
228 MHGetListItem(): MHGetListActionData(":GetListItem") {}
229 void Perform(MHEngine *engine) override // MHElemAction
230 { Target(engine)->GetListItem(m_index.GetValue(engine), m_result, engine); }
231};
232
234 public:
235 MHGetItemStatus(): MHGetListActionData(":GetItemStatus") {}
236 void Perform(MHEngine *engine) override // MHElemAction
237 { Target(engine)->GetItemStatus(m_index.GetValue(engine), m_result, engine); }
238};
239
241 public:
242 MHSelectItem(): MHActionInt(":SelectItem") {}
243 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, int nArg) override // MHActionInt
244 { Target(engine)->SelectItem(nArg, engine); }
245};
246
248 public:
249 MHDeselectItem(): MHActionInt(":DeselectItem") {}
250 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, int nArg) override // MHActionInt
251 { Target(engine)->DeselectItem(nArg, engine); }
252};
253
255 public:
256 MHToggleItem(): MHActionInt(":ToggleItem") {}
257 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, int nArg) override // MHActionInt
258 { Target(engine)->ToggleItem(nArg, engine); }
259};
260
262 public:
263 MHScrollItems(): MHActionInt(":ScrollItems") {}
264 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, int nArg) override // MHActionInt
265 { Target(engine)->ScrollItems(nArg, engine); }
266};
267
269 public:
270 MHSetFirstItem(): MHActionInt(":SetFirstItem") {}
271 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, int nArg) override // MHActionInt
272 { Target(engine)->SetFirstItem(nArg, engine); }
273};
274
276 public:
277 MHGetFirstItem(): MHActionObjectRef(":GetFirstItem") {}
278 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, MHRoot *pArg) override // MHActionObjectRef
279 { Target(engine)->GetFirstItem(pArg, engine); }
280};
281
283 public:
284 MHGetListSize(): MHActionObjectRef(":GetListSize") {}
285 void CallAction(MHEngine *engine, MHRoot * /*pTarget*/, MHRoot *pArg) override // MHActionObjectRef
286 { Target(engine)->GetListSize(pArg, engine); }
287};
288
289#endif
void Perform(MHEngine *engine) override
Definition: TokenGroup.cpp:841
MHGenericInteger m_index
Definition: TokenGroup.h:196
void PrintArgs(FILE *fd, int) const override
Definition: TokenGroup.cpp:835
MHGenericObjectRef m_item
Definition: TokenGroup.h:197
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: TokenGroup.cpp:828
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override
Definition: TokenGroup.h:160
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pObj) override
Definition: TokenGroup.h:204
void CallAction(MHEngine *engine, MHRoot *, int nArg) override
Definition: TokenGroup.h:250
MHRoot * Target(MHEngine *engine)
Definition: BaseActions.cpp:46
int GetValue(MHEngine *engine) const
void Perform(MHEngine *engine) override
Definition: TokenGroup.h:222
void CallAction(MHEngine *engine, MHRoot *, MHRoot *pArg) override
Definition: TokenGroup.h:278
void Perform(MHEngine *engine) override
Definition: TokenGroup.h:236
void PrintArgs(FILE *fd, int) const override
Definition: TokenGroup.cpp:855
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: TokenGroup.cpp:848
MHObjectRef m_result
Definition: TokenGroup.h:216
MHGenericInteger m_index
Definition: TokenGroup.h:215
MHGetListActionData(const char *name)
Definition: TokenGroup.h:211
void Perform(MHEngine *engine) override
Definition: TokenGroup.h:229
void CallAction(MHEngine *engine, MHRoot *, MHRoot *pArg) override
Definition: TokenGroup.h:285
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override
Definition: TokenGroup.h:185
void AddItem(int nIndex, MHRoot *pItem, MHEngine *engine) override
Definition: TokenGroup.cpp:582
QList< MHListItem * > m_itemList
Definition: TokenGroup.h:147
void GetListSize(MHRoot *pResult, MHEngine *) override
Definition: TokenGroup.h:128
int m_nFirstItem
Definition: TokenGroup.h:148
void GetCellItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine) override
Definition: TokenGroup.cpp:672
void Activation(MHEngine *engine) override
Definition: TokenGroup.cpp:463
void Update(MHEngine *engine)
Definition: TokenGroup.cpp:482
void GetItemStatus(int nCell, const MHObjectRef &itemDest, MHEngine *engine) override
Definition: TokenGroup.cpp:724
MHListGroup()=default
void DeselectItem(int nCell, MHEngine *engine) override
Definition: TokenGroup.cpp:754
bool m_fFirstItemDisplayed
Definition: TokenGroup.h:149
void Destruction(MHEngine *engine) override
Definition: TokenGroup.cpp:454
const char * ClassName() override
Definition: TokenGroup.h:106
void SetFirstItem(int nCell, MHEngine *engine) override
Definition: TokenGroup.cpp:809
void Deselect(int nIndex, MHEngine *engine)
Definition: TokenGroup.cpp:658
MHSequence< QPoint > m_positions
Definition: TokenGroup.h:143
void Deactivation(MHEngine *engine) override
Definition: TokenGroup.cpp:471
void DelItem(MHRoot *pItem, MHEngine *engine) override
Definition: TokenGroup.cpp:611
int AdjustIndex(int nIndex)
Definition: TokenGroup.cpp:689
void SelectItem(int nCell, MHEngine *engine) override
Definition: TokenGroup.cpp:739
void Preparation(MHEngine *engine) override
Definition: TokenGroup.cpp:410
int m_nLastFirstItem
Definition: TokenGroup.h:152
bool m_fWrapAround
Definition: TokenGroup.h:144
void GetListItem(int nCell, const MHObjectRef &itemDest, MHEngine *engine) override
Definition: TokenGroup.cpp:709
bool m_fLastItemDisplayed
Definition: TokenGroup.h:150
int m_nLastCount
Definition: TokenGroup.h:151
void PrintMe(FILE *fd, int nTabs) const override
Definition: TokenGroup.cpp:379
~MHListGroup() override
Definition: TokenGroup.cpp:341
void ToggleItem(int nCell, MHEngine *engine) override
Definition: TokenGroup.cpp:769
void Select(int nIndex, MHEngine *engine)
Definition: TokenGroup.cpp:632
bool m_fMultipleSelection
Definition: TokenGroup.h:145
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: TokenGroup.cpp:349
void GetFirstItem(MHRoot *pResult, MHEngine *) override
Definition: TokenGroup.h:126
void ScrollItems(int nCell, MHEngine *engine) override
Definition: TokenGroup.cpp:791
bool m_fSelected
Definition: TokenGroup.h:98
MHListItem(MHRoot *pVis)
Definition: TokenGroup.h:96
MHRoot * m_pVisible
Definition: TokenGroup.h:97
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override
Definition: TokenGroup.h:178
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override
Definition: TokenGroup.h:169
MHMove()
Definition: TokenGroup.h:168
MHSequence< int > m_movement
Definition: TokenGroup.h:54
void Initialise(MHParseNode *p, MHEngine *engine)
Definition: TokenGroup.cpp:99
void PrintMe(FILE *fd, int nTabs) const
Definition: TokenGroup.cpp:107
Definition: Root.h:45
virtual void GetFirstItem(MHRoot *, MHEngine *)
Definition: Root.h:154
virtual void GetCellItem(int, const MHObjectRef &, MHEngine *)
Definition: Root.h:143
virtual void DeselectItem(int, MHEngine *)
Definition: Root.h:150
virtual void SetFirstItem(int, MHEngine *)
Definition: Root.h:153
virtual void GetListSize(MHRoot *, MHEngine *)
Definition: Root.h:155
virtual void SelectItem(int, MHEngine *)
Definition: Root.h:149
virtual void GetListItem(int, const MHObjectRef &, MHEngine *)
Definition: Root.h:145
virtual void ScrollItems(int, MHEngine *)
Definition: Root.h:152
virtual void GetItemStatus(int, const MHObjectRef &, MHEngine *)
Definition: Root.h:147
virtual void ToggleItem(int, MHEngine *)
Definition: Root.h:151
void CallAction(MHEngine *engine, MHRoot *, int nArg) override
Definition: TokenGroup.h:264
void CallAction(MHEngine *engine, MHRoot *, int nArg) override
Definition: TokenGroup.h:243
void CallAction(MHEngine *engine, MHRoot *, int nArg) override
Definition: TokenGroup.h:271
void CallAction(MHEngine *engine, MHRoot *, int nArg) override
Definition: TokenGroup.h:257
void PrintMe(FILE *fd, int nTabs) const
Definition: TokenGroup.cpp:59
void Initialise(MHParseNode *p, MHEngine *engine)
Definition: TokenGroup.cpp:35
MHObjectRef m_Object
Definition: TokenGroup.h:45
MHOwnPtrSequence< MHActionSequence > m_ActionSlots
Definition: TokenGroup.h:46
MHTokenGroupItem()=default
const char * ClassName() override
Definition: TokenGroup.h:63
MHOwnPtrSequence< MHMovement > m_movementTable
Definition: TokenGroup.h:83
void Activation(MHEngine *engine) override
Definition: TokenGroup.cpp:235
MHOwnPtrSequence< MHActionSequence > m_noTokenActionSlots
Definition: TokenGroup.h:85
void Deactivation(MHEngine *engine) override
Definition: TokenGroup.cpp:280
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: TokenGroup.cpp:120
MHTokenGroup()=default
MHOwnPtrSequence< MHTokenGroupItem > m_tokenGrpItems
Definition: TokenGroup.h:84
void Move(int n, MHEngine *engine) override
Definition: TokenGroup.cpp:326
int m_nTokenPosition
Definition: TokenGroup.h:88
void PrintMe(FILE *fd, int nTabs) const override
Definition: TokenGroup.cpp:225
void MoveTo(int n, MHEngine *engine) override
Definition: TokenGroup.h:74
void GetTokenPosition(MHRoot *pResult, MHEngine *) override
Definition: TokenGroup.h:76
void CallActionSlot(int n, MHEngine *engine) override
Definition: TokenGroup.cpp:303
void PrintContents(FILE *fd, int nTabs) const
Definition: TokenGroup.cpp:167
void TransferToken(int newPos, MHEngine *engine)
Definition: TokenGroup.cpp:292
int FILE
Definition: mythburn.py:138