BT-MatML-Editor 0.1.4
Editor for the MatML 3.1 XML Schema
BT_MatML_Base_GUI.h
1
2// Name: BT_MatML_Base_GUI.h
3// Purpose: Classes of Base_GUI Base for GUI classes.
4// Author: Paul McGrath
5// Modified by:
6// Created:
7// Copyright: (c) Paul McGrath
8// Licence: CC licence
10#pragma once
11
12#include <algorithm> // std::find
13
14#include <wx/event.h>
15#include <wx/msgdlg.h>
16
17#include "matml31.hxx"
18#include "BT_MatML_MatMLTreeItemData.h"
19#include "BT_MatML_TreeCtrlSorted.h"
20#include "BT_MatML_Default.h"
21#include "BT_MatML_Utilities_GUI.h"
22
23namespace bellshire {
24
25// The following are added in the MatML_defaults already.
26// Therefore inserting new elements is not allowed. So do nothing.
27// Note: PARENT is Selected in the menu
28#define ON_PARENT_INSERT_CHILD(parent, child) \
29 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl);\
30 if (element) {\
31 MatML_Base_GUI::InsertChild<child>(element->child());\
32 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
33 }
34
35// Note: PARENT is Selected in the menu
36#define ON_PARENT_INSERT_CONT_CHILD(parent,child) \
37 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl);\
38 if (element) {\
39 MatML_Base_GUI::InsertContChild<child>(element->child());\
40 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
41 }
42
43#define ON_PARENT_STRONGTYPE_INSERT_CONT_CHILD(parent,child) \
44 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl); \
45 if (element) { \
46 MatML_Base_GUI::InsertContChild<child>((element->t)->child()); \
47 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl); \
48 }
49
50// Note: PARENT is Selected in the menu
51#define ON_PARENT_INSERT_ITER_CONT_CHILD(parent,child) \
52 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl);\
53if (element) {\
54 MatML_Base_GUI::InsertSeqContChild<child>(element->child());\
55 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
56}
57
58 // Note: PARENT is Selected in the menu
59#define ON_PARENT_STRONGTYPE_INSERT_ITER_CONT_CHILD(parent,child) \
60 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl);\
61if (element) {\
62 MatML_Base_GUI::InsertSeqContChild<child>(element->t->child());\
63 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
64}
65
66// Note: PARENT is Selected in the menu
67#define ON_PARENT_PASTE_CHILD(parent,child) \
68 parent* element = GetSelMatML< parent>(m_MatMLTreeCtrl); \
69 child* copy_element = boost::any_cast< child* >(m_MatMLItemToCopy); \
70 if (element && copy_element) {\
71 PasteChild(copy_element, element->child()); \
72 SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl); \
73 }
74
75// Note: PARENT is Selected in the menu
76#define ON_PARENT_PASTE_CONT_CHILD(parent,child) \
77 parent* element = MatML_Base_GUI::GetSelMatML< parent>(m_MatMLTreeCtrl);\
78 child* copy_element = boost::any_cast< child* >(m_MatMLItemToCopy);\
79 if (element && copy_element) {\
80 PasteContChild(copy_element, element->child());\
81 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
82 }
83
84// Note: PARENT is Selected in the menu
85#define ON_PARENT_STRONGTYPE_PASTE_CONT_CHILD(parent,child) \
86 parent* element = MatML_Base_GUI::GetSelMatML< parent>(m_MatMLTreeCtrl);\
87 child* copy_element = boost::any_cast< child* >(m_MatMLItemToCopy);\
88 if (element && copy_element) {\
89 PasteContChild(copy_element, (element->t)->child());\
90 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
91 }
92
93// Note: PARENT is Selected in the menu
94#define ON_PARENT_PASTE_ITER_CONT_CHILD(parent,child) \
95 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl);\
96 child* copy_element = boost::any_cast<child* >(m_MatMLItemToCopy);\
97 if (element && copy_element) {\
98 PasteSeqContChild(copy_element, element->child());\
99 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
100 }
101
102// Note: PARENT is Selected in the menu
103#define ON_PARENT_STRONGTYPE_PASTE_ITER_CONT_CHILD(parent,child) \
104 parent* element = MatML_Base_GUI::GetSelMatML<parent>(m_MatMLTreeCtrl);\
105 child* copy_element = boost::any_cast<child* >(m_MatMLItemToCopy);\
106 if (element && copy_element) {\
107 PasteSeqContChild(copy_element, (element->t)->child());\
108 MatML_Base_GUI::SetupSel<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
109 }
110
111// Note: CHILD is Selected in the menu
112#define ON_PARENT_DELETE_CHILD(parent,child) \
113 parent* element = MatML_Base_GUI::GetSelParentMatML<parent>(m_MatMLTreeCtrl);\
114 if (element) {\
115 MatML_Base_GUI::DeleteChild(element->child());\
116 MatML_Base_GUI::SetupSelParent<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
117 }
118
119// Note: CHILD is Selected in the menu
120#define ON_PARENT_DELETE_CONT_CHILD(parent,child) \
121 parent* element = MatML_Base_GUI::GetSelParentMatML<parent>(m_MatMLTreeCtrl);\
122 if (element) {\
123 MatML_Base_GUI::DeleteContChild(element->child());\
124 MatML_Base_GUI::SetupSelParent<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
125 }
126
127// Note: CHILD is Selected in the menu
128#define ON_PARENT_STRONGTYPE_DELETE_CONT_CHILD(parent,child) \
129 parent* element = MatML_Base_GUI::GetSelParentMatML<parent>(m_MatMLTreeCtrl);\
130 if (element) {\
131 MatML_Base_GUI::DeleteContChild((element->t)->child());\
132 MatML_Base_GUI::SetupSelParent<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
133 }
134
135// Note: CHILD is Selected in the menu
136#define ON_PARENT_DELETE_ITER_CONT_CHILD(parent,child) \
137 child* element = MatML_Base_GUI::GetSelMatML<child>(m_MatMLTreeCtrl);\
138 parent* elementparent = MatML_Base_GUI::GetSelParentMatML<parent>(m_MatMLTreeCtrl);\
139 if (element && elementparent) {\
140 MatML_Base_GUI::DeleteSeqContChild(element, elementparent->child());\
141 MatML_Base_GUI::SetupSelParent<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
142 }
143
144// Note: CHILD is Selected in the menu
145#define ON_PARENT_DELETE_ITER_CONT_CHILD_STRONGTYPE(parent,child) \
146 child* element = MatML_Base_GUI::GetSelMatML<child>(m_MatMLTreeCtrl);\
147 parent* elementparent = MatML_Base_GUI::GetSelParentMatML<parent>(m_MatMLTreeCtrl);\
148 if (element && elementparent) {\
149 MatML_Base_GUI::DeleteSeqContChild(element->t, elementparent->child());\
150 MatML_Base_GUI::SetupSelParent<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
151 }
152
153// Note: CHILD is Selected in the menu
154#define ON_PARENT_STRONGTYPE_DELETE_ITER_CONT_CHILD(parent,child) \
155 child* element = MatML_Base_GUI::GetSelMatML<child>(m_MatMLTreeCtrl);\
156 parent* elementparent = MatML_Base_GUI::GetSelParentMatML<parent>(m_MatMLTreeCtrl);\
157 if (element && elementparent) {\
158 MatML_Base_GUI::DeleteSeqContChild(element, (elementparent->t)->child());\
159 MatML_Base_GUI::SetupSelParent<parent, parent ##_GUI>(m_MatMLTreeCtrl);\
160 }
161
162 class MatML_Base_GUI : public wxEvtHandler, public Utilities
163 {
164 public:
165 MatML_Base_GUI() {};
166 virtual ~MatML_Base_GUI() {};
167
168 bool Warning(::std::string msg)
169 {
170 wxMessageDialog WarningDialog(NULL, msg, _("MatML Editer"), wxOK | wxICON_EXCLAMATION, wxDefaultPosition);
171 return (WarningDialog.ShowModal() == wxID_YES);
172 }
173
174 template<class MatML_Class>
175 MatML_Class* GetSelMatML(TreeCtrlSorted* MatMLTreeCtrl);
176
177 template<class MatML_Class>
178 MatML_Class* GetSelParentMatML(TreeCtrlSorted* MatMLTreeCtrl);
179
180 template<typename MatML_ParentClass, typename GUI_ParentClass>
181 void SetupSel(TreeCtrlSorted* MatMLTreeCtrl);
182
183 template<typename MatML_ParentClass, typename GUI_ParentClass>
184 void SetupStrongTypeSel(TreeCtrlSorted* MatMLTreeCtrl);
185
186 template<typename MatML_ParentClass, typename GUI_ParentClass>
187 void SetupSelParent(TreeCtrlSorted* MatMLTreeCtrl);
188
189 template<class InputIterator, class T>
190 InputIterator find(InputIterator first, InputIterator last, const T& val);
191
192 template<typename MatML_Class, typename MatML_ContClass >
193 void InsertChild(MatML_ContClass& MatML_Cont);
194
195 template<typename MatML_Class, typename MatML_ContClass >
196 void InsertContChild(MatML_ContClass& MatML_Cont);
197
198 template<typename MatML_Class, typename MatML_ContClass >
199 void InsertSeqContChild(MatML_ContClass& MatML_Cont);
200
201 template<typename MatML_ContClass >
202 void DeleteChild(MatML_ContClass& MatML);
203
204 template<typename MatML_ContClass >
205 void DeleteContChild(MatML_ContClass& MatML_Cont);
206
207 template<typename MatML_Class, typename MatML_ContClass>
208 void DeleteSeqContChild(MatML_Class* MatML, MatML_ContClass& MatML_Cont);
209
210 template<typename MatML_Class, typename MatML_ContClass>
211 void PasteChild(MatML_Class* MatML, MatML_ContClass& MatML_Cont);
212
213 template<typename MatML_Class, typename MatML_ContClass>
214 void PasteContChild(MatML_Class* MatML, MatML_ContClass& MatML_Cont);
215
216 template<typename MatML_Class, typename MatML_ContClass>
217 void PasteSeqContChild(MatML_Class* MatML, MatML_ContClass& MatML_Cont);
218
219 template<class MatML_Class>
220 void SwapHavingId(MatML_Class* matml0, MatML_Class* matml1);
221
222 template<class MatML_Class>
223 void SwapHavingOptionalId(MatML_Class* matml0, MatML_Class* matml1);
224
225 template< class MatML_Class, class MatML_ContClass >
226 std::pair< MatML_Class*, MatML_Class* >
227 MatMLFindAndBumpDown(MatML_Class* matml, MatML_ContClass& cont);
228
229 template< class MatML_Class, class MatML_ContClass >
230 std::pair< MatML_Class*, MatML_Class* >
231 MatMLFindAndBumpDownStrongtype(MatML_Class* matml, MatML_ContClass& cont);
232
233 template< class MatML_Class, class MatML_ContClass>
234 std::pair<MatML_Class*, MatML_Class* >
235 MatMLFindAndBumpDownHavingId(MatML_Class* matml, MatML_ContClass& cont);
236
237 template<class MatML_Class, class MatML_ContClass>
238 std::pair< MatML_Class*, MatML_Class* >
239 MatMLFindAndBumpDownHavingOptionalId(MatML_Class* matml, MatML_ContClass& cont);
240
241 template<class Child_GUI, class MatML>
242 void MatMLTreeCtrlBumpDown(TreeCtrlSorted*& treectrl,
243 wxTreeItemId& itemParentId,
244 wxTreeItemId& itemId,
245 MatML* first,
246 wxTreeItemId& nextitemId,
247 MatML* second
248 );
249
250 template<class MatML_Class, class MatML_ContClass>
251 std::pair<MatML_Class*, MatML_Class*>
252 MatMLFindAndBumpUp(MatML_Class* matml, MatML_ContClass& cont);
253
254 template<class MatML_Class, class MatML_ContClass>
255 std::pair<MatML_Class*, MatML_Class*>
256 MatMLFindAndBumpUpStrongtype(MatML_Class* matml, MatML_ContClass& cont);
257
258 template<class MatML_ContClass>
259 std::pair<typename MatML_ContClass::value_type*, typename MatML_ContClass::value_type*>
260 MatMLFindAndBumpUpHavingId(typename MatML_ContClass::value_type* matml, MatML_ContClass& cont);
261
262 template<class MatML_ContClass>
263 std::pair<typename MatML_ContClass::value_type*, typename MatML_ContClass::value_type*>
264 MatMLFindAndBumpUpHavingOptionalId(typename MatML_ContClass::value_type* matml, MatML_ContClass& cont);
265
266 template<class Child_GUI, class MatML>
267 void MatMLTreeCtrlBumpUp(TreeCtrlSorted*& treectrl,
268 wxTreeItemId& itemParentId,
269 wxTreeItemId& previtemId,
270 MatML* first,
271 wxTreeItemId& itemId,
272 MatML* second
273 );
274
275 template<class Child_GUI, class MatML>
276 void MatMLTreeCtrlBumpUpStrongtype(TreeCtrlSorted*& treectrl,
277 wxTreeItemId& itemParentId,
278 wxTreeItemId& previtemId,
279 MatML* first,
280 wxTreeItemId& itemId,
281 MatML* second
282 );
283
284 template< class MatML_Class,
285 class MatML_ParentClass,
286 class MatML_ContClass,
287 class MatML_GUI,
288 MatML_ContClass& (MatML_ParentClass::* cont_func)()
289 >
290 void IndividualBumpUp(boost::any anyptr,
291 boost::any anyptrparent,
292 TreeCtrlSorted* MatMLTreeCtrl,
293 wxTreeItemId itemParentId,
294 wxTreeItemId itemId,
295 wxTreeItemId nextitemId
296 );
297
298 template< class MatML_Class,
299 class MatML_ParentClass,
300 class MatML_ContClass,
301 class MatML_GUI,
302 MatML_ContClass& (MatML_ParentClass::* cont_func)()
303 >
304 void IndividualBumpUpStrongtype(boost::any anyptr,
305 boost::any anyptrparent,
306 TreeCtrlSorted* MatMLTreeCtrl,
307 wxTreeItemId itemParentId,
308 wxTreeItemId itemId,
309 wxTreeItemId nextitemId
310 );
311
312 template< class MatML_Class,
313 class MatML_ParentClass,
314 class MatML_ContClass,
315 class MatML_GUI,
316 MatML_ContClass& (MatML_ParentClass::* cont_func)()
317 >
318 void IndividualBumpUpHavingId(boost::any anyptr,
319 boost::any anyptrparent,
320 TreeCtrlSorted* MatMLTreeCtrl,
321 wxTreeItemId itemParentId,
322 wxTreeItemId itemId,
323 wxTreeItemId nextitemId
324 );
325
326 template< class MatML_Class,
327 class MatML_ParentClass,
328 class MatML_ContClass,
329 class MatML_GUI,
330 MatML_ContClass& (MatML_ParentClass::* cont_func)()
331 >
332 void IndividualBumpUpHavingOptionalId(boost::any anyptr,
333 boost::any anyptrparent,
334 TreeCtrlSorted* MatMLTreeCtrl,
335 wxTreeItemId itemParentId,
336 wxTreeItemId itemId,
337 wxTreeItemId nextitemId
338 );
339
340 template< class MatML_Class,
341 class MatML_ParentClass,
342 class MatML_ContClass,
343 class MatML_GUI,
344 MatML_ContClass& (MatML_ParentClass::* cont_func)()
345 >
346 void IndividualBumpDown(boost::any& anyptr,
347 boost::any& anyptrparent,
348 TreeCtrlSorted* MatMLTreeCtrl,
349 wxTreeItemId itemParentId,
350 wxTreeItemId previtemId,
351 wxTreeItemId itemId
352 );
353
354 template< class MatML_Class,
355 class MatML_ParentClass,
356 class MatML_ContClass,
357 class MatML_GUI,
358 MatML_ContClass& (MatML_ParentClass::* cont_func)()
359 >
360 void IndividualBumpDownStrongtype(boost::any& anyptr,
361 boost::any& anyptrparent,
362 TreeCtrlSorted* MatMLTreeCtrl,
363 wxTreeItemId itemParentId,
364 wxTreeItemId previtemId,
365 wxTreeItemId itemId
366 );
367
368 template< class MatML_Class,
369 class MatML_ParentClass,
370 class MatML_ContClass,
371 class MatML_GUI,
372 MatML_ContClass& (MatML_ParentClass::* cont_func)()
373 >
374 void IndividualBumpDownHavingId(boost::any& anyptr,
375 boost::any& anyptrparent,
376 TreeCtrlSorted* MatMLTreeCtrl,
377 wxTreeItemId itemParentId,
378 wxTreeItemId previtemId,
379 wxTreeItemId itemId
380 );
381
382 template< class MatML_Class,
383 class MatML_ParentClass,
384 class MatML_ContClass,
385 class MatML_GUI,
386 MatML_ContClass& (MatML_ParentClass::* cont_func)()
387 >
388 void IndividualBumpDownHavingOptionalId(boost::any& anyptr,
389 boost::any& anyptrparent,
390 TreeCtrlSorted* MatMLTreeCtrl,
391 wxTreeItemId itemParentId,
392 wxTreeItemId previtemId,
393 wxTreeItemId itemId
394 );
395
396 };
397};//bellshire namespace
398
399#include "BT_MatML_Base_GUI.inl"
Definition: BT_MatML_Base_GUI.h:163
void SetupStrongTypeSel(TreeCtrlSorted *MatMLTreeCtrl)
Definition: BT_MatML_Base_GUI.inl:83
void InsertContChild(MatML_ContClass &MatML_Cont)
Inserts the MatML Data into the MatML container element
Definition: BT_MatML_Base_GUI.inl:163
void InsertSeqContChild(MatML_ContClass &MatML_Cont)
Inserts the MatML Data into the MatML sequence container element
Definition: BT_MatML_Base_GUI.inl:180
std::pair< MatML_Class *, MatML_Class * > MatMLFindAndBumpDownHavingId(MatML_Class *matml, MatML_ContClass &cont)
Similar to MatMLFindAndBumpDown with the added complication that the Required Id's cannot be duplicat...
Definition: BT_MatML_Base_GUI.inl:354
std::pair< typename MatML_ContClass::value_type *, typename MatML_ContClass::value_type * > MatMLFindAndBumpUpHavingId(typename MatML_ContClass::value_type *matml, MatML_ContClass &cont)
Similar to MatMLFindAndBumpUp with the added complication that the Required Id's cannot be duplicated...
Definition: BT_MatML_Base_GUI.inl:457
void DeleteChild(MatML_ContClass &MatML)
Does Nothing. Child are REQUIRED in the MatML structure and are inserted automatically through the De...
Definition: BT_MatML_Base_GUI.inl:198
void InsertChild(MatML_ContClass &MatML_Cont)
Does Nothing. Child are required in the MatML structure and are inserted automatically through the De...
Definition: BT_MatML_Base_GUI.inl:152
std::pair< typename MatML_ContClass::value_type *, typename MatML_ContClass::value_type * > MatMLFindAndBumpUpHavingOptionalId(typename MatML_ContClass::value_type *matml, MatML_ContClass &cont)
Similar to MatMLFindAndBumpUp with the added complication that the optional Id's cannot be duplicated...
Definition: BT_MatML_Base_GUI.inl:482
void PasteChild(MatML_Class *MatML, MatML_ContClass &MatML_Cont)
Definition: BT_MatML_Base_GUI.inl:227
void SwapHavingOptionalId(MatML_Class *matml0, MatML_Class *matml1)
Swap function with MatML Classes that have Optional Id. This has the added complication that the id's...
Definition: BT_MatML_Base_GUI.inl:289
std::pair< MatML_Class *, MatML_Class * > MatMLFindAndBumpDownHavingOptionalId(MatML_Class *matml, MatML_ContClass &cont)
Similar to MatMLFindAndBumpDown with the added complication that the optional Id's cannot be duplicat...
Definition: BT_MatML_Base_GUI.inl:380
void SwapHavingId(MatML_Class *matml0, MatML_Class *matml1)
Swap function with MatML Classes that have required Id. This has the added complication that the id's...
Definition: BT_MatML_Base_GUI.inl:264
Definition: BT_MatML_TreeCtrlSorted.h:19
Definition: BT_MatML_Utilities_GUI.h:38
Contains the GUI and GUI associated classes. OnInit() calls the creation of the MaterialFrame GUI
Definition: BT_MatML_App.h:39