summary refs log tree commit diff stats
path: root/tools/mapedit/src/mapselect_combo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mapedit/src/mapselect_combo.cpp')
-rw-r--r--tools/mapedit/src/mapselect_combo.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/tools/mapedit/src/mapselect_combo.cpp b/tools/mapedit/src/mapselect_combo.cpp new file mode 100644 index 0000000..c8315b8 --- /dev/null +++ b/tools/mapedit/src/mapselect_combo.cpp
@@ -0,0 +1,91 @@
1#include "mapselect_combo.h"
2#include "map.h"
3
4wxBEGIN_EVENT_TABLE(MapSelectComboPopup, wxTreeCtrl)
5 EVT_LEFT_UP(MapSelectComboPopup::OnMouseClick)
6wxEND_EVENT_TABLE()
7
8MapSelectComboPopup::MapSelectComboPopup(wxTreeCtrl* tree, int initial)
9{
10 mapTree = tree;
11 lastSelected = initial;
12
13 Init();
14}
15
16void MapSelectComboPopup::Init()
17{
18
19}
20
21bool MapSelectComboPopup::Create(wxWindow* parent)
22{
23 return wxTreeCtrl::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT);
24}
25
26wxWindow* MapSelectComboPopup::GetControl()
27{
28 return this;
29}
30
31wxString MapSelectComboPopup::GetStringValue() const
32{
33 return ((MapPtrCtr*) GetItemData(GetFocusedItem()))->map->getTitle();
34}
35
36void MapSelectComboPopup::OnPopup()
37{
38 DeleteAllItems();
39
40 wxTreeItemId newRoot = AddRoot("root");
41 wxTreeItemId oldRoot = mapTree->GetRootItem();
42 wxTreeItemIdValue cookie;
43 for (wxTreeItemId it = mapTree->GetFirstChild(oldRoot, cookie); it.IsOk(); it = mapTree->GetNextChild(newRoot, cookie))
44 {
45 CopyNodes(it, newRoot);
46 }
47}
48
49void MapSelectComboPopup::CopyNodes(wxTreeItemId from, wxTreeItemId to)
50{
51 MapPtrCtr* ctl1 = (MapPtrCtr*) mapTree->GetItemData(from);
52 MapPtrCtr* ctl2 = nullptr;
53 if (ctl1 != nullptr)
54 {
55 ctl2 = new MapPtrCtr(ctl1->map);
56 }
57
58 wxTreeItemId copied = mapTree->AppendItem(to, mapTree->GetItemText(from), -1, -1, ctl2);
59 if (mapTree->ItemHasChildren(from))
60 {
61 wxTreeItemIdValue cookie;
62 for (wxTreeItemId it = mapTree->GetFirstChild(from, cookie); it.IsOk(); it = mapTree->GetNextChild(from, cookie))
63 {
64 CopyNodes(it, copied);
65 }
66 }
67
68 if (ctl1->map->getID() == lastSelected)
69 {
70 SelectItem(copied);
71 }
72
73 Expand(copied);
74}
75
76void MapSelectComboPopup::OnMouseClick(wxMouseEvent&)
77{
78 lastSelected = ((MapPtrCtr*) GetItemData(GetFocusedItem()))->map->getID();
79
80 Dismiss();
81}
82
83int MapSelectComboPopup::GetSelectedMapID() const
84{
85 return lastSelected;
86}
87
88void MapSelectComboPopup::SetSelectedMapID(int id)
89{
90 lastSelected = id;
91}