scrollpane::scrollpane(CVideo &video) : scrollarea(video), border_(5) { content_pos_.x = 0; content_pos_.y = 0; update_content_size(); set_scroll_rate(40); }
void scrollpane::remove_widget(widget* w) { widget_map::iterator itor = std::find_if(content_.begin(), content_.end(), widget_finder(w)); if (itor != content_.end()) content_.erase(itor); update_content_size(); }
void scrollpane::add_widget(widget* w, int x, int y, int z_order) { if (w == NULL) return; widget_map::iterator itor = std::find_if(content_.begin(), content_.end(), widget_finder(w)); if (itor != content_.end()) return; scrollpane_widget spw(w, x, y, z_order); w->set_clip_rect(client_area()); content_.insert(std::pair<int, scrollpane_widget>(z_order, spw)); position_widget(spw); // Recalculates the whole content size update_content_size(); }
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 scrollpane::clear() { content_.clear(); update_content_size(); }
void listbox::clear() { generator_->clear(); update_content_size(); }