diff options
Diffstat (limited to 'vcl/source/app')
-rw-r--r-- | vcl/source/app/salvtables.cxx | 8 | ||||
-rw-r--r-- | vcl/source/app/weldutils.cxx | 19 |
2 files changed, 25 insertions, 2 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 5ec6794ab2dd..f513a44c4d98 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -3433,9 +3433,13 @@ public: } } - virtual void set_column_custom_renderer(int nColumn) override + virtual void set_column_custom_renderer(int nColumn, bool bEnable) override { - m_aCustomRenders.insert(nColumn); + assert(n_children() == 0 && "tree must be empty"); + if (bEnable) + m_aCustomRenders.insert(nColumn); + else + m_aCustomRenders.erase(nColumn); } virtual void show() override diff --git a/vcl/source/app/weldutils.cxx b/vcl/source/app/weldutils.cxx index dea707be3c5e..19f6464052d6 100644 --- a/vcl/source/app/weldutils.cxx +++ b/vcl/source/app/weldutils.cxx @@ -105,6 +105,25 @@ void TriStateEnabled::ButtonToggled(weld::ToggleButton& rToggle) } eState = rToggle.get_state(); } + +void RemoveParentKeepChildren(weld::TreeView& rTreeView, weld::TreeIter& rParent) +{ + if (rTreeView.iter_has_child(rParent)) + { + std::unique_ptr<weld::TreeIter> xNewParent(rTreeView.make_iterator(&rParent)); + if (!rTreeView.iter_parent(*xNewParent)) + xNewParent.reset(); + + while (true) + { + std::unique_ptr<weld::TreeIter> xChild(rTreeView.make_iterator(&rParent)); + if (!rTreeView.iter_children(*xChild)) + break; + rTreeView.move_subtree(*xChild, xNewParent.get(), -1); + } + } + rTreeView.remove(rParent); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |