The patch adds two "Go" button in the "CC debug info" dialog, so that user can click on the buttons to go to the token's declaration or definition position.
The bad thing is that the dialog is model, not non-model.
Another question is: Is the file location "src/wxsmith/CCDebugInfo.wxs" correct? Why not inside the "src/plugins/codecompletion/wxSmith"?
e8fe6b92f149af5e7b206a3f4a61a1b0cbce40f6
src/plugins/codecompletion/parser/ccdebuginfo.cpp | 66 ++++++++++++++++++++++-
src/plugins/codecompletion/parser/ccdebuginfo.h | 6 +++
src/wxsmith/CCDebugInfo.wxs | 40 +++++++++++---
3 files changed, 104 insertions(+), 8 deletions(-)
diff --git a/src/plugins/codecompletion/parser/ccdebuginfo.cpp b/src/plugins/codecompletion/parser/ccdebuginfo.cpp
index 42779f2..6454790 100644
--- a/src/plugins/codecompletion/parser/ccdebuginfo.cpp
+++ b/src/plugins/codecompletion/parser/ccdebuginfo.cpp
@@ -115,7 +115,9 @@ const long CCDebugInfo::ID_BUTTON3 = wxNewId();
const long CCDebugInfo::ID_COMBOBOX1 = wxNewId();
const long CCDebugInfo::ID_BUTTON2 = wxNewId();
const long CCDebugInfo::ID_STATICTEXT26 = wxNewId();
+const long CCDebugInfo::ID_BUTTON7 = wxNewId();
const long CCDebugInfo::ID_STATICTEXT28 = wxNewId();
+const long CCDebugInfo::ID_BUTTON8 = wxNewId();
const long CCDebugInfo::ID_STATICTEXT35 = wxNewId();
const long CCDebugInfo::ID_PANEL1 = wxNewId();
const long CCDebugInfo::ID_LISTBOX1 = wxNewId();
@@ -149,6 +151,7 @@ CCDebugInfo::CCDebugInfo(wxWindow* parent, ParserBase* parser, Token* token) :
wxBoxSizer* BoxSizer7;
wxStaticText* lblName;
wxBoxSizer* BoxSizer8;
+ wxButton* btnGoImpl;
wxStaticText* lblIsConst;
wxStaticText* lblTemplateArg;
wxButton* btnGoAsc;
@@ -160,6 +163,7 @@ CCDebugInfo::CCDebugInfo(wxWindow* parent, ParserBase* parser, Token* token) :
wxButton* btnGoParent;
wxPanel* Panel1;
wxBoxSizer* BoxSizer2;
+ wxButton* btnGoDecl;
wxPanel* Panel3;
wxStaticLine* StaticLine2;
wxStaticText* lblNameSpace;
@@ -294,12 +298,20 @@ CCDebugInfo::CCDebugInfo(wxWindow* parent, ParserBase* parser, Token* token) :
FlexGridSizer1->Add(BoxSizer5, 0, wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP, 0);
lblDeclFile = new wxStaticText(Panel1, wxID_ANY, _("Decl. filename:"), wxDefaultPosition, wxDefaultSize, 0, _T("wxID_ANY"));
FlexGridSizer1->Add(lblDeclFile, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
+ BoxSizer11 = new wxBoxSizer(wxHORIZONTAL);
txtDeclFile = new wxStaticText(Panel1, ID_STATICTEXT26, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT26"));
- FlexGridSizer1->Add(txtDeclFile, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
+ BoxSizer11->Add(txtDeclFile, 1, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
+ btnGoDecl = new wxButton(Panel1, ID_BUTTON7, _("Go"), wxDefaultPosition, wxSize(36,23), 0, wxDefaultValidator, _T("ID_BUTTON7"));
+ BoxSizer11->Add(btnGoDecl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
+ FlexGridSizer1->Add(BoxSizer11, 0, wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
lblImplfile = new wxStaticText(Panel1, wxID_ANY, _("Impl. filename:"), wxDefaultPosition, wxDefaultSize, 0, _T("wxID_ANY"));
FlexGridSizer1->Add(lblImplfile, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
+ BoxSizer12 = new wxBoxSizer(wxHORIZONTAL);
txtImplFile = new wxStaticText(Panel1, ID_STATICTEXT28, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT28"));
- FlexGridSizer1->Add(txtImplFile, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
+ BoxSizer12->Add(txtImplFile, 1, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
+ btnGoImpl = new wxButton(Panel1, ID_BUTTON8, _("Go"), wxDefaultPosition, wxSize(36,23), 0, wxDefaultValidator, _T("ID_BUTTON8"));
+ BoxSizer12->Add(btnGoImpl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
+ FlexGridSizer1->Add(BoxSizer12, 0, wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0);
lblUserData = new wxStaticText(Panel1, wxID_ANY, _("User data:"), wxDefaultPosition, wxDefaultSize, 0, _T("wxID_ANY"));
FlexGridSizer1->Add(lblUserData, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
txtUserData = new wxStaticText(Panel1, ID_STATICTEXT35, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT35"));
@@ -348,6 +360,8 @@ CCDebugInfo::CCDebugInfo(wxWindow* parent, ParserBase* parser, Token* token) :
Connect(ID_BUTTON5,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&CCDebugInfo::OnGoChildrenClick);
Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&CCDebugInfo::OnGoAscClick);
Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&CCDebugInfo::OnGoDescClick);
+ Connect(ID_BUTTON7,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&CCDebugInfo::OnGoDeclClick);
+ Connect(ID_BUTTON8,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&CCDebugInfo::OnGoImplClick);
Connect(ID_BUTTON6,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&CCDebugInfo::OnSave);
Connect(wxID_ANY,wxEVT_INIT_DIALOG,(wxObjectEventFunction)&CCDebugInfo::OnInit);
//*)
@@ -761,3 +775,51 @@ void CCDebugInfo::OnSave(cb_unused wxCommandEvent& event)
cbMessageBox(_("Invalid selection."), _("CC Debug Info"));
}
}
+
+void CCDebugInfo::OnGoDeclClick(wxCommandEvent& event)
+{
+ wxString file;
+ int line;
+
+ if (m_Token && !m_Token->GetFilename().IsEmpty())
+ {
+ file = m_Token->GetFilename();
+ line = m_Token->m_Line;
+ }
+ else
+ return;
+
+ cbEditor* ed = (cbEditor*)Manager::Get()->GetEditorManager()->IsBuiltinOpen(file);
+ if (!ed)
+ ed = Manager::Get()->GetEditorManager()->Open(file);
+
+ if (ed)
+ {
+ ed->Activate();
+ ed->GotoLine(line);
+ }
+}
+
+void CCDebugInfo::OnGoImplClick(wxCommandEvent& event)
+{
+ wxString file;
+ int line;
+
+ if (m_Token && !m_Token->GetImplFilename().IsEmpty())
+ {
+ file = m_Token->GetImplFilename();
+ line = m_Token->m_ImplLine;
+ }
+ else
+ return;
+
+ cbEditor* ed = (cbEditor*)Manager::Get()->GetEditorManager()->IsBuiltinOpen(file);
+ if (!ed)
+ ed = Manager::Get()->GetEditorManager()->Open(file);
+
+ if (ed)
+ {
+ ed->Activate();
+ ed->GotoLine(line);
+ }
+}
diff --git a/src/plugins/codecompletion/parser/ccdebuginfo.h b/src/plugins/codecompletion/parser/ccdebuginfo.h
index 810104d..2d3f460 100644
--- a/src/plugins/codecompletion/parser/ccdebuginfo.h
+++ b/src/plugins/codecompletion/parser/ccdebuginfo.h
@@ -70,7 +70,9 @@ public:
static const long ID_COMBOBOX1;
static const long ID_BUTTON2;
static const long ID_STATICTEXT26;
+ static const long ID_BUTTON7;
static const long ID_STATICTEXT28;
+ static const long ID_BUTTON8;
static const long ID_STATICTEXT35;
static const long ID_PANEL1;
static const long ID_LISTBOX1;
@@ -90,6 +92,8 @@ protected:
void OnGoParentClick(wxCommandEvent& event);
void OnGoChildrenClick(wxCommandEvent& event);
void OnSave(wxCommandEvent& event);
+ void OnGoDeclClick(wxCommandEvent& event);
+ void OnGoImplClick(wxCommandEvent& event);
//*)
//(*Declarations(CCDebugInfo)
@@ -105,7 +109,9 @@ protected:
wxStaticText* txtIsNoExcept;
wxStaticText* txtImplFile;
wxStaticText* txtScope;
+ wxBoxSizer* BoxSizer11;
wxStaticText* txtID;
+ wxBoxSizer* BoxSizer12;
wxListBox* lstDirs;
wxStaticText* txtIsOp;
wxStaticText* txtDeclFile;
diff --git a/src/wxsmith/CCDebugInfo.wxs b/src/wxsmith/CCDebugInfo.wxs
index a0f3388..85fe2cd 100644
--- a/src/wxsmith/CCDebugInfo.wxs
+++ b/src/wxsmith/CCDebugInfo.wxs
@@ -349,10 +349,24 @@
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxStaticText" name="ID_STATICTEXT26" variable="txtDeclFile" member="yes">
- <label></label>
+ <object class="wxBoxSizer" variable="BoxSizer11" member="yes">
+ <object class="sizeritem">
+ <object class="wxStaticText" name="ID_STATICTEXT26" variable="txtDeclFile" member="yes">
+ <label></label>
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+ <option>1</option>
+ </object>
+ <object class="sizeritem">
+ <object class="wxButton" name="ID_BUTTON7" variable="btnGoDecl" member="no">
+ <label>Go</label>
+ <size>36,23</size>
+ <handler function="OnGoDeclClick" entry="EVT_BUTTON" />
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+ </object>
</object>
- <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
</object>
<object class="sizeritem">
<object class="wxStaticText" name="wxID_ANY" variable="lblImplfile" member="no">
@@ -361,10 +375,24 @@
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxStaticText" name="ID_STATICTEXT28" variable="txtImplFile" member="yes">
- <label></label>
+ <object class="wxBoxSizer" variable="BoxSizer12" member="yes">
+ <object class="sizeritem">
+ <object class="wxStaticText" name="ID_STATICTEXT28" variable="txtImplFile" member="yes">
+ <label></label>
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+ <option>1</option>
+ </object>
+ <object class="sizeritem">
+ <object class="wxButton" name="ID_BUTTON8" variable="btnGoImpl" member="no">
+ <label>Go</label>
+ <size>36,23</size>
+ <handler function="OnGoImplClick" entry="EVT_BUTTON" />
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+ </object>
</object>
- <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
</object>
<object class="sizeritem">
<object class="wxStaticText" name="wxID_ANY" variable="lblUserData" member="no">