remove some duplicated functions of treebox

This commit is contained in:
Jinhao 2017-02-19 21:09:06 +08:00
parent c1113cf41d
commit 9fa0bc2db9
2 changed files with 20 additions and 81 deletions

View File

@ -128,17 +128,11 @@ namespace nana
void placer(::nana::pat::cloneable<compset_placer_interface>&&);
const ::nana::pat::cloneable<compset_placer_interface>& placer() const;
nana::any & value(node_type*) const;
node_type* insert(node_type*, const std::string& key, std::string&&);
node_type* insert(const std::string& path, std::string&&);
bool verify_kinship(node_type* parent, node_type* child) const;
void remove(node_type*);
node_type * selected() const;
void selected(node_type*);
void set_expand(node_type*, bool);
void set_expand(const ::std::string& path, bool);
node_image_tag& icon(const ::std::string&) const;
void icon_erase(const ::std::string&);

View File

@ -14,7 +14,6 @@
#include <nana/gui/element.hpp>
#include <nana/gui/layout_utility.hpp>
#include <nana/system/platform.hpp>
#include <stdexcept>
#include <map>
namespace nana
@ -304,9 +303,9 @@ namespace nana
}
}
bool clear(node_type* node)
bool unlink(node_type* node, bool perf_clear)
{
if (!node)
if (!attr.tree_cont.verify(node))
return false;
if (node->is_ancestor_of(shape.first))
@ -325,12 +324,18 @@ namespace nana
if (node->is_ancestor_of(node_state.event_node))
node_state.event_node = nullptr;
if (node->child)
if (perf_clear)
{
attr.tree_cont.clear(node);
return true;
if (node->child)
{
attr.tree_cont.clear(node);
return true;
}
return false;
}
return false;
attr.tree_cont.remove(node);
return true;
}
bool draw(bool reset_scroll, bool ignore_update = false)
@ -439,17 +444,6 @@ namespace nana
return nullptr;
}
static bool check_kinship(const node_type* parent, const node_type * child)
{
if((!parent) || (!child))
return false;
while(child && (child != parent))
child = child->owner;
return (nullptr != child);
}
bool make_adjust(node_type * node, int reason)
{
if(!node) return false;
@ -911,8 +905,8 @@ namespace nana
if (node_)
{
auto impl = trigger_->impl();
impl->clear(node_);
impl->draw(true);
if(impl->unlink(node_, true))
impl->draw(true);
}
return *this;
}
@ -1703,14 +1697,6 @@ namespace nana
return impl_->data.comp_placer;
}
nana::any & trigger::value(node_type* node) const
{
if(impl_->attr.tree_cont.verify(node) == false)
throw std::invalid_argument("Nana.GUI.treebox.value() invalid node");
return node->value.second.value;
}
trigger::node_type* trigger::insert(node_type* node, const std::string& key, std::string&& title)
{
node_type * p = impl_->attr.tree_cont.node(node, key);
@ -1733,36 +1719,6 @@ namespace nana
return x;
}
bool trigger::verify_kinship(node_type* parent, node_type* child) const
{
if(false == (parent && child)) return false;
while(child && (child != parent))
child = child->owner;
return (nullptr != child);
}
void trigger::remove(node_type* node)
{
if (!tree().verify(node))
return;
auto & shape = impl_->shape;
auto & node_state = impl_->node_state;
if(verify_kinship(node, node_state.event_node))
node_state.event_node = nullptr;
if(verify_kinship(node, shape.first))
shape.first = nullptr;
if(verify_kinship(node, node_state.selected))
node_state.selected = nullptr;
impl_->attr.tree_cont.remove(node);
}
trigger::node_type* trigger::selected() const
{
return impl_->node_state.selected;
@ -1774,18 +1730,6 @@ namespace nana
impl_->draw(true);
}
void trigger::set_expand(node_type* node, bool exp)
{
if((impl_->data.widget_ptr) && impl_->set_expanded(node, exp))
impl_->draw(true);
}
void trigger::set_expand(const std::string& path, bool exp)
{
if(impl_->set_expanded(impl_->attr.tree_cont.find(path), exp))
impl_->draw(true);
}
node_image_tag& trigger::icon(const std::string& id) const
{
auto i = impl_->shape.image_table.find(id);
@ -2201,8 +2145,8 @@ namespace nana
void treebox::clear()
{
auto impl = get_drawer_trigger().impl();
impl->clear(impl->attr.tree_cont.get_root());
impl->draw(true);
if (impl->unlink(impl->attr.tree_cont.get_root(), true))
impl->draw(true);
}
treebox::node_image_type& treebox::icon(const std::string& id) const
@ -2234,15 +2178,16 @@ namespace nana
treebox::item_proxy treebox::erase(item_proxy i)
{
auto next = i.sibling();
get_drawer_trigger().remove(i._m_node());
if (get_drawer_trigger().impl()->unlink(i._m_node(), false))
get_drawer_trigger().impl()->draw(true);
return next;
}
void treebox::erase(const std::string& keypath)
{
auto i = find(keypath);
if(!i.empty())
get_drawer_trigger().remove(i._m_node());
if (!i.empty())
this->erase(i);
}
std::string treebox::make_key_path(item_proxy i, const std::string& splitter) const