OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
formatting.hpp
Go to the documentation of this file.
1 #ifndef MWGUI_FORMATTING_H
2 #define MWGUI_FORMATTING_H
3 
4 #include <MyGUI_Colour.h>
5 #include <map>
6 
8 
9 namespace MWGui
10 {
11  namespace Formatting
12  {
13  struct TextStyle
14  {
16  mColour(0,0,0)
17  , mFont("Journalbook Magic Cards")
18  , mTextSize(16)
19  {
20  }
21 
22  MyGUI::Colour mColour;
23  std::string mFont;
24  int mTextSize;
25  };
26 
27  struct BlockStyle
28  {
30  mAlign(MyGUI::Align::Left | MyGUI::Align::Top)
31  {
32  }
33 
34  MyGUI::Align mAlign;
35  };
36 
38  {
39  public:
40  typedef std::map<std::string, std::string> Attributes;
41  enum Events
42  {
43  Event_None = -2,
44  Event_EOF = -1,
50  };
51 
52  BookTextParser(const std::string & text);
53 
54  Events next();
55 
56  const Attributes & getAttributes() const;
57  std::string getReadyText() const;
58  bool isClosingTag() const;
59 
60  private:
61  void registerTag(const std::string & tag, Events type);
62  void flushBuffer();
63  void parseTag(std::string tag);
64 
65  size_t mIndex;
66  std::string mText;
67  std::string mReadyText;
68 
72  std::string mTag;
74  std::map<std::string, Events> mTagTypes;
75  std::string mBuffer;
76  };
77 
78  class Paginator
79  {
80  public:
81  typedef std::pair<int, int> Page;
82  typedef std::vector<Page> Pages;
83 
84  Paginator(int pageWidth, int pageHeight)
85  : mStartTop(0), mCurrentTop(0),
86  mPageWidth(pageWidth), mPageHeight(pageHeight),
88  {
89  }
90 
91  int getStartTop() const { return mStartTop; }
92  int getCurrentTop() const { return mCurrentTop; }
93  int getPageWidth() const { return mPageWidth; }
94  int getPageHeight() const { return mPageHeight; }
96  Pages getPages() const { return mPages; }
97 
98  void setStartTop(int top) { mStartTop = top; }
99  void setCurrentTop(int top) { mCurrentTop = top; }
100  void setIgnoreLeadingEmptyLines(bool ignore) { mIgnoreLeadingEmptyLines = ignore; }
101 
102  Paginator & operator<<(const Page & page)
103  {
104  mPages.push_back(page);
105  return *this;
106  }
107 
108  private:
113  };
114 
117  {
118  public:
119  Paginator::Pages markupToWidget(MyGUI::Widget * parent, const std::string & markup, const int pageWidth, const int pageHeight);
120  Paginator::Pages markupToWidget(MyGUI::Widget * parent, const std::string & markup);
121 
122  private:
123  void resetFontProperties();
124 
125  void handleDiv(const BookTextParser::Attributes & attr);
126  void handleFont(const BookTextParser::Attributes & attr);
127 
130  };
131 
133  {
134  public:
135  GraphicElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle);
136  virtual int getHeight() = 0;
137  virtual void paginate();
138  virtual int pageSplit();
139 
140  protected:
141  virtual ~GraphicElement() {}
142  MyGUI::Widget * mParent;
145  };
146 
148  {
149  public:
150  TextElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle,
151  const TextStyle & textStyle, const std::string & text);
152  virtual int getHeight();
153  virtual int pageSplit();
154  private:
155  int currentFontHeight() const;
158  };
159 
161  {
162  public:
163  ImageElement(MyGUI::Widget * parent, Paginator & pag, const BlockStyle & blockStyle,
164  const std::string & src, int width, int height);
165  virtual int getHeight();
166  virtual int pageSplit();
167 
168  private:
170  MyGUI::ImageBox * mImageBox;
171  };
172  }
173 }
174 
175 #endif
void setIgnoreLeadingEmptyLines(bool ignore)
Definition: formatting.hpp:100
Paginator & mPaginator
Definition: formatting.hpp:143
bool getIgnoreLeadingEmptyLines() const
Definition: formatting.hpp:95
BlockStyle mBlockStyle
Definition: formatting.hpp:144
BookTextParser(const std::string &text)
Definition: formatting.cpp:27
void setStartTop(int top)
Definition: formatting.hpp:98
int mTextSize
Definition: formatting.hpp:24
ImageElement(MyGUI::Widget *parent, Paginator &pag, const BlockStyle &blockStyle, const std::string &src, int width, int height)
Definition: formatting.cpp:470
Events
Definition: formatting.hpp:41
TextStyle()
Definition: formatting.hpp:15
bool mIgnoreNewlineTags
Definition: formatting.hpp:69
size_t mIndex
Definition: formatting.hpp:65
TextStyle mTextStyle
Definition: formatting.hpp:156
GraphicElement(MyGUI::Widget *parent, Paginator &pag, const BlockStyle &blockStyle)
Definition: formatting.cpp:389
Paginator::Pages markupToWidget(MyGUI::Widget *parent, const std::string &markup, const int pageWidth, const int pageHeight)
Definition: formatting.cpp:202
void setCurrentTop(int top)
Definition: formatting.hpp:99
void flushBuffer()
Definition: formatting.cpp:123
MyGUI::Colour mColour
Definition: formatting.hpp:22
virtual int getHeight()
Definition: formatting.cpp:491
Attributes mAttributes
Definition: formatting.hpp:71
bool isClosingTag() const
Definition: formatting.cpp:134
Pages mPages
Definition: formatting.hpp:112
virtual int pageSplit()
Definition: formatting.cpp:496
int getStartTop() const
Definition: formatting.hpp:91
int getPageWidth() const
Definition: formatting.hpp:93
Pages getPages() const
Definition: formatting.hpp:96
int mPageHeight
Definition: formatting.hpp:110
int mCurrentTop
Definition: formatting.hpp:109
MyGUI::ImageBox * mImageBox
Definition: formatting.hpp:170
void registerTag(const std::string &tag, Events type)
Definition: formatting.cpp:53
Gui::EditBox * mEditBox
Definition: formatting.hpp:157
utilities for parsing book/scroll text as mygui widgets
Definition: formatting.hpp:116
std::vector< Page > Pages
Definition: formatting.hpp:82
Definition: formatting.hpp:78
Definition: formatting.hpp:13
bool mIgnoreLineEndings
Definition: formatting.hpp:70
BlockStyle()
Definition: formatting.hpp:29
virtual int pageSplit()
Definition: formatting.cpp:440
std::map< std::string, Events > mTagTypes
Definition: formatting.hpp:74
std::map< std::string, std::string > Attributes
Definition: formatting.hpp:40
std::string mFont
Definition: formatting.hpp:23
BlockStyle mBlockStyle
Definition: formatting.hpp:129
Paginator & operator<<(const Page &page)
Definition: formatting.hpp:102
std::string getReadyText() const
Definition: formatting.cpp:58
std::pair< int, int > Page
Definition: formatting.hpp:81
void resetFontProperties()
Definition: formatting.cpp:343
int mImageHeight
Definition: formatting.hpp:169
Events next()
Definition: formatting.cpp:63
int mPageWidth
Definition: formatting.hpp:110
void parseTag(std::string tag)
Definition: formatting.cpp:139
bool mIgnoreLeadingEmptyLines
Definition: formatting.hpp:111
virtual int getHeight()
Definition: formatting.cpp:435
std::string mTag
Definition: formatting.hpp:72
MyGUI::Widget * mParent
Definition: formatting.hpp:142
int getCurrentTop() const
Definition: formatting.hpp:92
void handleFont(const BookTextParser::Attributes &attr)
Definition: formatting.cpp:363
virtual void paginate()
Definition: formatting.cpp:394
int getPageHeight() const
Definition: formatting.hpp:94
MyGUI::Align mAlign
Definition: formatting.hpp:34
Definition: formatting.hpp:160
std::string mReadyText
Definition: formatting.hpp:67
TextElement(MyGUI::Widget *parent, Paginator &pag, const BlockStyle &blockStyle, const TextStyle &textStyle, const std::string &text)
Definition: formatting.cpp:413
std::string mBuffer
Definition: formatting.hpp:75
TextStyle mTextStyle
Definition: formatting.hpp:128
void handleDiv(const BookTextParser::Attributes &attr)
Definition: formatting.cpp:348
Definition: formatting.hpp:37
Definition: formatting.hpp:147
bool mClosingTag
Definition: formatting.hpp:73
Paginator(int pageWidth, int pageHeight)
Definition: formatting.hpp:84
virtual int pageSplit()
Definition: formatting.cpp:407
virtual ~GraphicElement()
Definition: formatting.hpp:141
Definition: box.hpp:24
const Attributes & getAttributes() const
Definition: formatting.cpp:129
Definition: formatting.hpp:132
Definition: formatting.hpp:27
int mStartTop
Definition: formatting.hpp:109
std::string mText
Definition: formatting.hpp:66