acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
tree_item_base.h
1// Created by camilo on 2025-03-29 22:22 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5#include "acme/prototype/prototype/enumeration.h"
6#include "acme/user/user/item_base.h"
7
8
9namespace data
10{
11
12
13 DECLARE_C_FLAG(e_tree_item_state, enum_tree_item_state);
14
15
16 class CLASS_DECL_ACME tree_item_base :
17 virtual public ::user::item_base
18 {
19 protected:
20
21
22 bool m_bPrevious = false;
23 bool m_bNext = false;
24
25 //::pointer<tree_item> m_pprevious2;
26 //::pointer<tree_item> m_pnext2;
27 //::data::tree_item_ptr_array m_treeitema2;
28 ::collection::index m_iIndex = -2;
29
30 public:
31
32
33 enum enum_flag
34 {
35
36 flag_previous_or_parent = 1,
37 flag_previous = 2,
38 flag_next = 4,
39 flag_next_or_parent = 8,
40 flag_child_or_next = 16,
41 flag_child_next_or_parent = 32,
42 flag_previoub = flag_previous_or_parent | flag_previous,
43 flag_nexts = flag_next | flag_next_or_parent | flag_child_or_next | flag_child_next_or_parent,
44
45 };
46
47 //::pointer<tree_item> m_phead; // first child
48 //::pointer<tree_item> m_ptail; // last child
49 //::pointer < tree_item > m_pparent;
50 ::collection::index m_iIndexHint;
51 //tree * m_ptree;
52 ::collection::index m_iLevel;
53 //::pointer m_pdataitem;
54 uptr m_dwUser;
55 e_tree_item_state m_etreeitemstate;
56 uptr m_dwMetaData;
57
58
59 tree_item_base();
60 ~tree_item_base() override;
61
62
63#ifdef _DEBUG
64
65
66 virtual ::i64 increment_reference_count() override
67 {
68
69 return ::particle::increment_reference_count();
70
71 }
72
73 virtual ::i64 decrement_reference_count() override
74 {
75
76 return ::particle::decrement_reference_count();
77
78 }
79
80
81#endif
82 virtual void clear_cache();
83 void destroy() override;
84 virtual bool erase_item_from_parent();
85
86 virtual tree_item_base * _get_child_by_user_data(::u64 ullUserData);
87 virtual tree_item_base * _find_next_by_user_data(::u64 ullUserData);
88 virtual void _get_children(::data::tree_item_base_ptr_array & ptra);
89 virtual ::collection::count get_children_count();
90 virtual tree_item_base * _get_parent();
91 virtual void _set_parent(tree_item_base * _ptreeitembase);
92 virtual ::collection::count get_expandable_children_count();
93 virtual ::collection::count get_proper_descendant_count();
94 virtual tree_item_base * _get_expandable_child(::collection::index iIndex);
95
96 virtual bool _insert(enum_relative erelative, tree_item_base * _pitemNew);
97
98 virtual ::collection::index calc_level();
99 virtual ::collection::index get_level();
100 virtual ::collection::index get_index();
101
102
103 virtual tree_item_base * __previous();
104 virtual tree_item_base * __next();
105 virtual tree_item_base * __head();
106 virtual tree_item_base * __tail();
107
108
109
110 virtual tree_item_base * _get_previous_or_parent(::collection::index * iLevelOffset = nullptr);
111 virtual tree_item_base * _get_previous();
112
113
114 virtual tree_item_base * _get_next();
115 virtual tree_item_base * _get_next_or_parent_next(::collection::index * iLevelOffset = nullptr);
116 virtual tree_item_base * _get_child_or_next(::collection::index * iLevelOffset = nullptr);
117 virtual tree_item_base * _get_child_next_or_parent(::collection::index * iLevelOffset = nullptr);
118
119
120 inline const tree_item_base * _get_child_next_or_parent(::collection::index * iLevelOffset = nullptr) const
121 {
122
123 return ((tree_item_base *)(this))->_get_child_next_or_parent(iLevelOffset);
124
125 }
126
127 //tree_item_base * _calc_previous(bool bParent = true);
128
129 //tree_item_base * _calc_next(bool bChild, bool bParent = true, ::collection::index * pindexLevel = nullptr);
130
131 virtual tree_item_base * _first_child();
132
133 // [](const ::data::tree_item_base * _pitem1, const ::data::tree_item_base * _pitem2)
134 //virtual void sort_children(const ::function < bool(const tree_item_base * _p1, const tree_item_base * _p2) > & functionLess);
135
136
137
138 inline tree_item_base * _get_proper_next(::collection::index * pindexLevel = nullptr)
139 {
140
141 if ((m_etreeitemstate & ::data::e_tree_item_state_expanded))
142 {
143
144 return _get_child_next_or_parent(pindexLevel);
145
146 }
147 else
148 {
149
150 return _get_next_or_parent_next(pindexLevel);
151
152 }
153
154 }
155
156 virtual tree_item_base * _get_item(enum_tree_navigation enavigation, ::collection::index * piLevelOffset = nullptr);
157 virtual tree_item_base * _get_item(enum_relative erelative);
158
159 virtual bool _contains(const tree_item_base * _ptreeitem);
160 virtual tree_item_base * _get_proper_item(::collection::index iIndex, ::collection::index * piLevel);
161 virtual ::collection::index _get_proper_item_index(tree_item_base * _pitem, ::collection::index * piLevel);
162 virtual ::collection::count get_proper_item_count();
163
164 virtual tree_base* _get_tree() const =0;
165 virtual void _set_tree(tree_base * ptree) =0;
166
167 // void set_item(::item * pitem) override;
168 // ::item * item() override;
169
170
171 // string get_tree_item_text();
172 // ::collection::index get_tree_item_image();
173 // ::image::image_list * get_tree_item_image_list();
174
175
176 //void set_parent(tree_item_base * _pparent);
177
178 virtual void erase_tree_item();
179 virtual void erase_tree_item_descendants();
180 virtual void _erase_child(tree_item_base * _ptreeitem);
181
182 virtual ::collection::index _find_child(tree_item_base * _ptreeitem) const;
183 virtual bool _contains_child(tree_item_base * _ptreeitem) const;
184 virtual tree_item_base * _child_at(::collection::index i) const;
185 virtual void erase_child_at(::collection::index i);
186 virtual void _insert_child_at(::collection::index i, tree_item_base * _ptreeitemNew);
187 virtual void _add_child(tree_item_base * _ptreeitemNew);
188 virtual void _set_child_at(::collection::index i, tree_item_base * _ptreeitemSet);
189 virtual void erase_children();
190
191 virtual void _predicate_each(const ::function < bool(tree_item_base *) > & callback);
192 virtual ::collection::index _predicate_find_first(const ::function < bool(tree_item_base *) > & callback);
193
194 virtual ::i32_boolean is_expanded() const;
195 virtual ::i32_boolean is_expandable() const;
196
197 virtual void on_fill_children();
198
199 virtual bool _is_descendant(tree_item_base * _pitem);
200 virtual bool _is_ascendant(tree_item_base * _pitem);
201
202
203 };
204
205
206
207 //template < prototype_item DATA_ITEM > tree_item ::tree_item()
208 //{
209
210 // m_iIndexHint = -1;
211 // m_dwUser = 0;
212 // m_dwState = 0;
213 // m_ptree = nullptr;
214 // m_pparent = nullptr;
215 // m_iLevel = -1;
216 // m_pparent = nullptr;
217
218 //}
219
220
221 //template < prototype_item DATA_ITEM > tree_item ::~tree_item()
222 //{
223
224 //}
225
226
227 //template < prototype_item DATA_ITEM >
228 //tree * tree_item ::get_tree()
229 //{
230
231 // return m_ptree;
232
233 //}
234
235
236 //template < prototype_item DATA_ITEM >
237 //void tree_item ::set_parent(tree_item_base * _pparent)
238 //{
239
240 // //if(m_pparent == pparent || pparent == this || is_descendant(pparent) || is_ascendant(pparent))
241 // if (m_pparent == pparent || pparent == this || is_descendant(pparent))
242 // {
243
244 // return;
245
246 // }
247
248 // if (::is_set(pparent))
249 // {
250
251 // pparent->m_treeitema2.add_unique(this);
252
253 // }
254
255 // m_pparent->m_treeitema2.erase(this);
256
257 // m_pparent = pparent;
258
259 // for (auto pitem : m_pparent->m_treeitema2)
260 // {
261
262 // pitem->clear_cache();
263
264 // }
265
266 //}
267
268
269 //template < prototype_item DATA_ITEM >
270 //void tree_item ::erase_tree_item()
271 //{
272
273 // erase_tree_item_descendants();
274
275 // if (m_pparent)
276 // {
277
278 // m_pparent->erase_child(this);
279
280 // }
281
282 //}
283
284
285 //template < prototype_item DATA_ITEM >
286 //void tree_item ::erase_child(tree_item_base * _ptreeitem)
287 //{
288
289 // auto iIndex = m_treeitema2.find_first(ptreeitem);
290
291 // if (iIndex < 0)
292 // {
293
294 // return;
295
296 // }
297
298 // m_treeitema2.erase_at(iIndex);
299
300 // for (auto pitem : m_treeitema2)
301 // {
302
303 // pitem->clear_cache();
304
305 // }
306
307 //}
308
309
310 //template < prototype_item DATA_ITEM >
311 //void tree_item ::erase_tree_item_descendants()
312 //{
313
314 // for (auto & p : m_treeitema2)
315 // {
316
317 // p->erase_tree_item_descendants();
318
319 // p->clear_cache();
320
321 // }
322
323 // //list_predicate(this, [](auto p) { p->erase_tree_item(); });
324
325 // //list_erase_all(this);
326
327 // m_treeitema2.clear();
328
329 // clear_cache();
330
331 //}
332
333
334 //template < prototype_item DATA_ITEM >
335 //tree_item * tree_item ::find_next_by_user_data(uptr iUserData)
336 //{
337
338 // auto ptreeitem = this;
339
340 // while (true)
341 // {
342
343 // ptreeitem = ptreeitem->get_item(e_tree_navigation_expanded_forward);
344
345 // if (!ptreeitem)
346 // {
347
348 // return nullptr;
349
350 // }
351
352 // if (ptreeitem->m_dwUser == (::u32)iUserData)
353 // {
354
355 // return ptreeitem;
356
357 // }
358
359 // }
360
361 //}
362
363
364 //template < prototype_item DATA_ITEM >
365 //void tree_item ::clear_cache()
366 //{
367
368 // m_bPrevious = false;
369 // m_bNext = false;
370 // m_iIndex = -2;
371
372 //}
373
374
375 //template < prototype_item DATA_ITEM >
376 //void tree_item ::destroy()
377 //{
378
379 // m_pparent.release();
380
381 // m_treeitema2.destroy();
382
383 // m_ptree = nullptr;
384
385 //}
386
387
388 //template < prototype_item DATA_ITEM >
389 //bool tree_item ::erase_item_from_parent()
390 //{
391
392 // tree_item_base * _pitem = this;
393
394 // if (pitem->m_pparent == nullptr)
395 // {
396
397 // return true;
398
399 // }
400
401 // if (!pitem->m_pparent->m_treeitema2.contains(pitem))
402 // {
403
404 // // self healing?
405 // pitem->m_pparent = nullptr;
406
407 // return false;
408
409 // }
410
411 // pitem->m_pparent->m_treeitema2.erase(pitem);
412
413 // for (auto p : pitem->m_pparent->m_treeitema2)
414 // {
415
416 // p->clear_cache();
417
418 // }
419 // pitem->m_pparent = nullptr;
420
421 // return true;
422
423 //}
424
425
426 //template < prototype_item DATA_ITEM >
427 //bool tree_item ::contains(const tree_item_base * _ptreeitem)
428 //{
429
430 // if (ptreeitem == this)
431 // {
432
433 // return true;
434
435 // }
436
437 // for (auto & p : m_treeitema2)
438 // {
439
440 // if (p->contains(ptreeitem))
441 // {
442
443 // return true;
444
445 // }
446
447 // }
448
449 // return false;
450
451 //}
452
453
454 //template < prototype_item DATA_ITEM >
455 //bool tree_item ::insert(enum_relative erelative, tree_item_base * _pitemNew)
456 //{
457
458 // if (contains(pitemNew))
459 // {
460
461 // throw ::exception(error_wrong_state);
462
463 // }
464
465 // if (erelative == e_relative_first_child)
466 // {
467
468 // pitemNew->erase_item_from_parent();
469
470 // m_treeitema2.insert_at(0, pitemNew);
471
472 // for (auto & pitem : m_treeitema2)
473 // {
474
475 // pitem->clear_cache();
476
477 // }
478
479 // pitemNew->m_iLevel = m_iLevel + 1;
480
481 // pitemNew->m_pparent = this;
482
483 // return true;
484
485 // }
486 // else if (erelative == e_relative_last_child)
487 // {
488
489 // pitemNew->erase_item_from_parent();
490
491 // m_treeitema2.add(pitemNew);
492
493 // for (auto & pitem : m_treeitema2)
494 // {
495
496 // pitem->clear_cache();
497
498 // }
499
500 // pitemNew->m_iLevel = m_iLevel + 1;
501
502 // pitemNew->m_pparent = this;
503
504 // return true;
505
506 // }
507 // else if (erelative == e_relative_previous_sibling)
508 // {
509
510 // ASSERT(m_pparent != nullptr);
511
512 // if (m_pparent == nullptr)
513 // {
514
515 // return false;
516
517 // }
518
519 // auto iFind = m_pparent->m_treeitema2.find_first(this);
520
521 // if (iFind < 0)
522 // {
523
524 // // self-healinng
525 // m_pparent = nullptr;
526
527 // return false;
528
529 // }
530
531 // m_pparent->m_treeitema2.insert_at(iFind, pitemNew);
532
533 // for (auto & pitem : m_pparent->m_treeitema2)
534 // {
535
536 // pitem->clear_cache();
537
538 // }
539
540 // pitemNew->m_iLevel = m_iLevel;
541
542 // pitemNew->m_pparent = m_pparent;
543
544 // return true;
545
546 // }
547 // else if (erelative == e_relative_next_sibling)
548 // {
549
550 // if (m_pparent == nullptr)
551 // {
552
553 // return false;
554
555 // }
556
557 // auto iFind = m_pparent->m_treeitema2.find_first(this);
558
559 // if (iFind < 0)
560 // {
561
562 // // self-healing
563 // m_pparent = nullptr;
564
565 // return false;
566
567 // }
568
569 // m_pparent->m_treeitema2.insert_at(iFind + 1, pitemNew);
570
571 // for (auto & pitem : m_pparent->m_treeitema2)
572 // {
573
574 // pitem->clear_cache();
575
576 // }
577
578 // pitemNew->m_iLevel = m_iLevel;
579
580 // pitemNew->m_pparent = m_pparent;
581
582 // return true;
583
584 // }
585 // else if (erelative == e_relative_last_sibling)
586 // {
587
588 // m_pparent->m_treeitema2.add(pitemNew);
589
590 // for (auto & pitem : m_pparent->m_treeitema2)
591 // {
592
593 // pitem->clear_cache();
594
595 // }
596
597 // pitemNew->m_iLevel = m_iLevel;
598
599 // pitemNew->m_pparent = m_pparent;
600
601 // return true;
602
603 // }
604 // else if (erelative == e_relative_replace)
605 // {
606
607 // auto iFind = m_pparent->m_treeitema2.find_first(this);
608
609 // if (iFind < 0)
610 // {
611
612 // m_pparent = nullptr;
613
614 // return false;
615
616 // }
617
618 // m_pparent->m_treeitema2[iFind] = pitemNew;
619
620 // for (auto & pitem : m_pparent->m_treeitema2)
621 // {
622
623 // pitem->clear_cache();
624
625 // }
626
627 // m_pparent = nullptr;
628
629 // erase_tree_item();
630
631 // return true;
632
633 // }
634
635 // return false;
636
637 //}
638
639
640 //template < prototype_item DATA_ITEM >
641 //void tree_item ::sort_children(const ::function < bool(const tree_item_base * _p1, const tree_item_base * _p2) > & functionLess)
642 //{
643
644 // //data_tree_item_list_sort(this, functionLess);
645
646 // m_treeitema2.predicate_sort(functionLess);
647
648 // for (auto & pitem : m_treeitema2)
649 // {
650
651 // pitem->clear_cache();
652
653 // }
654
655
656 //}
657
658
659 //template < prototype_item DATA_ITEM >
660 //tree_item * tree_item ::get_child_by_user_data(uptr iUserData)
661 //{
662
663 // auto iFind = m_treeitema2.predicate_find_first([iUserData](auto p)
664 // {
665
666 // return p->m_dwUser == iUserData;
667
668 // });
669
670 // if (iFind < 0)
671 // {
672
673 // return nullptr;
674
675 // }
676
677 // return m_treeitema2[iFind];
678
679 //}
680
681
682 //template < prototype_item DATA_ITEM >
683 //void tree_item ::get_children(tree_item_ptr_array & ptra)
684 //{
685
686 // ptra.append(m_treeitema2);
687
688 //}
689
690
691 //template < prototype_item DATA_ITEM >
692 //::collection::count tree_item ::get_children_count()
693 //{
694
695 // return m_treeitema2.get_count();
696
697 //}
698
699
700 //template < prototype_item DATA_ITEM >
701 //tree_item * tree_item ::get_parent()
702 //{
703
704 // return m_pparent;
705
706 //}
707
708
709 //template < prototype_item DATA_ITEM >
710 //::collection::count tree_item ::get_expandable_children_count()
711 //{
712
713 // ::collection::count c = 0;
714
715 // for (auto & p : m_treeitema2)
716 // {
717
718 // if (p->get_children_count() > 0)
719 // {
720
721 // c++;
722
723 // }
724
725 // }
726
727 // return c;
728
729 //}
730
731
732 //template < prototype_item DATA_ITEM >
733 //tree_item * tree_item ::get_expandable_child(::collection::index iIndex)
734 //{
735
736 // ::collection::count c = 0;
737
738 // auto iFind = m_treeitema2.predicate_find_first([&c, iIndex](auto & p)
739 // {
740
741 // if (p->get_children_count() > 0)
742 // {
743
744 // if (c == iIndex)
745 // {
746
747 // return true;
748
749 // }
750
751 // }
752
753 // return false;
754
755 // });
756
757 // if (iFind < 0)
758 // {
759
760 // return nullptr;
761
762 // }
763
764 // return m_treeitema2[iFind];
765
766 //}
767
768
769 //template < prototype_item DATA_ITEM >
770 //::collection::count tree_item ::get_proper_descendant_count()
771 //{
772
773 // ::collection::count iCount = 0;
774
775 // ::collection::index iLevel = 0;
776
777 // tree_item_base * _pitem = this;
778
779 // for (;;)
780 // {
781
782 // pitem = pitem->get_item(e_tree_navigation_proper_forward, &iLevel);
783
784 // if (pitem == nullptr || iLevel <= 0)
785 // {
786
787 // break;
788
789 // }
790
791 // iCount++;
792
793 // }
794
795 // return iCount;
796
797 //}
798
799
800 //template < prototype_item DATA_ITEM >
801 //tree_item_base * _tree_item ::get_previous_or_parent(::collection::index * piLevel)
802 //{
803
804 // if (____previous())
805 // {
806
807 // return _previous();
808
809 // }
810
811 // if (m_pparent)
812 // {
813
814 // return m_pparent;
815
816 // //if (piLevel)
817 // //{
818
819 // // (*piLevel)--;
820
821 // //}
822
823 // //return m_pparent->get_previous_or_parent(piLevel);
824
825 // }
826
827 // return nullptr;
828
829 //}
830
831
832 //template < prototype_item DATA_ITEM >
833 //tree_item_base * _tree_item ::get_previous()
834 //{
835
836 // return _previous();
837
838 //}
839
840
841 //template < prototype_item DATA_ITEM >
842 //tree_item_base * _tree_item ::get_next()
843 //{
844
845 // return _next();
846
847 //}
848
849
850 //template < prototype_item DATA_ITEM >
851 //::collection::index tree_item ::calc_level()
852 //{
853
854 // if (m_iLevel < 0)
855 // {
856
857 // m_iLevel = -1;
858
859 // tree_item_base * _p = this;
860
861 // while (p != nullptr)
862 // {
863
864 // m_iLevel++;
865
866 // p = p->m_pparent;
867
868 // }
869
870 // }
871
872 // return m_iLevel;
873
874 //}
875
876
877 //template < prototype_item DATA_ITEM >
878 //tree_item_base * _tree_item ::_____previous()
879 //{
880
881 // m_bPrevious = true;
882
883 // if (::is_null(m_pparent))
884 // {
885
886 // m_pprevious2.release();
887
888 // return nullptr;
889
890 // }
891
892 // auto iFind = get_index();
893
894 // if (iFind <= 0)
895 // {
896
897 // m_pprevious2.release();
898
899 // return nullptr;
900
901 // }
902
903 // return m_pprevious2 = m_pparent->m_treeitema2[iFind - 1];
904
905 //}
906
907
908 //template < prototype_item DATA_ITEM >
909 //tree_item * tree_item ::_____next()
910 //{
911
912 // m_bNext = true;
913
914 // if (::is_null(m_pparent))
915 // {
916
917 // m_pnext2.release();
918
919 // return nullptr;
920
921 // }
922
923 // auto iFind = get_index();
924
925 // if (iFind < 0 || iFind >= m_pparent->m_treeitema2.get_upper_bound())
926 // {
927
928 // m_pnext2.release();
929
930 // return nullptr;
931
932 // }
933
934 // return m_pnext2 = m_pparent->m_treeitema2[iFind + 1];
935
936 //}
937
938
941
944
946
948
950
952
953
956
959
961
963
965
967
968
969 //template < prototype_item DATA_ITEM >
970 //::collection::index tree_item ::_get_index()
971 //{
972
973 // if (m_iIndex >= -1)
974 // {
975
976 // return m_iIndex;
977
978 // }
979
980 // if (m_pparent == nullptr)
981 // {
982
983 // m_iIndex = -1;
984
985 // return -1;
986
987 // }
988
989 // return m_iIndex = m_pparent->m_treeitema2.find_first(this);
990
991 //}
992
993
994 //template < prototype_item DATA_ITEM >
995 //tree_item_base * _tree_item ::get_next_or_parent_next(::collection::index * piLevel)
996 //{
997
998 // if (____next())
999 // {
1000
1001 // return _next();
1002
1003 // }
1004
1005 // if (!m_pparent)
1006 // {
1007
1008 // return nullptr;
1009
1010 // }
1011
1012 // if (piLevel)
1013 // {
1014
1015 // (*piLevel)--;
1016
1017 // }
1018
1019 // return m_pparent->get_next_or_parent_next(piLevel);
1020
1021 //}
1022
1023
1024 //template < prototype_item DATA_ITEM >
1025 //tree_item_base * _tree_item ::get_child_or_next(::collection::index * piLevel)
1026 //{
1027
1028 // if (____head())
1029 // {
1030
1031 // if (piLevel)
1032 // {
1033
1034 // (*piLevel)++;
1035
1036 // }
1037
1038 // return _head();
1039
1040 // }
1041
1042 // return _next();
1043
1044 //}
1045
1046
1047 //template < prototype_item DATA_ITEM >
1048 //tree_item_base * _tree_item ::get_child_next_or_parent(::collection::index * piLevel)
1049 //{
1050
1051 // if (____head())
1052 // {
1053
1054 // if (piLevel)
1055 // {
1056
1057 // (*piLevel)++;
1058
1059 // }
1060
1061 // return _head();
1062
1063 // }
1064
1065 // return get_next_or_parent_next(piLevel);
1066
1067 //}
1068
1069
1070 //template < prototype_item DATA_ITEM >
1071 //tree_item_base * _tree_item ::get_item(enum_tree_navigation enavigation, ::collection::index * pindexLevel)
1072 //{
1073
1074 // switch (enavigation)
1075 // {
1076 // case e_tree_navigation_expanded_forward:
1077
1078 // return get_child_next_or_parent(pindexLevel);
1079
1080 // case e_tree_navigation_proper_forward:
1081
1082 // return get_proper_next(pindexLevel);
1083
1084 // default:
1085 // // Not Expected
1086 // ASSERT(false);
1087 // return nullptr;
1088 // }
1089
1090 //}
1091
1092
1093 //template < prototype_item DATA_ITEM >
1094 //tree_item_base * _tree_item ::get_item(enum_relative erelative)
1095 //{
1096
1097 // switch (erelative)
1098 // {
1099 // case e_relative_first_child:
1100 // {
1101 // return _head();
1102 // }
1103 // break;
1104 // case e_relative_last_child:
1105 // {
1106 // return __tail();
1107 // }
1108 // case e_relative_parent:
1109 // {
1110 // return m_pparent;
1111 // }
1112 // break;
1113 // case e_relative_first_sibling:
1114 // {
1115 // return m_pparent->____head();
1116 // }
1117 // break;
1118 // case e_relative_previous_sibling:
1119 // {
1120 // return __previous();
1121 // }
1122 // break;
1123 // case e_relative_next_sibling:
1124 // {
1125 // return __next();
1126 // }
1127 // break;
1128 // case e_relative_last_sibling:
1129 // {
1130 // return m_pparent->____tail();
1131 // }
1132 // break;
1133 // default:
1134 // // Not Expected
1135 // ASSERT(false);
1136 // return nullptr;
1137 // }
1138 //}
1139
1140
1141
1142 //template < prototype_item DATA_ITEM >
1143 //tree_item_base * _tree_item ::first_child()
1144 //{
1145
1146 // return __head();
1147
1148 //}
1149
1150
1151 //template < prototype_item DATA_ITEM >
1152 //string tree_item ::get_text() const
1153 //{
1154
1155 // if (!m_pdataitem)
1156 // {
1157
1158 // return "";
1159
1160 // }
1161
1162 // return m_pdataitem->get_item_text(m_ptree);
1163
1164 //}
1165
1166
1167 //template < prototype_item DATA_ITEM >
1168 //::collection::index tree_item ::get_image() const
1169 //{
1170
1171 // if (!m_pdataitem)
1172 // {
1173
1174 // return -1;
1175
1176 // }
1177
1178 // return m_pdataitem->get_item_image(m_ptree);
1179
1180 //}
1181
1182
1183 //template < prototype_item DATA_ITEM >
1184 //::image::image_list * tree_item ::get_image_list() const
1185 //{
1186
1187 // if (!m_pdataitem)
1188 // {
1189
1190 // return nullptr;
1191
1192 // }
1193
1194 // return m_pdataitem->get_item_image_list(m_ptree);
1195
1196 //}
1197
1198
1199 //template < prototype_item DATA_ITEM >
1200 //tree_item_base * _tree_item ::get_proper_item(::collection::index iIndex, ::collection::index * piLevel)
1201 //{
1202
1203 // if (*piLevel)
1204 // {
1205
1206 // *piLevel = 0;
1207
1208 // }
1209
1210 // tree_item_base * _pitem = this;
1211
1212 // while (pitem && iIndex >= 0)
1213 // {
1214
1215 // pitem = pitem->get_item(e_tree_navigation_proper_forward, piLevel);
1216
1217 // iIndex--;
1218
1219 // }
1220
1221 // if (iIndex < 0)
1222 // {
1223
1224 // return pitem;
1225
1226 // }
1227
1228 // return nullptr;
1229
1230 //}
1231
1232
1233 //template < prototype_item DATA_ITEM >
1234 //::collection::index tree_item ::get_proper_item_index(tree_item_base * _pitemParam, ::collection::index * piLevel)
1235 //{
1236
1237 // ::i32 iIndex = 0;
1238
1239 // if (piLevel)
1240 // {
1241
1242 // *piLevel = 0;
1243
1244 // }
1245
1246 // tree_item_base * _pitem = this;
1247
1248 // while (pitem)
1249 // {
1250
1251 // pitem = pitem->get_item(e_tree_navigation_proper_forward, piLevel);
1252
1253 // if (pitem == pitemParam)
1254 // {
1255
1256 // return iIndex;
1257
1258 // }
1259
1260 // iIndex++;
1261
1262 // }
1263
1264 // return -1;
1265
1266 //}
1267
1268
1269 //template < prototype_item DATA_ITEM >
1270 //::collection::count tree_item ::get_proper_item_count()
1271 //{
1272
1273 // tree_item_base * _pitem = this;
1274
1275 // ::collection::index iLevel = 0;
1276
1277 // ::collection::count iCount = -1;
1278
1279 // while (pitem)
1280 // {
1281
1282 // pitem = pitem->get_item(e_tree_navigation_proper_forward, &iLevel);
1283
1284 // iCount++;
1285
1286 // if (iCount >= 65536)
1287 // {
1288
1289 // break;
1290
1291 // }
1292
1293 // if (iLevel <= 0)
1294 // {
1295
1296 // break;
1297
1298 // }
1299
1300 // }
1301
1302 // return iCount;
1303
1304 //}
1305
1306
1307 //template < prototype_item DATA_ITEM >
1308 //bool tree_item ::is_expanded() const
1309 //{
1310
1311 // return (m_dwState & ::data::e_tree_item_state_expanded) != 0;
1312
1313 //}
1314
1315
1316 //template < prototype_item DATA_ITEM >
1317 //bool tree_item ::is_expandable() const
1318 //{
1319
1320 // return (m_dwState & ::data::e_tree_item_state_expandable) != 0;
1321
1322 //}
1323
1324
1325 //template < prototype_item DATA_ITEM >
1326 //bool tree_item ::is_descendant(tree_item_base * _pitem)
1327 //{
1328
1329 // if (pitem == nullptr)
1330 // {
1331
1332 // return false;
1333
1334 // }
1335
1336 // return pitem->is_ascendant(this);
1337
1338 //}
1339
1340
1341 //template < prototype_item DATA_ITEM >
1342 //bool tree_item ::is_ascendant(tree_item_base * _pitem)
1343 //{
1344
1345 // if (pitem == nullptr)
1346 // {
1347
1348 // return false;
1349
1350 // }
1351
1352 // tree_item_base * _pparent = m_pparent;
1353
1354 // if (pparent == nullptr)
1355 // {
1356
1357 // return false;
1358
1359 // }
1360
1361 // while (pparent != nullptr)
1362 // {
1363
1364 // if (pparent == pitem)
1365 // return true;
1366
1367 // pparent = pparent->m_pparent;
1368
1369 // }
1370
1371 // return false;
1372
1373 //}
1374
1375
1376 //template < prototype_item DATA_ITEM >
1377 //void
1378 // tree_item ::on_fill_children()
1379 //{
1380
1381 // //if (m_pdataitem)
1382 // //{
1383
1384 // // m_pdataitem->data_item_on_fill_children(this);
1385
1386 // //}
1387
1388 // for (auto & p : m_treeitema2)
1389 // {
1390
1391 // if (p->is_expanded())
1392 // {
1393
1394 // p->on_fill_children();
1395
1396 // }
1397
1398 // };
1399
1400 //}
1401
1402
1403
1404
1405 //template < prototype_item DATA_ITEM >
1407 public pointer_array < tree_item_base >
1408 {
1409 public:
1410 };
1411
1412
1413} // namespace acme
1414
1415
Definition tree_base.h:20
Definition tree_item_base.h:1408
Definition pointer_array.h:1882