forked from hoffstadt/DearPyGui
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmvContainers.h
More file actions
275 lines (245 loc) · 12.8 KB
/
Copy pathmvContainers.h
File metadata and controls
275 lines (245 loc) · 12.8 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#pragma once
#include "mvItemRegistry.h"
// check_drop_event() implements the typical contents of Dear ImGui's drop target
// (ImGui::BeginDragDropTarget()) tied to DearPyGui's drop callback. You usually
// don't need to call it directly, but it can be used need to implement custom
// drag'n'drop mechanics.
// To implement drag'n'drop in an arbitrary ImGui item, use `apply_drag_drop()` -
// it both implements the entire drop target and renders the drag payload.
void check_drop_event(mvAppItem* item);
// During drag'n'drop, renders drag payload and checks whether it's time to call
// the drop callback.
void apply_drag_drop(mvAppItem* item);
void apply_drag_drop_nodraw(mvAppItem* item);
struct mvChildWindowConfig;
struct mvTreeNodeConfig;
struct mvGroupConfig;
struct mvDragPayloadConfig;
struct mvCollapsingHeaderConfig;
struct mvTabBarConfig;
struct mvWindowAppItemConfig;
struct mvMenuConfig;
struct mvTabConfig;
namespace DearPyGui
{
// specific part of `get_item_configuration(...)`
void fill_configuration_dict(const mvMenuConfig& inConfig, PyObject* outDict, mvAppItem& item);
void fill_configuration_dict(const mvTabConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvChildWindowConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvGroupConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvDragPayloadConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvTreeNodeConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvTabBarConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvCollapsingHeaderConfig& inConfig, PyObject* outDict);
void fill_configuration_dict(const mvWindowAppItemConfig& inConfig, PyObject* outDict);
// specific part of `configure_item(...)`
void set_configuration(PyObject* inDict, mvMenuConfig& outConfig, mvAppItem& item);
void set_configuration(PyObject* inDict, mvTabConfig& outConfig);
void set_configuration(PyObject* inDict, mvChildWindowConfig& outConfig);
void set_configuration(PyObject* inDict, mvGroupConfig& outConfig);
void set_configuration(PyObject* inDict, mvDragPayloadConfig& outConfig);
void set_configuration(PyObject* inDict, mvTreeNodeConfig& outConfig);
void set_configuration(PyObject* inDict, mvTabBarConfig& outConfig);
void set_configuration(PyObject* inDict, mvCollapsingHeaderConfig& outConfig);
void set_configuration(PyObject* inDict, mvAppItem& item, mvWindowAppItemConfig& outConfig);
// positional args TODO: combine with above
//void set_required_configuration(PyObject* inDict, mvMenuConfig& outConfig);
// positional args TODO: combine with above
//void set_positional_configuration(PyObject* inDict, mvMenuConfig& outConfig);
// data source handling
void set_data_source(mvAppItem& item, mvUUID dataSource, mvMenuConfig& outConfig);
void set_data_source(mvAppItem& item, mvUUID dataSource, mvTabConfig& outConfig);
void set_data_source(mvAppItem& item, mvUUID dataSource, mvTreeNodeConfig& outConfig);
void set_data_source(mvAppItem& item, mvUUID dataSource, mvTabBarConfig& outConfig);
void set_data_source(mvAppItem& item, mvUUID dataSource, mvCollapsingHeaderConfig& outConfig);
// draw commands
void draw_menu(ImDrawList* drawlist, mvAppItem& item, mvMenuConfig& config);
void draw_tab(ImDrawList* drawlist, mvAppItem& item, mvTabConfig& config);
void draw_child_window(ImDrawList* drawlist, mvAppItem& item, mvChildWindowConfig& config);
void draw_group(ImDrawList* drawlist, mvAppItem& item, mvGroupConfig& config);
void draw_drag_payload(ImDrawList* drawlist, mvAppItem& item, mvDragPayloadConfig& config);
void draw_tree_node(ImDrawList* drawlist, mvAppItem& item, mvTreeNodeConfig& config);
void draw_tab_bar(ImDrawList* drawlist, mvAppItem& item, mvTabBarConfig& config);
void draw_collapsing_header(ImDrawList* drawlist, mvAppItem& item, mvCollapsingHeaderConfig& config);
void draw_window(ImDrawList* drawlist, mvAppItem& item, mvWindowAppItemConfig& config);
}
struct mvMenuConfig
{
std::shared_ptr<bool> value = std::make_shared<bool>(false);
bool _disabled_value = false;
};
struct mvTabConfig
{
std::shared_ptr<bool> value = std::make_shared<bool>(false);
bool closable = false;
bool _disabled_value = false;
ImGuiTabItemFlags _flags = ImGuiTabItemFlags_None;
};
enum class TabOrdering {
mvTabOrder_Reorderable = 0L,
mvTabOrder_Fixed,
mvTabOrder_Leading,
mvTabOrder_Trailing
};
struct mvChildWindowConfig
{
ImGuiChildFlags childFlags = ImGuiChildFlags_Borders|ImGuiChildFlags_NavFlattened;
bool autosize_x = false;
bool autosize_y = false;
ImGuiWindowFlags windowflags = ImGuiWindowFlags_NoSavedSettings;
};
struct mvTreeNodeConfig
{
std::shared_ptr<bool> value = std::make_shared<bool>(false);
bool disabled_value = false;
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None;
bool selectable = false;
};
struct mvGroupConfig
{
bool horizontal = false;
float hspacing = -1.0f;
float xoffset = 0.0f;
};
struct mvDragPayloadConfig
{
std::string payloadType = "$$DPG_PAYLOAD";
std::shared_ptr<mvPyObject> dragData = std::make_shared<mvPyObject>(nullptr);
std::shared_ptr<mvPyObject> dropData = std::make_shared<mvPyObject>(nullptr);
};
struct mvCollapsingHeaderConfig
{
std::shared_ptr<bool> value = std::make_shared<bool>(false);
bool disabled_value = false;
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None;
bool closable = false;
};
struct mvTabBarConfig
{
std::shared_ptr<mvUUID> value = std::make_shared<mvUUID>(0);
mvUUID disabled_value = 0;
ImGuiTabBarFlags flags = ImGuiTabBarFlags_None;
mvUUID uiValue = 0; // value suggested from UI
mvUUID _lastValue = 0;
};
struct mvWindowAppItemConfig
{
ImGuiWindowFlags windowflags = ImGuiWindowFlags_None;
bool mainWindow = false;
bool resized = false;
bool modal = false;
bool popup = false;
bool no_close = false;
bool collapsed = false;
bool no_open_over_existing_popup = true;
bool copy_contents_shortcut = false;
mvPyObject on_close = nullptr;
mvVec2 min_size = { 100.0f, 100.0f };
mvVec2 max_size = { 30000.0f, 30000.0f };
bool _collapsedDirty = true;
float _oldxpos = 200;
float _oldypos = 200;
int _oldWidth = 200;
int _oldHeight = 200;
};
//-----------------------------------------------------------------------------
// Old Classes, in the process of removing OOP crap
//-----------------------------------------------------------------------------
class mvMenu : public mvAppItem
{
public:
mvMenuConfig configData{};
explicit mvMenu(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_menu(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData, *this); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict, *this); }
void setDataSource(mvUUID dataSource) override { DearPyGui::set_data_source(*this, uuid, configData);}
PyObject* getPyValue() override { return ToPyBool(*configData.value); }
void setPyValue(PyObject* value) override {*configData.value = ToBool(value);}
};
class mvTab : public mvAppItem
{
public:
mvTabConfig configData{};
explicit mvTab(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_tab(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
void setDataSource(mvUUID dataSource) override { DearPyGui::set_data_source(*this, uuid, configData); }
PyObject* getPyValue() override { return ToPyBool(*configData.value); }
void setPyValue(PyObject* value) override { *configData.value = ToBool(value); }
};
class mvChildWindow : public mvAppItem
{
public:
mvChildWindowConfig configData{};
explicit mvChildWindow(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_child_window(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
};
class mvGroup : public mvAppItem
{
public:
mvGroupConfig configData{};
explicit mvGroup(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_group(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
};
class mvDragPayload : public mvAppItem
{
public:
mvDragPayloadConfig configData{};
explicit mvDragPayload(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_drag_payload(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
};
class mvTreeNode : public mvAppItem
{
public:
mvTreeNodeConfig configData{};
explicit mvTreeNode(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_tree_node(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
void setDataSource(mvUUID dataSource) override { DearPyGui::set_data_source(*this, uuid, configData); }
PyObject* getPyValue() override { return ToPyBool(*configData.value); }
void setPyValue(PyObject* value) override { *configData.value = ToBool(value); }
};
class mvTabBar : public mvAppItem
{
public:
mvTabBarConfig configData{};
explicit mvTabBar(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_tab_bar(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
void setDataSource(mvUUID dataSource) override { DearPyGui::set_data_source(*this, uuid, configData); }
PyObject* getPyValue() override{ return PyUUIDFromItem(*configData.value); }
void setPyValue(PyObject* value) override{ *configData.value = ToUUID(value); }
mvUUID getSpecificValue() { return configData.uiValue; }
void setValue(mvUUID value) { configData.uiValue = value; }
};
class mvCollapsingHeader : public mvAppItem
{
public:
mvCollapsingHeaderConfig configData{};
explicit mvCollapsingHeader(mvUUID uuid) : mvAppItem(uuid) {}
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_collapsing_header(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
void setDataSource(mvUUID dataSource) override { DearPyGui::set_data_source(*this, uuid, configData); }
PyObject* getPyValue() override { return ToPyBool(*configData.value); }
void setPyValue(PyObject* value) override { *configData.value = ToBool(value); }
};
class mvWindowAppItem : public mvAppItem
{
public:
mvWindowAppItemConfig configData{};
explicit mvWindowAppItem(mvUUID uuid) : mvAppItem(uuid) { config.width = config.height = 500; info.dirty_size = true; }
void draw(ImDrawList* drawlist, float x, float y) override { DearPyGui::draw_window(drawlist, *this, configData); }
void handleSpecificKeywordArgs(PyObject* dict) override { DearPyGui::set_configuration(dict, *this, configData); }
void getSpecificConfiguration(PyObject* dict) override { DearPyGui::fill_configuration_dict(configData, dict); }
};