add ttree_view_node::unfolded_ memeber variable
Previously ttree_view_node used toggle_->get_value() to know whether it is folded or not. This makes ttree_view_node more robust against cases where people change the value of toggle_->get_value() manually using c++ or lua code. This also allows us to have nodes that can only be folded via code and have no toggle panel to expand.
This commit is contained in:
parent
c7de7ce9d4
commit
21001bcb32
2 changed files with 19 additions and 7 deletions
|
@ -47,6 +47,7 @@ ttree_view_node::ttree_view_node(
|
|||
, node_definitions_(node_definitions)
|
||||
, toggle_(NULL)
|
||||
, label_(NULL)
|
||||
, unfolded_(false)
|
||||
, callback_state_change_()
|
||||
, callback_state_to_folded_()
|
||||
, callback_state_to_unfolded_()
|
||||
|
@ -116,6 +117,9 @@ ttree_view_node::ttree_view_node(
|
|||
|
||||
VALIDATE(false, _("Unknown builder id for tree view node."));
|
||||
}
|
||||
else {
|
||||
unfolded_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
ttree_view_node::~ttree_view_node()
|
||||
|
@ -211,15 +215,16 @@ const ttree_view& ttree_view_node::tree_view() const
|
|||
|
||||
bool ttree_view_node::is_folded() const
|
||||
{
|
||||
return toggle_ && !toggle_->get_value();
|
||||
return !unfolded_;
|
||||
}
|
||||
|
||||
void ttree_view_node::fold(/*const bool recursive*/)
|
||||
{
|
||||
if(is_folded()) {
|
||||
fold_internal();
|
||||
|
||||
toggle_->set_value(false);
|
||||
if(toggle_) {
|
||||
toggle_->set_value(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -227,8 +232,9 @@ void ttree_view_node::unfold(/*const texpand_mode mode*/)
|
|||
{
|
||||
if(!is_folded()) {
|
||||
unfold_internal();
|
||||
|
||||
toggle_->set_value(true);
|
||||
if(toggle_) {
|
||||
toggle_->set_value(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -242,6 +248,7 @@ void ttree_view_node::fold_internal()
|
|||
assert(height_modification <= 0);
|
||||
|
||||
tree_view().resize_content(width_modification, height_modification, -1, calculate_ypos());
|
||||
unfolded_ = false;
|
||||
|
||||
if(callback_state_to_folded_) {
|
||||
callback_state_to_folded_(*this);
|
||||
|
@ -258,6 +265,7 @@ void ttree_view_node::unfold_internal()
|
|||
assert(height_modification >= 0);
|
||||
|
||||
tree_view().resize_content(width_modification, height_modification, -1, calculate_ypos());
|
||||
unfolded_ = true;
|
||||
|
||||
if(callback_state_to_unfolded_) {
|
||||
callback_state_to_unfolded_(*this);
|
||||
|
@ -584,8 +592,11 @@ ttree_view_node::signal_handler_left_button_click(const event::tevent event)
|
|||
* The code works but feels rather hacky, so better move back to the
|
||||
* drawingboard for 1.9.
|
||||
*/
|
||||
|
||||
// is_folded() returns the new state, which is why this looks backwards
|
||||
const bool unfolded_new = toggle_->get_value_bool();
|
||||
if(unfolded_ == unfolded_new) {
|
||||
return;
|
||||
}
|
||||
unfolded_ = unfolded_new;
|
||||
is_folded() ? fold_internal() : unfold_internal();
|
||||
|
||||
if(callback_state_change_) {
|
||||
|
|
|
@ -252,6 +252,7 @@ private:
|
|||
/** The label to show our selected state. */
|
||||
tselectable_* label_;
|
||||
|
||||
bool unfolded_;
|
||||
void fold_internal();
|
||||
void unfold_internal();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue