GunChleoc has proposed merging lp:~widelands-dev/widelands/bug-1371905_2 into lp:widelands.
Requested reviews: Widelands Developers (widelands-dev) Related bugs: Bug #1371905 in widelands: "Localized strings doesn'tfit in the available place" https://bugs.launchpad.net/widelands/+bug/1371905 For more details, see: https://code.launchpad.net/~widelands-dev/widelands/bug-1371905_2/+merge/236227 Fixed string length issues and more use of ngettext. Spinbox improvements. - Options menu overhaul: -- using constant and relative positioning for easier layout tweaking -- spinbox units now update with ngettext -- removed superfluous calls to set_textstyle(ts_small()) etc. - Some more small fixes in other fs_menus, in the editor and in the encyclopedia window - The generic background for fs menu is now ui_fsmenu.jpg for all fullscreen menus that don't have effects on the background -- https://code.launchpad.net/~widelands-dev/widelands/bug-1371905_2/+merge/236227 Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/bug-1371905_2 into lp:widelands.
=== removed file 'pics/singleplmenu.jpg' Binary files pics/singleplmenu.jpg 2010-01-01 19:01:00 +0000 and pics/singleplmenu.jpg 1970-01-01 00:00:00 +0000 differ === renamed file 'pics/launchgamemenu.jpg' => 'pics/ui_fsmenu.jpg' === modified file 'src/editor/ui_menus/editor_main_menu_load_map.cc' --- src/editor/ui_menus/editor_main_menu_load_map.cc 2014-09-23 09:26:48 +0000 +++ src/editor/ui_menus/editor_main_menu_load_map.cc 2014-09-27 13:09:21 +0000 @@ -49,14 +49,14 @@ * Create all the buttons etc... */ MainMenuLoadMap::MainMenuLoadMap(EditorInteractive & parent) - : UI::Window(&parent, "load_map_menu", 0, 0, 550, 300, _("Load Map")) + : UI::Window(&parent, "load_map_menu", 0, 0, 560, 300, _("Load Map")) { int32_t const spacing = 5; int32_t const offsx = spacing; int32_t const offsy = 10; int32_t posx = offsx; int32_t posy = offsy; - int32_t const descr_label_w = 90; + int32_t const descr_label_w = 100; m_ls = new UI::Listselect<const char *> (this, @@ -69,9 +69,9 @@ new UI::Textarea (this, posx, posy, descr_label_w, 20, _("Name:"), UI::Align_CenterLeft); m_name = - new UI::Textarea - (this, posx + descr_label_w, posy, 200, 20, "---", UI::Align_CenterLeft); - posy += 20 + spacing; + new UI::MultilineTextarea + (this, posx + descr_label_w, posy, 200, 40, "---", UI::Align_CenterLeft); + posy += 40 + spacing; new UI::Textarea (this, posx, posy, 150, 20, _("Author:"), UI::Align_CenterLeft); @@ -166,7 +166,8 @@ // Translate the map data i18n::Textdomain td("maps"); - m_name ->set_text(_(map.get_name())); + m_name ->set_text(map.get_name()); + m_name ->set_tooltip(map.get_name()); m_author->set_text(map.get_author()); m_descr ->set_text (_(map.get_description()) + (map.get_hint().empty() ? "" : (std::string("\n") + _(map.get_hint())))); @@ -179,6 +180,7 @@ m_size ->set_text(buf); } else { m_name ->set_text(""); + m_name ->set_tooltip(""); m_author ->set_text(""); m_descr ->set_text(""); m_nrplayers->set_text(""); @@ -246,7 +248,7 @@ try { map_loader->preload_map(true); m_ls->add - (FileSystem::FS_Filename(name), + (FileSystem::FS_FilenameWoExt(name).c_str(), name, g_gr->images().get (dynamic_cast<WidelandsMapLoader*>(map_loader.get()) === modified file 'src/editor/ui_menus/editor_main_menu_load_map.h' --- src/editor/ui_menus/editor_main_menu_load_map.h 2014-09-14 11:31:58 +0000 +++ src/editor/ui_menus/editor_main_menu_load_map.h 2014-09-27 13:09:21 +0000 @@ -44,7 +44,8 @@ void fill_list(); - UI::Textarea * m_name, * m_author, * m_size, * m_nrplayers; + UI::MultilineTextarea * m_name; + UI::Textarea * m_author, * m_size, * m_nrplayers; UI::MultilineTextarea * m_descr; UI::Listselect<const char *> * m_ls; UI::Button * m_ok_btn; === modified file 'src/editor/ui_menus/editor_main_menu_map_options.cc' --- src/editor/ui_menus/editor_main_menu_map_options.cc 2014-09-10 14:48:40 +0000 +++ src/editor/ui_menus/editor_main_menu_map_options.cc 2014-09-27 13:09:21 +0000 @@ -44,7 +44,7 @@ : UI::Window (&parent, "map_options", - 250, (parent.get_h() - 300) / 2, 200, 305, + 250, (parent.get_h() - 300) / 2, 305, 305, _("Map Options")) { === modified file 'src/editor/ui_menus/editor_main_menu_random_map.cc' --- src/editor/ui_menus/editor_main_menu_random_map.cc 2014-09-14 12:13:35 +0000 +++ src/editor/ui_menus/editor_main_menu_random_map.cc 2014-09-27 13:09:21 +0000 @@ -46,7 +46,7 @@ "random_map_menu", (parent.get_w() - 260) / 2, (parent.get_h() - 450) / 2, - 260, + 305, 490, _("New Random Map")), // TRANSLATORS: The next are world names for the random map generator. === modified file 'src/editor/ui_menus/editor_main_menu_save_map.cc' --- src/editor/ui_menus/editor_main_menu_save_map.cc 2014-09-23 09:26:48 +0000 +++ src/editor/ui_menus/editor_main_menu_save_map.cc 2014-09-27 13:09:21 +0000 @@ -51,14 +51,14 @@ MainMenuSaveMap::MainMenuSaveMap(EditorInteractive & parent) - : UI::Window(&parent, "save_map_menu", 0, 0, 550, 330, _("Save Map")) + : UI::Window(&parent, "save_map_menu", 0, 0, 560, 330, _("Save Map")) { int32_t const spacing = 5; int32_t const offsx = spacing; int32_t const offsy = 10; int32_t posx = offsx; int32_t posy = offsy; - int32_t const descr_label_w = 90; + int32_t const descr_label_w = 100; m_ls = new UI::Listselect<const char *> @@ -72,7 +72,8 @@ (this, posx, posy + get_inner_h() - spacing - offsy - 60 + 3, get_inner_w() / 2 - spacing, 20, - g_gr->images().get("pics/but1.png")); + g_gr->images().get("pics/but1.png"), + UI::Align::Align_Left); m_editbox->setText(parent.egbase().map().get_name()); m_editbox->changed.connect(boost::bind(&MainMenuSaveMap::edit_box_changed, this)); @@ -80,9 +81,9 @@ new UI::Textarea (this, posx, posy, descr_label_w, 20, _("Name:"), UI::Align_CenterLeft); m_name = - new UI::Textarea - (this, posx + descr_label_w, posy, 200, 20, "---", UI::Align_CenterLeft); - posy += 20 + spacing; + new UI::MultilineTextarea + (this, posx + descr_label_w, posy, 200, 40, "---", UI::Align_CenterLeft); + posy += 40 + spacing; new UI::Textarea (this, posx, posy, descr_label_w, 20, _("Author:"), UI::Align_CenterLeft); @@ -229,6 +230,7 @@ m_editbox->setText(FileSystem::FS_Filename(name)); m_name ->set_text(map.get_name ()); + m_name ->set_tooltip(map.get_name ()); m_author->set_text(map.get_author ()); m_descr ->set_text(map.get_description()); @@ -240,17 +242,18 @@ m_size->set_text(buf); } else { m_name ->set_text(FileSystem::FS_Filename(name)); + m_name ->set_tooltip(""); m_author ->set_text(""); m_nrplayers->set_text(""); m_size ->set_text(""); if (g_fs->IsDirectory(name)) { - std::string dir_string = - (boost::format("\\<%s\\>") % _("directory")).str(); - m_descr ->set_text(dir_string); + m_name->set_tooltip((boost::format(_("Directory: %s")) + % FileSystem::FS_Filename(name)).str()); + m_descr->set_text((boost::format("\\<%s\\>") % _("directory")).str()); } else { - std::string not_map_string = - (boost::format("\\<%s\\>") % _("Not a map file")).str(); - m_descr ->set_text(not_map_string); + std::string not_map_string = _("Not a map file"); + m_name->set_tooltip(not_map_string); + m_descr->set_text((boost::format("\\<%s\\>") % not_map_string).str()); } } @@ -329,7 +332,7 @@ try { wml->preload_map(true); m_ls->add - (FileSystem::FS_Filename(name), + (FileSystem::FS_FilenameWoExt(name).c_str(), name, g_gr->images().get("pics/ls_wlmap.png")); } catch (const WException &) {} // we simply skip illegal entries === modified file 'src/editor/ui_menus/editor_main_menu_save_map.h' --- src/editor/ui_menus/editor_main_menu_save_map.h 2014-09-14 11:31:58 +0000 +++ src/editor/ui_menus/editor_main_menu_save_map.h 2014-09-27 13:09:21 +0000 @@ -50,7 +50,8 @@ bool save_map(std::string, bool); UI::EditBox * m_editbox; - UI::Textarea * m_name, * m_author, * m_size, * m_nrplayers; + UI::MultilineTextarea * m_name; + UI::Textarea * m_author, * m_size, * m_nrplayers; UI::MultilineTextarea * m_descr; UI::Listselect<const char *> * m_ls; UI::Button * m_ok_btn; === modified file 'src/ui_basic/spinbox.cc' --- src/ui_basic/spinbox.cc 2014-07-25 19:15:23 +0000 +++ src/ui_basic/spinbox.cc 2014-09-27 13:09:21 +0000 @@ -21,6 +21,8 @@ #include <vector> +#include <boost/format.hpp> + #include "base/deprecated.h" #include "base/i18n.h" #include "base/wexception.h" @@ -98,20 +100,38 @@ throw wexception("Not enough space to draw spinbox"); int32_t butw = h; int32_t textw = w - butw * 32 / 5; + + int32_t but_plus_x; + int32_t but_minus_x; + int32_t text_x; + + if (m_big) { + but_plus_x = w - butw * 31 / 10; + but_minus_x = butw * 21 / 10; + + } else { + but_plus_x = w - butw; + but_minus_x = 0; + textw = textw + 4 * butw; + } while (textw <= 0) { butw = butw * 3 / 4; textw = w - butw * 32 / 5; } + text_x = (w - textw) / 2; - char buf[64]; - snprintf(buf, sizeof(buf), "%i %s", sbi->value, sbi->unit.c_str()); + std::string unit_text = std::to_string(sbi->value); + if (! sbi->unit.empty()) { + /** TRANSLATORS: %i = number, %s = unit, e.g. "5 pixels" in the advanced options */ + unit_text = (boost::format(_("%i %s")) % sbi->value % sbi->unit.c_str()).str(); + } sbi->text = new UI::Textarea - (this, butw * 16 / 5, 0, textw, h, buf, Align_Center); + (this, text_x, 0, textw, h, unit_text, Align_Center); sbi->butPlus = new Button (this, "+", - w - butw * 31 / 10, 0, butw, butw, + but_plus_x, 0, butw, butw, sbi->background, "+", _("Increase the value"), true, false); @@ -119,7 +139,7 @@ sbi->butMinus = new Button (this, "-", - butw * 21 / 10, 0, butw, butw, + but_minus_x, 0, butw, butw, sbi->background, "-", _("Decrease the value"), true, false); @@ -145,8 +165,13 @@ sbi->butTenMinus->sigclicked.connect(boost::bind(&SpinBox::changeValue, boost::ref(*this), -10)); sbi->butTenPlus->set_repeating(true); sbi->butTenMinus->set_repeating(true); + m_buttons.push_back(sbi->butTenMinus); + m_buttons.push_back(sbi->butTenPlus); } + m_buttons.push_back(sbi->butMinus); + m_buttons.push_back(sbi->butPlus); + set_font(UI_FONT_NAME, UI_FONT_SIZE_SMALL, UI_FONT_CLR_FG); } === modified file 'src/ui_basic/spinbox.h' --- src/ui_basic/spinbox.h 2014-07-05 16:41:51 +0000 +++ src/ui_basic/spinbox.h 2014-09-27 13:09:21 +0000 @@ -21,6 +21,7 @@ #define WL_UI_BASIC_SPINBOX_H #include <cstring> +#include <list> #include "graphic/align.h" #include "ui_basic/button.h" @@ -57,6 +58,7 @@ void add_replacement(int32_t, std::string); void remove_replacement(int32_t); bool has_replacement(int32_t); + std::vector<UI::Button*> get_buttons() {return m_buttons;} private: void update(); @@ -66,6 +68,8 @@ const bool m_big; SpinBoxImpl * sbi; + + std::vector<UI::Button*> m_buttons; }; } === modified file 'src/ui_fsmenu/editor.cc' --- src/ui_fsmenu/editor.cc 2014-09-10 14:08:25 +0000 +++ src/ui_fsmenu/editor.cc 2014-09-27 13:09:21 +0000 @@ -24,7 +24,7 @@ #include "wui/text_constants.h" FullscreenMenuEditor::FullscreenMenuEditor() : - FullscreenMenuBase("singleplmenu.jpg"), + FullscreenMenuBase("ui_fsmenu.jpg"), // Values for alignment and size m_butw (get_w() * 7 / 20), === modified file 'src/ui_fsmenu/launch_spg.cc' --- src/ui_fsmenu/launch_spg.cc 2014-09-14 16:08:13 +0000 +++ src/ui_fsmenu/launch_spg.cc 2014-09-27 13:09:21 +0000 @@ -48,7 +48,7 @@ (GameSettingsProvider * const settings, GameController * const ctrl, bool /* autolaunch */) : - FullscreenMenuBase("launchgamemenu.jpg"), + FullscreenMenuBase("ui_fsmenu.jpg"), // Values for alignment and size m_butw (get_w() / 4), === modified file 'src/ui_fsmenu/multiplayer.cc' --- src/ui_fsmenu/multiplayer.cc 2014-09-10 14:08:25 +0000 +++ src/ui_fsmenu/multiplayer.cc 2014-09-27 13:09:21 +0000 @@ -25,7 +25,7 @@ #include "wui/text_constants.h" FullscreenMenuMultiPlayer::FullscreenMenuMultiPlayer() : - FullscreenMenuBase("singleplmenu.jpg"), + FullscreenMenuBase("ui_fsmenu.jpg"), // Values for alignment and size m_butw (get_w() * 7 / 20), === modified file 'src/ui_fsmenu/netsetup_lan.cc' --- src/ui_fsmenu/netsetup_lan.cc 2014-09-10 14:48:40 +0000 +++ src/ui_fsmenu/netsetup_lan.cc 2014-09-27 13:09:21 +0000 @@ -28,7 +28,7 @@ #include "wui/text_constants.h" FullscreenMenuNetSetupLAN::FullscreenMenuNetSetupLAN () : - FullscreenMenuBase("singleplmenu.jpg"), // TODO(unknown): change this + FullscreenMenuBase("ui_fsmenu.jpg"), // TODO(unknown): change this // Values for alignment and size m_butx (get_w() * 13 / 40), === modified file 'src/ui_fsmenu/options.cc' --- src/ui_fsmenu/options.cc 2014-09-14 11:31:58 +0000 +++ src/ui_fsmenu/options.cc 2014-09-27 13:09:21 +0000 @@ -23,6 +23,7 @@ #include <iostream> #include <boost/algorithm/string/predicate.hpp> +#include <boost/format.hpp> #include "base/i18n.h" #include "graphic/default_resolution.h" @@ -90,9 +91,14 @@ FullscreenMenuBase("optionsmenu.jpg"), // Values for alignment and size - m_vbutw(get_h() * 333 / 10000), - m_butw (get_w() / 4), - m_buth (get_h() * 9 / 200), + m_vbutw (get_h() * 333 / 10000), + m_butw (get_w() / 4), + m_buth (get_h() * 9 / 200), + m_hmargin (get_w() * 19 / 200), + m_padding (10), + m_space (25), + m_offset_first_group (get_h() * 1417 / 10000), + m_offset_second_group(get_h() * 5833 / 10000), // Buttons m_advanced_options @@ -111,129 +117,182 @@ g_gr->images().get("pics/but2.png"), _("Apply"), std::string(), true, false), -// Spinboxes - m_sb_maxfps - (this, - (get_w() / 2) - (m_vbutw * 2), get_h() * 3833 / 10000, get_w() / 5, m_vbutw, - opt.maxfps, 0, 100, "", - g_gr->images().get("pics/but1.png")), - m_sb_autosave - (this, - get_w() * 6767 / 10000, get_h() * 8167 / 10000, get_w() / 4, m_vbutw, - opt.autosave / 60, 0, 100, _("min."), - g_gr->images().get("pics/but1.png"), true), - - m_sb_remove_replays - (this, - get_w() * 6767 / 10000, get_h() * 8631 / 10000, get_w() / 4, m_vbutw, - /** TRANSLATORS: Options: Remove Replays older than: */ - /** TRANSLATORS: This will have a number added in front of it */ - opt.remove_replays, 0, 365, ngettext("day", "days", m_vbutw), - g_gr->images().get("pics/but1.png"), true), - -// Title - m_title - (this, - get_w() / 2, get_h() / 40, - _("General Options"), UI::Align_HCenter), - -// First options block 'general options' - m_fullscreen (this, Point(get_w() * 3563 / 10000, get_h() * 1667 / 10000)), + // Title + m_title + (this, + get_w() / 2, get_h() / 40, + _("General Options"), UI::Align_HCenter), + + // First options block 'general options', first column + m_label_resolution + (this, + m_hmargin, m_offset_first_group, + _("In-game resolution"), UI::Align_VCenter), + m_reslist + (this, + m_hmargin, m_label_resolution.get_y() + m_label_resolution.get_h(), + (get_w() - 2 * m_hmargin - m_space) / 2, 95, + UI::Align_Left, true), + + m_fullscreen (this, Point(m_hmargin, + m_reslist.get_y() + + m_reslist.get_h() + m_padding)), m_label_fullscreen (this, - get_w() * 1969 / 5000, get_h() * 1833 / 10000, + m_hmargin + m_fullscreen.get_w() + m_padding, + m_reslist.get_y() + m_reslist.get_h() + m_padding, + m_reslist.get_w() - m_fullscreen.get_w() - m_padding, + m_fullscreen.get_h(), _("Fullscreen"), UI::Align_VCenter), - m_inputgrab (this, Point(get_w() * 3563 / 10000, get_h() * 2167 / 10000)), + m_inputgrab (this, Point(m_hmargin, + m_label_fullscreen.get_y() + + m_label_fullscreen.get_h() + m_padding)), m_label_inputgrab (this, - get_w() * 1969 / 5000, get_h() * 2333 / 10000, + m_hmargin + m_inputgrab.get_w() + m_padding, + m_label_fullscreen.get_y() + m_label_fullscreen.get_h() + m_padding, + m_reslist.get_w() - m_inputgrab.get_w() - m_padding, + m_inputgrab.get_h(), _("Grab Input"), UI::Align_VCenter), - m_music (this, Point(get_w() * 3563 / 10000, get_h() * 2667 / 10000)), - m_label_music - (this, - get_w() * 1969 / 5000, get_h() * 2833 / 10000, - _("Enable Music"), UI::Align_VCenter), - - m_fx (this, Point(get_w() * 3563 / 10000, get_h() * 3167 / 10000)), - m_label_fx - (this, - get_w() * 1969 / 5000, get_h() * 3333 / 10000, - _("Enable Sound"), UI::Align_VCenter), - m_label_maxfps (this, - get_w() * 3563 / 10000, get_h() * 2 / 5, + m_hmargin, + m_label_inputgrab.get_y() + m_label_inputgrab.get_h() + m_padding, + m_reslist.get_w() - 80, m_inputgrab.get_h(), _("Maximum FPS:"), UI::Align_VCenter), - - m_reslist - (this, - get_w() / 10, get_h() * 1667 / 10000, - get_w() * 19 / 80, get_h() * 2833 / 10000, - UI::Align_Left, true), - m_label_resolution - (this, - get_w() * 1063 / 10000, get_h() * 1417 / 10000, - _("In-game resolution"), UI::Align_VCenter), - + m_sb_maxfps + (this, + m_hmargin + m_reslist.get_w() - 80, m_label_maxfps.get_y(), + 80, m_vbutw, + opt.maxfps, 0, 99, "", + g_gr->images().get("pics/but1.png")), + + + // First options block 'general options', second column m_label_language (this, - get_w() * 133 / 200, get_h() * 1417 / 10000, + get_w() - m_hmargin - (get_w() - 2 * m_hmargin - m_space) / 2, m_offset_first_group, _("Language"), UI::Align_VCenter), + // same height as m_reslist m_language_list (this, - get_w() * 6563 / 10000, get_h() * 1667 / 10000, - get_w() * 21 / 80, get_h() * 2833 / 10000, + m_label_language.get_x(), m_label_language.get_y() + m_label_language.get_h(), + (get_w() - 2 * m_hmargin - m_space) / 2, m_reslist.get_h(), UI::Align_Left, true), -// Title 2 + m_music (this, Point(m_label_language.get_x(), + m_language_list.get_y() + + m_language_list.get_h() + m_padding)), + m_label_music + (this, + m_label_language.get_x() + m_music.get_w() + m_padding, + m_language_list.get_y() + m_language_list.get_h() + m_padding, + m_language_list.get_w(), m_music.get_h(), + _("Enable Music"), UI::Align_VCenter), + + m_fx (this, Point(m_label_language.get_x(), + m_label_music.get_y() + + m_label_music.get_h() + m_padding)), + m_label_fx + (this, + m_label_language.get_x() + m_fx.get_w() + m_padding, + m_label_music.get_y() + m_label_music.get_h() + m_padding, + m_language_list.get_w(), m_fx.get_h(), + _("Enable Sound"), UI::Align_VCenter), + + // Second options block 'In-game options' + // Title 2 m_label_game_options (this, get_w() / 2, get_h() / 2, _("In-game Options"), UI::Align_HCenter), -// Second options block 'In-game options' - m_single_watchwin (this, Point(get_w() * 19 / 200, get_h() * 5833 / 10000)), + m_single_watchwin (this, Point(m_hmargin, m_offset_second_group)), m_label_single_watchwin (this, - get_w() * 1313 / 10000, get_h() * 3 / 5, - _("Use single Watchwindow Mode"), UI::Align_VCenter), + m_single_watchwin.get_x() + m_single_watchwin.get_w() + m_padding, + m_offset_second_group, + get_w() - 2 * m_hmargin - m_single_watchwin.get_w(), m_single_watchwin.get_h(), + _("Use single watchwindow mode"), UI::Align_VCenter), - m_auto_roadbuild_mode (this, Point(get_w() * 19 / 200, get_h() * 63 / 100)), + m_auto_roadbuild_mode (this, Point(m_single_watchwin.get_x(), + m_label_single_watchwin.get_y() + + m_label_single_watchwin.get_h() + m_padding)), m_label_auto_roadbuild_mode (this, - get_w() * 1313 / 10000, get_h() * 6467 / 10000, + m_auto_roadbuild_mode.get_x() + m_auto_roadbuild_mode.get_w() + m_padding, + m_label_single_watchwin.get_y() + m_label_single_watchwin.get_h() + m_padding, + get_w() - 2 * m_hmargin - m_auto_roadbuild_mode.get_w(), m_auto_roadbuild_mode.get_h(), _("Start building road after placing a flag"), UI::Align_VCenter), m_show_workarea_preview - (this, Point(get_w() * 19 / 200, get_h() * 6767 / 10000)), + (this, Point(m_auto_roadbuild_mode.get_x(), + m_label_auto_roadbuild_mode.get_y() + + m_label_auto_roadbuild_mode.get_h() + m_padding)), m_label_show_workarea_preview (this, - get_w() * 1313 / 10000, get_h() * 6933 / 10000, + m_show_workarea_preview.get_x() + m_show_workarea_preview.get_w() + m_padding, + m_label_auto_roadbuild_mode.get_y() + m_label_auto_roadbuild_mode.get_h() + m_padding, + get_w() - 2 * m_hmargin - m_show_workarea_preview.get_w(), m_show_workarea_preview.get_h(), _("Show buildings area preview"), UI::Align_VCenter), - m_snap_windows_only_when_overlapping - (this, Point(get_w() * 19 / 200, get_h() * 7233 / 10000)), - m_label_snap_windows_only_when_overlapping + m_snap_win_overlap_only + (this, Point(m_show_workarea_preview.get_x(), + m_label_show_workarea_preview.get_y() + + m_label_show_workarea_preview.get_h() + m_padding)), + m_label_snap_win_overlap_only (this, - get_w() * 1313 / 10000, get_h() * 37 / 50, + m_snap_win_overlap_only.get_x() + m_snap_win_overlap_only.get_w() + m_padding, + m_label_show_workarea_preview.get_y() + m_label_show_workarea_preview.get_h() + m_padding, + get_w() - 2 * m_hmargin - m_snap_win_overlap_only.get_w(), m_snap_win_overlap_only.get_h(), _("Snap windows only when overlapping"), UI::Align_VCenter), - m_dock_windows_to_edges (this, Point(get_w() * 19 / 200, get_h() * 77 / 100)), + m_dock_windows_to_edges (this, Point(m_snap_win_overlap_only.get_x(), + m_label_snap_win_overlap_only.get_y() + + m_label_snap_win_overlap_only.get_h() + m_padding)), m_label_dock_windows_to_edges (this, - get_w() * 1313 / 10000, get_h() * 7867 / 10000, + m_dock_windows_to_edges.get_x() + m_dock_windows_to_edges.get_w() + m_padding, + m_label_snap_win_overlap_only.get_y() + m_label_snap_win_overlap_only.get_h() + m_padding, + get_w() - 2 * m_hmargin - m_dock_windows_to_edges.get_w(), m_dock_windows_to_edges.get_h(), _("Dock windows to edges"), UI::Align_VCenter), + m_sb_autosave + (this, + get_w() - m_hmargin - 240, + m_dock_windows_to_edges.get_y() + m_dock_windows_to_edges.get_h() + m_padding, + 240, m_vbutw, + /** TRANSLATORS: Options: Save game automatically every: */ + /** TRANSLATORS: This will have a number added in front of it */ + opt.autosave / 60, 0, 100, ngettext("minute", "minutes", opt.autosave / 60), + g_gr->images().get("pics/but1.png"), true), m_label_autosave (this, - get_w() * 1313 / 10000, get_h() * 8333 / 10000, + m_dock_windows_to_edges.get_x(), + m_sb_autosave.get_y(), + get_w() - m_sb_autosave.get_w() - 2 * m_hmargin, + m_dock_windows_to_edges.get_h(), _("Save game automatically every"), UI::Align_VCenter), + + + m_sb_remove_replays + (this, + get_w() - m_hmargin - 240, + m_sb_autosave.get_y() + m_sb_autosave.get_h() + m_padding, + 240, m_vbutw, + /** TRANSLATORS: Options: Remove Replays older than: */ + /** TRANSLATORS: This will have a number added in front of it */ + opt.remove_replays, 0, 365, ngettext("day", "days", opt.remove_replays), + g_gr->images().get("pics/but1.png"), true), m_label_remove_replays (this, - get_w() * 1313 / 10000, get_h() * 8799 / 10000, - _("Remove Replays older than:"), UI::Align_VCenter), + m_label_autosave.get_x(), + m_sb_remove_replays.get_y(), + get_w() - m_sb_remove_replays.get_w() - 2 * m_hmargin, + m_dock_windows_to_edges.get_h(), + _("Remove replays older than:"), UI::Align_VCenter), os(opt) { @@ -244,51 +303,39 @@ m_apply.sigclicked.connect (boost::bind(&FullscreenMenuOptions::end_modal, this, static_cast<int32_t>(om_ok))); - m_advanced_options.set_font(font_small()); - m_apply.set_font(font_small()); - m_cancel.set_font(font_small()); - - /** TRANSLATORS Options: Remove Replays older than: */ + /** TRANSLATORS Options: Save game automatically every: */ m_sb_autosave .add_replacement(0, _("Off")); + std::vector<UI::Button*> temp_buttons = m_sb_autosave.get_buttons(); + for (UI::Button* temp_button : temp_buttons) { + temp_button->sigclicked.connect + (boost::bind + (&FullscreenMenuOptions::update_sb_autosave_unit, + boost::ref(*this))); + } /** TRANSLATORS Options: Remove Replays older than: */ m_sb_remove_replays.add_replacement(0, _("Never")); - /** TRANSLATORS Options: Remove Replays older than: */ - m_sb_remove_replays.add_replacement(1, _("1 day")); + temp_buttons = m_sb_remove_replays.get_buttons(); + for (UI::Button* temp_button : temp_buttons) { + temp_button->sigclicked.connect + (boost::bind + (&FullscreenMenuOptions::update_sb_remove_replays_unit, + boost::ref(*this))); + } - m_sb_maxfps .set_font(ui_fn(), fs_small(), UI_FONT_CLR_FG); - m_sb_autosave .set_font(ui_fn(), fs_small(), UI_FONT_CLR_FG); - m_sb_remove_replays.set_font(ui_fn(), fs_small(), UI_FONT_CLR_FG); m_title .set_textstyle(ts_big()); - m_label_fullscreen.set_textstyle(ts_small()); m_fullscreen .set_state(opt.fullscreen); - m_label_inputgrab .set_textstyle(ts_small()); m_inputgrab .set_state(opt.inputgrab); - m_label_music .set_textstyle(ts_small()); m_music .set_state(opt.music); m_music .set_enabled(!g_sound_handler.lock_audio_disabling_); - m_label_fx .set_textstyle(ts_small()); m_fx .set_state(opt.fx); m_fx .set_enabled(!g_sound_handler.lock_audio_disabling_); - m_label_maxfps .set_textstyle(ts_small()); - m_label_resolution.set_textstyle(ts_small()); - m_reslist .set_font(ui_fn(), fs_small()); - m_label_language .set_textstyle(ts_small()); - m_language_list .set_font(ui_fn(), fs_small()); m_label_game_options .set_textstyle(ts_big()); - m_label_single_watchwin .set_textstyle(ts_small()); m_single_watchwin .set_state(opt.single_watchwin); - m_label_auto_roadbuild_mode .set_textstyle(ts_small()); m_auto_roadbuild_mode .set_state(opt.auto_roadbuild_mode); - m_label_show_workarea_preview .set_textstyle(ts_small()); m_show_workarea_preview .set_state(opt.show_warea); - m_label_snap_windows_only_when_overlapping.set_textstyle(ts_small()); - m_snap_windows_only_when_overlapping.set_state - (opt.snap_windows_only_when_overlapping); - m_label_dock_windows_to_edges .set_textstyle(ts_small()); + m_snap_win_overlap_only .set_state(opt.snap_win_overlap_only); m_dock_windows_to_edges .set_state(opt.dock_windows_to_edges); - m_label_autosave .set_textstyle(ts_small()); - m_label_remove_replays .set_textstyle(ts_small()); // GRAPHIC_TODO(unknown): this shouldn't be here List all resolutions // take a copy to not change real video info structure @@ -315,21 +362,21 @@ bool did_select_a_res = false; for (uint32_t i = 0; i < m_resolutions.size(); ++i) { - char buf[32]; - // TODO(sirver): must use boost::format - /** TRANSLATORS: Screen resolution, e.g. 800 x 600*/ - sprintf(buf, _("%1$i x %2$i"), m_resolutions[i].xres, m_resolutions[i].yres); const bool selected = m_resolutions[i].xres == opt.xres && m_resolutions[i].yres == opt.yres; did_select_a_res |= selected; - m_reslist.add(buf, nullptr, nullptr, selected); + /** TRANSLATORS: Screen resolution, e.g. 800 x 600*/ + m_reslist.add((boost::format(_("%1% x %2%")) + % m_resolutions[i].xres + % m_resolutions[i].yres).str().c_str(), + nullptr, nullptr, selected); } if (!did_select_a_res) { - char buf[32]; - /** TRANSLATORS: Screen resolution, e.g. 800 x 600*/ - sprintf(buf, "%1$i x %2$i", opt.xres, opt.yres); - m_reslist.add(buf, nullptr, nullptr, true); + m_reslist.add((boost::format(_("%1% x %2%")) + % opt.xres + % opt.yres).str().c_str(), + nullptr, nullptr, true); uint32_t entry = m_resolutions.size(); m_resolutions.resize(entry + 1); m_resolutions[entry].xres = opt.xres; @@ -348,6 +395,14 @@ add_languages_to_list(&m_language_list, opt.language); } +void FullscreenMenuOptions::update_sb_autosave_unit() { + m_sb_autosave.setUnit(ngettext("minute", "minutes", m_sb_autosave.getValue())); +} + +void FullscreenMenuOptions::update_sb_remove_replays_unit() { + m_sb_remove_replays.setUnit(ngettext("day", "days", m_sb_remove_replays.getValue())); +} + void FullscreenMenuOptions::advanced_options() { FullscreenMenuAdvancedOptions aom(os); if (aom.run() == FullscreenMenuAdvancedOptions::om_ok) { @@ -386,13 +441,12 @@ os.single_watchwin = m_single_watchwin.get_state(); os.auto_roadbuild_mode = m_auto_roadbuild_mode.get_state(); os.show_warea = m_show_workarea_preview.get_state(); - os.snap_windows_only_when_overlapping - = m_snap_windows_only_when_overlapping.get_state(); + os.snap_win_overlap_only = m_snap_win_overlap_only.get_state(); os.dock_windows_to_edges = m_dock_windows_to_edges.get_state(); os.music = m_music.get_state(); os.fx = m_fx.get_state(); if (m_language_list.has_selection()) - os.language = m_language_list.get_selected(); + os.language = m_language_list.get_selected(); os.autosave = m_sb_autosave.getValue(); os.maxfps = m_sb_maxfps.getValue(); os.remove_replays = m_sb_remove_replays.getValue(); @@ -407,12 +461,16 @@ FullscreenMenuAdvancedOptions::FullscreenMenuAdvancedOptions (OptionsCtrl::OptionsStruct const opt) : - FullscreenMenuBase("optionsmenu.jpg"), + FullscreenMenuBase("ui_fsmenu.jpg"), // Values for alignment and size - m_vbutw (get_h() * 333 / 10000), - m_butw (get_w() / 4), - m_buth (get_h() * 9 / 200), + m_vbutw (get_h() * 333 / 10000), + m_butw (get_w() / 4), + m_buth (get_h() * 9 / 200), + m_hmargin (get_w() * 19 / 200), + m_padding (10), + m_space (25), + m_offset_first_group (get_h() * 1417 / 10000), // Buttons m_cancel @@ -426,19 +484,6 @@ g_gr->images().get("pics/but2.png"), _("Apply"), std::string(), true, false), -// Spinboxes - m_sb_dis_panel - (this, - get_w() * 18 / 25, get_h() * 63 / 100, get_w() / 4, m_vbutw, - opt.panel_snap_distance, 0, 100, _("px."), - g_gr->images().get("pics/but1.png")), - m_sb_dis_border - (this, - get_w() * 18 / 25, get_h() * 6768 / 10000, get_w() / 4, m_vbutw, - opt.border_snap_distance, 0, 100, _("px."), - g_gr->images().get("pics/but1.png")), - - // Title m_title (this, @@ -446,57 +491,105 @@ _("Advanced Options"), UI::Align_HCenter), // First options block + m_label_ui_font + (this, + m_hmargin, m_offset_first_group, + _("Main menu font:"), UI::Align_BottomLeft), m_ui_font_list (this, - get_w() / 10, get_h() * 1667 / 10000, - get_w() / 4, get_h() * 2833 / 10000, + m_label_ui_font.get_x(), m_label_ui_font.get_y() + m_label_ui_font.get_h() + m_padding, + get_w() - 2 * m_hmargin, 134, UI::Align_Left, true), - m_label_ui_font - (this, - get_w() * 1063 / 10000, get_h() * 1417 / 10000, - _("Main menu font:"), UI::Align_VCenter), + + m_label_snap_dis_panel + (this, + m_hmargin, m_ui_font_list.get_y() + m_ui_font_list.get_h() + m_space + m_padding, + _("Distance for windows to snap to other panels:"), UI::Align_VCenter), + m_label_snap_dis_border + (this, + m_hmargin, m_label_snap_dis_panel.get_y() + m_label_snap_dis_panel.get_h() + 2 * m_padding, + _("Distance for windows to snap to borders:"), UI::Align_VCenter), + + // Spinboxes + m_sb_dis_panel + (this, + get_w() - m_hmargin - (get_w() / 5), m_label_snap_dis_panel.get_y(), + get_w() / 5, m_vbutw, + opt.panel_snap_distance, 0, 99, ngettext("pixel", "pixels", opt.panel_snap_distance), + g_gr->images().get("pics/but1.png")), + + m_sb_dis_border + (this, + get_w() - m_hmargin - (get_w() / 5), m_label_snap_dis_border.get_y(), + get_w() / 5, m_vbutw, + opt.border_snap_distance, 0, 99, ngettext("pixel", "pixels", opt.border_snap_distance), + g_gr->images().get("pics/but1.png")), + + m_transparent_chat (this, Point(m_hmargin, + m_label_snap_dis_border.get_y() + + m_label_snap_dis_border.get_h() + m_space)), + m_label_transparent_chat + (this, + m_hmargin + m_transparent_chat.get_w() + m_padding, m_transparent_chat.get_y(), + get_w() - 2 * m_hmargin - m_transparent_chat.get_w() - m_padding, 40, + _("Show in-game chat with transparent background"), UI::Align_VCenter), + m_message_sound - (this, Point(get_w() * 29 / 80, get_h() * 171 / 1000)), + (this, Point(m_hmargin, + m_label_transparent_chat.get_y() + + m_label_transparent_chat.get_h() + m_padding)), m_label_message_sound (this, - get_w() * 4 / 10, get_h() * 1883 / 10000, + m_hmargin + m_message_sound.get_w() + m_padding, m_message_sound.get_y(), + get_w() - 2 * m_hmargin - m_message_sound.get_w() - m_padding, 40, _("Play a sound at message arrival."), UI::Align_VCenter), -// Second options block - m_nozip (this, Point(get_w() * 19 / 200, get_h() * 5833 / 10000)), + m_nozip (this, Point(m_hmargin, + m_label_message_sound.get_y() + + m_label_message_sound.get_h() + m_padding)), m_label_nozip (this, - get_w() * 1313 / 10000, get_h() * 3 / 5, + m_hmargin + m_nozip.get_w() + m_padding, m_nozip.get_y(), + get_w() - 2 * m_hmargin - m_nozip.get_w() - m_padding, 40, _("Do not zip widelands data files (maps, replays and savegames)."), UI::Align_VCenter), - m_label_snap_dis_panel - (this, - get_w() * 1313 / 10000, get_h() * 6467 / 10000, - _("Distance for windows to snap to other panels:"), UI::Align_VCenter), - m_label_snap_dis_border - (this, - get_w() * 1313 / 10000, get_h() * 6933 / 10000, - _("Distance for windows to snap to borders:"), UI::Align_VCenter), - m_remove_syncstreams (this, Point(get_w() * 19 / 200, get_h() * 7220 / 10000)), + m_remove_syncstreams (this, Point(m_hmargin, + m_label_nozip.get_y() + + m_label_nozip.get_h() + m_padding)), m_label_remove_syncstreams (this, - get_w() * 1313 / 10000, get_h() * 37 / 50, + m_hmargin + m_remove_syncstreams.get_w() + m_padding, m_remove_syncstreams.get_y(), + get_w() - 2 * m_hmargin - m_remove_syncstreams.get_w() - m_padding, 40, _("Remove Syncstream dumps on startup"), UI::Align_VCenter), - m_opengl (this, Point(get_w() * 19 / 200, get_h() * 7715 / 10000)), + m_opengl (this, Point(m_hmargin, + m_label_remove_syncstreams.get_y() + + m_label_remove_syncstreams.get_h() + m_padding)), m_label_opengl (this, - get_w() * 1313 / 10000, get_h() * 7865 / 10000, + m_hmargin + m_opengl.get_w() + m_padding, m_opengl.get_y(), + get_w() - 2 * m_hmargin - m_opengl.get_w() - m_padding, 40, _("OpenGL rendering"), UI::Align_VCenter), - m_transparent_chat (this, Point(get_w() * 19 / 200, get_h() * 8180 / 10000)), - m_label_transparent_chat - (this, - get_w() * 1313 / 10000, get_h() * 8330 / 10000, - _("Show in-game chat with transparent background"), UI::Align_VCenter), os(opt) { + std::vector<UI::Button*> temp_buttons = m_sb_dis_panel.get_buttons(); + for (UI::Button* temp_button : temp_buttons) { + temp_button->sigclicked.connect + (boost::bind + (&FullscreenMenuAdvancedOptions::update_sb_dis_panel_unit, + boost::ref(*this))); + } + + temp_buttons = m_sb_dis_border.get_buttons(); + for (UI::Button* temp_button : temp_buttons) { + temp_button->sigclicked.connect + (boost::bind + (&FullscreenMenuAdvancedOptions::update_sb_dis_border_unit, + boost::ref(*this))); + } + m_cancel.sigclicked.connect (boost::bind (&FullscreenMenuAdvancedOptions::end_modal, @@ -508,27 +601,12 @@ boost::ref(*this), static_cast<int32_t>(om_ok))); - m_cancel.set_font(font_small()); - m_apply.set_font(font_small()); - m_title .set_textstyle(ts_big()); - m_label_message_sound .set_textstyle(ts_small()); m_message_sound .set_state(opt.message_sound); - m_label_nozip .set_textstyle(ts_small()); m_nozip .set_state(opt.nozip); - m_label_snap_dis_border.set_textstyle(ts_small()); - m_label_snap_dis_panel .set_textstyle(ts_small()); - m_label_remove_syncstreams.set_textstyle(ts_small()); m_remove_syncstreams .set_state(opt.remove_syncstreams); - m_label_opengl .set_textstyle(ts_small()); m_opengl .set_state(opt.opengl); - m_label_transparent_chat.set_textstyle(ts_small()); m_transparent_chat .set_state(opt.transparent_chat); - m_sb_dis_border .set_textstyle(ts_small()); - m_sb_dis_panel .set_textstyle(ts_small()); - - m_label_ui_font.set_textstyle(ts_small()); - m_ui_font_list .set_font(ui_fn(), fs_small()); // Fill the font list. { // For use of string ui_font take a look at fullscreen_menu_base.cc @@ -593,6 +671,14 @@ return FullscreenMenuBase::handle_key(down, code); } +void FullscreenMenuAdvancedOptions::update_sb_dis_panel_unit() { + m_sb_dis_panel.setUnit(ngettext("pixel", "pixels", m_sb_dis_panel.getValue())); +} + +void FullscreenMenuAdvancedOptions::update_sb_dis_border_unit() { + m_sb_dis_border.setUnit(ngettext("pixel", "pixels", m_sb_dis_border.getValue())); +} + OptionsCtrl::OptionsStruct FullscreenMenuAdvancedOptions::get_values() { // Write all remaining data from UI elements @@ -642,7 +728,7 @@ opt.single_watchwin = m_opt_section.get_bool("single_watchwin", false); opt.auto_roadbuild_mode = m_opt_section.get_bool("auto_roadbuild_mode", true); opt.show_warea = m_opt_section.get_bool("workareapreview", true); - opt.snap_windows_only_when_overlapping = + opt.snap_win_overlap_only = m_opt_section.get_bool("snap_windows_only_when_overlapping", false); opt.dock_windows_to_edges = m_opt_section.get_bool("dock_windows_to_edges", false); opt.language = m_opt_section.get_string("language", ""); @@ -674,7 +760,7 @@ m_opt_section.set_bool("workareapreview", opt.show_warea); m_opt_section.set_bool ("snap_windows_only_when_overlapping", - opt.snap_windows_only_when_overlapping); + opt.snap_win_overlap_only); m_opt_section.set_bool("dock_windows_to_edges", opt.dock_windows_to_edges); m_opt_section.set_bool("disable_music", !opt.music); m_opt_section.set_bool("disable_fx", !opt.fx); === modified file 'src/ui_fsmenu/options.h' --- src/ui_fsmenu/options.h 2014-09-10 14:08:25 +0000 +++ src/ui_fsmenu/options.h 2014-09-27 13:09:21 +0000 @@ -28,6 +28,7 @@ #include "ui_basic/button.h" #include "ui_basic/checkbox.h" #include "ui_basic/listselect.h" +#include "ui_basic/multilinetextarea.h" #include "ui_basic/spinbox.h" #include "ui_basic/textarea.h" @@ -44,7 +45,7 @@ bool single_watchwin; bool auto_roadbuild_mode; bool show_warea; - bool snap_windows_only_when_overlapping; + bool snap_win_overlap_only; bool dock_windows_to_edges; bool music; bool fx; @@ -92,41 +93,54 @@ bool handle_key(bool down, SDL_keysym code) override; private: - uint32_t m_vbutw; - uint32_t m_butw; - uint32_t m_buth; - UI::Button m_advanced_options, m_cancel, m_apply; - UI::SpinBox m_sb_maxfps, m_sb_autosave; - UI::SpinBox m_sb_remove_replays; - UI::Textarea m_title; - UI::Checkbox m_fullscreen; - UI::Textarea m_label_fullscreen; - UI::Checkbox m_inputgrab; - UI::Textarea m_label_inputgrab; - UI::Checkbox m_music; - UI::Textarea m_label_music; - UI::Checkbox m_fx; - UI::Textarea m_label_fx; - UI::Textarea m_label_maxfps; - UI::Listselect<void *> m_reslist; - UI::Textarea m_label_resolution; - UI::Textarea m_label_language; - UI::Listselect<std::string> m_language_list; - UI::Textarea m_label_game_options; - UI::Checkbox m_single_watchwin; - UI::Textarea m_label_single_watchwin; - UI::Checkbox m_auto_roadbuild_mode; - UI::Textarea m_label_auto_roadbuild_mode; - UI::Checkbox m_show_workarea_preview; - UI::Textarea m_label_show_workarea_preview; - UI::Checkbox m_snap_windows_only_when_overlapping; - UI::Textarea m_label_snap_windows_only_when_overlapping; - UI::Checkbox m_dock_windows_to_edges; - UI::Textarea m_label_dock_windows_to_edges; - UI::Textarea m_label_autosave; - UI::Textarea m_label_remove_replays; - OptionsCtrl::OptionsStruct os; - + uint32_t const m_vbutw; + uint32_t const m_butw; + uint32_t const m_buth; + uint32_t const m_hmargin; + uint32_t const m_padding; + uint32_t const m_space; + uint32_t const m_offset_first_group; + uint32_t const m_offset_second_group; + + UI::Button m_advanced_options, m_cancel, m_apply; + + UI::Textarea m_title; + UI::Textarea m_label_resolution; + UI::Listselect<void *> m_reslist; + UI::Checkbox m_fullscreen; + UI::Textarea m_label_fullscreen; + UI::Checkbox m_inputgrab; + UI::Textarea m_label_inputgrab; + UI::Textarea m_label_maxfps; + UI::SpinBox m_sb_maxfps; + + UI::Textarea m_label_language; + UI::Listselect<std::string> m_language_list; + UI::Checkbox m_music; + UI::Textarea m_label_music; + UI::Checkbox m_fx; + UI::Textarea m_label_fx; + + UI::Textarea m_label_game_options; + UI::Checkbox m_single_watchwin; + UI::Textarea m_label_single_watchwin; + UI::Checkbox m_auto_roadbuild_mode; + UI::Textarea m_label_auto_roadbuild_mode; + UI::Checkbox m_show_workarea_preview; + UI::Textarea m_label_show_workarea_preview; + UI::Checkbox m_snap_win_overlap_only; + UI::Textarea m_label_snap_win_overlap_only; + UI::Checkbox m_dock_windows_to_edges; + UI::Textarea m_label_dock_windows_to_edges; + UI::SpinBox m_sb_autosave; + UI::Textarea m_label_autosave; + UI::SpinBox m_sb_remove_replays; + UI::Textarea m_label_remove_replays; + + OptionsCtrl::OptionsStruct os; + + void update_sb_autosave_unit(); + void update_sb_remove_replays_unit(); void advanced_options(); class ScreenResolution { @@ -156,30 +170,36 @@ bool handle_key(bool down, SDL_keysym code) override; private: - uint32_t m_vbutw; - uint32_t m_butw; - uint32_t m_buth; - - UI::Button m_cancel, m_apply; + void update_sb_dis_panel_unit(); + void update_sb_dis_border_unit(); + + uint32_t const m_vbutw; + uint32_t const m_butw; + uint32_t const m_buth; + uint32_t const m_hmargin; + uint32_t const m_padding; + uint32_t const m_space; + uint32_t const m_offset_first_group; + + UI::Button m_cancel, m_apply; + UI::Textarea m_title; + UI::Textarea m_label_ui_font; + UI::Listselect<std::string> m_ui_font_list; + + UI::Textarea m_label_snap_dis_panel, m_label_snap_dis_border; UI::SpinBox m_sb_dis_panel, m_sb_dis_border; - UI::Textarea m_title; - UI::Listselect<std::string> m_ui_font_list; - UI::Textarea m_label_ui_font; + UI::Checkbox m_transparent_chat; + UI::MultilineTextarea m_label_transparent_chat; UI::Checkbox m_message_sound; - UI::Textarea m_label_message_sound; + UI::MultilineTextarea m_label_message_sound; UI::Checkbox m_nozip; - UI::Textarea m_label_nozip; - - UI::Textarea m_label_snap_dis_panel, m_label_snap_dis_border; - + UI::MultilineTextarea m_label_nozip; UI::Checkbox m_remove_syncstreams; - UI::Textarea m_label_remove_syncstreams; + UI::MultilineTextarea m_label_remove_syncstreams; UI::Checkbox m_opengl; - UI::Textarea m_label_opengl; - UI::Checkbox m_transparent_chat; - UI::Textarea m_label_transparent_chat; + UI::MultilineTextarea m_label_opengl; - OptionsCtrl::OptionsStruct os; + OptionsCtrl::OptionsStruct os; }; #endif // end of include guard: WL_UI_FSMENU_OPTIONS_H === modified file 'src/ui_fsmenu/singleplayer.cc' --- src/ui_fsmenu/singleplayer.cc 2014-09-10 14:08:25 +0000 +++ src/ui_fsmenu/singleplayer.cc 2014-09-27 13:09:21 +0000 @@ -24,7 +24,7 @@ #include "wui/text_constants.h" FullscreenMenuSinglePlayer::FullscreenMenuSinglePlayer() : -FullscreenMenuBase("singleplmenu.jpg"), +FullscreenMenuBase("ui_fsmenu.jpg"), // Values for alignment and size m_butw (get_w() * 7 / 20), === modified file 'src/wui/encyclopedia_window.cc' --- src/wui/encyclopedia_window.cc 2014-09-10 16:57:31 +0000 +++ src/wui/encyclopedia_window.cc 2014-09-27 13:09:21 +0000 @@ -45,8 +45,9 @@ #define WINDOW_WIDTH std::min(700, g_gr->get_xres() - 40) #define WINDOW_HEIGHT std::min(550, g_gr->get_yres() - 40) -#define QUANTITY_COLUMN_WIDTH 74 -#define WARE_GROUPS_TABLE_WIDTH (WINDOW_WIDTH * 1 / 2 - 5) +#define QUANTITY_COLUMN_WIDTH 100 +#define WARE_COLUMN_WIDTH 250 +#define PRODSITE_GROUPS_WIDTH (WINDOW_WIDTH - WARE_COLUMN_WIDTH - QUANTITY_COLUMN_WIDTH - 10) using namespace Widelands; @@ -64,19 +65,18 @@ WINDOW_WIDTH, WINDOW_HEIGHT, _("Tribal Ware Encyclopedia")), wares (this, 5, 5, WINDOW_WIDTH - 10, WINDOW_HEIGHT - 250), - prodSites (this, 5, WINDOW_HEIGHT - 150, WINDOW_WIDTH - WARE_GROUPS_TABLE_WIDTH - 10, 145), + prodSites (this, 5, WINDOW_HEIGHT - 150, PRODSITE_GROUPS_WIDTH, 145), condTable (this, - WINDOW_WIDTH - WARE_GROUPS_TABLE_WIDTH - 5, WINDOW_HEIGHT - 150, WARE_GROUPS_TABLE_WIDTH, 145), + PRODSITE_GROUPS_WIDTH + 5, WINDOW_HEIGHT - 150, WINDOW_WIDTH - PRODSITE_GROUPS_WIDTH - 5, 145), descrTxt (this, 5, WINDOW_HEIGHT - 240, WINDOW_WIDTH - 10, 80, "") { wares.selected.connect(boost::bind(&EncyclopediaWindow::wareSelected, this, _1)); prodSites.selected.connect(boost::bind(&EncyclopediaWindow::prodSiteSelected, this, _1)); condTable.add_column - (WARE_GROUPS_TABLE_WIDTH - - QUANTITY_COLUMN_WIDTH, - _("Consumed ware type(s)")); + /** TRANSLATORS: Column title in the Tribal Wares Encyclopedia */ + (WARE_COLUMN_WIDTH, ngettext("Consumed Ware Type", "Consumed Ware Types", 0)); condTable.add_column (QUANTITY_COLUMN_WIDTH, _("Quantity")); fillWares(); @@ -137,6 +137,7 @@ void EncyclopediaWindow::prodSiteSelected(uint32_t) { assert(prodSites.has_selection()); + size_t no_of_wares = 0; condTable.clear(); const TribeDescr & tribe = iaplayer().player().tribe(); @@ -184,6 +185,7 @@ for (const WareIndex& ware_index : ware_types) { ware_type_descnames.push_back(tribe.get_ware_descr(ware_index)->descname()); } + no_of_wares = no_of_wares + ware_types.size(); std::string ware_type_names = i18n::localize_item_list(ware_type_descnames, i18n::ConcatenateWith::OR); @@ -206,4 +208,5 @@ } } } + condTable.set_column_title(0, ngettext("Consumed Ware Type", "Consumed Ware Types", no_of_wares)); } === modified file 'src/wui/login_box.cc' --- src/wui/login_box.cc 2014-09-10 14:48:40 +0000 +++ src/wui/login_box.cc 2014-09-27 13:09:21 +0000 @@ -26,17 +26,19 @@ LoginBox::LoginBox(Panel & parent) : -Window(&parent, "login_box", 0, 0, 500, 210, _("Metaserver login")) +Window(&parent, "login_box", 0, 0, 500, 220, _("Metaserver login")) { center_to_parent(); - ta_nickname = new UI::Textarea(this, 10, 5, _("Nickname:")); + int32_t margin = 10; + + ta_nickname = new UI::Textarea(this, margin, margin, _("Nickname:")); eb_nickname = new UI::EditBox - (this, 150, 5, 330, 20, + (this, 150, margin, 330, 20, g_gr->images().get("pics/but2.png"), UI::Align_Left); - ta_password = new UI::Textarea(this, 10, 40, _("Password:")); + ta_password = new UI::Textarea(this, margin, 40, _("Password:")); eb_password = new UI::EditBox (this, 150, 40, 330, 20, @@ -44,28 +46,29 @@ pwd_warning = new UI::MultilineTextarea - (this, 10, 65, 505, 50, + (this, margin, 65, 505, 50, _("WARNING: Password will be shown and saved readable!"), UI::Align_Left); - cb_register = new UI::Checkbox(this, Point(10, 110)); + cb_register = new UI::Checkbox(this, Point(margin, 110)); ta_register = new UI::Textarea(this, 40, 110, _("Log in to a registered account")); - cb_auto_log = new UI::Checkbox(this, Point(10, 135)); - ta_auto_log = new UI::Textarea - (this, 40, 135, + cb_auto_log = new UI::Checkbox(this, Point(margin, 135)); + ta_auto_log = new UI::MultilineTextarea + (this, 40, 135, get_inner_w() - cb_auto_log->get_w() - margin, 35, _("Automatically use this login information from now on.")); UI::Button * loginbtn = new UI::Button (this, "login", - (get_inner_w() / 2 - 200) / 2, 175, 200, 20, + (get_inner_w() / 2 - 200) / 2, get_inner_h() - 20 - margin, + 200, 20, g_gr->images().get("pics/but0.png"), _("Login")); loginbtn->sigclicked.connect(boost::bind(&LoginBox::pressedLogin, boost::ref(*this))); UI::Button * cancelbtn = new UI::Button (this, "cancel", - (get_inner_w() / 2 - 200) / 2 + get_inner_w() / 2, 175, 200, 20, + (get_inner_w() / 2 - 200) / 2 + get_inner_w() / 2, loginbtn->get_y(), 200, 20, g_gr->images().get("pics/but1.png"), _("Cancel")); cancelbtn->sigclicked.connect(boost::bind(&LoginBox::pressedCancel, boost::ref(*this))); === modified file 'src/wui/login_box.h' --- src/wui/login_box.h 2014-09-10 14:48:40 +0000 +++ src/wui/login_box.h 2014-09-27 13:09:21 +0000 @@ -46,7 +46,7 @@ UI::Textarea * ta_nickname; UI::Textarea * ta_password; UI::Textarea * ta_register; - UI::Textarea * ta_auto_log; + UI::MultilineTextarea * ta_auto_log; UI::MultilineTextarea * pwd_warning; };
_______________________________________________ Mailing list: https://launchpad.net/~widelands-dev Post to : widelands-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~widelands-dev More help : https://help.launchpad.net/ListHelp