diff --git a/uppsrc/CodeEditor/CodeEditor.cpp b/uppsrc/CodeEditor/CodeEditor.cpp index f8aee2265..1147e33da 100644 --- a/uppsrc/CodeEditor/CodeEditor.cpp +++ b/uppsrc/CodeEditor/CodeEditor.cpp @@ -549,13 +549,18 @@ bool CodeEditor::GetWordPos(int pos, int& l, int& h) { return true; } -String CodeEditor::GetWord() +String CodeEditor::GetWord(int pos) { int l, h; - GetWordPos(cursor, l, h); + GetWordPos(pos, l, h); return Get(l, h - l); } +String CodeEditor::GetWord() +{ + return GetWord(cursor); +} + void CodeEditor::LeftDouble(Point p, dword keyflags) { int l, h; int pos = GetMousePos(p); @@ -566,6 +571,10 @@ void CodeEditor::LeftDouble(Point p, dword keyflags) { } void CodeEditor::LeftDown(Point p, dword keyflags) { + if((keyflags & K_CTRL) && WhenCtrlClick) { + WhenCtrlClick(GetMousePos(p)); + return; + } LineEdit::LeftDown(p, keyflags); WhenLeftDown(); } @@ -612,6 +621,8 @@ void CodeEditor::MouseMove(Point p, dword f) { Image CodeEditor::CursorImage(Point p, dword keyflags) { + if(WhenCtrlClick && (keyflags & K_CTRL)) + return Image::Hand(); if(tip.IsOpen()) return Image::Arrow(); return LineEdit::CursorImage(p, keyflags); diff --git a/uppsrc/CodeEditor/CodeEditor.h b/uppsrc/CodeEditor/CodeEditor.h index 9e9ae245c..8e711cbb4 100644 --- a/uppsrc/CodeEditor/CodeEditor.h +++ b/uppsrc/CodeEditor/CodeEditor.h @@ -393,6 +393,7 @@ public: Callback WhenSelection; Gate1 WhenTip; Callback WhenLeftDown; + Callback1 WhenCtrlClick; Callback WhenAnnotationMove; Callback WhenAnnotationClick; Callback WhenAnnotationRightClick; @@ -445,6 +446,7 @@ public: void MoveNextBrk(bool sel); void MovePrevBrk(bool sel); + String GetWord(int pos); String GetWord(); bool GetWordPos(int pos, int& l, int& h); diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index c194130ee..23f2558ed 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -862,13 +862,13 @@ bool IsPendif(const String& l) return l.Find("#endif") >= 0; } -void Ide::ContextGoto() +void Ide::ContextGoto0(int pos) { if(designer) return; if(!editor.assist_active) return; - int li = editor.GetCursorLine(); + int li = editor.GetLine(pos); String l = editor.GetUtf8Line(li); if(IsPif(l) || IsPelse(l)) { int lvl = 0; @@ -911,14 +911,14 @@ void Ide::ContextGoto() } return; } - q = editor.GetCursor(); + q = pos; while(iscid(editor.Ch(q - 1))) q--; String tp; Vector xp = editor.ReadBack(q); Index type; Parser parser; - int ci = editor.GetCursor(); + int ci = pos; for(;;) { int c = editor.Ch(ci); if(c == '{' && editor.Ch(ci + 1)) { @@ -937,7 +937,7 @@ void Ide::ContextGoto() if(type.GetCount() == 0) return; } - String id = editor.GetWord(); + String id = editor.GetWord(pos); if(id.GetCount() == 0) return; Vector scope; @@ -988,6 +988,16 @@ void Ide::ContextGoto() } } +void Ide::ContextGoto() +{ + ContextGoto0(editor.GetCursor()); +} + +void Ide::CtrlClick(int pos) +{ + ContextGoto0(pos); +} + void Ide::JumpToDefinition(const Array& n, int q) { String qitem = n[q].qitem; diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index c426dbce7..376631b13 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -389,7 +389,7 @@ struct AssistEditor : CodeEditor { void NewTopic(String group, String coderef); bool Esc(); - + void SerializeNavigator(Stream& s); typedef AssistEditor CLASSNAME; @@ -870,7 +870,9 @@ public: void ScanFile(); bool SwapSIf(const char *cref); void SwapS(); + void ContextGoto0(int pos); void ContextGoto(); + void CtrlClick(int pos); void ConsoleMenu(Bar& menu); diff --git a/uppsrc/ide/idewin.cpp b/uppsrc/ide/idewin.cpp index a1e316d16..938e1096b 100644 --- a/uppsrc/ide/idewin.cpp +++ b/uppsrc/ide/idewin.cpp @@ -613,6 +613,7 @@ Ide::Ide() showtime = true; editor.WhenTip = THISBACK(EditorTip); + editor.WhenCtrlClick = THISBACK(CtrlClick); } Ide::~Ide()