widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #08758
[Merge] lp:~widelands-dev/widelands/fsmenu_fullscreen_3_mapselect into lp:widelands
GunChleoc has proposed merging lp:~widelands-dev/widelands/fsmenu_fullscreen_3_mapselect into lp:widelands.
Commit message:
Map Selection screen now relayouts itself on fullscreen toggle.
Requested reviews:
Widelands Developers (widelands-dev)
Related bugs:
Bug #1398733 in widelands: "Fullscreen Menus cannot relayout themselves"
https://bugs.launchpad.net/widelands/+bug/1398733
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/fsmenu_fullscreen_3_mapselect/+merge/310744
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/fsmenu_fullscreen_3_mapselect into lp:widelands.
=== modified file 'src/editor/ui_menus/main_menu_save_map.cc'
--- src/editor/ui_menus/main_menu_save_map.cc 2016-08-04 18:09:55 +0000
+++ src/editor/ui_menus/main_menu_save_map.cc 2016-11-14 09:12:14 +0000
@@ -77,7 +77,7 @@
set_current_directory(curdir_);
// Make room for edit_options_ button
- map_details_.set_max_height(map_details_.get_h() - buth_ - padding_);
+ map_details_.set_size(map_details_.get_w(), map_details_.get_h() - buth_ - padding_);
table_.selected.connect(boost::bind(&MainMenuSaveMap::clicked_item, boost::ref(*this)));
table_.double_clicked.connect(
=== modified file 'src/ui_basic/table.cc'
--- src/ui_basic/table.cc 2016-10-24 14:04:00 +0000
+++ src/ui_basic/table.cc 2016-11-14 09:12:14 +0000
@@ -116,9 +116,8 @@
columns_.push_back(c);
}
if (!scrollbar_) {
- scrollbar_ =
- new Scrollbar(get_parent(), get_x() + get_w() - Scrollbar::kSize, get_y() + headerheight_,
- Scrollbar::kSize, get_h() - headerheight_, false);
+ scrollbar_ = new Scrollbar(this, get_w() - Scrollbar::kSize, headerheight_, Scrollbar::kSize,
+ get_h() - headerheight_, false);
scrollbar_->moved.connect(boost::bind(&Table::set_scrollpos, this, _1));
scrollbar_->set_steps(1);
scrollbar_->set_singlestepsize(lineheight_);
@@ -523,6 +522,42 @@
return columns_[sort_column_].compare(a, b);
}
+void Table<void*>::layout() {
+ if (!columns_.empty()) {
+ // Find the widest column for resizing
+ int all_columns_width = scrollbar_ && scrollbar_->is_enabled() ? scrollbar_->get_w() : 0;
+ size_t index = 0;
+ uint32_t widest_width = columns_[index].width;
+ for (size_t i = 1; i < columns_.size(); ++i) {
+ const uint32_t width = columns_[i].width;
+ all_columns_width += width;
+ if (width > widest_width) {
+ widest_width = width;
+ index = i;
+ }
+ }
+ // Now resize
+ Column& column = columns_.at(index);
+ // TODO(GunChleoc): The -11 was arrived at by trial and error - revisit this code when we get
+ // the scrollbar beautification branch in. This point might become moot.
+ column.width = column.width + get_w() - all_columns_width - 11;
+ column.btn->set_size(column.width, column.btn->get_h());
+ int offset = 0;
+ for (const auto& col : columns_) {
+ col.btn->set_pos(Vector2i(offset, col.btn->get_y()));
+ offset = col.btn->get_x() + col.btn->get_w();
+ }
+ }
+
+ // Position the scrollbar
+ if (scrollbar_) {
+ scrollbar_->set_size(scrollbar_->get_w(), get_h() - headerheight_);
+ scrollbar_->set_pos(Vector2i(get_w() - Scrollbar::kSize, headerheight_));
+ scrollbar_->set_pagesize(get_h() - 2 * get_lineheight() - headerheight_);
+ scrollbar_->set_steps(entry_records_.size() * get_lineheight() - get_h() - headerheight_);
+ }
+}
+
/**
* Sort the table alphabetically. Make sure that the current selection stays
* valid (though it might scroll out of visibility).
=== modified file 'src/ui_basic/table.h'
--- src/ui_basic/table.h 2016-08-04 15:49:05 +0000
+++ src/ui_basic/table.h 2016-11-14 09:12:14 +0000
@@ -264,6 +264,7 @@
bool default_compare_checkbox(uint32_t column, uint32_t a, uint32_t b);
bool default_compare_string(uint32_t column, uint32_t a, uint32_t b);
bool sort_helper(uint32_t a, uint32_t b);
+ void layout() override;
struct Column;
using Columns = std::vector<Column>;
=== modified file 'src/ui_fsmenu/campaign_select.cc'
--- src/ui_fsmenu/campaign_select.cc 2016-09-26 07:32:54 +0000
+++ src/ui_fsmenu/campaign_select.cc 2016-11-14 09:12:14 +0000
@@ -114,6 +114,10 @@
fill_table();
}
+void FullscreenMenuCampaignSelect::layout() {
+ // TODO(GunChleoc): Implement when we have box layout for the details.
+}
+
/**
* OK was clicked, after an entry of campaignlist got selected.
*/
@@ -350,6 +354,10 @@
table_.focus();
}
+void FullscreenMenuCampaignMapSelect::layout() {
+ // TODO(GunChleoc): Implement when we have box layout for the details.
+}
+
std::string FullscreenMenuCampaignMapSelect::get_map() {
return campmapfile;
}
=== modified file 'src/ui_fsmenu/campaign_select.h'
--- src/ui_fsmenu/campaign_select.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/campaign_select.h 2016-11-14 09:12:14 +0000
@@ -47,6 +47,8 @@
void fill_table() override;
private:
+ void layout() override;
+
/// Updates buttons and text labels and returns whether a table entry is selected.
bool set_has_selection();
@@ -101,6 +103,8 @@
void fill_table() override;
private:
+ void layout() override;
+
/// Updates buttons and text labels and returns whether a table entry is selected.
bool set_has_selection();
/**
=== modified file 'src/ui_fsmenu/internet_lobby.cc'
--- src/ui_fsmenu/internet_lobby.cc 2016-10-26 12:43:57 +0000
+++ src/ui_fsmenu/internet_lobby.cc 2016-11-14 09:12:14 +0000
@@ -150,6 +150,10 @@
connect_to_metaserver();
}
+void FullscreenMenuInternetLobby::layout() {
+ // TODO(GunChleoc): Box layout and then implement
+}
+
/// think function of the UI (main loop)
void FullscreenMenuInternetLobby::think() {
FullscreenMenuBase::think();
=== modified file 'src/ui_fsmenu/internet_lobby.h'
--- src/ui_fsmenu/internet_lobby.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/internet_lobby.h 2016-11-14 09:12:14 +0000
@@ -44,6 +44,8 @@
void clicked_ok() override;
private:
+ void layout() override;
+
uint32_t butx_;
uint32_t butw_;
uint32_t buth_;
=== modified file 'src/ui_fsmenu/launch_mpg.cc'
--- src/ui_fsmenu/launch_mpg.cc 2016-10-31 08:14:21 +0000
+++ src/ui_fsmenu/launch_mpg.cc 2016-11-14 09:12:14 +0000
@@ -237,6 +237,10 @@
delete chat_;
}
+void FullscreenMenuLaunchMPG::layout() {
+ // TODO(GunChleoc): Implement when we have redesigned this
+}
+
void FullscreenMenuLaunchMPG::think() {
if (ctrl_)
ctrl_->think();
=== modified file 'src/ui_fsmenu/launch_mpg.h'
--- src/ui_fsmenu/launch_mpg.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/launch_mpg.h 2016-11-14 09:12:14 +0000
@@ -58,6 +58,8 @@
void clicked_back() override;
private:
+ void layout() override;
+
LuaInterface* lua_;
void change_map_or_save();
=== modified file 'src/ui_fsmenu/launch_spg.cc'
--- src/ui_fsmenu/launch_spg.cc 2016-10-29 10:21:08 +0000
+++ src/ui_fsmenu/launch_spg.cc 2016-11-14 09:12:14 +0000
@@ -163,6 +163,10 @@
delete lua_;
}
+void FullscreenMenuLaunchSPG::layout() {
+ // TODO(GunChleoc): Implement when we have redesigned this
+}
+
/**
* Select a map as a first step in launching a game, before
* showing the actual setup menu.
=== modified file 'src/ui_fsmenu/launch_spg.h'
--- src/ui_fsmenu/launch_spg.h 2016-10-29 10:21:08 +0000
+++ src/ui_fsmenu/launch_spg.h 2016-11-14 09:12:14 +0000
@@ -64,6 +64,8 @@
void clicked_back() override;
private:
+ void layout() override;
+
LuaInterface* lua_;
void select_map();
=== modified file 'src/ui_fsmenu/load_map_or_game.cc'
--- src/ui_fsmenu/load_map_or_game.cc 2016-10-26 12:43:57 +0000
+++ src/ui_fsmenu/load_map_or_game.cc 2016-11-14 09:12:14 +0000
@@ -38,34 +38,31 @@
padding_(4),
indent_(10),
label_height_(20),
- tablex_(get_w() * 47 / 2500),
- tabley_(get_h() * 17 / 50),
- tablew_(get_w() * 711 / 1250),
- tableh_(get_h() * 6083 / 10000),
right_column_margin_(15),
- right_column_x_(tablex_ + tablew_ + right_column_margin_),
- buty_(get_h() * 9 / 10),
- butw_((get_w() - right_column_x_ - right_column_margin_) / 2 - padding_),
- buth_(get_h() * 9 / 200),
- right_column_tab_(get_w() - right_column_margin_ - butw_),
// Main buttons
- back_(this,
- "back",
- right_column_x_,
- buty_,
- butw_,
- buth_,
- g_gr->images().get("images/ui_basic/but0.png"),
- _("Back")),
- ok_(this,
- "ok",
- get_w() - right_column_margin_ - butw_,
- buty_,
- butw_,
- buth_,
- g_gr->images().get("images/ui_basic/but2.png"),
- _("OK")) {
+ back_(this, "back", 0, 0, 0, 0, g_gr->images().get("images/ui_basic/but0.png"), _("Back")),
+ ok_(this, "ok", 0, 0, 0, 0, g_gr->images().get("images/ui_basic/but2.png"), _("OK")) {
+ layout();
+}
+
+void FullscreenMenuLoadMapOrGame::layout() {
+ // UI coordinates and spacers
+ tablex_ = get_w() * 47 / 2500;
+ tabley_ = get_h() * 17 / 50;
+ tablew_ = get_w() * 711 / 1250;
+ tableh_ = get_h() * 6083 / 10000;
+ right_column_x_ = tablex_ + tablew_ + right_column_margin_;
+ buty_ = get_h() * 9 / 10;
+ butw_ = (get_w() - right_column_x_ - right_column_margin_) / 2 - padding_;
+ buth_ = get_h() * 9 / 200;
+ right_column_tab_ = get_w() - right_column_margin_ - butw_;
+
+ // Main buttons
+ back_.set_size(butw_, buth_);
+ back_.set_pos(Vector2i(right_column_x_, buty_));
+ ok_.set_size(butw_, buth_);
+ ok_.set_pos(Vector2i(get_w() - right_column_margin_ - butw_, buty_));
}
int32_t FullscreenMenuLoadMapOrGame::get_y_from_preceding(UI::Panel& preceding_panel) {
=== modified file 'src/ui_fsmenu/load_map_or_game.h'
--- src/ui_fsmenu/load_map_or_game.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/load_map_or_game.h 2016-11-14 09:12:14 +0000
@@ -54,6 +54,8 @@
FullscreenMenuLoadMapOrGame();
protected:
+ void layout() override;
+
// Updates the information display on the right-hand side.
// Call this function when a different entry in the table gets selected.
virtual void entry_selected() {
@@ -68,14 +70,14 @@
int32_t get_right_column_w(int32_t x);
// UI coordinates and spacers
- int32_t const padding_; // Common padding between panels
- int32_t const indent_; // Indent for elements below labels
- int32_t const label_height_;
- int32_t const tablex_, tabley_, tablew_, tableh_;
- int32_t const right_column_margin_; // X margins of the right column
- int32_t const right_column_x_;
- int32_t const buty_, butw_, buth_; // Button dimensions
- int32_t const right_column_tab_;
+ const int32_t padding_; // Common padding between panels
+ const int32_t indent_; // Indent for elements below labels
+ const int32_t label_height_;
+ const int32_t right_column_margin_; // X margins of the right column
+ int32_t tablex_, tabley_, tablew_, tableh_;
+ int32_t right_column_x_;
+ int32_t buty_, butw_, buth_; // Button dimensions
+ int32_t right_column_tab_;
// Main buttons
UI::Button back_;
=== modified file 'src/ui_fsmenu/loadgame.cc'
--- src/ui_fsmenu/loadgame.cc 2016-10-24 14:04:00 +0000
+++ src/ui_fsmenu/loadgame.cc 2016-11-14 09:12:14 +0000
@@ -234,6 +234,10 @@
fill_table();
}
+void FullscreenMenuLoadGame::layout() {
+ // TODO(GunChleoc): Implement when we have box layout for the details.
+}
+
void FullscreenMenuLoadGame::think() {
if (ctrl_) {
ctrl_->think();
=== modified file 'src/ui_fsmenu/loadgame.h'
--- src/ui_fsmenu/loadgame.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/loadgame.h 2016-11-14 09:12:14 +0000
@@ -91,6 +91,8 @@
void fill_table() override;
private:
+ void layout() override;
+
/// Updates buttons and text labels and returns whether a table entry is selected.
bool set_has_selection();
bool compare_date_descending(uint32_t, uint32_t);
=== modified file 'src/ui_fsmenu/mapselect.cc'
--- src/ui_fsmenu/mapselect.cc 2016-10-28 18:04:11 +0000
+++ src/ui_fsmenu/mapselect.cc 2016-11-14 09:12:14 +0000
@@ -42,11 +42,12 @@
GameController* const ctrl)
: FullscreenMenuLoadMapOrGame(),
checkbox_space_(25),
- checkboxes_y_(tabley_ - 120),
+ // Less padding for big fonts; space is tight.
+ checkbox_padding_(UI::g_fh1->fontset()->size_offset() > 0 ? 0 : 2 * padding_),
// Main title
- title_(this, get_w() / 2, checkboxes_y_ / 3, _("Choose a map"), UI::Align::kHCenter),
-
+ title_(this, 0, 0, _("Choose a map"), UI::Align::kHCenter),
+ checkboxes_(this, 0, 0, UI::Box::Vertical, 0, 0, 2 * padding_),
table_(this, tablex_, tabley_, tablew_, tableh_, false),
map_details_(this,
right_column_x_,
@@ -77,45 +78,40 @@
1, boost::bind(&FullscreenMenuMapSelect::compare_mapnames, this, _1, _2));
table_.set_column_compare(2, boost::bind(&FullscreenMenuMapSelect::compare_size, this, _1, _2));
- UI::Box* vbox =
- new UI::Box(this, tablex_, checkboxes_y_, UI::Box::Horizontal, checkbox_space_, get_w());
+ UI::Box* hbox = new UI::Box(&checkboxes_, 0, 0, UI::Box::Horizontal, checkbox_space_, get_w());
// Must be initialized before tag checkboxes
cb_dont_localize_mapnames_ =
- new UI::Checkbox(vbox, Vector2i(0, 0), _("Show original map names"));
+ new UI::Checkbox(hbox, Vector2i(0, 0), _("Show original map names"));
cb_dont_localize_mapnames_->set_state(false);
cb_dont_localize_mapnames_->changedto.connect(
boost::bind(&FullscreenMenuMapSelect::fill_table, boost::ref(*this)));
- cb_show_all_maps_ = add_tag_checkbox(vbox, "blumba", _("Show all maps"));
+ cb_show_all_maps_ = add_tag_checkbox(hbox, "blumba", _("Show all maps"));
tags_checkboxes_.clear(); // Remove this again, it is a special tag checkbox
cb_show_all_maps_->set_state(true);
- vbox->add(cb_dont_localize_mapnames_, UI::Align::kLeft, true);
- vbox->set_size(get_w() - 2 * tablex_, checkbox_space_);
-
- vbox = new UI::Box(this, tablex_, vbox->get_y() + vbox->get_h() + padding_, UI::Box::Horizontal,
- checkbox_space_, get_w());
- add_tag_checkbox(vbox, "official", localize_tag("official"));
- add_tag_checkbox(vbox, "unbalanced", localize_tag("unbalanced"));
- add_tag_checkbox(vbox, "seafaring", localize_tag("seafaring"));
- add_tag_checkbox(vbox, "artifacts", localize_tag("artifacts"));
- add_tag_checkbox(vbox, "scenario", localize_tag("scenario"));
- vbox->set_size(get_w() - 2 * tablex_, checkbox_space_);
-
- vbox = new UI::Box(this, tablex_, vbox->get_y() + vbox->get_h() + padding_, UI::Box::Horizontal,
- checkbox_space_, get_w());
- add_tag_checkbox(vbox, "ffa", localize_tag("ffa"));
- add_tag_checkbox(vbox, "1v1", localize_tag("1v1"));
-
- vbox->set_size(get_w() - 2 * tablex_, checkbox_space_);
-
- vbox = new UI::Box(this, tablex_, vbox->get_y() + vbox->get_h() + padding_, UI::Box::Horizontal,
- checkbox_space_, get_w());
- add_tag_checkbox(vbox, "2teams", localize_tag("2teams"));
- add_tag_checkbox(vbox, "3teams", localize_tag("3teams"));
- add_tag_checkbox(vbox, "4teams", localize_tag("4teams"));
- vbox->set_size(get_w() - 2 * tablex_, checkbox_space_);
+ hbox->add(cb_dont_localize_mapnames_, UI::Align::kLeft, true);
+ checkboxes_.add(hbox, UI::Align::kLeft, true);
+
+ hbox = new UI::Box(&checkboxes_, 0, 0, UI::Box::Horizontal, checkbox_space_, get_w());
+ add_tag_checkbox(hbox, "official", localize_tag("official"));
+ add_tag_checkbox(hbox, "unbalanced", localize_tag("unbalanced"));
+ add_tag_checkbox(hbox, "seafaring", localize_tag("seafaring"));
+ add_tag_checkbox(hbox, "artifacts", localize_tag("artifacts"));
+ add_tag_checkbox(hbox, "scenario", localize_tag("scenario"));
+ checkboxes_.add(hbox, UI::Align::kLeft, true);
+
+ hbox = new UI::Box(&checkboxes_, 0, 0, UI::Box::Horizontal, checkbox_space_, get_w());
+ add_tag_checkbox(hbox, "ffa", localize_tag("ffa"));
+ add_tag_checkbox(hbox, "1v1", localize_tag("1v1"));
+ checkboxes_.add(hbox, UI::Align::kLeft, true);
+
+ hbox = new UI::Box(&checkboxes_, 0, 0, UI::Box::Horizontal, checkbox_space_, get_w());
+ add_tag_checkbox(hbox, "2teams", localize_tag("2teams"));
+ add_tag_checkbox(hbox, "3teams", localize_tag("3teams"));
+ add_tag_checkbox(hbox, "4teams", localize_tag("4teams"));
+ checkboxes_.add(hbox, UI::Align::kLeft, true);
scenario_types_ = settings_->settings().multiplayer ? Map::MP_SCENARIO : Map::SP_SCENARIO;
@@ -125,6 +121,20 @@
// We don't need the unlocalizing option if there is nothing to unlocalize.
// We know this after the list is filled.
cb_dont_localize_mapnames_->set_visible(has_translated_mapname_);
+ layout();
+}
+
+void FullscreenMenuMapSelect::layout() {
+ title_.set_size(get_w(), title_.get_h());
+ FullscreenMenuLoadMapOrGame::layout();
+ checkboxes_y_ = tabley_ - 4 * (cb_show_all_maps_->get_h() + checkbox_padding_) - 2 * padding_;
+ title_.set_pos(Vector2i(0, checkboxes_y_ / 3));
+ checkboxes_.set_pos(Vector2i(tablex_, checkboxes_y_));
+ checkboxes_.set_size(get_w() - 2 * tablex_, tabley_ - checkboxes_y_);
+ table_.set_size(tablew_, tableh_);
+ table_.set_pos(Vector2i(tablex_, tabley_));
+ map_details_.set_size(get_right_column_w(right_column_x_), tableh_ - buth_ - 4 * padding_);
+ map_details_.set_pos(Vector2i(right_column_x_, tabley_));
}
void FullscreenMenuMapSelect::think() {
=== modified file 'src/ui_fsmenu/mapselect.h'
--- src/ui_fsmenu/mapselect.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/mapselect.h 2016-11-14 09:12:14 +0000
@@ -52,6 +52,8 @@
void fill_table() override;
private:
+ void layout() override;
+
bool compare_players(uint32_t, uint32_t);
bool compare_mapnames(uint32_t, uint32_t);
bool compare_size(uint32_t, uint32_t);
@@ -62,9 +64,11 @@
void tagbox_changed(int32_t, bool);
int32_t const checkbox_space_;
- int32_t const checkboxes_y_;
+ const int checkbox_padding_;
+ int32_t checkboxes_y_;
UI::Textarea title_;
+ UI::Box checkboxes_;
MapTable table_;
MapDetails map_details_;
=== modified file 'src/ui_fsmenu/netsetup_lan.cc'
--- src/ui_fsmenu/netsetup_lan.cc 2016-09-25 10:13:23 +0000
+++ src/ui_fsmenu/netsetup_lan.cc 2016-11-14 09:12:14 +0000
@@ -124,6 +124,10 @@
joingame.set_enabled(false);
}
+void FullscreenMenuNetSetupLAN::layout() {
+ // TODO(GunChleoc): Box layout and then implement
+}
+
void FullscreenMenuNetSetupLAN::think() {
FullscreenMenuBase::think();
=== modified file 'src/ui_fsmenu/netsetup_lan.h'
--- src/ui_fsmenu/netsetup_lan.h 2016-08-04 15:49:05 +0000
+++ src/ui_fsmenu/netsetup_lan.h 2016-11-14 09:12:14 +0000
@@ -57,6 +57,8 @@
void clicked_ok() override;
private:
+ void layout() override;
+
uint32_t butx_;
uint32_t butw_;
uint32_t buth_;
=== modified file 'src/wui/mapdetails.cc'
--- src/wui/mapdetails.cc 2016-10-16 09:31:42 +0000
+++ src/wui/mapdetails.cc 2016-11-14 09:12:14 +0000
@@ -27,6 +27,7 @@
#include "base/i18n.h"
#include "base/log.h"
#include "base/wexception.h"
+#include "graphic/font_handler1.h"
#include "graphic/graphic.h"
#include "graphic/text_constants.h"
#include "io/filesystem/layered_filesystem.h"
@@ -34,6 +35,7 @@
#include "logic/game_settings.h"
#include "map_io/widelands_map_loader.h"
#include "ui_basic/box.h"
+#include "ui_basic/scrollbar.h"
#include "wui/map_tags.h"
namespace {
@@ -68,33 +70,30 @@
}
} // namespace
-MapDetails::MapDetails(
- Panel* parent, int32_t x, int32_t y, int32_t max_w, int32_t max_h, Style style)
- : UI::Panel(parent, x, y, max_w, max_h),
+MapDetails::MapDetails(Panel* parent, int32_t x, int32_t y, int32_t w, int32_t h, Style style)
+ : UI::Panel(parent, x, y, w, h),
style_(style),
padding_(4),
- main_box_(this, 0, 0, UI::Box::Vertical, max_w, max_h, 0),
+ main_box_(this, 0, 0, UI::Box::Vertical, 0, 0, 0),
name_label_(&main_box_,
0,
0,
- max_w - padding_,
- 20,
+ UI::Scrollbar::kSize,
+ 0,
"",
UI::Align::kLeft,
UI::MultilineTextarea::ScrollMode::kNoScrolling),
- descr_(&main_box_, 0, 0, max_w, 20, ""),
+ descr_(&main_box_, 0, 0, UI::Scrollbar::kSize, 0, ""),
suggested_teams_box_(
- new UI::SuggestedTeamsBox(this, 0, 0, UI::Box::Vertical, padding_, 0, max_w)) {
+ new UI::SuggestedTeamsBox(this, 0, 0, UI::Box::Vertical, padding_, 0, w)) {
name_label_.force_new_renderer();
descr_.force_new_renderer();
main_box_.add(&name_label_, UI::Align::kLeft);
main_box_.add_space(padding_);
main_box_.add(&descr_, UI::Align::kLeft);
- main_box_.set_size(
- max_w, max_h); // We need to initialize the width, set_max_height will set the height
- set_max_height(max_h);
+ layout();
}
void MapDetails::clear() {
@@ -103,20 +102,19 @@
suggested_teams_box_->hide();
}
-void MapDetails::set_max_height(int new_height) {
- max_h_ = new_height;
- update_layout();
-}
+void MapDetails::layout() {
+ name_label_.set_size(
+ get_w() - padding_,
+ UI::g_fh1->render(as_uifont(UI::g_fh1->fontset()->representative_character()))->height() + 2);
-void MapDetails::update_layout() {
// Adjust sizes for show / hide suggested teams
if (suggested_teams_box_->is_visible()) {
- suggested_teams_box_->set_pos(Vector2i(0, max_h_ - suggested_teams_box_->get_h()));
- main_box_.set_size(main_box_.get_w(), max_h_ - suggested_teams_box_->get_h() - padding_);
+ suggested_teams_box_->set_pos(Vector2i(0, get_h() - suggested_teams_box_->get_h()));
+ main_box_.set_size(get_w(), get_h() - suggested_teams_box_->get_h() - padding_);
} else {
- main_box_.set_size(main_box_.get_w(), max_h_);
+ main_box_.set_size(get_w(), get_h());
}
- descr_.set_size(descr_.get_w(), main_box_.get_h() - name_label_.get_h() - padding_);
+ descr_.set_size(main_box_.get_w(), main_box_.get_h() - name_label_.get_h() - padding_);
descr_.scroll_to_top();
}
@@ -128,7 +126,7 @@
as_header(_("Directory:"), style_, true) %
as_content(mapdata.localized_name, style_))
.str());
- main_box_.set_size(main_box_.get_w(), max_h_);
+ main_box_.set_size(main_box_.get_w(), get_h());
} else { // Show map information
name_label_.set_text(
@@ -195,5 +193,5 @@
suggested_teams_box_->show(mapdata.suggested_teams);
}
}
- update_layout();
+ layout();
}
=== modified file 'src/wui/mapdetails.h'
--- src/wui/mapdetails.h 2016-08-04 15:49:05 +0000
+++ src/wui/mapdetails.h 2016-11-14 09:12:14 +0000
@@ -33,17 +33,15 @@
public:
enum class Style { kFsMenu, kWui };
- MapDetails(Panel* parent, int32_t x, int32_t y, int32_t max_w, int32_t max_h, Style style);
+ MapDetails(Panel* parent, int32_t x, int32_t y, int32_t w, int32_t h, Style style);
void clear();
- void set_max_height(int new_height);
- void update_layout();
void update(const MapData& mapdata, bool localize_mapname);
private:
+ void layout() override;
const Style style_;
const int padding_;
- int max_h_;
UI::Box main_box_;
UI::MultilineTextarea name_label_;
Follow ups