/
DeclarationTreeView.cpp
72 lines (58 loc) · 1.97 KB
/
DeclarationTreeView.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "DeclarationTreeView.h"
#include "i18n.h"
#include "ideclmanager.h"
#include "wxutil/DeclarationSourceView.h"
#include "wxutil/menu/IconTextMenuItem.h"
namespace wxutil
{
DeclarationTreeView::DeclarationTreeView(wxWindow* parent, decl::Type declType, const Columns& columns, long style) :
DeclarationTreeView(parent, declType, TreeModel::Ptr(), columns, style)
{}
DeclarationTreeView::DeclarationTreeView(wxWindow* parent, decl::Type declType, const TreeModel::Ptr& model, const Columns& columns, long style) :
ResourceTreeView(parent, model, columns, style),
_columns(columns),
_declType(declType)
{
EnableFavouriteManagement(decl::getTypeName(_declType));
}
std::string DeclarationTreeView::GetSelectedDeclName()
{
auto item = GetSelection();
if (!item.IsOk() || IsDirectorySelected())
{
return std::string();
}
TreeModel::Row row(item, *GetModel());
return row[_columns.declName];
}
void DeclarationTreeView::SetSelectedDeclName(const std::string& declName)
{
SetSelectedElement(declName, _columns.declName);
}
void DeclarationTreeView::PopulateContextMenu(wxutil::PopupMenu& popupMenu)
{
ResourceTreeView::PopulateContextMenu(popupMenu);
// Add one more item at the bottom of the popupmenu
popupMenu.addItem(
new wxutil::IconTextMenuItem(_("Show Definition"), "decl.png"),
std::bind(&DeclarationTreeView::_onShowDefinition, this),
std::bind(&DeclarationTreeView::_showDefinitionEnabled, this),
[this] { return _declType != decl::Type::None; }
);
}
void DeclarationTreeView::_onShowDefinition()
{
auto declName = GetSelectedDeclName();
auto decl = GlobalDeclarationManager().findDeclaration(_declType, declName);
if (decl)
{
auto* view = new DeclarationSourceView(decl, this);
view->ShowModal();
view->Destroy();
}
}
bool DeclarationTreeView::_showDefinitionEnabled()
{
return !IsDirectorySelected() && !GetSelectedDeclName().empty();
}
}