From 8d779124236ea10e3072de8ac8cf021655cfe466 Mon Sep 17 00:00:00 2001 From: "Ignacio R. Morelle" Date: Fri, 14 Aug 2009 20:32:33 +0000 Subject: [PATCH] WIP unit-create dialog (debug mode only) using GUI2. It is only used with --new-widgets for now. If you open it you'll have to use ESC since there are no OK or Cancel buttons yet. --- data/gui/default/window/unit_create.cfg | 201 ++++++++++++++++++++++++ src/CMakeLists.txt | 1 + src/Makefile.am | 1 + src/SConscript | 1 + src/gui/dialogs/unit_create.cpp | 49 ++++++ src/gui/dialogs/unit_create.hpp | 45 ++++++ src/gui/widgets/settings.cpp | 1 + src/gui/widgets/settings.hpp | 1 + src/menu_events.cpp | 13 ++ 9 files changed, 313 insertions(+) create mode 100644 data/gui/default/window/unit_create.cfg create mode 100644 src/gui/dialogs/unit_create.cpp create mode 100644 src/gui/dialogs/unit_create.hpp diff --git a/data/gui/default/window/unit_create.cfg b/data/gui/default/window/unit_create.cfg new file mode 100644 index 00000000000..9e02b7c816c --- /dev/null +++ b/data/gui/default/window/unit_create.cfg @@ -0,0 +1,201 @@ +#textdomain wesnoth-lib +### +### Definition of the window to create units in debug mode. +### + +[window] + id = "unit_create" + description = "Debug-mode unit creation dialog." + + [resolution] + definition = "default" + automatic_placement = "true" + vertical_placement = "center" + horizontal_placement = "center" + + [linked_group] + id = "race" + fixed_width = "true" + [/linked_group] + [linked_group] + id = "unit_type" + fixed_width = "true" + [/linked_group] + + [grid] + [row] + grow_factor = 0 + + [column] + grow_factor = 1 + border = "all" + border_size = 5 + horizontal_alignment = "left" + + [label] + definition = "title" + label = _ "Create Unit (Debug!)" + [/label] + + [/column] + + [column] + [spacer] + definition = "default" + [/spacer] + [/column] + + [column] + [spacer] + definition = "default" + [/spacer] + [/column] + [/row] + + [row] + grow_factor = 0 + + [column] + grow_factor = 1 + border = "all" + border_size = 5 + horizontal_alignment = "left" + + [label] + definition = "default" + label= _ "Gender:" + [/label] + + [/column] + + [column] + grow_factor = 1 + border = "all" + border_size = 5 + horizontal_alignment = "left" + + [toggle_button] + id = "male_toggle" + definition = "default" + label= _ "Male" + [/toggle_button] + + [/column] + + [column] + grow_factor = 1 + border = "all" + border_size = 5 + horizontal_alignment = "left" + + [toggle_button] + id = "female_toggle" + definition = "default" + label= _ "Female" + [/toggle_button] + + [/column] + [/row] + + [row] + grow_factor = 0 + + [column] + grow_factor = 1 + border = "all" + border_size = 5 + horizontal_alignment = "left" + + [listbox] + id = "unit_type_list" + definition = "default" + linked_widgets_disabled = "true" + [header] + [row] + [column] + grow_factor = 1 + horizontal_grow = "true" + border = "all" + border_size = 5 + [label] + id = "race" + definition = "default" + linked_group = "race" + label = _ "Race" + [/label] + [/column] + [column] + grow_factor = 1 + horizontal_grow = "true" + border = "all" + border_size = 5 + [label] + id = "unit_type" + definition = "default" + linked_group = "unit_type" + label = _ "Type" + [/label] + [/column] + [/row] + [/header] + + [list_definition] + [row] + [column] + vertical_grow = "true" + horizontal_grow = "true" + + [toggle_panel] + definition = "default" + + return_value_id = "ok" + [grid] + [row] + [column] + grow_factor = 1 + horizontal_grow = "true" + border = "all" + border_size = 5 + [label] + id = "race" + definition = "default" + linked_group = "race" + [/label] + [/column] + [column] + grow_factor = 1 + horizontal_grow = "true" + border = "all" + border_size = 5 + [label] + id = "unit_type" + definition = "default" + linked_group = "unit_type" + [/label] + [/column] + [/row] + [/grid] + [/toggle_panel] + [/column] + [/row] + [/list_definition] + [/listbox] + + [/column] + + [column] + [spacer] + definition = "default" + [/spacer] + [/column] + + [column] + [spacer] + definition = "default" + [/spacer] + [/column] + [/row] + [/grid] + [/resolution] + +[/window] diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5decb3f3737..2cf7c5f3e0c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -316,6 +316,7 @@ SET(wesnoth-main_SRC gui/dialogs/mp_cmd_wrapper.cpp gui/dialogs/title_screen.cpp gui/dialogs/transient_message.cpp + gui/widgets/unit_create.cpp gui/dialogs/wml_message.cpp gui/widgets/button.cpp gui/widgets/control.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 2619003921e..1416993b16f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -137,6 +137,7 @@ wesnoth_source = \ gui/dialogs/mp_cmd_wrapper.cpp \ gui/dialogs/title_screen.cpp \ gui/dialogs/transient_message.cpp \ + gui/widgets/unit_create.cpp \ gui/dialogs/wml_message.cpp \ gui/widgets/button.cpp \ gui/widgets/control.cpp \ diff --git a/src/SConscript b/src/SConscript index cd9f2c1ebd6..3656b9c7631 100644 --- a/src/SConscript +++ b/src/SConscript @@ -296,6 +296,7 @@ wesnoth_sources = Split(""" gui/dialogs/mp_cmd_wrapper.cpp gui/dialogs/title_screen.cpp gui/dialogs/transient_message.cpp + gui/dialogs/unit_create.cpp gui/dialogs/wml_message.cpp gui/widgets/button.cpp gui/widgets/control.cpp diff --git a/src/gui/dialogs/unit_create.cpp b/src/gui/dialogs/unit_create.cpp new file mode 100644 index 00000000000..c2789fc547d --- /dev/null +++ b/src/gui/dialogs/unit_create.cpp @@ -0,0 +1,49 @@ +/* $Id$ */ +/* + Copyright (C) 2009 by Ignacio R. Morelle + Part of the Battle for Wesnoth Project http://www.wesnoth.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + or at your option any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY. + + See the COPYING file for more details. +*/ + +#define GETTEXT_DOMAIN "wesnoth-lib" + +#include "gui/dialogs/unit_create.hpp" + +#include "gui/widgets/toggle_button.hpp" +#include "gui/widgets/window.hpp" + +namespace gui2 { + +/* TODO: wiki-doc me! */ + +twindow* tunit_create::build_window(CVideo& video) +{ + return build(video, get_id(UNIT_CREATE)); +} + +void tunit_create::pre_show(CVideo& /*video*/, twindow& window) +{ + ttoggle_button* male_toggle = dynamic_cast(window.find_widget("male_toggle", false)); + ttoggle_button* female_toggle = dynamic_cast(window.find_widget("female_toggle", false)); + + VALIDATE(male_toggle, missing_widget("male_toggle")); + VALIDATE(female_toggle, missing_widget("female_toggle")); + + if(gender_ == unit_race::FEMALE) { + female_toggle->set_value(true); + male_toggle->set_value(false); + } + else { + female_toggle->set_value(false); + male_toggle->set_value(true); + } +} + +} diff --git a/src/gui/dialogs/unit_create.hpp b/src/gui/dialogs/unit_create.hpp new file mode 100644 index 00000000000..10f3f82646d --- /dev/null +++ b/src/gui/dialogs/unit_create.hpp @@ -0,0 +1,45 @@ +/* $Id$ */ +/* + Copyright (C) 2009 by Ignacio R. Morelle + Part of the Battle for Wesnoth Project http://www.wesnoth.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + or at your option any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY. + + See the COPYING file for more details. +*/ + +#ifndef GUI_DIALOGS_UNIT_CREATE_HPP_INCLUDED +#define GUI_DIALOGS_UNIT_CREATE_HPP_INCLUDED + +#include "gui/dialogs/dialog.hpp" +#include "race.hpp" + +namespace gui2 { + +class tunit_create : public tdialog +{ +public: + tunit_create(unit_race::GENDER default_gender = unit_race::MALE) : + gender_(default_gender) + {} + + unit_race::GENDER gender() const { return gender_; } + void set_gender(unit_race::GENDER gender) { gender_ = gender; } + +private: + unit_race::GENDER gender_; + + /** Inherited from tdialog. */ + twindow* build_window(CVideo& video); + + /** Inherited from tdialog. */ + void pre_show(CVideo& video, twindow& window); +}; + +} + +#endif /* ! GUI_DIALOGS_UNIT_CREATE_HPP_INCLUDED */ diff --git a/src/gui/widgets/settings.cpp b/src/gui/widgets/settings.cpp index 8dbfe41a2cb..058fad44420 100644 --- a/src/gui/widgets/settings.cpp +++ b/src/gui/widgets/settings.cpp @@ -101,6 +101,7 @@ static void fill_window_types() #endif window_type_list[LOBBY_MAIN] = "lobby_main"; window_type_list[LOBBY_PLAYER_INFO] = "lobby_player_info"; + window_type_list[UNIT_CREATE] = "unit_create"; } const std::string& get_id(const twindow_type window_type) diff --git a/src/gui/widgets/settings.hpp b/src/gui/widgets/settings.hpp index 83bd5a65a23..a48bdd14c65 100644 --- a/src/gui/widgets/settings.hpp +++ b/src/gui/widgets/settings.hpp @@ -74,6 +74,7 @@ enum twindow_type { GAME_SAVE_OOS, /**< Save game dialog for processing OOS. */ LOBBY_MAIN, /**< Main MP lobby screen */ LOBBY_PLAYER_INFO, /**< MP lobby player info dialog */ + UNIT_CREATE, /**< Debug-mode unit creation dialog */ COUNT /**< * The last one to hold the number of items and as * sentinel. diff --git a/src/menu_events.cpp b/src/menu_events.cpp index 7fc99d1904b..baa9d24d2e2 100644 --- a/src/menu_events.cpp +++ b/src/menu_events.cpp @@ -30,6 +30,7 @@ #include "game_events.hpp" #include "gettext.hpp" #include "gui/dialogs/transient_message.hpp" +#include "gui/dialogs/unit_create.hpp" #include "gui/widgets/window.hpp" #include "help.hpp" #include "log.hpp" @@ -1370,6 +1371,18 @@ private: void menu_handler::create_unit(mouse_handler& mousehandler) { + if(gui2::new_widgets) { + assert(gui_ != NULL); + static unit_race::GENDER last_gender = unit_race::MALE; + + gui2::tunit_create create_dlg; + create_dlg.set_gender(last_gender); + + create_dlg.show(gui_->video()); + + last_gender = create_dlg.gender(); + return; + } std::vector options; static int last_selection = -1; static bool random_gender = false;