diff --git a/uppsrc/CppBase/CppBase.h b/uppsrc/CppBase/CppBase.h index 7a8158ad9..3c20614c5 100644 --- a/uppsrc/CppBase/CppBase.h +++ b/uppsrc/CppBase/CppBase.h @@ -64,7 +64,7 @@ struct PPMacro : Moveable { }; struct PPFile { // contains "macro extract" of file, only info about macros defined and namespaces - Time filetime; + Time filetime; Array item; Index includes; Vector keywords; diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index 11364b4cd..a4f923f66 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -32,6 +32,15 @@ Value AssistEditor::AssistItemConvert::Format(const Value& q) const return RawToValue(empty); } +void AssistEditor::SyncNavigatorPlacement() +{ + int sz = navigatorframe.GetSize(); + if(navigator_right) + navigatorframe.Right(navigatorpane, sz); + else + navigatorframe.Left(navigatorpane, sz); +} + AssistEditor::AssistEditor() { assist_convert.editor = this; @@ -50,6 +59,7 @@ AssistEditor::AssistEditor() auto_assist = auto_check = true; commentdp = false; + SyncNavigatorPlacement(); navigatorframe.Left(navigatorpane, HorzLayoutZoom(140)); navigating = false; @@ -1031,7 +1041,7 @@ void AssistEditor::SyncNavigator() Search(); SyncCursor(); } - navigatorframe.Show(navigator && theide && !theide->IsEditorMode()); + SyncNavigatorShow(); } void AssistEditor::SelectionChanged() @@ -1043,7 +1053,7 @@ void AssistEditor::SelectionChanged() void AssistEditor::SerializeNavigator(Stream& s) { - int version = 4; + int version = 5; s / version; s % navigatorframe; s % navigator; @@ -1053,5 +1063,10 @@ void AssistEditor::SerializeNavigator(Stream& s) } if(version >= 4) s % navigator_splitter; + if(version >= 5) + s % navigator_right; Navigator(navigator); + + if(s.IsLoading()) + SyncNavigatorPlacement(); } diff --git a/uppsrc/ide/Assist.h b/uppsrc/ide/Assist.h index fbe8becdc..6b80c52f7 100644 --- a/uppsrc/ide/Assist.h +++ b/uppsrc/ide/Assist.h @@ -38,6 +38,8 @@ struct Navigator { enum KindEnum { KIND_LINE = 123, KIND_NEST, KIND_FILE }; struct ScopeDisplay : Display { + Navigator *navigator; + int DoPaint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; virtual void Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const; virtual Size GetStdSize(const Value& q) const; @@ -80,6 +82,8 @@ struct Navigator { ArrayCtrl navlines; EditString search; + ScopeDisplay scope_display; + void TriggerSearch(); void NavGroup(bool local); void Search(); @@ -176,6 +180,8 @@ struct AssistEditor : CodeEditor, Navigator { String current_type; static Ptr assist_ptr; + + bool navigator_right = true; void PopUpAssist(bool auto_insert = false); @@ -249,6 +255,7 @@ struct AssistEditor : CodeEditor, Navigator { void SyncNavigatorShow(); void SyncNavigator(); void SerializeNavigator(Stream& s); + void SyncNavigatorPlacement(); Event WhenFontScroll; diff --git a/uppsrc/ide/Navigator.cpp b/uppsrc/ide/Navigator.cpp index bf857d760..747b88cfb 100644 --- a/uppsrc/ide/Navigator.cpp +++ b/uppsrc/ide/Navigator.cpp @@ -70,8 +70,9 @@ int PaintFileName(Draw& w, const Rect& r, String h, Color ink) Navigator::Navigator() : navidisplay(litem) { + scope_display.navigator = this; scope.NoHeader(); - scope.AddColumn().SetDisplay(Single()); + scope.AddColumn().SetDisplay(scope_display); scope.NoWantFocus(); scope.WhenSel = THISBACK(Scope); scope.WhenLeftDouble = THISBACK(ScopeDblClk); @@ -118,6 +119,8 @@ void Navigator::SyncCursor() navigating = false; } SyncLines(); + if(scope.IsCursor()) + scope.RefreshRow(scope.GetCursor()); } void Navigator::SyncLines() @@ -631,18 +634,29 @@ int Navigator::ScopeDisplay::DoPaint(Draw& w, const Rect& r, const Value& q, Col { w.DrawRect(r, paper); if(IsNull(q)) { - const char *txt = "All"; + const char *txt = "* "; + int x = 0; w.DrawText(r.left, r.top, txt, StdFont().Bold().Italic(), style & CURSOR ? ink : HighlightSetup::GetHlStyle(HighlightSetup::INK_KEYWORD).color); - return GetTextSize(txt, StdFont().Bold().Italic()).cx; + x += GetTextSize(txt, StdFont().Bold().Italic()).cx; + int ii = navigator->list.GetCursor(); + if(ii >= 0 && ii < navigator->litem.GetCount()) { + const NavItem& m = *navigator->litem[ii]; + String txt = m.nest; + if(IsCppCode(m.kind)) + txt << "::" << m.name; + w.DrawText(r.left + x, r.top, txt, StdFont().Bold(), ink); + x += GetTextSize(txt, StdFont().Bold()).cx; + } + return x; } String h = q; if(*h == '\xff') return PaintFileName(w, r, h, ink); else h = FormatNest(h); - w.DrawText(r.left, r.top, h, StdFont().Bold(), ink); - return GetTextSize(h, StdFont().Bold()).cx; + w.DrawText(r.left, r.top, h, StdFont(), ink); + return GetTextSize(h, StdFont()).cx; } void Navigator::ScopeDisplay::Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const diff --git a/uppsrc/ide/Setup.cpp b/uppsrc/ide/Setup.cpp index 4e483a538..ed0277bb3 100644 --- a/uppsrc/ide/Setup.cpp +++ b/uppsrc/ide/Setup.cpp @@ -473,6 +473,7 @@ void Ide::SetupFormat() { (assist.assist, editor.auto_assist) (assist.rescan, auto_rescan) (assist.check, auto_check) + (assist.navigator_right, editor.navigator_right) (ide.showtime, showtime) (ide.show_status_bar, show_status_bar) diff --git a/uppsrc/ide/ide.lay b/uppsrc/ide/ide.lay index e6472484e..127db270b 100644 --- a/uppsrc/ide/ide.lay +++ b/uppsrc/ide/ide.lay @@ -585,6 +585,7 @@ LAYOUT(SetupAssistLayout, 532, 212) ITEM(Option, mark_lines, SetLabel(t_("Mark lines with errors, warnings and changes")).LeftPosZ(4, 252).TopPosZ(104, 16)) ITEM(Option, barline, SetLabel(t_("Highlight line in the left bar")).LeftPosZ(4, 252).TopPosZ(124, 16)) ITEM(Option, qtfsel, SetLabel(t_("QTF designer edits selection")).LeftPosZ(4, 252).TopPosZ(144, 16)) + ITEM(Option, navigator_right, SetLabel(t_("Place navigator to the right")).LeftPosZ(4, 252).TopPosZ(164, 16)) ITEM(Option, header_guards, SetLabel(t_("Insert guards to new headers")).LeftPosZ(272, 252).TopPosZ(4, 16)) ITEM(Switch, insert_include, SetLabel(t_("No #include in new sources\n#include first\n#include previous")).LeftPosZ(272, 252).TopPosZ(24, 52)) END_LAYOUT diff --git a/uppsrc/ide/idefile.cpp b/uppsrc/ide/idefile.cpp index a690cf838..79956ac66 100644 --- a/uppsrc/ide/idefile.cpp +++ b/uppsrc/ide/idefile.cpp @@ -48,6 +48,7 @@ void Ide::SetupEditor() if(p != HELPNAME) p = GetActiveFilePath(); SetupEditor(f.font, f.highlight, p); + editor.SyncNavigatorPlacement(); } void Ide::FileCursor()