123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #if defined(Hiro_TreeView)
- auto mTreeView::allocate() -> pObject* {
- return new pTreeView(*this);
- }
- auto mTreeView::destruct() -> void {
- for(auto& item : state.items) item->destruct();
- mWidget::destruct();
- }
- auto mTreeView::activation() const -> Mouse::Click {
- return state.activation;
- }
- auto mTreeView::append(sTreeViewItem item) -> type& {
- state.items.append(item);
- item->setParent(this, itemCount() - 1);
- signal(append, item);
- return *this;
- }
- auto mTreeView::backgroundColor() const -> Color {
- return state.backgroundColor;
- }
- auto mTreeView::collapse(bool recursive) -> type& {
- for(auto& item : state.items) item->collapse(recursive);
- return *this;
- }
- auto mTreeView::doActivate() const -> void {
- if(state.onActivate) return state.onActivate();
- }
- auto mTreeView::doChange() const -> void {
- if(state.onChange) return state.onChange();
- }
- auto mTreeView::doContext() const -> void {
- if(state.onContext) return state.onContext();
- }
- auto mTreeView::doToggle(sTreeViewItem item) const -> void {
- if(state.onToggle) return state.onToggle(item);
- }
- auto mTreeView::expand(bool recursive) -> type& {
- for(auto& item : state.items) item->expand(recursive);
- return *this;
- }
- auto mTreeView::foregroundColor() const -> Color {
- return state.foregroundColor;
- }
- auto mTreeView::item(const string& path) const -> TreeViewItem {
- if(!path) return {};
- auto paths = path.split("/");
- unsigned position = paths.takeLeft().natural();
- if(position >= itemCount()) return {};
- if(!paths) return state.items[position];
- return state.items[position]->item(paths.merge("/"));
- }
- auto mTreeView::itemCount() const -> unsigned {
- return state.items.size();
- }
- auto mTreeView::items() const -> vector<TreeViewItem> {
- vector<TreeViewItem> items;
- for(auto& item : state.items) items.append(item);
- return items;
- }
- auto mTreeView::onActivate(const function<void ()>& callback) -> type& {
- state.onActivate = callback;
- return *this;
- }
- auto mTreeView::onChange(const function<void ()>& callback) -> type& {
- state.onChange = callback;
- return *this;
- }
- auto mTreeView::onContext(const function<void ()>& callback) -> type& {
- state.onContext = callback;
- return *this;
- }
- auto mTreeView::onToggle(const function<void (sTreeViewItem)>& callback) -> type& {
- state.onToggle = callback;
- return *this;
- }
- auto mTreeView::remove(sTreeViewItem item) -> type& {
- signal(remove, item);
- state.items.remove(item->offset());
- for(auto n : range(item->offset(), itemCount())) {
- state.items[n]->adjustOffset(-1);
- }
- item->setParent();
- return *this;
- }
- auto mTreeView::reset() -> type& {
- state.selectedPath.reset();
- while(state.items) remove(state.items.right());
- return *this;
- }
- auto mTreeView::selectNone() -> type& {
- if(auto item = selected()) {
-
-
- }
- return *this;
- }
- auto mTreeView::selected() const -> TreeViewItem {
- return item(state.selectedPath);
- }
- auto mTreeView::setActivation(Mouse::Click activation) -> type& {
- state.activation = activation;
- signal(setActivation, activation);
- return *this;
- }
- auto mTreeView::setBackgroundColor(Color color) -> type& {
- state.backgroundColor = color;
- signal(setBackgroundColor, color);
- return *this;
- }
- auto mTreeView::setForegroundColor(Color color) -> type& {
- state.foregroundColor = color;
- signal(setForegroundColor, color);
- return *this;
- }
- auto mTreeView::setParent(mObject* object, signed offset) -> type& {
- for(auto& item : reverse(state.items)) item->destruct();
- mObject::setParent(object, offset);
- for(auto& item : state.items) item->setParent(this, item->offset());
- return *this;
- }
- #endif
|