Fix some naming guidelines, fix topic index exception, fix exception in keyword search for some journal entries

actorid
scrawl 12 years ago
parent 8bc59f8fe6
commit 3c68c87923

@ -23,18 +23,18 @@ namespace MWGui
using namespace MyGUI;
using namespace MWGui;
static bool ucs_space (int code_point);
static bool ucs_line_break (int code_point);
static bool ucs_breaking_space (int code_point);
static bool ucsSpace (int codePoint);
static bool ucsLineBreak (int codePoint);
static bool ucsBreakingSpace (int codePoint);
struct BookTypesetter::Style { virtual ~Style () {} };
struct MWGui::TypesetBookImpl : TypesetBook
{
typedef std::vector <uint8_t> content;
typedef std::list <content> contents;
typedef utf8_stream::point utf8_point;
typedef std::pair <utf8_point, utf8_point> range;
typedef std::vector <uint8_t> Content;
typedef std::list <Content> Contents;
typedef Utf8Stream::Point Utf8Point;
typedef std::pair <Utf8Point, Utf8Point> Range;
struct StyleImpl : BookTypesetter::Style
{
@ -42,7 +42,7 @@ struct MWGui::TypesetBookImpl : TypesetBook
Colour mHotColour;
Colour mActiveColour;
Colour mNormalColour;
interactive_id mInteractiveId;
InteractiveId mInteractiveId;
bool match (IFont* tstFont, Colour tstHotColour, Colour tstActiveColour, Colour tstNormalColour, intptr_t tstInteractiveId)
{
@ -66,56 +66,56 @@ struct MWGui::TypesetBookImpl : TypesetBook
}
};
typedef std::list <StyleImpl> styles;
typedef std::list <StyleImpl> Styles;
struct Run
{
StyleImpl* mStyle;
range mRange;
Range mRange;
int mLeft, mRight;
int mPrintableChars;
};
typedef std::vector <Run> runs;
typedef std::vector <Run> Runs;
struct Line
{
runs mRuns;
Runs mRuns;
IntRect mRect;
};
typedef std::vector <Line> lines;
typedef std::vector <Line> Lines;
struct Section
{
lines mLines;
Lines mLines;
IntRect mRect;
};
typedef std::vector <Section> sections;
typedef std::vector <Section> Sections;
typedef std::pair <int, int> page;
typedef std::vector <page> pages;
typedef std::pair <int, int> Page;
typedef std::vector <Page> Pages;
pages mPages;
sections mSections;
contents mContents;
styles mStyles;
Pages mPages;
Sections mSections;
Contents mContents;
Styles mStyles;
IntRect mRect;
virtual ~TypesetBookImpl () {}
range addContent (BookTypesetter::utf8_span Text)
Range addContent (BookTypesetter::Utf8Span text)
{
contents::iterator i = mContents.insert (mContents.end (), content (Text.first, Text.second));
Contents::iterator i = mContents.insert (mContents.end (), Content (text.first, text.second));
if (i->size () == 0)
return range (utf8_point (NULL), utf8_point (NULL));
return Range (Utf8Point (NULL), Utf8Point (NULL));
utf8_point begin = &i->front ();
utf8_point end = &i->front () + i->size ();
Utf8Point begin = &i->front ();
Utf8Point end = &i->front () + i->size ();
return range (begin, end);
return Range (begin, end);
}
size_t pageCount () const { return mPages.size (); }
@ -125,49 +125,49 @@ struct MWGui::TypesetBookImpl : TypesetBook
return std::make_pair (mRect.width (), mRect.height ());
}
template <typename visitor>
void visitRuns (int top, int bottom, IFont* Font, visitor const & Visitor) const
template <typename Visitor>
void visitRuns (int top, int bottom, IFont* Font, Visitor const & visitor) const
{
for (sections::const_iterator i = mSections.begin (); i != mSections.end (); ++i)
for (Sections::const_iterator i = mSections.begin (); i != mSections.end (); ++i)
{
if (top >= mRect.bottom || bottom <= i->mRect.top)
continue;
for (lines::const_iterator j = i->mLines.begin (); j != i->mLines.end (); ++j)
for (Lines::const_iterator j = i->mLines.begin (); j != i->mLines.end (); ++j)
{
if (top >= j->mRect.bottom || bottom <= j->mRect.top)
continue;
for (runs::const_iterator k = j->mRuns.begin (); k != j->mRuns.end (); ++k)
for (Runs::const_iterator k = j->mRuns.begin (); k != j->mRuns.end (); ++k)
if (!Font || k->mStyle->mFont == Font)
Visitor (*i, *j, *k);
visitor (*i, *j, *k);
}
}
}
template <typename visitor>
void visitRuns (int top, int bottom, visitor const & Visitor) const
template <typename Visitor>
void visitRuns (int top, int bottom, Visitor const & visitor) const
{
visitRuns (top, bottom, NULL, Visitor);
visitRuns (top, bottom, NULL, visitor);
}
StyleImpl * hitTest (int left, int top) const
{
for (sections::const_iterator i = mSections.begin (); i != mSections.end (); ++i)
for (Sections::const_iterator i = mSections.begin (); i != mSections.end (); ++i)
{
if (top < i->mRect.top || top >= i->mRect.bottom)
continue;
int left1 = left - i->mRect.left;
for (lines::const_iterator j = i->mLines.begin (); j != i->mLines.end (); ++j)
for (Lines::const_iterator j = i->mLines.begin (); j != i->mLines.end (); ++j)
{
if (top < j->mRect.top || top >= j->mRect.bottom)
continue;
int left2 = left1 - j->mRect.left;
for (runs::const_iterator k = j->mRuns.begin (); k != j->mRuns.end (); ++k)
for (Runs::const_iterator k = j->mRuns.begin (); k != j->mRuns.end (); ++k)
{
if (left2 < k->mLeft || left2 >= k->mRight)
continue;
@ -180,10 +180,10 @@ struct MWGui::TypesetBookImpl : TypesetBook
return nullptr;
}
IFont* affectedFont (StyleImpl* Style)
IFont* affectedFont (StyleImpl* style)
{
for (styles::iterator i = mStyles.begin (); i != mStyles.end (); ++i)
if (&*i == Style)
for (Styles::iterator i = mStyles.begin (); i != mStyles.end (); ++i)
if (&*i == style)
return i->mFont;
return NULL;
}
@ -193,92 +193,92 @@ struct MWGui::TypesetBookImpl : TypesetBook
struct TypesetBookImpl::Typesetter : BookTypesetter
{
typedef TypesetBookImpl book;
typedef boost::shared_ptr <book> book_ptr;
typedef TypesetBookImpl Book;
typedef boost::shared_ptr <Book> BookPtr;
int mPageWidth;
int mPageHeight;
book_ptr mBook;
BookPtr mBook;
Section * mSection;
Line * mLine;
Run * mRun;
std::vector <alignment> mSectionAlignment;
std::vector <Alignment> mSectionAlignment;
book::content const * mCurrentContent;
alignment mCurrentAlignment;
Book::Content const * mCurrentContent;
Alignment mCurrentAlignment;
Typesetter (size_t Width, size_t Height) :
mPageWidth (Width), mPageHeight(Height),
Typesetter (size_t width, size_t height) :
mPageWidth (width), mPageHeight(height),
mSection (NULL), mLine (NULL), mRun (NULL),
mCurrentAlignment (alignLeft),
mCurrentAlignment (AlignLeft),
mCurrentContent (NULL)
{
mBook = boost::make_shared <book> ();
mBook = boost::make_shared <Book> ();
}
virtual ~Typesetter ()
{
}
Style * createStyle (char const * FontName, Colour FontColour)
Style * createStyle (char const * fontName, Colour fontColour)
{
for (styles::iterator i = mBook->mStyles.begin (); i != mBook->mStyles.end (); ++i)
if (i->match (FontName, FontColour, FontColour, FontColour, 0))
for (Styles::iterator i = mBook->mStyles.begin (); i != mBook->mStyles.end (); ++i)
if (i->match (fontName, fontColour, fontColour, fontColour, 0))
return &*i;
StyleImpl & style = *mBook->mStyles.insert (mBook->mStyles.end (), StyleImpl ());
style.mFont = FontManager::getInstance().getByName(FontName);
style.mHotColour = FontColour;
style.mActiveColour = FontColour;
style.mNormalColour = FontColour;
style.mFont = FontManager::getInstance().getByName(fontName);
style.mHotColour = fontColour;
style.mActiveColour = fontColour;
style.mNormalColour = fontColour;
style.mInteractiveId = 0;
return &style;
}
Style* createHotStyle (Style* _BaseStyle, coulour NormalColour, coulour HoverColour, coulour ActiveColour, interactive_id Id, bool Unique)
Style* createHotStyle (Style* baseStyle, Colour normalColour, Colour hoverColour, Colour activeColour, InteractiveId id, bool unique)
{
StyleImpl* BaseStyle = dynamic_cast <StyleImpl*> (_BaseStyle);
StyleImpl* BaseStyle = dynamic_cast <StyleImpl*> (baseStyle);
if (!Unique)
for (styles::iterator i = mBook->mStyles.begin (); i != mBook->mStyles.end (); ++i)
if (i->match (BaseStyle->mFont, HoverColour, ActiveColour, NormalColour, Id))
if (!unique)
for (Styles::iterator i = mBook->mStyles.begin (); i != mBook->mStyles.end (); ++i)
if (i->match (BaseStyle->mFont, hoverColour, activeColour, normalColour, id))
return &*i;
StyleImpl & style = *mBook->mStyles.insert (mBook->mStyles.end (), StyleImpl ());
style.mFont = BaseStyle->mFont;
style.mHotColour = HoverColour;
style.mActiveColour = ActiveColour;
style.mNormalColour = NormalColour;
style.mInteractiveId = Id;
style.mHotColour = hoverColour;
style.mActiveColour = activeColour;
style.mNormalColour = normalColour;
style.mInteractiveId = id;
return &style;
}
void write (Style * _Style, utf8_span Text)
void write (Style * style, Utf8Span text)
{
range text = mBook->addContent (Text);
Range range = mBook->addContent (text);
write_impl (dynamic_cast <StyleImpl*> (_Style), text.first, text.second);
writeImpl (dynamic_cast <StyleImpl*> (style), range.first, range.second);
}
intptr_t add_content (utf8_span Text, bool Select)
intptr_t addContent (Utf8Span text, bool select)
{
contents::iterator i = mBook->mContents.insert (mBook->mContents.end (), content (Text.first, Text.second));
Contents::iterator i = mBook->mContents.insert (mBook->mContents.end (), Content (text.first, text.second));
if (Select)
if (select)
mCurrentContent = &(*i);
return reinterpret_cast <intptr_t> (&(*i));
}
void select_content (intptr_t contentHandle)
void selectContent (intptr_t contentHandle)
{
mCurrentContent = reinterpret_cast <content const *> (contentHandle);
mCurrentContent = reinterpret_cast <Content const *> (contentHandle);
}
void write (Style * style, size_t begin, size_t end)
@ -287,10 +287,10 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
assert (end <= mCurrentContent->size ());
assert (begin <= mCurrentContent->size ());
utf8_point begin_ = &mCurrentContent->front () + begin;
utf8_point end_ = &mCurrentContent->front () + end ;
Utf8Point begin_ = &mCurrentContent->front () + begin;
Utf8Point end_ = &mCurrentContent->front () + end ;
write_impl (dynamic_cast <StyleImpl*> (style), begin_, end_);
writeImpl (dynamic_cast <StyleImpl*> (style), begin_, end_);
}
void lineBreak (float margin)
@ -314,23 +314,23 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
}
}
void setSectionAlignment (alignment sectionAlignment)
void setSectionAlignment (Alignment sectionAlignment)
{
if (mSection != NULL)
mSectionAlignment.back () = sectionAlignment;
mCurrentAlignment = sectionAlignment;
}
TypesetBook::ptr complete ()
TypesetBook::Ptr complete ()
{
int curPageStart = 0;
int curPageStop = 0;
std::vector <alignment>::iterator sa = mSectionAlignment.begin ();
for (sections::iterator i = mBook->mSections.begin (); i != mBook->mSections.end (); ++i, ++sa)
std::vector <Alignment>::iterator sa = mSectionAlignment.begin ();
for (Sections::iterator i = mBook->mSections.begin (); i != mBook->mSections.end (); ++i, ++sa)
{
// apply alignment to individual lines...
for (lines::iterator j = i->mLines.begin (); j != i->mLines.end (); ++j)
for (Lines::iterator j = i->mLines.begin (); j != i->mLines.end (); ++j)
{
int width = j->mRect.width ();
int excess = mPageWidth - width;
@ -338,9 +338,9 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
switch (*sa)
{
default:
case alignLeft: j->mRect.left = 0; break;
case alignCenter: j->mRect.left = excess/2; break;
case alignRight: j->mRect.left = excess; break;
case AlignLeft: j->mRect.left = 0; break;
case AlignCenter: j->mRect.left = excess/2; break;
case AlignRight: j->mRect.left = excess; break;
}
j->mRect.right = j->mRect.left + width;
@ -361,7 +361,7 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
{
assert (curPageStart != curPageStop);
mBook->mPages.push_back (page (curPageStart, curPageStop));
mBook->mPages.push_back (Page (curPageStart, curPageStop));
curPageStart = i->mRect.top;
curPageStop = i->mRect.bottom;
@ -376,20 +376,20 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
}
if (curPageStart != curPageStop)
mBook->mPages.push_back (page (curPageStart, curPageStop));
mBook->mPages.push_back (Page (curPageStart, curPageStop));
return mBook;
}
void write_impl (StyleImpl * Style, utf8_stream::point _begin, utf8_stream::point _end)
void writeImpl (StyleImpl * style, Utf8Stream::Point _begin, Utf8Stream::Point _end)
{
int line_height = Style->mFont->getDefaultHeight ();
int line_height = style->mFont->getDefaultHeight ();
utf8_stream stream (_begin, _end);
Utf8Stream stream (_begin, _end);
while (!stream.eof ())
{
if (ucs_line_break (stream.peek ()))
if (ucsLineBreak (stream.peek ()))
{
stream.consume ();
mLine = NULL, mRun = NULL;
@ -401,27 +401,27 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
int space_width = 0;
int character_count = 0;
utf8_stream::point lead = stream.current ();
Utf8Stream::Point lead = stream.current ();
while (!stream.eof () && !ucs_line_break (stream.peek ()) && ucs_breaking_space (stream.peek ()))
while (!stream.eof () && !ucsLineBreak (stream.peek ()) && ucsBreakingSpace (stream.peek ()))
{
GlyphInfo* gi = Style->mFont->getGlyphInfo (stream.peek ());
GlyphInfo* gi = style->mFont->getGlyphInfo (stream.peek ());
space_width += gi->advance;
stream.consume ();
}
utf8_stream::point origin = stream.current ();
Utf8Stream::Point origin = stream.current ();
while (!stream.eof () && !ucs_line_break (stream.peek ()) && !ucs_breaking_space (stream.peek ()))
while (!stream.eof () && !ucsLineBreak (stream.peek ()) && !ucsBreakingSpace (stream.peek ()))
{
GlyphInfo* gi = Style->mFont->getGlyphInfo (stream.peek ());
GlyphInfo* gi = style->mFont->getGlyphInfo (stream.peek ());
word_width += gi->advance + gi->bearingX;
word_height = line_height;
++character_count;
stream.consume ();
}
utf8_stream::point extent = stream.current ();
Utf8Stream::Point extent = stream.current ();
if (lead == extent)
break;
@ -432,18 +432,18 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
{
mLine = NULL, mRun = NULL;
append_run (Style, origin, extent, extent - origin, word_width, mBook->mRect.bottom + word_height);
append_run (style, origin, extent, extent - origin, word_width, mBook->mRect.bottom + word_height);
}
else
{
int top = mLine ? mLine->mRect.top : mBook->mRect.bottom;
append_run (Style, lead, extent, extent - origin, left + space_width + word_width, top + word_height);
append_run (style, lead, extent, extent - origin, left + space_width + word_width, top + word_height);
}
}
}
void append_run (StyleImpl * style, utf8_stream::point begin, utf8_stream::point end, int pc, int right, int bottom)
void append_run (StyleImpl * style, Utf8Stream::Point begin, Utf8Stream::Point end, int pc, int right, int bottom)
{
if (mSection == NULL)
{
@ -501,7 +501,7 @@ struct TypesetBookImpl::Typesetter : BookTypesetter
}
};
BookTypesetter::ptr BookTypesetter::create (int pageWidth, int pageHeight)
BookTypesetter::Ptr BookTypesetter::create (int pageWidth, int pageHeight)
{
return boost::make_shared <TypesetBookImpl::Typesetter> (pageWidth, pageHeight);
}
@ -663,15 +663,15 @@ namespace
vertex (vr.right, vr.bottom, tr.right, tr.bottom);
}
void vertex (float X, float Y, float U, float V)
void vertex (float x, float y, float u, float v)
{
FloatPoint pt = mRenderXform (FloatPoint (X, Y));
FloatPoint pt = mRenderXform (FloatPoint (x, y));
mVertices->x = pt.left;
mVertices->y = pt.top ;
mVertices->z = mZ;
mVertices->u = U;
mVertices->v = V;
mVertices->u = u;
mVertices->v = v;
mVertices->colour = mC;
++mVertices;
@ -690,19 +690,19 @@ protected:
struct TextFormat : ISubWidget
{
typedef IFont* id;
typedef IFont* Id;
id mFont;
Id mFont;
int mCountVertex;
ITexture* mTexture;
RenderItem* mRenderItem;
PageDisplay * mDisplay;
TextFormat (IFont* Id, PageDisplay * Display) :
mFont (Id),
TextFormat (IFont* id, PageDisplay * display) :
mFont (id),
mTexture (NULL),
mRenderItem (NULL),
mDisplay (Display),
mDisplay (display),
mCountVertex (0)
{
}
@ -739,13 +739,13 @@ protected:
public:
typedef TypesetBookImpl::StyleImpl style;
typedef std::map <TextFormat::id, TextFormat*> active_text_formats;
typedef TypesetBookImpl::StyleImpl Style;
typedef std::map <TextFormat::Id, TextFormat*> ActiveTextFormats;
int mViewTop;
int mViewBottom;
style* mFocusItem;
Style* mFocusItem;
bool mItemActive;
MouseButton mLastDown;
boost::function <void (intptr_t)> mLinkClicked;
@ -755,7 +755,7 @@ public:
size_t mPage;
ILayerNode* mNode;
active_text_formats mActiveTextFormats;
ActiveTextFormats mActiveTextFormats;
PageDisplay ()
{
@ -768,7 +768,7 @@ public:
{
IFont* Font = mBook->affectedFont (mFocusItem);
active_text_formats::iterator i = mActiveTextFormats.find (Font);
ActiveTextFormats::iterator i = mActiveTextFormats.find (Font);
mNode->outOfDate (i->second->mRenderItem);
}
@ -785,15 +785,15 @@ public:
mItemActive = false;
}
void onMouseMove (int _left, int _top)
void onMouseMove (int left, int top)
{
if (!mBook)
return;
_left -= mCroppedParent->getAbsoluteLeft ();
_top -= mCroppedParent->getAbsoluteTop ();
left -= mCroppedParent->getAbsoluteLeft ();
top -= mCroppedParent->getAbsoluteTop ();
style * Hit = mBook->hitTest (_left, mViewTop + _top);
Style * Hit = mBook->hitTest (left, mViewTop + top);
if (mLastDown == MouseButton::None)
{
@ -821,36 +821,36 @@ public:
}
}
void onMouseButtonPressed (int _left, int _top, MouseButton _id)
void onMouseButtonPressed (int left, int top, MouseButton id)
{
if (!mBook)
return;
_left -= mCroppedParent->getAbsoluteLeft ();
_top -= mCroppedParent->getAbsoluteTop ();
left -= mCroppedParent->getAbsoluteLeft ();
top -= mCroppedParent->getAbsoluteTop ();
if (mLastDown == MouseButton::None)
{
mFocusItem = mBook->hitTest (_left, mViewTop + _top);
mFocusItem = mBook->hitTest (left, mViewTop + top);
mItemActive = true;
dirtyFocusItem ();
mLastDown = _id;
mLastDown = id;
}
}
void onMouseButtonReleased(int _left, int _top, MouseButton _id)
void onMouseButtonReleased(int left, int top, MouseButton id)
{
if (!mBook)
return;
_left -= mCroppedParent->getAbsoluteLeft ();
_top -= mCroppedParent->getAbsoluteTop ();
left -= mCroppedParent->getAbsoluteLeft ();
top -= mCroppedParent->getAbsoluteTop ();
if (mLastDown == _id)
if (mLastDown == id)
{
style * mItem = mBook->hitTest (_left, mViewTop + _top);
Style * mItem = mBook->hitTest (left, mViewTop + top);
bool clicked = mFocusItem == mItem;
@ -865,16 +865,16 @@ public:
}
}
void showPage (TypesetBook::ptr _Book, size_t newPage)
void showPage (TypesetBook::Ptr book, size_t newPage)
{
boost::shared_ptr <TypesetBookImpl> newBook = boost::dynamic_pointer_cast <TypesetBookImpl> (_Book);
boost::shared_ptr <TypesetBookImpl> newBook = boost::dynamic_pointer_cast <TypesetBookImpl> (book);
if (mBook != newBook)
{
mFocusItem = nullptr;
mItemActive = 0;
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
{
if (mNode != NULL)
i->second->destroyDrawItem (mNode);
@ -913,7 +913,7 @@ public:
if (mBook && mPage != newPage)
{
if (mNode != NULL)
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
mNode->outOfDate(i->second->mRenderItem);
mPage = newPage;
@ -931,17 +931,17 @@ public:
}
}
struct createActiveFormat
struct CreateActiveFormat
{
PageDisplay * this_;
createActiveFormat (PageDisplay * this_) : this_ (this_) {}
CreateActiveFormat (PageDisplay * this_) : this_ (this_) {}
void operator () (Section const & Section, Line const & Line, Run const & Run) const
void operator () (Section const & section, Line const & line, Run const & run) const
{
IFont* Font = Run.mStyle->mFont;
IFont* Font = run.mStyle->mFont;
active_text_formats::iterator j = this_->mActiveTextFormats.find (Font);
ActiveTextFormats::iterator j = this_->mActiveTextFormats.find (Font);
if (j == this_->mActiveTextFormats.end ())
{
@ -952,16 +952,16 @@ public:
j = this_->mActiveTextFormats.insert (std::make_pair (Font, textFormat)).first;
}
j->second->mCountVertex += Run.mPrintableChars * 6;
j->second->mCountVertex += run.mPrintableChars * 6;
}
};
void createActiveFormats (boost::shared_ptr <TypesetBookImpl> newBook)
{
newBook->visitRuns (0, 0x7FFFFFFF, createActiveFormat (this));
newBook->visitRuns (0, 0x7FFFFFFF, CreateActiveFormat (this));
if (mNode != NULL)
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
i->second->createDrawItem (mNode);
}
@ -982,46 +982,46 @@ public:
if (nullptr != mNode)
{
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
mNode->outOfDate(i->second->mRenderItem);
}
}
void createDrawItem(ITexture* _texture, ILayerNode* _node)
void createDrawItem(ITexture* texture, ILayerNode* node)
{
//test ();
mNode = _node;
mNode = node;
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
i->second->createDrawItem (_node);
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
i->second->createDrawItem (node);
}
struct renderRun
struct RenderRun
{
PageDisplay * this_;
GlyphStream &glyphStream;
renderRun (PageDisplay * this_, GlyphStream &glyphStream) :
RenderRun (PageDisplay * this_, GlyphStream &glyphStream) :
this_(this_), glyphStream (glyphStream)
{
}
void operator () (Section const & Section, Line const & Line, Run const & Run) const
void operator () (Section const & section, Line const & line, Run const & run) const
{
bool isActive = Run.mStyle->mInteractiveId && (Run.mStyle == this_->mFocusItem);
bool isActive = run.mStyle->mInteractiveId && (run.mStyle == this_->mFocusItem);
Colour colour = isActive ? (this_->mItemActive ? Run.mStyle->mActiveColour: Run.mStyle->mHotColour) : Run.mStyle->mNormalColour;
Colour colour = isActive ? (this_->mItemActive ? run.mStyle->mActiveColour: run.mStyle->mHotColour) : run.mStyle->mNormalColour;
glyphStream.reset (Section.mRect.left + Line.mRect.left + Run.mLeft, Line.mRect.top, colour);
glyphStream.reset (section.mRect.left + line.mRect.left + run.mLeft, line.mRect.top, colour);
utf8_stream stream (Run.mRange);
Utf8Stream stream (run.mRange);
while (!stream.eof ())
{
utf8_stream::unicode_char code_point = stream.consume ();
Utf8Stream::UnicodeChar code_point = stream.consume ();
if (!ucs_space (code_point))
if (!ucsSpace (code_point))
glyphStream.emitGlyph (code_point);
else
glyphStream.emitSpace (code_point);
@ -1047,7 +1047,7 @@ public:
int visit_top = (std::max) (mViewTop, mViewTop + int (renderXform.clipTop ));
int visit_bottom = (std::min) (mViewBottom, mViewTop + int (renderXform.clipBottom));
mBook->visitRuns (visit_top, visit_bottom, textFormat.mFont, renderRun (this, glyphStream));
mBook->visitRuns (visit_top, visit_bottom, textFormat.mFont, RenderRun (this, glyphStream));
textFormat.mRenderItem->setLastVertexCount(glyphStream.end () - vertices);
}
@ -1065,14 +1065,14 @@ public:
_checkMargin ();
if (mNode != NULL)
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
mNode->outOfDate (i->second->mRenderItem);
}
void destroyDrawItem()
{
for (active_text_formats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
for (ActiveTextFormats::iterator i = mActiveTextFormats.begin (); i != mActiveTextFormats.end (); ++i)
i->second->destroyDrawItem (mNode);
mNode = NULL;
@ -1086,15 +1086,15 @@ MYGUI_RTTI_DERIVED(BookPage)
public:
void showPage (TypesetBook::ptr Book, size_t Page)
void showPage (TypesetBook::Ptr book, size_t page)
{
if (PageDisplay* pd = dynamic_cast <PageDisplay*> (getSubWidgetText ()))
pd->showPage (Book, Page);
pd->showPage (book, page);
else
throw std::runtime_error ("The main sub-widget for a BookPage must be a PageDisplay.");
}
void adviseLinkClicked (boost::function <void (interactive_id)> linkClicked)
void adviseLinkClicked (boost::function <void (InteractiveId)> linkClicked)
{
if (PageDisplay* pd = dynamic_cast <PageDisplay*> (getSubWidgetText ()))
{
@ -1106,7 +1106,7 @@ public:
{
if (PageDisplay* pd = dynamic_cast <PageDisplay*> (getSubWidgetText ()))
{
pd->mLinkClicked = boost::function <void (interactive_id)> ();
pd->mLinkClicked = boost::function <void (InteractiveId)> ();
}
}
@ -1121,34 +1121,34 @@ protected:
Widget::onMouseLostFocus (_new);
}
void onMouseMove(int _left, int _top)
void onMouseMove(int left, int top)
{
if (PageDisplay* pd = dynamic_cast <PageDisplay*> (getSubWidgetText ()))
{
pd->onMouseMove (_left, _top);
pd->onMouseMove (left, top);
}
else
Widget::onMouseMove (_left, _top);
Widget::onMouseMove (left, top);
}
void onMouseButtonPressed (int _left, int _top, MouseButton _id)
void onMouseButtonPressed (int left, int top, MouseButton id)
{
if (PageDisplay* pd = dynamic_cast <PageDisplay*> (getSubWidgetText ()))
{
pd->onMouseButtonPressed (_left, _top, _id);
pd->onMouseButtonPressed (left, top, id);
}
else
Widget::onMouseButtonPressed (_left, _top, _id);
Widget::onMouseButtonPressed (left, top, id);
}
void onMouseButtonReleased(int _left, int _top, MouseButton _id)
void onMouseButtonReleased(int left, int top, MouseButton id)
{
if (PageDisplay* pd = dynamic_cast <PageDisplay*> (getSubWidgetText ()))
{
pd->onMouseButtonReleased (_left, _top, _id);
pd->onMouseButtonReleased (left, top, id);
}
else
Widget::onMouseButtonReleased (_left, _top, _id);
Widget::onMouseButtonReleased (left, top, id);
}
};
@ -1160,14 +1160,14 @@ void BookPage::registerMyGUIComponents ()
factory.registerFactory<PageDisplay>("BasisSkin");
}
static bool ucs_line_break (int code_point)
static bool ucsLineBreak (int codePoint)
{
return code_point == '\n';
return codePoint == '\n';
}
static bool ucs_space (int code_point)
static bool ucsSpace (int codePoint)
{
switch (code_point)
switch (codePoint)
{
case 0x0020: // SPACE
case 0x00A0: // NO-BREAK SPACE
@ -1195,9 +1195,9 @@ static bool ucs_space (int code_point)
}
}
static bool ucs_breaking_space (int code_point)
static bool ucsBreakingSpace (int codePoint)
{
switch (code_point)
switch (codePoint)
{
case 0x0020: // SPACE
//case 0x00A0: // NO-BREAK SPACE

@ -15,8 +15,8 @@ namespace MWGui
/// the book page widget.
struct TypesetBook
{
typedef boost::shared_ptr <TypesetBook> ptr;
typedef intptr_t interactive_id;
typedef boost::shared_ptr <TypesetBook> Ptr;
typedef intptr_t InteractiveId;
/// Returns the number of pages in the document.
virtual size_t pageCount () const = 0;
@ -33,16 +33,16 @@ namespace MWGui
/// A factory class for creating a typeset book instance.
struct BookTypesetter
{
typedef boost::shared_ptr <BookTypesetter> ptr;
typedef TypesetBook::interactive_id interactive_id;
typedef MyGUI::Colour coulour;
typedef uint8_t const * utf8_point;
typedef std::pair <utf8_point, utf8_point> utf8_span;
enum alignment {
alignLeft = -1,
alignCenter = 0,
alignRight = +1
typedef boost::shared_ptr <BookTypesetter> Ptr;
typedef TypesetBook::InteractiveId InteractiveId;
typedef MyGUI::Colour Colour;
typedef uint8_t const * Utf8Point;
typedef std::pair <Utf8Point, Utf8Point> Utf8Span;
enum Alignment {
AlignLeft = -1,
AlignCenter = 0,
AlignRight = +1
};
/// Styles are used to control the character level formatting
@ -52,15 +52,15 @@ namespace MWGui
struct Style;
/// A factory function for creating the default implementation of a book typesetter
static ptr create (int pageWidth, int pageHeight);
static Ptr create (int pageWidth, int pageHeight);
/// Create a simple text style consisting of a font and a text color.
virtual Style* createStyle (char const * Font, coulour Colour) = 0;
virtual Style* createStyle (char const * Font, Colour Colour) = 0;
/// Create a hyper-link style with a user-defined identifier based on an
/// existing style. The unique flag forces a new instance of this style
/// to be created even if an existing instance is present.
virtual Style* createHotStyle (Style * BaseStyle, coulour NormalColour, coulour HoverColour, coulour ActiveColour, interactive_id Id, bool Unique = true) = 0;
virtual Style* createHotStyle (Style * BaseStyle, Colour NormalColour, Colour HoverColour, Colour ActiveColour, InteractiveId Id, bool Unique = true) = 0;
/// Insert a line break into the document. Newline characters in the input
/// text have the same affect. The margin parameter adds additional space
@ -74,25 +74,25 @@ namespace MWGui
virtual void sectionBreak (float margin = 0) = 0;
/// Changes the alignment for the current section of text.
virtual void setSectionAlignment (alignment sectionAlignment) = 0;
virtual void setSectionAlignment (Alignment sectionAlignment) = 0;
// Layout a block of text with the specified style into the document.
virtual void write (Style * Style, utf8_span Text) = 0;
virtual void write (Style * Style, Utf8Span Text) = 0;
/// Adds a content block to the document without laying it out. An
/// identifier is returned that can be used to refer to it. If select
/// is true, the block is activated to be references by future writes.
virtual intptr_t add_content (utf8_span Text, bool Select = true) = 0;
virtual intptr_t addContent (Utf8Span Text, bool Select = true) = 0;
/// Select a previously created content block for future writes.
virtual void select_content (intptr_t contentHandle) = 0;
virtual void selectContent (intptr_t contentHandle) = 0;
/// Layout a span of the selected content block into the document
/// using the specified style.
virtual void write (Style * Style, size_t Begin, size_t End) = 0;
/// Finalize the document layout, and return a pointer to it.
virtual TypesetBook::ptr complete () = 0;
virtual TypesetBook::Ptr complete () = 0;
};
/// An interface to the BookPage widget.
@ -101,14 +101,14 @@ namespace MWGui
MYGUI_RTTI_DERIVED(BookPage)
public:
typedef TypesetBook::interactive_id interactive_id;
typedef boost::function <void (interactive_id)> click_callback;
typedef TypesetBook::InteractiveId InteractiveId;
typedef boost::function <void (InteractiveId)> ClickCallback;
/// Make the widget display the specified page from the specified book.
virtual void showPage (TypesetBook::ptr Book, size_t Page) = 0;
virtual void showPage (TypesetBook::Ptr Book, size_t Page) = 0;
/// Set the callback for a clicking a hyper-link in the document.
virtual void adviseLinkClicked (click_callback callback) = 0;
virtual void adviseLinkClicked (ClickCallback callback) = 0;
/// Clear the hyper-link click callback.
virtual void unadviseLinkClicked () = 0;

@ -4,189 +4,189 @@ using namespace MWGui;
namespace
{
BookTypesetter::utf8_span to_utf8_span (char const * Text)
BookTypesetter::Utf8Span to_utf8_span (char const * text)
{
typedef BookTypesetter::utf8_point point;
typedef BookTypesetter::Utf8Point point;
point begin = reinterpret_cast <point> (Text);
point begin = reinterpret_cast <point> (text);
return BookTypesetter::utf8_span (begin, begin + strlen (Text));
return BookTypesetter::Utf8Span (begin, begin + strlen (text));
}
const MyGUI::Colour linkHot (0.40f, 0.40f, 0.80f);
const MyGUI::Colour linkNormal (0.20f, 0.20f, 0.60f);
const MyGUI::Colour linkActive (0.50f, 0.50f, 1.00f);
struct addContent
struct AddContent
{
BookTypesetter::ptr typesetter;
BookTypesetter::Style* body_style;
BookTypesetter::Ptr mTypesetter;
BookTypesetter::Style* mBodyStyle;
addContent (BookTypesetter::ptr typesetter, BookTypesetter::Style* body_style) :
typesetter (typesetter), body_style (body_style)
AddContent (BookTypesetter::Ptr typesetter, BookTypesetter::Style* body_style) :
mTypesetter (typesetter), mBodyStyle (body_style)
{
}
};
struct addSpan : addContent
struct AddSpan : AddContent
{
addSpan (BookTypesetter::ptr typesetter, BookTypesetter::Style* body_style) :
addContent (typesetter, body_style)
AddSpan (BookTypesetter::Ptr typesetter, BookTypesetter::Style* body_style) :
AddContent (typesetter, body_style)
{
}
void operator () (intptr_t topicId, size_t begin, size_t end)
{
BookTypesetter::Style* style = body_style;
BookTypesetter::Style* style = mBodyStyle;
if (topicId)
style = typesetter->createHotStyle (body_style, linkNormal, linkHot, linkActive, topicId);
style = mTypesetter->createHotStyle (mBodyStyle, linkNormal, linkHot, linkActive, topicId);
typesetter->write (style, begin, end);
mTypesetter->write (style, begin, end);
}
};
struct addEntry
struct AddEntry
{
BookTypesetter::ptr typesetter;
BookTypesetter::Style* body_style;
BookTypesetter::Ptr mTypesetter;
BookTypesetter::Style* mBodyStyle;
addEntry (BookTypesetter::ptr typesetter, BookTypesetter::Style* body_style) :
typesetter (typesetter), body_style (body_style)
AddEntry (BookTypesetter::Ptr typesetter, BookTypesetter::Style* body_style) :
mTypesetter (typesetter), mBodyStyle (body_style)
{
}
void operator () (JournalViewModel::Entry const & Entry)
void operator () (JournalViewModel::Entry const & entry)
{
typesetter->add_content (Entry.body ());
mTypesetter->addContent (entry.body ());
Entry.visitSpans (addSpan (typesetter, body_style));
entry.visitSpans (AddSpan (mTypesetter, mBodyStyle));
}
};
struct addJournalEntry : addEntry
struct AddJournalEntry : AddEntry
{
bool add_header;
BookTypesetter::Style* header_style;
bool mAddHeader;
BookTypesetter::Style* mHeaderStyle;
addJournalEntry (BookTypesetter::ptr typesetter, BookTypesetter::Style* body_style,
AddJournalEntry (BookTypesetter::Ptr typesetter, BookTypesetter::Style* body_style,
BookTypesetter::Style* header_style, bool add_header) :
addEntry (typesetter, body_style),
header_style (header_style),
add_header (add_header)
AddEntry (typesetter, body_style),
mHeaderStyle (header_style),
mAddHeader (add_header)
{
}
void operator () (JournalViewModel::JournalEntry const & Entry)
void operator () (JournalViewModel::JournalEntry const & entry)
{
if (add_header)
if (mAddHeader)
{
typesetter->write (header_style, Entry.timestamp ());
typesetter->lineBreak ();
mTypesetter->write (mHeaderStyle, entry.timestamp ());
mTypesetter->lineBreak ();
}
addEntry::operator () (Entry);
AddEntry::operator () (entry);
typesetter->sectionBreak (10);
mTypesetter->sectionBreak (10);
}
};
struct addTopicEntry : addEntry
struct AddTopicEntry : AddEntry
{
intptr_t contentId;
BookTypesetter::Style* header_style;
intptr_t mContentId;
BookTypesetter::Style* mHeaderStyle;
addTopicEntry (BookTypesetter::ptr typesetter, BookTypesetter::Style* body_style,
AddTopicEntry (BookTypesetter::Ptr typesetter, BookTypesetter::Style* body_style,
BookTypesetter::Style* header_style, intptr_t contentId) :
addEntry (typesetter, body_style), header_style (header_style), contentId (contentId)
AddEntry (typesetter, body_style), mHeaderStyle (header_style), mContentId (contentId)
{
}
void operator () (JournalViewModel::TopicEntry const & Entry)
void operator () (JournalViewModel::TopicEntry const & entry)
{
typesetter->write (body_style, Entry.source ());
typesetter->write (body_style, 0, 3);// begin
mTypesetter->write (mBodyStyle, entry.source ());
mTypesetter->write (mBodyStyle, 0, 3);// begin
addEntry::operator() (Entry);
AddEntry::operator() (entry);
typesetter->select_content (contentId);
typesetter->write (body_style, 2, 3);// end quote
mTypesetter->selectContent (mContentId);
mTypesetter->write (mBodyStyle, 2, 3);// end quote
typesetter->sectionBreak (10);
mTypesetter->sectionBreak (10);
}
};
struct addTopicName : addContent
struct AddTopicName : AddContent
{
addTopicName (BookTypesetter::ptr typesetter, BookTypesetter::Style* style) :
addContent (typesetter, style)
AddTopicName (BookTypesetter::Ptr typesetter, BookTypesetter::Style* style) :
AddContent (typesetter, style)
{
}
void operator () (JournalViewModel::utf8_span topicName)
void operator () (JournalViewModel::Utf8Span topicName)
{
typesetter->write (body_style, topicName);
typesetter->sectionBreak (10);
mTypesetter->write (mBodyStyle, topicName);
mTypesetter->sectionBreak (10);
}
};
struct addQuestName : addContent
struct AddQuestName : AddContent
{
addQuestName (BookTypesetter::ptr typesetter, BookTypesetter::Style* style) :
addContent (typesetter, style)
AddQuestName (BookTypesetter::Ptr typesetter, BookTypesetter::Style* style) :
AddContent (typesetter, style)
{
}
void operator () (JournalViewModel::utf8_span topicName)
void operator () (JournalViewModel::Utf8Span topicName)
{
typesetter->write (body_style, topicName);
typesetter->sectionBreak (10);
mTypesetter->write (mBodyStyle, topicName);
mTypesetter->sectionBreak (10);
}
};
struct addTopicLink : addContent
struct AddTopicLink : AddContent
{
addTopicLink (BookTypesetter::ptr typesetter, BookTypesetter::Style* style) :
addContent (typesetter, style)
AddTopicLink (BookTypesetter::Ptr typesetter, BookTypesetter::Style* style) :
AddContent (typesetter, style)
{
}
void operator () (JournalViewModel::topic_id topicId, JournalViewModel::utf8_span name)
void operator () (JournalViewModel::TopicId topicId, JournalViewModel::Utf8Span name)
{
BookTypesetter::Style* link = typesetter->createHotStyle (body_style, MyGUI::Colour::Black, linkHot, linkActive, topicId);
BookTypesetter::Style* link = mTypesetter->createHotStyle (mBodyStyle, MyGUI::Colour::Black, linkHot, linkActive, topicId);
typesetter->write (link, name);
typesetter->lineBreak ();
mTypesetter->write (link, name);
mTypesetter->lineBreak ();
}
};
struct addQuestLink : addContent
struct AddQuestLink : AddContent
{
addQuestLink (BookTypesetter::ptr typesetter, BookTypesetter::Style* style) :
addContent (typesetter, style)
AddQuestLink (BookTypesetter::Ptr typesetter, BookTypesetter::Style* style) :
AddContent (typesetter, style)
{
}
void operator () (JournalViewModel::quest_id id, JournalViewModel::utf8_span name)
void operator () (JournalViewModel::QuestId id, JournalViewModel::Utf8Span name)
{
BookTypesetter::Style* style = typesetter->createHotStyle (body_style, MyGUI::Colour::Black, linkHot, linkActive, id);
BookTypesetter::Style* style = mTypesetter->createHotStyle (mBodyStyle, MyGUI::Colour::Black, linkHot, linkActive, id);
typesetter->write (style, name);
typesetter->lineBreak ();
mTypesetter->write (style, name);
mTypesetter->lineBreak ();
}
};
}
typedef TypesetBook::ptr book;
typedef TypesetBook::Ptr book;
JournalBooks::JournalBooks (JournalViewModel::ptr Model) :
Model (Model)
JournalBooks::JournalBooks (JournalViewModel::Ptr model) :
mModel (model)
{
}
book JournalBooks::createEmptyJournalBook ()
{
BookTypesetter::ptr typesetter = createTypesetter ();
BookTypesetter::Ptr typesetter = createTypesetter ();
BookTypesetter::Style* header = typesetter->createStyle ("EB Garamond", MyGUI::Colour (0.60f, 0.00f, 0.00f));
BookTypesetter::Style* body = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
@ -228,51 +228,51 @@ book JournalBooks::createEmptyJournalBook ()
book JournalBooks::createJournalBook ()
{
BookTypesetter::ptr typesetter = createTypesetter ();
BookTypesetter::Ptr typesetter = createTypesetter ();
BookTypesetter::Style* header = typesetter->createStyle ("EB Garamond", MyGUI::Colour (0.60f, 0.00f, 0.00f));
BookTypesetter::Style* body = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
Model->visitJournalEntries (0, addJournalEntry (typesetter, body, header, true));
mModel->visitJournalEntries (0, AddJournalEntry (typesetter, body, header, true));
return typesetter->complete ();
}
book JournalBooks::createTopicBook (uintptr_t topicId)
{
BookTypesetter::ptr typesetter = createTypesetter ();
BookTypesetter::Ptr typesetter = createTypesetter ();
BookTypesetter::Style* header = typesetter->createStyle ("EB Garamond", MyGUI::Colour (0.60f, 0.00f, 0.00f));
BookTypesetter::Style* body = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
Model->visitTopicName (topicId, addTopicName (typesetter, header));
mModel->visitTopicName (topicId, AddTopicName (typesetter, header));
intptr_t contentId = typesetter->add_content (to_utf8_span (", \""));
intptr_t contentId = typesetter->addContent (to_utf8_span (", \""));
Model->visitTopicEntries (topicId, addTopicEntry (typesetter, body, header, contentId));
mModel->visitTopicEntries (topicId, AddTopicEntry (typesetter, body, header, contentId));
return typesetter->complete ();
}
book JournalBooks::createQuestBook (uintptr_t questId)
{
BookTypesetter::ptr typesetter = createTypesetter ();
BookTypesetter::Ptr typesetter = createTypesetter ();
BookTypesetter::Style* header = typesetter->createStyle ("EB Garamond", MyGUI::Colour (0.60f, 0.00f, 0.00f));
BookTypesetter::Style* body = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
Model->visitQuestName (questId, addQuestName (typesetter, header));
mModel->visitQuestName (questId, AddQuestName (typesetter, header));
Model->visitJournalEntries (questId, addJournalEntry (typesetter, body, header, false));
mModel->visitJournalEntries (questId, AddJournalEntry (typesetter, body, header, false));
return typesetter->complete ();
}
book JournalBooks::createTopicIndexBook ()
{
BookTypesetter::ptr typesetter = BookTypesetter::create (92, 250);
BookTypesetter::Ptr typesetter = BookTypesetter::create (92, 250);
typesetter->setSectionAlignment (BookTypesetter::alignCenter);
typesetter->setSectionAlignment (BookTypesetter::AlignCenter);
BookTypesetter::Style* body = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
@ -298,25 +298,25 @@ book JournalBooks::createTopicIndexBook ()
book JournalBooks::createTopicIndexBook (char character)
{
BookTypesetter::ptr typesetter = BookTypesetter::create (0x7FFFFFFF, 0x7FFFFFFF);
BookTypesetter::Ptr typesetter = BookTypesetter::create (0x7FFFFFFF, 0x7FFFFFFF);
BookTypesetter::Style* style = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
Model->visitTopicNamesStartingWith (character, addTopicLink (typesetter, style));
mModel->visitTopicNamesStartingWith (character, AddTopicLink (typesetter, style));
return typesetter->complete ();
}
book JournalBooks::createQuestIndexBook (bool activeOnly)
{
BookTypesetter::ptr typesetter = BookTypesetter::create (0x7FFFFFFF, 0x7FFFFFFF);
BookTypesetter::Ptr typesetter = BookTypesetter::create (0x7FFFFFFF, 0x7FFFFFFF);
BookTypesetter::Style* base = typesetter->createStyle ("EB Garamond", MyGUI::Colour::Black);
Model->visitQuestNames (activeOnly, addQuestLink (typesetter, base));
mModel->visitQuestNames (activeOnly, AddQuestLink (typesetter, base));
return typesetter->complete ();
}
BookTypesetter::ptr JournalBooks::createTypesetter ()
BookTypesetter::Ptr JournalBooks::createTypesetter ()
{
//TODO: determine page size from layout...
return BookTypesetter::create (240, 300);

@ -8,21 +8,21 @@ namespace MWGui
{
struct JournalBooks
{
typedef TypesetBook::ptr book;
JournalViewModel::ptr Model;
typedef TypesetBook::Ptr Book;
JournalViewModel::Ptr mModel;
JournalBooks (JournalViewModel::ptr Model);
JournalBooks (JournalViewModel::Ptr model);
book createEmptyJournalBook ();
book createJournalBook ();
book createTopicBook (uintptr_t topicId);
book createQuestBook (uintptr_t questId);
book createTopicIndexBook ();
book createTopicIndexBook (char character);
book createQuestIndexBook (bool showAll);
Book createEmptyJournalBook ();
Book createJournalBook ();
Book createTopicBook (uintptr_t topicId);
Book createQuestBook (uintptr_t questId);
Book createTopicIndexBook ();
Book createTopicIndexBook (char character);
Book createQuestIndexBook (bool showAll);
private:
BookTypesetter::ptr createTypesetter ();
BookTypesetter::Ptr createTypesetter ();
};
}

@ -5,7 +5,7 @@
#include "../mwbase/environment.hpp"
#include "../mwdialogue/journalentry.hpp"
//#include "MyGUI_LanguageManager.h"
#include <MyGUI_LanguageManager.h>
#include <components/misc/utf8stream.hpp>
@ -24,18 +24,18 @@ class KeywordSearch
{
public:
typedef typename string_t::const_iterator point;
typedef typename string_t::const_iterator Point;
struct Match
{
point mBeg;
point mEnd;
Point mBeg;
Point mEnd;
value_t mValue;
};
void seed (string_t Keyword, value_t Value)
void seed (string_t keyword, value_t value)
{
seed_impl (/*std::move*/ (Keyword), /*std::move*/ (Value), 0, mRoot);
seed_impl (/*std::move*/ (keyword), /*std::move*/ (value), 0, mRoot);
}
void clear ()
@ -44,9 +44,9 @@ public:
mRoot.mKeyword.clear ();
}
bool search (point Beg, point End, Match & Match)
bool search (Point beg, Point end, Match & match)
{
for (point i = Beg; i != End; ++i)
for (Point i = beg; i != end; ++i)
{
// check first character
typename Entry::childen_t::iterator candidate = mRoot.mChildren.find (std::tolower (*i, mLocale));
@ -56,9 +56,9 @@ public:
continue;
// see how far the match goes
point j = i;
Point j = i;
while ((j + 1) != End)
while ((j + 1) != end)
{
typename Entry::childen_t::iterator next = candidate->second.mChildren.find (std::tolower (*++j, mLocale));
@ -75,7 +75,7 @@ public:
// match the rest of the keyword
typename string_t::const_iterator t = candidate->second.mKeyword.begin () + (j - i);
while (j != End && t != candidate->second.mKeyword.end ())
while (j != end && t != candidate->second.mKeyword.end ())
{
if (std::tolower (*j, mLocale) != std::tolower (*t, mLocale))
break;
@ -88,9 +88,9 @@ public:
continue;
// we did it, report the good news
Match.mValue = candidate->second.mValue;
Match.mBeg = i;
Match.mEnd = j;
match.mValue = candidate->second.mValue;
match.mBeg = i;
match.mEnd = j;
return true;
}
@ -110,22 +110,22 @@ private:
childen_t mChildren;
};
void seed_impl (string_t Keyword, value_t Value, size_t Depth, Entry & Entry)
void seed_impl (string_t keyword, value_t value, size_t depth, Entry & entry)
{
int ch = tolower (Keyword.at (Depth), mLocale);
int ch = tolower (keyword.at (depth), mLocale);
typename Entry::childen_t::iterator j = Entry.mChildren.find (ch);
typename Entry::childen_t::iterator j = entry.mChildren.find (ch);
if (j == Entry.mChildren.end ())
if (j == entry.mChildren.end ())
{
Entry.mChildren [ch].mValue = /*std::move*/ (Value);
Entry.mChildren [ch].mKeyword = /*std::move*/ (Keyword);
entry.mChildren [ch].mValue = /*std::move*/ (value);
entry.mChildren [ch].mKeyword = /*std::move*/ (keyword);
}
else
{
if (j->second.mKeyword.size () > 0)
{
if (Keyword == j->second.mKeyword)
if (keyword == j->second.mKeyword)
throw std::runtime_error ("duplicate keyword inserted");
value_t pushValue = /*std::move*/ (j->second.mValue);
@ -133,13 +133,15 @@ private:
j->second.mKeyword.clear ();
if (Depth >= pushKeyword.size ())
if (depth >= pushKeyword.size ())
throw std::runtime_error ("unexpected");
seed_impl (/*std::move*/ (pushKeyword), /*std::move*/ (pushValue), Depth+1, j->second);
if (depth+1 < pushKeyword.size())
seed_impl (/*std::move*/ (pushKeyword), /*std::move*/ (pushValue), depth+1, j->second);
}
seed_impl (/*std::move*/ (Keyword), /*std::move*/ (Value), Depth+1, j->second);
if (depth+1 < keyword.size())
seed_impl (/*std::move*/ (keyword), /*std::move*/ (value), depth+1, j->second);
}
}
@ -166,15 +168,15 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
{
}
//TODO: replace this nasty BS
static utf8_span toUtf8Span (std::string const & str)
/// \todo replace this nasty BS
static Utf8Span toUtf8Span (std::string const & str)
{
if (str.size () == 0)
return utf8_span (utf8_point (NULL), utf8_point (NULL));
return Utf8Span (Utf8Point (NULL), Utf8Point (NULL));
utf8_point point = reinterpret_cast <utf8_point> (str.c_str ());
Utf8Point point = reinterpret_cast <Utf8Point> (str.c_str ());
return utf8_span (point, point + str.size ());
return Utf8Span (point, point + str.size ());
}
void load ()
@ -215,10 +217,10 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
typedef t_iterator iterator_t;
iterator_t itr;
JournalViewModelImpl const * Model;
JournalViewModelImpl const * mModel;
BaseEntry (JournalViewModelImpl const * Model, iterator_t itr) :
Model (Model), itr (itr), loaded (false)
BaseEntry (JournalViewModelImpl const * model, iterator_t itr) :
mModel (model), itr (itr), loaded (false)
{}
virtual ~BaseEntry () {}
@ -237,23 +239,23 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
}
}
utf8_span body () const
Utf8Span body () const
{
ensureLoaded ();
return toUtf8Span (utf8text);
}
void visitSpans (boost::function < void (topic_id, size_t, size_t)> visitor) const
void visitSpans (boost::function < void (TopicId, size_t, size_t)> visitor) const
{
ensureLoaded ();
Model->ensureKeyWordSearchLoaded ();
mModel->ensureKeyWordSearchLoaded ();
std::string::const_iterator i = utf8text.begin ();
keyword_search_t::Match match;
while (i != utf8text.end () && Model->mKeywordSearch.search (i, utf8text.end (), match))
while (i != utf8text.end () && mModel->mKeywordSearch.search (i, utf8text.end (), match))
{
if (i != match.mBeg)
visitor (0, i - utf8text.begin (), match.mBeg - utf8text.begin ());
@ -269,7 +271,7 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
};
void visitQuestNames (bool active_only, boost::function <void (quest_id, utf8_span)> visitor) const
void visitQuestNames (bool active_only, boost::function <void (QuestId, Utf8Span)> visitor) const
{
MWBase::Journal * journal = MWBase::Environment::get ().getJournal ();
@ -278,11 +280,11 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
if (active_only && i->second.isFinished ())
continue;
visitor (reinterpret_cast <quest_id> (&i->second), toUtf8Span (i->first));
visitor (reinterpret_cast <QuestId> (&i->second), toUtf8Span (i->first));
}
}
void visitQuestName (quest_id questId, boost::function <void (utf8_span)> visitor) const
void visitQuestName (QuestId questId, boost::function <void (Utf8Span)> visitor) const
{
MWDialogue::Quest const * quest = reinterpret_cast <MWDialogue::Quest const *> (questId);
@ -307,7 +309,7 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
return itr->getText(MWBase::Environment::get().getWorld()->getStore());
}
utf8_span timestamp () const
Utf8Span timestamp () const
{
if (timestamp_buffer.empty ())
{
@ -317,7 +319,8 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
injectMonthName (os, itr->mMonth);
os << " (Day " << (itr->mDay + 1) << ')';
const std::string& dayStr = MyGUI::LanguageManager::getInstance().replaceTags("#{sDay}");
os << " (" << dayStr << " " << (itr->mDay + 1) << ')';
timestamp_buffer = os.str ();
}
@ -326,7 +329,7 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
}
};
void visitJournalEntries (quest_id questId, boost::function <void (JournalEntry const &)> visitor) const
void visitJournalEntries (QuestId questId, boost::function <void (JournalEntry const &)> visitor) const
{
MWBase::Journal * journal = MWBase::Environment::get().getJournal();
@ -350,19 +353,19 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
}
}
void visitTopics (boost::function <void (topic_id, utf8_span)> visitor) const
void visitTopics (boost::function <void (TopicId, Utf8Span)> visitor) const
{
throw std::runtime_error ("not implemented");
}
void visitTopicName (topic_id topicId, boost::function <void (utf8_span)> visitor) const
void visitTopicName (TopicId topicId, boost::function <void (Utf8Span)> visitor) const
{
MWDialogue::Topic const & Topic = * reinterpret_cast <MWDialogue::Topic const *> (topicId);
MWDialogue::Topic const & topic = * reinterpret_cast <MWDialogue::Topic const *> (topicId);
visitor (toUtf8Span (Topic.getName ()));
visitor (toUtf8Span (topic.getName ()));
}
void visitTopicNamesStartingWith (int character, boost::function < void (topic_id , utf8_span) > visitor) const
void visitTopicNamesStartingWith (char character, boost::function < void (TopicId , Utf8Span) > visitor) const
{
MWBase::Journal * journal = MWBase::Environment::get().getJournal();
@ -371,28 +374,29 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
if (i->first [0] != std::tolower (character, mLocale))
continue;
visitor (topic_id (&i->second), toUtf8Span (i->first));
visitor (TopicId (&i->second), toUtf8Span (i->first));
}
}
struct TopicEntryImpl : BaseEntry <MWDialogue::Topic::TEntryIter, TopicEntry>
{
MWDialogue::Topic const & Topic;
MWDialogue::Topic const & mTopic;
mutable std::string source_buffer;
TopicEntryImpl (JournalViewModelImpl const * Model, MWDialogue::Topic const & Topic, iterator_t itr) :
BaseEntry (Model, itr), Topic (Topic)
TopicEntryImpl (JournalViewModelImpl const * model, MWDialogue::Topic const & topic, iterator_t itr) :
BaseEntry (model, itr), mTopic (topic)
{}
std::string getText () const
{
return Topic.getEntry (*itr).getText(MWBase::Environment::get().getWorld()->getStore());
/// \todo defines are not replaced (%PCName etc). should probably be done elsewhere though since we need the actor
return mTopic.getEntry (*itr).getText(MWBase::Environment::get().getWorld()->getStore());
}
utf8_span source () const
Utf8Span source () const
{
if (source_buffer.empty ())
source_buffer = "someone";
@ -401,72 +405,50 @@ struct MWGui::JournalViewModelImpl : JournalViewModel
};
void visitTopicEntries (topic_id topicId, boost::function <void (TopicEntry const &)> visitor) const
void visitTopicEntries (TopicId topicId, boost::function <void (TopicEntry const &)> visitor) const
{
typedef MWDialogue::Topic::TEntryIter iterator_t;
MWDialogue::Topic const & Topic = * reinterpret_cast <MWDialogue::Topic const *> (topicId);
MWDialogue::Topic const & topic = * reinterpret_cast <MWDialogue::Topic const *> (topicId);
for (iterator_t i = Topic.begin (); i != Topic.end (); ++i)
visitor (TopicEntryImpl (this, Topic, i));
for (iterator_t i = topic.begin (); i != topic.end (); ++i)
visitor (TopicEntryImpl (this, topic, i));
}
};
static void injectMonthName (std::ostream & os, int month)
{
#ifndef MYGUI_SIGNLETON_FIXED_FOR_MSVC
static char const * month_names [] =
{
"Morning Star",
"Sun's Dawn",
"First Seed",
"Rain's Hand",
"Second Seed",
"Midyear",
"Sun's Height",
"Last Seed",
"Hearthfire",
"Frostfall",
"Sun's Dusk",
"Evening Star",
};
if (month >= 0 && month <= 11)
os << month_names [month ];
else
os << month ;
#else
auto lm = MyGUI::LanguageManager::getInstance();
MyGUI::LanguageManager& lm = MyGUI::LanguageManager::getInstance();
if (month == 0)
os << lm.getTag ("sMonthMorningstar");
os << lm.replaceTags ("#{sMonthMorningstar}");
else if (month == 1)
os << lm.getTag ("sMonthSunsdawn");
os << lm.replaceTags ("#{sMonthSunsdawn}");
else if (month == 2)
os << lm.getTag ("sMonthFirstseed");
os << lm.replaceTags ("#{sMonthFirstseed}");
else if (month == 3)
os << lm.getTag ("sMonthRainshand");
os << lm.replaceTags ("#{sMonthRainshand}");
else if (month == 4)
os << lm.getTag ("sMonthSecondseed");
os << lm.replaceTags ("#{sMonthSecondseed}");
else if (month == 5)
os << lm.getTag ("sMonthMidyear");
os << lm.replaceTags ("#{sMonthMidyear}");
else if (month == 6)
os << lm.getTag ("sMonthSunsheight");
os << lm.replaceTags ("#{sMonthSunsheight}");
else if (month == 7)
os << lm.getTag ("sMonthLastseed");
os << lm.replaceTags ("#{sMonthLastseed}");
else if (month == 8)
os << lm.getTag ("sMonthHeartfire");
os << lm.replaceTags ("#{sMonthHeartfire}");
else if (month == 9)
os << lm.getTag ("sMonthFrostfall");
os << lm.replaceTags ("#{sMonthFrostfall}");
else if (month == 10)
os << lm.getTag ("sMonthSunsdusk");
os << lm.replaceTags ("#{sMonthSunsdusk}");
else if (month == 11)
os << lm.getTag ("sMonthEveningstar");
os << lm.replaceTags ("#{sMonthEveningstar}");
else
os << month;
#endif
}
JournalViewModel::ptr JournalViewModel::create ()
JournalViewModel::Ptr JournalViewModel::create ()
{
return boost::make_shared <JournalViewModelImpl> ();
}

@ -13,17 +13,17 @@ namespace MWGui
/// View-Model for the journal GUI
///
/// This interface defines an abstract data model suited
// specifically to the needs of the journal GUI. It isolates
/// specifically to the needs of the journal GUI. It isolates
/// the journal GUI from the implementation details of the
/// game data store.
struct JournalViewModel
{
typedef boost::shared_ptr <JournalViewModel> ptr;
typedef boost::shared_ptr <JournalViewModel> Ptr;
typedef intptr_t quest_id;
typedef intptr_t topic_id;
typedef uint8_t const * utf8_point;
typedef std::pair <utf8_point, utf8_point> utf8_span;
typedef intptr_t QuestId;
typedef intptr_t TopicId;
typedef uint8_t const * Utf8Point;
typedef std::pair <Utf8Point, Utf8Point> Utf8Span;
/// The base interface for both journal entries and topics.
struct Entry
@ -33,12 +33,12 @@ namespace MWGui
/// This function returns a borrowed reference to the body of the
/// journal entry. The returned reference becomes invalid when the
/// entry is destroyed.
virtual utf8_span body () const = 0;
virtual Utf8Span body () const = 0;
/// Visits each subset of text in the body, delivering the beginning
/// and end of the span relative to the body, and a valid topic ID if
/// the span represents a keyword, or zero if not.
virtual void visitSpans (boost::function <void (topic_id, size_t, size_t)> visitor) const = 0;
virtual void visitSpans (boost::function <void (TopicId, size_t, size_t)> visitor) const = 0;
};
/// An interface to topic data.
@ -46,7 +46,7 @@ namespace MWGui
{
/// Returns a pre-formatted span of UTF8 encoded text representing
/// the name of the NPC this portion of dialog was heard from.
virtual utf8_span source () const = 0;
virtual Utf8Span source () const = 0;
};
/// An interface to journal data.
@ -54,7 +54,7 @@ namespace MWGui
{
/// Returns a pre-formatted span of UTF8 encoded text representing
/// the in-game date this entry was added to the journal.
virtual utf8_span timestamp () const = 0;
virtual Utf8Span timestamp () const = 0;
};
@ -68,25 +68,25 @@ namespace MWGui
virtual bool isEmpty () const = 0;
/// provides access to the name of the quest with the specified identifier
virtual void visitQuestName (topic_id topicId, boost::function <void (utf8_span)> visitor) const = 0;
virtual void visitQuestName (TopicId topicId, boost::function <void (Utf8Span)> visitor) const = 0;
/// walks the active and optionally completed, quests providing the quest id and name
virtual void visitQuestNames (bool active_only, boost::function <void (quest_id, utf8_span)> visitor) const = 0;
virtual void visitQuestNames (bool active_only, boost::function <void (QuestId, Utf8Span)> visitor) const = 0;
/// walks over the journal entries related to the specified quest identified by its id
virtual void visitJournalEntries (quest_id questId, boost::function <void (JournalEntry const &)> visitor) const = 0;
virtual void visitJournalEntries (QuestId questId, boost::function <void (JournalEntry const &)> visitor) const = 0;
/// provides the name of the topic specified by its id
virtual void visitTopicName (topic_id topicId, boost::function <void (utf8_span)> visitor) const = 0;
virtual void visitTopicName (TopicId topicId, boost::function <void (Utf8Span)> visitor) const = 0;
/// walks over the topics whose names start with the specified character providing the topics id and name
virtual void visitTopicNamesStartingWith (int character, boost::function < void (topic_id , utf8_span) > visitor) const = 0;
virtual void visitTopicNamesStartingWith (char character, boost::function < void (TopicId , Utf8Span) > visitor) const = 0;
/// walks over the topic entries for the topic specified by its identifier
virtual void visitTopicEntries (topic_id topicId, boost::function <void (TopicEntry const &)> visitor) const = 0;
virtual void visitTopicEntries (TopicId topicId, boost::function <void (TopicEntry const &)> visitor) const = 0;
// create an instance of the default journal view model implementation
static ptr create ();
static Ptr create ();
};
}

@ -51,21 +51,21 @@ namespace
{
struct DisplayState
{
int mPage;
book mBook;
unsigned int mPage;
Book mBook;
};
typedef std::stack <DisplayState> display_state_stack;
typedef std::stack <DisplayState> DisplayStateStack;
display_state_stack mStates;
book mTopicIndexBook;
DisplayStateStack mStates;
Book mTopicIndexBook;
bool mQuestMode;
bool mAllQuests;
template <typename widget_type>
widget_type * getWidget (char const * name)
template <typename T>
T * getWidget (char const * name)
{
widget_type * widget;
T * widget;
WindowBase::getWidget (widget, name);
return widget;
}
@ -94,7 +94,7 @@ namespace
return getWidget <MWGui::BookPage> (name);
}
JournalWindowImpl (JournalViewModel::ptr Model)
JournalWindowImpl (JournalViewModel::Ptr Model)
: WindowBase("openmw_journal.layout"), JournalBooks (Model)
{
mMainWidget->setVisible(false);
@ -114,7 +114,7 @@ namespace
adviseButtonClick (ShowActiveBTN, &JournalWindowImpl::notifyShowActive);
{
BookPage::click_callback callback;
BookPage::ClickCallback callback;
callback = boost::bind (&JournalWindowImpl::notifyTopicClicked, this, _1);
@ -124,7 +124,7 @@ namespace
}
{
BookPage::click_callback callback;
BookPage::ClickCallback callback;
callback = boost::bind (&JournalWindowImpl::notifyIndexLinkClicked, this, _1);
@ -133,7 +133,7 @@ namespace
}
{
BookPage::click_callback callback;
BookPage::ClickCallback callback;
callback = boost::bind (&JournalWindowImpl::notifyQuestClicked, this, _1);
@ -146,14 +146,14 @@ namespace
void open()
{
Model->load ();
mModel->load ();
setBookMode ();
MWBase::Environment::get().getSoundManager()->playSound ("book open", 1.0, 1.0);
book journalBook;
if (Model->isEmpty ())
Book journalBook;
if (mModel->isEmpty ())
journalBook = createEmptyJournalBook ();
else
journalBook = createJournalBook ();
@ -163,10 +163,10 @@ namespace
void close()
{
Model->unload ();
mModel->unload ();
getPage (LeftBookPage)->showPage (book (), 0);
getPage (RightBookPage)->showPage (book (), 0);
getPage (LeftBookPage)->showPage (Book (), 0);
getPage (RightBookPage)->showPage (Book (), 0);
while (!mStates.empty ())
mStates.pop ();
@ -209,24 +209,24 @@ namespace
//TODO: figure out how to make "options" page overlay book page
// correctly, so that text may show underneath
getPage (RightBookPage)->showPage (book (), 0);
getPage (RightBookPage)->showPage (Book (), 0);
}
void pushBook (book Book, int Page)
void pushBook (Book book, unsigned int page)
{
DisplayState bs;
bs.mPage = Page;
bs.mBook = Book;
bs.mPage = page;
bs.mBook = book;
mStates.push (bs);
updateShowingPages ();
updateCloseJournalButton ();
}
void replaceBook (book Book, int Page)
void replaceBook (Book book, unsigned int page)
{
assert (!mStates.empty ());
mStates.top ().mBook = Book;
mStates.top ().mPage = Page;
mStates.top ().mBook = book;
mStates.top ().mPage = page;
updateShowingPages ();
}
@ -245,38 +245,38 @@ namespace
void updateShowingPages ()
{
book Book;
int Page;
int relPages;
Book book;
unsigned int page;
unsigned int relPages;
if (!mStates.empty ())
{
Book = mStates.top ().mBook;
Page = mStates.top ().mPage;
relPages = Book->pageCount () - Page;
book = mStates.top ().mBook;
page = mStates.top ().mPage;
relPages = book->pageCount () - page;
}
else
{
Page = 0;
page = 0;
relPages = 0;
}
setVisible (PrevPageBTN, Page > 0);
setVisible (PrevPageBTN, page > 0);
setVisible (NextPageBTN, relPages > 2);
setVisible (PageOneNum, relPages > 0);
setVisible (PageTwoNum, relPages > 1);
getPage (LeftBookPage)->showPage ((relPages > 0) ? Book : book (), Page+0);
getPage (RightBookPage)->showPage ((relPages > 0) ? Book : book (), Page+1);
getPage (LeftBookPage)->showPage ((relPages > 0) ? book : Book (), page+0);
getPage (RightBookPage)->showPage ((relPages > 0) ? book : Book (), page+1);
setText (PageOneNum, Page + 1);
setText (PageTwoNum, Page + 2);
setText (PageOneNum, page + 1);
setText (PageTwoNum, page + 2);
}
void notifyTopicClicked (intptr_t linkId)
{
book topicBook = createTopicBook (linkId);
Book topicBook = createTopicBook (linkId);
if (mStates.size () > 1)
replaceBook (topicBook, 0);
@ -290,12 +290,12 @@ namespace
void notifyQuestClicked (intptr_t questId)
{
book Book = createQuestBook (questId);
Book book = createQuestBook (questId);
if (mStates.size () > 1)
replaceBook (Book, 0);
replaceBook (book, 0);
else
pushBook (Book, 0);
pushBook (book, 0);
setVisible (OptionsOverlay, false);
setVisible (OptionsBTN, true);
@ -319,16 +319,16 @@ namespace
popBook ();
}
void showList (char const * ListId, char const * PageId, book book)
void showList (char const * listId, char const * pageId, Book book)
{
std::pair <int, int> size = book->getSize ();
getPage (PageId)->showPage (book, 0);
getPage (pageId)->showPage (book, 0);
getWidget <ScrollView> (ListId)->setCanvasSize (size.first, size.second);
getWidget <ScrollView> (listId)->setCanvasSize (size.first, size.second);
}
void notifyIndexLinkClicked (TypesetBook::interactive_id character)
void notifyIndexLinkClicked (TypesetBook::InteractiveId character)
{
setVisible (LeftTopicIndex, false);
setVisible (RightTopicIndex, false);
@ -392,12 +392,12 @@ namespace
{
if (!mStates.empty ())
{
int & Page = mStates.top ().mPage;
book Book = mStates.top ().mBook;
unsigned int & page = mStates.top ().mPage;
Book book = mStates.top ().mBook;
if (Page < Book->pageCount () - 2)
if (page < book->pageCount () - 2)
{
Page += 2;
page += 2;
updateShowingPages ();
}
}
@ -407,11 +407,11 @@ namespace
{
if (!mStates.empty ())
{
int & Page = mStates.top ().mPage;
unsigned int & page = mStates.top ().mPage;
if(Page > 0)
if(page > 0)
{
Page -= 2;
page -= 2;
updateShowingPages ();
}
}
@ -420,7 +420,7 @@ namespace
}
// glue the implementation to the interface
JournalWindow * MWGui::JournalWindow::create (JournalViewModel::ptr Model)
JournalWindow * MWGui::JournalWindow::create (JournalViewModel::Ptr Model)
{
return new JournalWindowImpl (Model);
}

@ -3,22 +3,22 @@
#include <boost/tuple/tuple.hpp>
class utf8_stream
class Utf8Stream
{
public:
typedef uint32_t unicode_char;
typedef unsigned char const * point;
typedef uint32_t UnicodeChar;
typedef unsigned char const * Point;
//static const unicode_char sBadChar = 0xFFFFFFFF; gcc can't handle this
static unicode_char sBadChar () { return unicode_char (0xFFFFFFFF); }
static UnicodeChar sBadChar () { return UnicodeChar (0xFFFFFFFF); }
utf8_stream (point begin, point end) :
Utf8Stream (Point begin, Point end) :
cur (begin), nxt (begin), end (end)
{
}
utf8_stream (std::pair <point, point> range) :
Utf8Stream (std::pair <Point, Point> range) :
cur (range.first), nxt (range.first), end (range.second)
{
}
@ -28,19 +28,19 @@ public:
return cur == end;
}
point current () const
Point current () const
{
return cur;
}
unicode_char peek ()
UnicodeChar peek ()
{
if (cur == nxt)
next ();
return val;
}
unicode_char consume ()
UnicodeChar consume ()
{
if (cur == nxt)
next ();
@ -48,24 +48,24 @@ public:
return val;
}
static std::pair <unicode_char, point> decode (point cur, point end)
static std::pair <UnicodeChar, Point> decode (Point cur, Point end)
{
if ((*cur & 0x80) == 0)
{
unicode_char chr = *cur++;
UnicodeChar chr = *cur++;
return std::make_pair (chr, cur);
}
int octets;
unicode_char chr;
UnicodeChar chr;
boost::tie (octets, chr) = octet_count (*cur++);
if (octets > 5)
return std::make_pair (sBadChar(), cur);
point eoc = cur + octets;
Point eoc = cur + octets;
if (eoc > end)
return std::make_pair (sBadChar(), cur);
@ -75,7 +75,7 @@ public:
if ((*cur & 0xC0) != 0x80) // check continuation mark
return std::make_pair (sBadChar(), cur);;
chr = (chr << 6) | unicode_char ((*cur++) & 0x3F);
chr = (chr << 6) | UnicodeChar ((*cur++) & 0x3F);
}
return std::make_pair (chr, cur);
@ -83,7 +83,7 @@ public:
private:
static std::pair <int, unicode_char> octet_count (unsigned char octet)
static std::pair <int, UnicodeChar> octet_count (unsigned char octet)
{
int octets;
@ -107,10 +107,10 @@ private:
boost::tie (val, nxt) = decode (nxt, end);
}
point cur;
point nxt;
point end;
unicode_char val;
Point cur;
Point nxt;
Point end;
UnicodeChar val;
};
#endif

Loading…
Cancel
Save