00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #if !defined(VISIBLE_H)
00023 #define VISIBLE_H
00024 #include <qregion.h>
00025
00026 #include "Presentable.h"
00027
00028 #include "Ingredients.h"
00029 #include "Root.h"
00030 #include "BaseClasses.h"
00031 #include "freemheg.h"
00032
00033 class MHEngine;
00034
00035 class MHVisible : public MHPresentable
00036 {
00037 public:
00038 MHVisible();
00039 MHVisible(const MHVisible &ref);
00040 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00041 virtual void PrintMe(FILE *fd, int nTabs) const;
00042
00043 virtual void Preparation(MHEngine *engine);
00044 virtual void Destruction(MHEngine *engine);
00045 virtual void Activation(MHEngine *engine);
00046 virtual void Deactivation(MHEngine *engine);
00047
00048
00049 virtual void SetPosition(int nXPosition, int nYPosition, MHEngine *engine);
00050 virtual void GetPosition(MHRoot *pXPosN, MHRoot *pYPosN);
00051 virtual void SetBoxSize(int nWidth, int nHeight, MHEngine *engine);
00052 virtual void GetBoxSize(MHRoot *pWidthDest, MHRoot *pHeightDest);
00053 virtual void SetPaletteRef(const MHObjectRef newPalette, MHEngine *engine);
00054 virtual void BringToFront(MHEngine *engine);
00055 virtual void SendToBack(MHEngine *engine);
00056 virtual void PutBefore(const MHRoot *pRef, MHEngine *engine);
00057 virtual void PutBehind(const MHRoot *pRef, MHEngine *engine);
00058
00059
00060 virtual void Display(MHEngine *) = 0;
00061
00062 virtual QRegion GetVisibleArea();
00063
00064
00065 virtual QRegion GetOpaqueArea() { return QRegion(); }
00066
00067
00068 virtual void ResetPosition() { m_nPosX = m_nOriginalPosX; m_nPosY = m_nOriginalPosY; }
00069
00070 protected:
00071
00072 int m_nOriginalBoxWidth, m_nOriginalBoxHeight;
00073 int m_nOriginalPosX, m_nOriginalPosY;
00074 MHObjectRef m_OriginalPaletteRef;
00075
00076 int m_nBoxWidth, m_nBoxHeight;
00077 int m_nPosX, m_nPosY;
00078 MHObjectRef m_PaletteRef;
00079
00080
00081 MHRgba GetColour(const MHColour &colour);
00082 };
00083
00084 class MHLineArt : public MHVisible
00085 {
00086 public:
00087 MHLineArt();
00088 MHLineArt(const MHLineArt &ref);
00089 virtual const char *ClassName() { return "LineArt"; }
00090 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00091 virtual void PrintMe(FILE *fd, int nTabs) const;
00092 virtual void Display(MHEngine *) {}
00093 virtual void Preparation(MHEngine *engine);
00094
00095
00096 virtual void SetFillColour(const MHColour &colour, MHEngine *engine);
00097 virtual void SetLineColour(const MHColour &colour, MHEngine *engine);
00098 virtual void SetLineWidth(int nWidth, MHEngine *engine);
00099 virtual void SetLineStyle(int nStyle, MHEngine *engine);
00100
00101 protected:
00102
00103 bool m_fBorderedBBox;
00104 int m_nOriginalLineWidth;
00105 int m_OriginalLineStyle;
00106 enum { LineStyleSolid = 1, LineStyleDashed = 2, LineStyleDotted = 3 };
00107 MHColour m_OrigLineColour, m_OrigFillColour;
00108
00109 int m_nLineWidth;
00110 int m_LineStyle;
00111 MHColour m_LineColour, m_FillColour;
00112 };
00113
00114 class MHRectangle : public MHLineArt
00115 {
00116 public:
00117 MHRectangle() {}
00118 MHRectangle(const MHRectangle &ref): MHLineArt(ref) {}
00119 virtual const char *ClassName() { return "Rectangle"; }
00120 virtual void PrintMe(FILE *fd, int nTabs) const;
00121
00122 virtual void Display(MHEngine *q);
00123 virtual QRegion GetOpaqueArea();
00124 virtual MHIngredient *Clone(MHEngine *) { return new MHRectangle(*this); }
00125 };
00126
00127
00128
00129 class MHInteractible
00130 {
00131 public:
00132 MHInteractible(MHVisible *parent);
00133 virtual ~MHInteractible();
00134 void Initialise(MHParseNode *p, MHEngine *engine);
00135 void PrintMe(FILE *fd, int nTabs) const;
00136
00137 virtual void Interaction(MHEngine *engine);
00138
00139
00140
00141 virtual void KeyEvent(MHEngine *, int ) {}
00142 virtual void InteractionCompleted(MHEngine *) {}
00143
00144 void InteractSetInteractionStatus(bool newStatus, MHEngine *engine);
00145 bool InteractGetInteractionStatus(void) { return m_fInteractionStatus; }
00146 void InteractSetHighlightStatus(bool newStatus, MHEngine *engine);
00147 bool InteractGetHighlightStatus(void) { return m_fHighlightStatus; }
00148
00149
00150 void InteractDeactivation(void) { m_fInteractionStatus = false; }
00151
00152 protected:
00153
00154 bool m_fEngineResp;
00155 MHColour m_highlightRefColour;
00156
00157 bool m_fHighlightStatus;
00158 bool m_fInteractionStatus;
00159
00160 private:
00161 MHVisible *m_parent;
00162 };
00163
00164 class MHSlider : public MHVisible, public MHInteractible
00165 {
00166 public:
00167 MHSlider();
00168 virtual ~MHSlider();
00169 virtual const char *ClassName() { return "Slider"; }
00170 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00171 virtual void PrintMe(FILE *fd, int nTabs) const;
00172 virtual void Display(MHEngine *);
00173 virtual void Preparation(MHEngine *engine);
00174
00175 virtual void Interaction(MHEngine *engine);
00176 virtual void InteractionCompleted(MHEngine *engine);
00177 virtual void KeyEvent(MHEngine *engine, int nCode);
00178
00179
00180 virtual void SetInteractionStatus(bool newStatus, MHEngine *engine)
00181 { InteractSetInteractionStatus(newStatus, engine); }
00182 virtual bool GetInteractionStatus(void) { return InteractGetInteractionStatus(); }
00183 virtual void SetHighlightStatus(bool newStatus, MHEngine *engine)
00184 { InteractSetHighlightStatus(newStatus, engine); }
00185 virtual bool GetHighlightStatus(void) { return InteractGetHighlightStatus(); }
00186 virtual void Deactivation(MHEngine *engine) { InteractDeactivation(); }
00187
00188
00189 virtual void Step(int nbSteps, MHEngine *engine);
00190 virtual void SetSliderValue(int newValue, MHEngine *engine);
00191 virtual int GetSliderValue(void) { return slider_value; }
00192 virtual void SetPortion(int newPortion, MHEngine *engine);
00193 virtual int GetPortion(void) { return portion; }
00194
00195 virtual void SetSliderParameters(int newMin, int newMax, int newStep, MHEngine *engine);
00196
00197
00198 static int GetOrientation(const char *str);
00199 static int GetStyle(const char *str);
00200 protected:
00201 void Increment(MHEngine *engine);
00202 void Decrement(MHEngine *engine);
00203
00204
00205
00206 enum SliderOrientation { SliderLeft = 1, SliderRight, SliderUp, SliderDown }
00207 m_orientation;
00208 int initial_value, initial_portion;
00209 int orig_max_value, orig_min_value, orig_step_size;
00210
00211
00212
00213 enum SliderStyle { SliderNormal = 1, SliderThermo, SliderProp }
00214 m_style;
00215 MHColour m_sliderRefColour;
00216
00217
00218 int max_value, min_value, step_size;
00219 int slider_value, portion;
00220 };
00221
00222 class MHEntryField : public MHVisible, public MHInteractible
00223 {
00224 public:
00225 MHEntryField();
00226 virtual ~MHEntryField();
00227 virtual const char *ClassName() { return "EntryField"; }
00228 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00229 virtual void PrintMe(FILE *fd, int nTabs) const;
00230 virtual void Display(MHEngine *) {}
00231
00232
00233 virtual void SetInteractionStatus(bool newStatus, MHEngine *engine)
00234 { InteractSetInteractionStatus(newStatus, engine); }
00235 virtual bool GetInteractionStatus(void) { return InteractGetInteractionStatus(); }
00236 virtual void SetHighlightStatus(bool newStatus, MHEngine *engine)
00237 { InteractSetHighlightStatus(newStatus, engine); }
00238 virtual bool GetHighlightStatus(void) { return InteractGetHighlightStatus(); }
00239 virtual void Deactivation(MHEngine *engine) { InteractDeactivation(); }
00240 };
00241
00242
00243 class MHButton : public MHVisible
00244 {
00245 public:
00246 MHButton();
00247 virtual ~MHButton();
00248 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00249 virtual void PrintMe(FILE *fd, int nTabs) const;
00250 virtual void Display(MHEngine *) {}
00251 };
00252
00253
00254 class MHHotSpot : public MHButton
00255 {
00256 public:
00257 MHHotSpot();
00258 virtual ~MHHotSpot();
00259 virtual const char *ClassName() { return "HotSpot"; }
00260 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00261 virtual void PrintMe(FILE *fd, int nTabs) const;
00262 virtual void Display(MHEngine *) {}
00263 };
00264
00265
00266 class MHPushButton : public MHButton
00267 {
00268 public:
00269 MHPushButton();
00270 virtual ~MHPushButton();
00271 virtual const char *ClassName() { return "PushButton"; }
00272 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00273 virtual void PrintMe(FILE *fd, int nTabs) const;
00274 virtual void Display(MHEngine *) {}
00275 };
00276
00277
00278 class MHSwitchButton : public MHPushButton
00279 {
00280 public:
00281 MHSwitchButton();
00282 virtual ~MHSwitchButton();
00283 virtual const char *ClassName() { return "SwitchButton"; }
00284 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00285 virtual void PrintMe(FILE *fd, int nTabs) const;
00286 virtual void Display(MHEngine *) {}
00287 };
00288
00289
00290
00291
00292 class MHSetColour: public MHElemAction
00293 {
00294 public:
00295 MHSetColour(const char *name): MHElemAction(name), m_ColourType(CT_None) { }
00296 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00297 virtual void Perform(MHEngine *engine);
00298 protected:
00299 virtual void PrintArgs(FILE *fd, int nTabs) const;
00300 virtual void SetColour(const MHColour &colour, MHEngine *engine) = 0;
00301
00302
00303 enum { CT_None, CT_Indexed, CT_Absolute } m_ColourType;
00304 MHGenericInteger m_Indexed;
00305 MHGenericOctetString m_Absolute;
00306 };
00307
00308 class MHSetLineColour: public MHSetColour {
00309 public:
00310 MHSetLineColour(): MHSetColour(":SetLineColour") { }
00311 protected:
00312 virtual void SetColour(const MHColour &colour, MHEngine *engine) { Target(engine)->SetLineColour(colour, engine); }
00313 };
00314
00315 class MHSetFillColour: public MHSetColour {
00316 public:
00317 MHSetFillColour(): MHSetColour(":SetFillColour") { }
00318 protected:
00319 virtual void SetColour(const MHColour &colour, MHEngine *engine) { Target(engine)->SetFillColour(colour, engine); }
00320 };
00321
00322
00323 class MHBringToFront: public MHElemAction
00324 {
00325 public:
00326 MHBringToFront(): MHElemAction(":BringToFront") {}
00327 virtual void Perform(MHEngine *engine) { Target(engine)->BringToFront(engine); }
00328 };
00329
00330
00331 class MHPutBefore: public MHActionGenericObjectRef
00332 {
00333 public:
00334 MHPutBefore(): MHActionGenericObjectRef(":PutBefore") {}
00335 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pRef) { pTarget->PutBefore(pRef, engine); }
00336 };
00337
00338
00339 class MHPutBehind: public MHActionGenericObjectRef
00340 {
00341 public:
00342 MHPutBehind(): MHActionGenericObjectRef(":PutBehind") {}
00343 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pRef) { pTarget->PutBehind(pRef, engine); }
00344 };
00345
00346
00347 class MHSendToBack: public MHElemAction
00348 {
00349 public:
00350 MHSendToBack(): MHElemAction(":SendToBack") {}
00351 virtual void Perform(MHEngine *engine) { Target(engine)->SendToBack(engine); }
00352 };
00353
00354 class MHSetPosition: public MHActionIntInt
00355 {
00356 public:
00357 MHSetPosition(): MHActionIntInt(":SetPosition") {}
00358 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) { pTarget->SetPosition(nArg1, nArg2, engine); };
00359 };
00360
00361 class MHSetBoxSize: public MHActionIntInt
00362 {
00363 public:
00364 MHSetBoxSize(): MHActionIntInt(":SetBoxSize") {}
00365 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) { pTarget->SetBoxSize(nArg1, nArg2, engine); }
00366 };
00367
00368
00369 class MHGetBoxSize: public MHActionObjectRef2
00370 {
00371 public:
00372 MHGetBoxSize(): MHActionObjectRef2(":GetBoxSize") {}
00373 virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pArg1, MHRoot *pArg2) { pTarget->GetBoxSize(pArg1, pArg2); }
00374 };
00375
00376
00377 class MHGetPosition: public MHActionObjectRef2
00378 {
00379 public:
00380 MHGetPosition(): MHActionObjectRef2(":GetPosition") {}
00381 virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pArg1, MHRoot *pArg2) { pTarget->GetPosition(pArg1, pArg2); }
00382 };
00383
00384 class MHSetLineWidth: public MHActionInt
00385 {
00386 public:
00387 MHSetLineWidth(): MHActionInt(":SetLineWidth") {}
00388 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetLineWidth(nArg, engine); };
00389 };
00390
00391 class MHSetLineStyle: public MHActionInt
00392 {
00393 public:
00394 MHSetLineStyle(): MHActionInt(":SetLineStyle") {}
00395 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetLineStyle(nArg, engine); };
00396 };
00397
00398 class MHSetInteractionStatus: public MHActionBool
00399 {
00400 public:
00401 MHSetInteractionStatus(): MHActionBool("SetInteractionStatus") {}
00402 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, bool newStatus)
00403 { Target(engine)->SetInteractionStatus(newStatus, engine); }
00404 };
00405
00406 class MHGetInteractionStatus: public MHActionObjectRef
00407 {
00408 public:
00409 MHGetInteractionStatus(): MHActionObjectRef(":GetInteractionStatus") {}
00410 virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult)
00411 { pResult->SetVariableValue(pTarget->GetInteractionStatus());}
00412 };
00413
00414 class MHSetHighlightStatus: public MHActionBool
00415 {
00416 public:
00417 MHSetHighlightStatus(): MHActionBool("SetHighlightStatus") {}
00418 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, bool newStatus)
00419 { Target(engine)->SetHighlightStatus(newStatus, engine); }
00420 };
00421
00422 class MHGetHighlightStatus: public MHActionObjectRef
00423 {
00424 public:
00425 MHGetHighlightStatus(): MHActionObjectRef(":GetHighlightStatus") {}
00426 virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult)
00427 { pResult->SetVariableValue(pTarget->GetHighlightStatus());}
00428 };
00429
00430 class MHStep: public MHActionInt
00431 {
00432 public:
00433 MHStep(): MHActionInt(":Step") {}
00434 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->Step(nArg, engine); };
00435 };
00436
00437 class MHSetSliderValue: public MHActionInt
00438 {
00439 public:
00440 MHSetSliderValue(): MHActionInt(":SetSliderValue") {}
00441 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetSliderValue(nArg, engine); };
00442 };
00443
00444 class MHGetSliderValue: public MHActionObjectRef
00445 {
00446 public:
00447 MHGetSliderValue(): MHActionObjectRef(":GetSliderValue") {}
00448 virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult)
00449 { pResult->SetVariableValue(pTarget->GetSliderValue());}
00450 };
00451
00452 class MHSetPortion: public MHActionInt
00453 {
00454 public:
00455 MHSetPortion(): MHActionInt(":SetPortion") {}
00456 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetPortion(nArg, engine); };
00457 };
00458
00459 class MHGetPortion: public MHActionObjectRef
00460 {
00461 public:
00462 MHGetPortion(): MHActionObjectRef(":GetPortion") {}
00463 virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult)
00464 { pResult->SetVariableValue(pTarget->GetPortion());}
00465 };
00466
00467 class MHSetSliderParameters: public MHActionInt3
00468 {
00469 public:
00470 MHSetSliderParameters(): MHActionInt3(":SetSliderParameters") {}
00471 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int newMin, int newMax, int newStep)
00472 { pTarget->SetSliderParameters(newMin, newMax, newStep, engine); };
00473 };
00474
00475 #endif