16 class CLASS_DECL_ACME tree_item_base :
17 virtual public ::user::item_base
22 bool m_bPrevious =
false;
28 ::collection::index m_iIndex = -2;
36 flag_previous_or_parent = 1,
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,
50 ::collection::index m_iIndexHint;
52 ::collection::index m_iLevel;
55 e_tree_item_state m_etreeitemstate;
60 ~tree_item_base()
override;
66 virtual ::i64 increment_reference_count()
override
69 return ::particle::increment_reference_count();
73 virtual ::i64 decrement_reference_count()
override
76 return ::particle::decrement_reference_count();
82 virtual void clear_cache();
83 void destroy()
override;
84 virtual bool erase_item_from_parent();
86 virtual tree_item_base * _get_child_by_user_data(::u64 ullUserData);
87 virtual tree_item_base * _find_next_by_user_data(::u64 ullUserData);
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);
96 virtual bool _insert(enum_relative erelative, tree_item_base * _pitemNew);
98 virtual ::collection::index calc_level();
99 virtual ::collection::index get_level();
100 virtual ::collection::index get_index();
103 virtual tree_item_base * __previous();
104 virtual tree_item_base * __next();
105 virtual tree_item_base * __head();
106 virtual tree_item_base * __tail();
110 virtual tree_item_base * _get_previous_or_parent(::collection::index * iLevelOffset =
nullptr);
111 virtual tree_item_base * _get_previous();
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);
120 inline const tree_item_base * _get_child_next_or_parent(::collection::index * iLevelOffset =
nullptr)
const
123 return ((tree_item_base *)(
this))->_get_child_next_or_parent(iLevelOffset);
131 virtual tree_item_base * _first_child();
138 inline tree_item_base * _get_proper_next(::collection::index * pindexLevel =
nullptr)
141 if ((m_etreeitemstate & ::data::e_tree_item_state_expanded))
144 return _get_child_next_or_parent(pindexLevel);
150 return _get_next_or_parent_next(pindexLevel);
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);
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();
165 virtual void _set_tree(
tree_base * ptree) =0;
178 virtual void erase_tree_item();
179 virtual void erase_tree_item_descendants();
180 virtual void _erase_child(tree_item_base * _ptreeitem);
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();
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);
194 virtual ::i32_boolean is_expanded()
const;
195 virtual ::i32_boolean is_expandable()
const;
197 virtual void on_fill_children();
199 virtual bool _is_descendant(tree_item_base * _pitem);
200 virtual bool _is_ascendant(tree_item_base * _pitem);