GUIFramework 1.1.0
Framework for desktop GUI applications in C++.
Loading...
Searching...
No Matches
IteratorsFunctionality.cpp
Go to the documentation of this file.
2
4
5using namespace std;
6
7namespace gui_framework
8{
9 namespace iterators
10 {
11 namespace utility
12 {
13 void getNextComponent(BaseComponent*& currentComponent, stack<BaseComponent*>& parents, stack<size_t>& indices)
14 {
15 if (BaseComposite* composite = dynamic_cast<BaseComposite*>(currentComponent))
16 {
17 const vector<unique_ptr<BaseComponent>>& components = composite->getChildren();
18
19 if (components.size())
20 {
21 indices.push(1);
22
23 parents.push(composite);
24
25 currentComponent = components.front().get();
26 }
27 else if (parents.size())
28 {
29 BaseComposite* composite = static_cast<BaseComposite*>(parents.top());
30 size_t nextIndex = indices.top();
31 const vector<unique_ptr<BaseComponent>>& components = composite->getChildren();
32
33 parents.pop();
34 indices.pop();
35
36 if (nextIndex < components.size())
37 {
38 parents.push(composite);
39 indices.push(nextIndex + 1);
40
41 currentComponent = components[nextIndex].get();
42 }
43 else
44 {
45 getNextComponent(currentComponent, parents, indices);
46 }
47 }
48 else
49 {
50 currentComponent = nullptr;
51 }
52 }
53 else
54 {
55 if (parents.size())
56 {
57 BaseComposite* composite = static_cast<BaseComposite*>(parents.top());
58 size_t nextIndex = indices.top();
59 const vector<unique_ptr<BaseComponent>>& components = composite->getChildren();
60
61 parents.pop();
62 indices.pop();
63
64 if (nextIndex < components.size())
65 {
66 parents.push(composite);
67 indices.push(nextIndex + 1);
68
69 currentComponent = components[nextIndex].get();
70 }
71 else
72 {
73 getNextComponent(currentComponent, parents, indices);
74 }
75 }
76 else
77 {
78 currentComponent = nullptr;
79 }
80 }
81 }
82 }
83 }
84}
Base class for all windows, controls, etc.
Base class for all windows that has children windows.
const std::vector< std::unique_ptr< BaseComponent > > & getChildren() const
void getNextComponent(BaseComponent *&currentComponent, stack< BaseComponent * > &parents, stack< size_t > &indices)