Tree View: add getter for implementations vector to avoid passing around a reference to every new node

This commit is contained in:
Charles Dang 2017-03-08 18:52:06 +11:00
parent a6ba521a5e
commit 0cc0b9fc74
4 changed files with 7 additions and 17 deletions

View file

@ -43,7 +43,6 @@ tree_view::tree_view(const std::vector<node_definition>& node_definitions)
, indentation_step_size_(0)
, need_layout_(false)
, root_node_(new tree_view_node("root",
node_definitions_,
nullptr,
*this,
std::map<std::string, string_map>()))

View file

@ -99,6 +99,11 @@ public:
selection_change_callback_ = callback;
}
const std::vector<node_definition>& get_node_definitions() const
{
return node_definitions_;
}
protected:
/***** ***** ***** ***** keyboard functions ***** ***** ***** *****/
/** Inherited from scrollbar_container. */

View file

@ -34,7 +34,6 @@ namespace gui2
tree_view_node::tree_view_node(
const std::string& id,
const std::vector<node_definition>& node_definitions,
tree_view_node* parent_node,
tree_view& parent_tree_view,
const std::map<std::string /* widget id */, string_map>& data)
@ -43,7 +42,6 @@ tree_view_node::tree_view_node(
, tree_view_(&parent_tree_view)
, grid_()
, children_()
, node_definitions_(node_definitions)
, toggle_(nullptr)
, label_(nullptr)
, unfolded_(false)
@ -59,7 +57,7 @@ tree_view_node::tree_view_node(
return;
}
for(const auto& node_definition : node_definitions_) {
for(const auto& node_definition : get_tree_view().get_node_definitions()) {
if(node_definition.id != id) {
continue;
}
@ -142,7 +140,7 @@ tree_view_node& tree_view_node::add_child(
itor = children_.begin() + index;
}
itor = children_.insert(itor, new tree_view_node(id, node_definitions_, this, get_tree_view(), data));
itor = children_.insert(itor, new tree_view_node(id, this, get_tree_view(), data));
if(is_folded() /*|| is_root_node()*/) {
return *itor;

View file

@ -37,7 +37,6 @@ class tree_view_node : public widget
friend class tree_view;
public:
using node_definition = implementation::tree_node;
using node_children_vector = boost::ptr_vector<tree_view_node>;
bool operator==(const tree_view_node& node)
@ -47,7 +46,6 @@ public:
tree_view_node(
const std::string& id,
const std::vector<node_definition>& node_definitions,
tree_view_node* parent_node,
tree_view& parent_tree_view,
const std::map<std::string /* widget id */, string_map>& data);
@ -275,16 +273,6 @@ private:
*/
node_children_vector children_;
/**
* The node definitions known to use.
*
* This list is needed to create new nodes.
*
* @todo Maybe store this list in the tree_view to avoid copying the
* reference.
*/
const std::vector<node_definition>& node_definitions_;
/** The toggle for the folded state. */
selectable_item* toggle_;