void tlistbox::set_row_shown(const std::vector<bool>& shown) { assert(generator_); assert(shown.size() == get_item_count()); twindow *window = get_window(); assert(window); const int selected_row = get_selected_row(); bool resize_needed; { twindow::tinvalidate_layout_blocker invalidate_layout_blocker(*window); for(size_t i = 0; i < shown.size(); ++i) { generator_->set_item_shown(i, shown[i]); } generator_->place(generator_->get_origin() , generator_->calculate_best_size()); resize_needed = !content_resize_request(); } if(resize_needed) { window->invalidate_layout(); } else { content_grid_->set_visible_area(content_visible_area()); set_dirty(); } if(selected_row != get_selected_row() && callback_value_changed_) { callback_value_changed_(this); } }
void tlistbox::handle_key_right_arrow(SDLMod modifier, bool& handled) { assert(generator_); generator_->handle_key_right_arrow(modifier, handled); // Inherited. if(handled) { // When scrolling make sure the new items is visible but leave the // vertical scrollbar position. const SDL_Rect& visible = content_visible_area(); SDL_Rect rect = generator_->item( generator_->get_selected_item()).get_rect(); rect.y = visible.y; rect.h = visible.h; show_content_rect(rect); if(callback_value_changed_) { callback_value_changed_(this); } } else { tscrollbar_container::handle_key_left_arrow(modifier, handled); } }
void tlistbox::set_row_shown(const unsigned row, const bool shown) { assert(generator_); twindow *window = get_window(); assert(window); const int selected_row = get_selected_row(); bool resize_needed; { twindow::tinvalidate_layout_blocker invalidate_layout_blocker(*window); generator_->set_item_shown(row, shown); generator_->place(generator_->get_origin() , generator_->calculate_best_size()); resize_needed = !content_resize_request(); } if(resize_needed) { window->invalidate_layout(); } else { content_grid_->set_visible_area(content_visible_area()); set_dirty(); } if(selected_row != get_selected_row() && callback_value_changed_) { callback_value_changed_(this); } }
void tlistbox::handle_key_down_arrow(SDLMod modifier, bool& handled) { assert(generator_); generator_->handle_key_down_arrow(modifier, handled); if(handled) { // When scrolling make sure the new items is visible but leave the // horizontal scrollbar position. const SDL_Rect& visible = content_visible_area(); SDL_Rect rect = generator_->item(generator_->get_selected_item()) .get_rectangle(); rect.x = visible.x; rect.w = visible.w; show_content_rect(rect); if(callback_value_changed_) { callback_value_changed_(*this); } } else { // Inherited. tscrollbar_container::handle_key_up_arrow(modifier, handled); } }
void tslider::child_callback_positioner_moved() { sound::play_UI_sound(settings::sound_slider_adjust); if (callback_value_changed_) { callback_value_changed_(this, minimum_value_ + get_item_position() * get_step_size()); } }
void tlistbox::list_item_clicked(twidget& caller) { assert(generator_); /** @todo Hack to capture the keyboard focus. */ get_window()->keyboard_capture(this); for(size_t i = 0; i < generator_->get_item_count(); ++i) { if(generator_->item(i).has_widget(caller)) { generator_->toggle_item(i); if(callback_value_changed_) { callback_value_changed_(*this); } return; } } assert(false); }
void tlistbox::set_row_shown(const boost::dynamic_bitset<>& shown) { assert(generator_); assert(shown.size() == get_item_count()); if (generator_->get_items_shown() == shown) { LOG_GUI_G << LOG_HEADER << " returning early" << std::endl; return; } twindow* window = get_window(); assert(window); const int selected_row = get_selected_row(); bool resize_needed; { twindow::tinvalidate_layout_blocker invalidate_layout_blocker(*window); for(size_t i = 0; i < shown.size(); ++i) { generator_->set_item_shown(i, shown[i]); } tpoint best_size = generator_->calculate_best_size(); generator_->place(generator_->get_origin(), { std::max(best_size.x, content_visible_area().w), best_size.y }); resize_needed = !content_resize_request(); } if(resize_needed) { window->invalidate_layout(); } else { content_grid_->set_visible_rectangle(content_visible_area()); set_is_dirty(true); } if(selected_row != get_selected_row() && callback_value_changed_) { callback_value_changed_(*this); } }