void ttree_view::remove_node(ttree_view_node* node) { assert(node && node != root_node_ && node->parent_node_); const tpoint node_size = node->get_size(); boost::ptr_vector<ttree_view_node>::iterator itor = node->parent_node_->children_.begin(); for( ; itor != node->parent_node_->children_.end(); ++itor) { if(&*itor == node) { break; } } assert(itor != node->parent_node_->children_.end()); node->parent_node_->children_.erase(itor); if(get_size() == tpoint(0, 0)) { return; } // Don't shrink the width, need to think about a good algorithm to do so. resize_content(0, -node_size.y); }
void tlistbox::add_row(const string_map& item, const int index) { assert(generator_); const tgrid& row = generator_->create_item( index, list_builder_, item, callback_list_item_clicked); resize_content(row); }
grid& listbox::add_row(const std::map<std::string /* widget id */, string_map>& data, const int index) { assert(generator_); grid& row = generator_->create_item(index, list_builder_, data, std::bind(&listbox::list_item_clicked, this, _1)); resize_content(row); return row; }
grid& listbox::add_row(const string_map& item, const int index) { assert(generator_); grid& row = generator_->create_item(index, list_builder_, item, std::bind(&listbox::list_item_clicked, this, _1)); resize_content(row); return row; }
void tlistbox::add_row(const std::map<std::string /* widget id */, string_map>& data, const int index) { assert(generator_); const tgrid& row = generator_->create_item( index, list_builder_, data, callback_list_item_clicked); resize_content(row); }
void tlistbox::resize_content(const twidget& row) { if(row.get_visible() == tvisible::invisible) { return; } DBG_GUI_L << LOG_HEADER << " current size " << content_grid()->get_size() << " row size " << row.get_best_size() << ".\n"; const tpoint content = content_grid()->get_size(); tpoint size = row.get_best_size(); if(size.x < content.x) { size.x = 0; } else { size.x -= content.x; } resize_content(size.x, size.y); }
void listbox::remove_row(const unsigned row, unsigned count) { assert(generator_); if(row >= get_item_count()) { return; } if(!count || count + row > get_item_count()) { count = get_item_count() - row; } int height_reduced = 0; int width_reduced = 0; // TODO: Fix this for horizontal listboxes // Note the we have to use content_grid_ and cannot use "_list_grid" which is what generator_ uses. int row_pos_y = is_horizontal_ ? -1 : generator_->item(row).get_y() - content_grid_->get_y(); int row_pos_x = is_horizontal_ ? -1 : 0; for(; count; --count) { if(generator_->item(row).get_visible() != visibility::invisible) { if(is_horizontal_) { width_reduced += generator_->item(row).get_width(); } else { height_reduced += generator_->item(row).get_height(); } } generator_->delete_item(row); } if((height_reduced != 0 || width_reduced != 0) && get_item_count() != 0) { resize_content(-width_reduced, -height_reduced, row_pos_x, row_pos_y); } else { update_content_size(); } }
void tlistbox::remove_row(const unsigned row, unsigned count) { assert(generator_); if(row >= get_item_count()) { return; } if(!count || count > get_item_count()) { count = get_item_count(); } int height_reduced = 0; for(; count; --count) { if(generator_->item(row).get_visible() != INVISIBLE) { height_reduced += generator_->item(row).get_height(); } generator_->delete_item(row); } if(height_reduced != 0) { resize_content(0, -height_reduced); } }
void ttree_view::clear() { get_root_node().clear(); resize_content(0, -content_grid()->get_size().y); }