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(TEXT_H)
00024 #define TEXT_H
00025
00026 #include "Visible.h"
00027 #include "BaseActions.h"
00028
00029 #include "Presentable.h"
00030 #include "Ingredients.h"
00031 #include "Root.h"
00032 #include "BaseClasses.h"
00033
00034 class MHEngine;
00035 class MHTextDisplay;
00036
00037 class MHText : public MHVisible
00038 {
00039 public:
00040 MHText();
00041 MHText(const MHText &ref);
00042 ~MHText();
00043 virtual const char *ClassName() { return "Text"; }
00044 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00045 virtual void PrintMe(FILE *, int nTabs) const;
00046
00047 virtual void Preparation(MHEngine *engine);
00048 virtual void ContentPreparation(MHEngine *engine);
00049 virtual void ContentArrived(const unsigned char *data, int length, MHEngine *engine);
00050
00051
00052
00053 virtual void GetTextData(MHRoot *pDestination, MHEngine *) { pDestination->SetVariableValue(m_Content); }
00054 virtual MHIngredient *Clone(MHEngine *) { return new MHText(*this); }
00055 virtual void SetBackgroundColour(const MHColour &colour, MHEngine *engine);
00056 virtual void SetTextColour(const MHColour &colour, MHEngine *engine);
00057 virtual void SetFontAttributes(const MHOctetString &fontAttrs, MHEngine *engine);
00058
00059
00060 static int GetJustification(const char *str);
00061 static int GetLineOrientation(const char *str);
00062 static int GetStartCorner(const char *str);
00063
00064
00065 virtual void Display(MHEngine *d);
00066 virtual QRegion GetOpaqueArea();
00067
00068 protected:
00069 void Redraw();
00070
00071 MHFontBody m_OrigFont;
00072 MHOctetString m_OriginalFontAttrs;
00073 MHColour m_OriginalTextColour, m_OriginalBgColour;
00074 int m_nCharSet;
00075 enum Justification { Start = 1, End, Centre, Justified } m_HorizJ, m_VertJ;
00076 enum LineOrientation { Vertical = 1, Horizontal } m_LineOrientation;
00077 enum StartCorner { UpperLeft = 1, UpperRight, LowerLeft, LowerRight } m_StartCorner;
00078 bool m_fTextWrap;
00079
00080
00081
00082 MHColour m_textColour, m_bgColour;
00083 MHOctetString m_fontAttrs;
00084 MHOctetString m_Content;
00085
00086 MHTextDisplay *m_pDisplay;
00087 bool m_NeedsRedraw;
00088
00089
00090 void CreateContent(const unsigned char *p, int s, MHEngine *engine);
00091 };
00092
00093 class MHHyperText : public MHText, public MHInteractible
00094 {
00095 public:
00096 MHHyperText();
00097 virtual const char *ClassName() { return "HyperText"; }
00098 virtual ~MHHyperText();
00099 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00100 virtual void PrintMe(FILE *fd, int nTabs) const;
00101
00102
00103 virtual void SetInteractionStatus(bool newStatus, MHEngine *engine)
00104 { InteractSetInteractionStatus(newStatus, engine); }
00105 virtual bool GetInteractionStatus(void) { return InteractGetInteractionStatus(); }
00106 virtual void SetHighlightStatus(bool newStatus, MHEngine *engine)
00107 { InteractSetHighlightStatus(newStatus, engine); }
00108 virtual bool GetHighlightStatus(void) { return InteractGetHighlightStatus(); }
00109 virtual void Deactivation(MHEngine *engine) { InteractDeactivation(); }
00110 };
00111
00112
00113 class MHGetTextData: public MHActionObjectRef
00114 {
00115 public:
00116 MHGetTextData(): MHActionObjectRef(":GetTextData") {}
00117 virtual void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) { pTarget->GetTextData(pArg, engine); }
00118 };
00119
00120
00121 class MHSetBackgroundColour: public MHSetColour {
00122 public:
00123 MHSetBackgroundColour(): MHSetColour(":SetBackgroundColour") { }
00124 protected:
00125 virtual void SetColour(const MHColour &colour, MHEngine *engine) { Target(engine)->SetBackgroundColour(colour, engine); }
00126 };
00127
00128 class MHSetTextColour: public MHSetColour {
00129 public:
00130 MHSetTextColour(): MHSetColour(":SetTextColour") { }
00131 protected:
00132 virtual void SetColour(const MHColour &colour, MHEngine *engine) { Target(engine)->SetTextColour(colour, engine); }
00133 };
00134
00135 class MHSetFontAttributes: public MHElemAction
00136 {
00137 public:
00138 MHSetFontAttributes(): MHElemAction(":SetFontAttributes") {}
00139 virtual void Initialise(MHParseNode *p, MHEngine *engine);
00140 virtual void Perform(MHEngine *engine);
00141 protected:
00142 virtual void PrintArgs(FILE *fd, int ) const { m_FontAttrs.PrintMe(fd, 0); }
00143 MHGenericOctetString m_FontAttrs;
00144 };
00145
00146
00147
00148 #endif