From 178e234cf704fa0ca0864d0450cd03360c5eaa25 Mon Sep 17 00:00:00 2001 From: rylek Date: Wed, 18 Mar 2009 01:03:40 +0000 Subject: [PATCH] External context support in RichText / RichEdit git-svn-id: svn://ultimatepp.org/upp/trunk@972 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/Callback.h | 2 +- uppsrc/Core/Other.h | 13 +++++++ uppsrc/Draw/ImageOp.h | 1 + uppsrc/Draw/MakeCache.cpp | 7 +++- uppsrc/Report/Report.cpp | 3 +- uppsrc/Report/Report.h | 2 +- uppsrc/RichEdit/Editor.cpp | 3 ++ uppsrc/RichEdit/Kbd.cpp | 2 +- uppsrc/RichEdit/Modify.cpp | 2 +- uppsrc/RichEdit/Mouse.cpp | 4 +-- uppsrc/RichEdit/RichEdit.h | 2 ++ uppsrc/RichEdit/RichEdit.iml | 1 + uppsrc/RichEdit/RichEdit.lay | 15 ++++---- uppsrc/RichEdit/Table.cpp | 58 ++++++++++++++++++++---------- uppsrc/RichText/Object.cpp | 67 ++++++++++++++++++++++++++++++----- uppsrc/RichText/ParaData.cpp | 1 + uppsrc/RichText/ParaPaint.cpp | 7 ++-- uppsrc/RichText/RichText.h | 20 ++++++++--- uppsrc/RichText/Table.h | 5 +-- uppsrc/RichText/Txt.h | 4 ++- uppsrc/RichText/TxtData.cpp | 2 ++ uppsrc/ide/Navigator.cpp | 2 +- uppsrc/ide/version.h | 2 +- 23 files changed, 173 insertions(+), 52 deletions(-) diff --git a/uppsrc/Core/Callback.h b/uppsrc/Core/Callback.h index c6f1b1e81..5cc912bd6 100644 --- a/uppsrc/Core/Callback.h +++ b/uppsrc/Core/Callback.h @@ -196,7 +196,7 @@ Callback callback2(Object *object, R (O::*method)(A, B), T1 arg1, T2 arg2) { template Callback callback2(const Object *object, R (O::*method)(A, B) const, T1 arg1, T2 arg2) { - return Callback(new CallbackMethodActionArg2 + return Callback(new CallbackMethodActionArg2 (object, method, arg1, arg2)); } diff --git a/uppsrc/Core/Other.h b/uppsrc/Core/Other.h index 985a81d3d..efaa33cd8 100644 --- a/uppsrc/Core/Other.h +++ b/uppsrc/Core/Other.h @@ -343,6 +343,8 @@ public: const T& Get(const Maker& m); + void Clear(); + void ClearCounters(); int GetFoundSize() const { return foundsize; } int GetNewSize() const { return newsize; } @@ -397,6 +399,17 @@ void LRUCache::Shrink(int maxsize) } } +template +void LRUCache::Clear() +{ + head = -1; + size = 0; + count = 0; + newsize = foundsize = 0; + key.Clear(); + data.Clear(); +} + template void LRUCache::ClearCounters() { diff --git a/uppsrc/Draw/ImageOp.h b/uppsrc/Draw/ImageOp.h index 496b869be..316298558 100644 --- a/uppsrc/Draw/ImageOp.h +++ b/uppsrc/Draw/ImageOp.h @@ -141,6 +141,7 @@ struct ImageMaker { Image MakeImage(const ImageMaker& m); Image MakeImage(const Image& image, Image (*make)(const Image& image)); +void ClearMakeImageCache(); void SetMakeImageCacheSize(int m); void SetMakeImageCacheMax(int m); diff --git a/uppsrc/Draw/MakeCache.cpp b/uppsrc/Draw/MakeCache.cpp index 5f4522ca3..50642bf00 100644 --- a/uppsrc/Draw/MakeCache.cpp +++ b/uppsrc/Draw/MakeCache.cpp @@ -17,7 +17,7 @@ struct scImageMaker : LRUCache::Maker { bool paintonly; virtual String Key() const { - String q = m->Key(); +// String q = m->Key(); return m->Key(); } virtual int Make(Image& object) const { @@ -33,6 +33,11 @@ struct scImageMaker : LRUCache::Maker { static int sMaxSize; static int sMaxSizeMax = 4000000; +void ClearMakeImageCache() +{ + sImageCache().Clear(); +} + void SetMakeImageCacheMax(int m) { sMaxSizeMax = m; diff --git a/uppsrc/Report/Report.cpp b/uppsrc/Report/Report.cpp index 753f82ff0..8063d89a8 100644 --- a/uppsrc/Report/Report.cpp +++ b/uppsrc/Report/Report.cpp @@ -148,7 +148,7 @@ Report& Report::Landscape() return *this; } -void Report::Put(const RichText& txt) +void Report::Put(const RichText& txt, void *context) { PageY py(pagei, y); PaintInfo paintinfo; @@ -156,6 +156,7 @@ void Report::Put(const RichText& txt) paintinfo.bottom = PageY(INT_MAX, INT_MAX); paintinfo.indexentry = Null; paintinfo.hyperlink = Null; + paintinfo.context = context; txt.Paint(*this, py, GetPageRect(), paintinfo); py = txt.GetHeight(py, GetPageRect()); Page(py.page); diff --git a/uppsrc/Report/Report.h b/uppsrc/Report/Report.h index 5865b021a..379f546e0 100644 --- a/uppsrc/Report/Report.h +++ b/uppsrc/Report/Report.h @@ -45,7 +45,7 @@ public: void NewPage() { Page(pagei + 1); } - void Put(const RichText& txt); + void Put(const RichText& txt, void *context = NULL); void Put(const char *qtf); Report& operator<<(const char *qtf) { Put(qtf); return *this; } diff --git a/uppsrc/RichEdit/Editor.cpp b/uppsrc/RichEdit/Editor.cpp index 3e0980051..5ed0c8753 100644 --- a/uppsrc/RichEdit/Editor.cpp +++ b/uppsrc/RichEdit/Editor.cpp @@ -112,6 +112,7 @@ void RichEdit::Paint(Draw& w) DrawFrame(w, tr.left, i * (pw.size.cy + 3) + 1 - sb, pw.size.cx + 2, pw.size.cy + 2, SColorShadow); PaintInfo pi; + pi.context = context; pi.zoom = zoom; pi.top = GetPageY(sb); pi.bottom = GetPageY(sb + sz.cy); @@ -592,6 +593,8 @@ RichEdit::RichEdit() zoom = 100; Clear(); + context = NULL; + nolinks = false; showcodes = LtBlue; diff --git a/uppsrc/RichEdit/Kbd.cpp b/uppsrc/RichEdit/Kbd.cpp index 349e3f0f8..556b7f927 100644 --- a/uppsrc/RichEdit/Kbd.cpp +++ b/uppsrc/RichEdit/Kbd.cpp @@ -83,7 +83,7 @@ bool RichEdit::Key(dword key, int count) NextUndo(); objectpos = c; RichObject o = object; - o.DefaultAction(); + o.DefaultAction(context); if(o.GetSerialId() != object.GetSerialId()) ReplaceObject(o); return true; diff --git a/uppsrc/RichEdit/Modify.cpp b/uppsrc/RichEdit/Modify.cpp index b5669e529..bae96a47f 100644 --- a/uppsrc/RichEdit/Modify.cpp +++ b/uppsrc/RichEdit/Modify.cpp @@ -277,7 +277,7 @@ void RichEdit::InsertObject(int type) RichObjectType& richtype = RichObject::GetType(type); RichObject object = RichObject(&richtype, Value()); RichObject o = object; - o.DefaultAction(); + o.DefaultAction(context); if(o.GetSerialId() != object.GetSerialId()) { RichText::FormatInfo finfo = GetFormatInfo(); RemoveSelection(); diff --git a/uppsrc/RichEdit/Mouse.cpp b/uppsrc/RichEdit/Mouse.cpp index d8d5ef2db..e9dbc1697 100644 --- a/uppsrc/RichEdit/Mouse.cpp +++ b/uppsrc/RichEdit/Mouse.cpp @@ -208,7 +208,7 @@ void RichEdit::RightDown(Point p, dword flags) object = GetObject(); if(!object) return; o = object; - o.Menu(menu); + o.Menu(menu, context); if(!menu.IsEmpty()) menu.Separator(); menu.Add(t_("Object position.."), THISBACK(AdjustObjectSize)); @@ -287,7 +287,7 @@ void RichEdit::LeftDouble(Point p, dword flags) RichObject object = GetObject(); if(!object) return; RichObject o = object; - o.DefaultAction(); + o.DefaultAction(context); if(object.GetSerialId() != o.GetSerialId()) ReplaceObject(o); } diff --git a/uppsrc/RichEdit/RichEdit.h b/uppsrc/RichEdit/RichEdit.h index 84605958c..40a40068b 100644 --- a/uppsrc/RichEdit/RichEdit.h +++ b/uppsrc/RichEdit/RichEdit.h @@ -147,6 +147,7 @@ public: private: + void *context; Size p_size; bool sizetracking; ScrollBar sb; @@ -658,6 +659,7 @@ public: RichEdit& Unit(int u) { unit = u; Refresh(); return *this; } RichEdit& SpellCheck(bool b) { spellcheck = b; Refresh(); return *this; } RichEdit& SetZoom(int z) { zoom = z; Refresh(); return *this; } + RichEdit& SetContext(void *ctx) { context = ctx; Refresh(); return *this; } struct UndoInfo { int undoserial; diff --git a/uppsrc/RichEdit/RichEdit.iml b/uppsrc/RichEdit/RichEdit.iml index 1d7531f70..8df6b69b6 100644 --- a/uppsrc/RichEdit/RichEdit.iml +++ b/uppsrc/RichEdit/RichEdit.iml @@ -1,3 +1,4 @@ +PREMULTIPLIED IMAGE_ID(RightTab) IMAGE_ID(RightTabTrack) IMAGE_ID(LeftTab) diff --git a/uppsrc/RichEdit/RichEdit.lay b/uppsrc/RichEdit/RichEdit.lay index 2324166aa..4bba3c8b9 100644 --- a/uppsrc/RichEdit/RichEdit.lay +++ b/uppsrc/RichEdit/RichEdit.lay @@ -137,7 +137,7 @@ LAYOUT(CreateTableLayout, 164, 88) ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(92, 64).TopPosZ(56, 24)) END_LAYOUT -LAYOUT(TablePropertiesLayout, 300, 168) +LAYOUT(TablePropertiesLayout, 300, 188) ITEM(Label, dv___0, SetLabel(t_("Before")).LeftPosZ(8, 60).TopPosZ(8, 19)) ITEM(UnitEdit, before, LeftPosZ(72, 68).TopPosZ(8, 19)) ITEM(Label, dv___2, SetLabel(t_("After")).LeftPosZ(160, 60).TopPosZ(8, 19)) @@ -154,11 +154,14 @@ LAYOUT(TablePropertiesLayout, 300, 168) ITEM(UnitEdit, grid, LeftPosZ(72, 68).TopPosZ(80, 19)) ITEM(Label, dv___14, SetLabel(t_("color")).LeftPosZ(160, 56).TopPosZ(80, 19)) ITEM(ColorPusher, gridcolor, LeftPosZ(224, 68).TopPosZ(80, 19)) - ITEM(Option, equalize, SetLabel(t_("Equalize")).LeftPosZ(8, 64).TopPosZ(108, 20)) - ITEM(EditString, ratios, LeftPosZ(72, 220).TopPosZ(108, 19)) - ITEM(Button, destroy, SetLabel(t_("Remove table")).LeftPosZ(8, 96).TopPosZ(136, 24)) - ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(160, 64).TopPosZ(136, 24)) - ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(228, 64).TopPosZ(136, 24)) + ITEM(Label, dv___16, SetLabel(t_("Header")).LeftPosZ(8, 60).TopPosZ(106, 19)) + ITEM(EditIntSpin, header, LeftPosZ(72, 68).TopPosZ(106, 19)) + ITEM(Option, keep, SetLabel(t_("Keep rows together")).LeftPosZ(158, 136).TopPosZ(107, 16)) + ITEM(Option, equalize, SetLabel(t_("Equalize")).LeftPosZ(8, 64).TopPosZ(130, 20)) + ITEM(EditString, ratios, LeftPosZ(72, 220).TopPosZ(130, 19)) + ITEM(Button, destroy, SetLabel(t_("Remove table")).LeftPosZ(8, 96).TopPosZ(158, 24)) + ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(160, 64).TopPosZ(158, 24)) + ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(228, 64).TopPosZ(158, 24)) END_LAYOUT LAYOUT(SplitCellLayout, 148, 92) diff --git a/uppsrc/RichEdit/Table.cpp b/uppsrc/RichEdit/Table.cpp index 8977f3f2e..4714f7652 100644 --- a/uppsrc/RichEdit/Table.cpp +++ b/uppsrc/RichEdit/Table.cpp @@ -18,7 +18,7 @@ void RichEdit::InsertTable() return; WithCreateTableLayout dlg; CtrlLayoutOKCancel(dlg, t_("Insert table")); - dlg.header = true; + dlg.header = false; dlg.columns <<= 2; dlg.columns.MinMax(1, 20); dlg.ActiveFocus(dlg.columns); @@ -111,26 +111,48 @@ void RichEdit::TableProps() Advn(r, dlg.frame.SetUnit(unit), fmt.frame); r(dlg.framecolor, fmt.framecolor); Advn(r, dlg.grid.SetUnit(unit), fmt.grid); + Advn(r, dlg.header, fmt.header); + Advn(r, dlg.keep, fmt.keep); r(dlg.gridcolor, fmt.gridcolor); - switch(dlg.Run()) { - case IDCANCEL: - return; - case IDNO: - NextUndo(); - DestroyTable(); - return; - default: - r.Retrieve(); - NextUndo(); - SaveTableFormat(cursorp.table); - if(dlg.equalize) { - Vector r = Split((String)~dlg.ratios, ':'); - for(int i = 0; i < fmt.column.GetCount(); i++) - fmt.column[i] = i < r.GetCount() ? max(atoi(r[i]), 1) : 1; + for(;;) { + switch(dlg.Run()) { + case IDCANCEL: + return; + case IDNO: + NextUndo(); + DestroyTable(); + return; + default: + r.Retrieve(); + const RichTable& tbl = text.GetConstTable(cursorp.table); + bool valid = true; + Point violator(0, 0); + int vspan = 0; + for(int rw = 0; valid && rw < fmt.header && rw < tbl.GetRows(); rw++) + for(int co = 0; valid && co < tbl.GetColumns(); co++) + if(tbl(rw, co) && (vspan = tbl[rw][co].vspan) + rw > fmt.header) { + valid = false; + violator.x = co; + violator.y = rw; + break; + } + if(!valid) { + Exclamation(NFormat(t_("Invalid header row count %d, cell at rw %d, co %d has vspan = %d."), + fmt.header, violator.y + 1, violator.x + 1, vspan)); + continue; + } + NextUndo(); + SaveTableFormat(cursorp.table); + if(dlg.equalize) { + Vector r = Split((String)~dlg.ratios, ':'); + for(int i = 0; i < fmt.column.GetCount(); i++) + fmt.column[i] = i < r.GetCount() ? max(atoi(r[i]), 1) : 1; + } + text.SetTableFormat(cursorp.table, fmt); + Finish(); + return; } - text.SetTableFormat(cursorp.table, fmt); } - Finish(); } bool RichEdit::RemoveSpecial(int ll, int hh, bool back) diff --git a/uppsrc/RichText/Object.cpp b/uppsrc/RichText/Object.cpp index 0ba066663..8355f0b8a 100644 --- a/uppsrc/RichText/Object.cpp +++ b/uppsrc/RichText/Object.cpp @@ -10,12 +10,12 @@ String RichObjectType::GetCreateName() const return Null; } -Size RichObjectType::GetDefaultSize(const Value& data, Size maxsize) const +Size RichObjectType::StdDefaultSize(const Value& data, Size maxsize, void * context) const { if(IsNull(data)) return Size(0, 0); - Size psz = GetPhysicalSize(data); + Size psz = GetPhysicalSize(data, context); if((psz.cx | psz.cy) == 0) - psz = 625 * GetPixelSize(data) / 100; + psz = 625 * GetPixelSize(data, context) / 100; Size sz; for(int i = 1; i < 10000; i++) { sz = psz / i; @@ -25,6 +25,16 @@ Size RichObjectType::GetDefaultSize(const Value& data, Size maxsize) const return sz; } +Size RichObjectType::GetDefaultSize(const Value& data, Size maxsize, void *context) const +{ + return GetDefaultSize(data, maxsize); +} + +Size RichObjectType::GetDefaultSize(const Value& data, Size maxsize) const +{ + return StdDefaultSize(data, maxsize, NULL); +} + Value RichObjectType::Read(const String& s) const { return s; @@ -55,20 +65,59 @@ String RichObjectType::GetClip(const Value& data, const String& fmt) const return Null; } +void RichObjectType::Menu(Bar& bar, RichObject& data, void *context) const +{ + Menu(bar, data); +} + void RichObjectType::Menu(Bar& bar, RichObject& data) const {} + +void RichObjectType::DefaultAction(RichObject& data, void *context) const +{ + DefaultAction(data); +} + void RichObjectType::DefaultAction(RichObject& data) const {} + +Size RichObjectType::GetPhysicalSize(const Value& data, void *context) const +{ + return GetPhysicalSize(data); +} + Size RichObjectType::GetPhysicalSize(const Value& data) const { return Size(0, 0); } + +Size RichObjectType::GetPixelSize(const Value& data, void *context) const +{ + return GetPixelSize(data); +} + Size RichObjectType::GetPixelSize(const Value& data) const { return Size(1, 1); } + +void RichObjectType::Paint(const Value& data, Draw& w, Size sz, void *context) const +{ + Paint(data, w, sz); +} + void RichObjectType::Paint(const Value& data, Draw& w, Size sz) const {} Image RichObjectType::ToImage(const Value& data, Size sz) const +{ + return ToImage(data, sz, NULL); +} + +Image RichObjectType::ToImage(const Value& data, Size sz, void *context) const { ImageDraw w(sz); - Paint(data, w, sz); + Paint(data, w, sz, context); return w; } String RichObjectType::GetLink(const Value& data, Point pt, Size sz) const +{ + return GetLink(data, pt, sz, NULL); +} + +String RichObjectType::GetLink(const Value& data, Point pt, Size sz, void *context) const { return Null; } @@ -105,10 +154,10 @@ void RichObject::Register(const char *name, RichObjectType *type) Map().FindAdd(name, type); } -void RichObject::Paint(Draw& w, Size sz) const +void RichObject::Paint(Draw& w, Size sz, void *context) const { if(type) - type->Paint(data, w, sz); + type->Paint(data, w, sz, context); else { w.DrawRect(sz, SColorFace()); DrawFrame(w, sz, SColorText()); @@ -116,13 +165,13 @@ void RichObject::Paint(Draw& w, Size sz) const } } -Image RichObject::ToImage(Size sz) const +Image RichObject::ToImage(Size sz, void *context) const { if(type) - return type->ToImage(data, sz); + return type->ToImage(data, sz, context); else { ImageDraw w(sz); - Paint(w, sz); + Paint(w, sz, context); return w; } } diff --git a/uppsrc/RichText/ParaData.cpp b/uppsrc/RichText/ParaData.cpp index 85fd90e36..bdf5d91af 100644 --- a/uppsrc/RichText/ParaData.cpp +++ b/uppsrc/RichText/ParaData.cpp @@ -17,6 +17,7 @@ PaintInfo::PaintInfo() highlight = Yellow(); indexentry = LtGreen(); coloroverride = false; + context = NULL; } String RichPara::Number::AsText(const RichPara::NumberFormat& format) const diff --git a/uppsrc/RichText/ParaPaint.cpp b/uppsrc/RichText/ParaPaint.cpp index 982f966b0..1ad1a8a0b 100644 --- a/uppsrc/RichText/ParaPaint.cpp +++ b/uppsrc/RichText/ParaPaint.cpp @@ -122,6 +122,7 @@ bool RichPara::BreaksPage(PageY py, const Lines& pl, int i, const Rect& page) co struct RichObjectImageMaker : ImageMaker { RichObject object; Size sz; + void *context; virtual String Key() const; virtual Image Make() const; @@ -134,6 +135,7 @@ String RichObjectImageMaker::Key() const b.Cat((const char *)&id, sizeof(id)); b.Cat((const char *)&sz.cx, sizeof(sz.cx)); b.Cat((const char *)&sz.cy, sizeof(sz.cy)); + b.Cat((const char *)&context, sizeof(context)); return b; } @@ -141,7 +143,7 @@ Image RichObjectImageMaker::Make() const { ImageDraw iw(sz); iw.DrawRect(sz, SColorPaper()); - object.Paint(iw, sz); + object.Paint(iw, sz, context); return iw; } @@ -247,10 +249,11 @@ void RichPara::Paint(PageDraw& pw, const Rect& page, PageY py, const PaintInfo& RichObjectImageMaker im; im.object = o; im.sz = sz; + im.context = pi.context; draw.DrawImage(0, 0, MakeImagePaintOnly(im)); } else - o.Paint(draw, sz); + o.Paint(draw, sz, pi.context); draw.End(); } i++; diff --git a/uppsrc/RichText/RichText.h b/uppsrc/RichText/RichText.h index 3958e75a9..cabd70552 100644 --- a/uppsrc/RichText/RichText.h +++ b/uppsrc/RichText/RichText.h @@ -124,6 +124,17 @@ struct RichObjectType : Moveable { virtual String GetClipFmts() const; virtual String GetClip(const Value& data, const String& fmt) const; + virtual Size GetDefaultSize(const Value& data, Size maxsize, void *context) const; + virtual Size GetPhysicalSize(const Value& data, void *context) const; + virtual Size GetPixelSize(const Value& data, void *context) const; + virtual void Paint(const Value& data, Draw& w, Size sz, void *context) const; + virtual Image ToImage(const Value& data, Size sz, void *context) const; + virtual void Menu(Bar& bar, RichObject& ex, void *context) const; + virtual void DefaultAction(RichObject& ex, void *context) const; + virtual String GetLink(const Value& data, Point pt, Size sz, void *context) const; + + Size StdDefaultSize(const Value& data, Size maxsize, void * context) const; + RichObjectType(); virtual ~RichObjectType(); }; @@ -153,8 +164,8 @@ public: void SetSize(int cx, int cy) { size = Size(cx, cy); NewSerial(); } void SetSize(Size sz) { size = sz; NewSerial(); } Size GetSize() const { return size; } - void Paint(Draw& w, Size sz) const; - Image ToImage(Size sz) const; + void Paint(Draw& w, Size sz, void *context = NULL) const; + Image ToImage(Size sz, void *context = NULL) const; Size GetPhysicalSize() const { return physical_size; } Size GetPixelSize() const { return pixel_size; } Size GetDefaultSize(Size maxsize) const { return type ? type->GetDefaultSize(data, maxsize) : physical_size; } @@ -177,8 +188,8 @@ public: void SetYDelta(int yd) { ydelta = yd; } int GetYDelta() const { return ydelta; } - void Menu(Bar& bar) { if(type) type->Menu(bar, *this); } - void DefaultAction() { if(type) type->DefaultAction(*this); } + void Menu(Bar& bar, void *context = NULL) { if(type) type->Menu(bar, *this, context); } + void DefaultAction(void *context = NULL) { if(type) type->DefaultAction(*this, context); } operator bool() const { return !IsNull(data); } @@ -239,6 +250,7 @@ struct PaintInfo { int highlightpara; Color highlight; bool coloroverride; + void *context; PaintInfo(); }; diff --git a/uppsrc/RichText/Table.h b/uppsrc/RichText/Table.h index 798c92c0d..9cb7cb943 100644 --- a/uppsrc/RichText/Table.h +++ b/uppsrc/RichText/Table.h @@ -156,14 +156,15 @@ public: int GetLength() const; int GetTableCount() const; + void RemoveRow(int rowi); + void InsertRow(int rowi, const RichStyles& style); + private: void Normalize0(); RichTable Copy(const Rect& sel) const; void Paste(Point pos, const RichTable& tab); void RemoveRow0(int rowi); - void RemoveRow(int rowi); - void InsertRow(int rowi, const RichStyles& style); void RemoveColumn0(int column); void RemoveColumn(int column); void InsertColumn(int column, const RichStyles& style); diff --git a/uppsrc/RichText/Txt.h b/uppsrc/RichText/Txt.h index 18ff293f7..e1abd3c37 100644 --- a/uppsrc/RichText/Txt.h +++ b/uppsrc/RichText/Txt.h @@ -147,7 +147,6 @@ protected: const RichTxt& GetConstText(int& pos) const; RichTable& GetTable0(int table, bool update); RichTable& GetUpdateTable(int table); - const RichTable& GetConstTable(int table) const; RichTxt& GetTableUpdateText(int table, const RichStyles& style, int& pi); void CombineFormat(FormatInfo& f, int pi, int pi2, bool& first, const RichStyles& style) const; @@ -202,7 +201,10 @@ public: const RichTable& GetTable(int i) const; int GetLength() const; + int GetTableCount() const; + const RichTable& GetConstTable(int table) const; + bool IsEmpty() const; RichCellPos GetCellPos(int table, int row, int column) const; diff --git a/uppsrc/RichText/TxtData.cpp b/uppsrc/RichText/TxtData.cpp index 224ba3896..353d439a9 100644 --- a/uppsrc/RichText/TxtData.cpp +++ b/uppsrc/RichText/TxtData.cpp @@ -309,6 +309,8 @@ void RichTxt::GetRichPos(int pos, RichPos& rp, int ti, int maxlevel, const RichS RichPara::Format RichTxt::GetFirstFormat(const RichStyles& style) const { + if(part.IsEmpty()) + return RichPara::Format(); if(IsTable(0)) { const RichTable& tab = GetTable(0); return tab[0][0].text.GetFirstFormat(style); diff --git a/uppsrc/ide/Navigator.cpp b/uppsrc/ide/Navigator.cpp index 19dadcb6a..3e8dd855f 100644 --- a/uppsrc/ide/Navigator.cpp +++ b/uppsrc/ide/Navigator.cpp @@ -97,7 +97,7 @@ void Ide::SearchCode() { if(editor.navigator != AssistEditor::NAV_BROWSER) editor.Navigator(AssistEditor::NAV_BROWSER); - if(editor.browser.IsSearch()) + if(editor.browser.search.HasFocus() && editor.browser.IsSearch()) editor.browser.ClearSearch(); else editor.browser.search.SetFocus(); diff --git a/uppsrc/ide/version.h b/uppsrc/ide/version.h index 2365c3ec9..9b56be1fb 100644 --- a/uppsrc/ide/version.h +++ b/uppsrc/ide/version.h @@ -1 +1 @@ -#define IDE_VERSION "902r181" +#define IDE_VERSION "902r182"