mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-27 21:33:41 +00:00
editor2: settings dialog
currently only does lightning settings by having presets and custom sliders. Functional but still WIP, may have some subtle bugs. Changing slider values refreshes the underlying map, in a possibly inefficient way (flicker), but working reasonably. This fills fr#11408
This commit is contained in:
parent
4a368e22bd
commit
a806efa0a8
@ -1,4 +1,10 @@
|
|||||||
Version 1.5.4+svn:
|
Version 1.5.4+svn:
|
||||||
|
* Editor2:
|
||||||
|
* Added editor-specific settings dialog
|
||||||
|
* Lightning setting similar to that of old editor, with presets from a
|
||||||
|
(hardcoded) list of time_of_days. Can change the settings and see the
|
||||||
|
effects without having to close the settings dialog. The preferences
|
||||||
|
are shared with the old editor.
|
||||||
* Graphics:
|
* Graphics:
|
||||||
* New or updated unit frames: Walking Corpse swimmer, Soulless swimmer
|
* New or updated unit frames: Walking Corpse swimmer, Soulless swimmer
|
||||||
* Language and i18n:
|
* Language and i18n:
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
{core/editor-groups.cfg}
|
{core/editor-groups.cfg}
|
||||||
{core/editor2-brushes.cfg}
|
{core/editor2-brushes.cfg}
|
||||||
{core/editor2-hotkeys.cfg}
|
{core/editor2-hotkeys.cfg}
|
||||||
|
{core/editor2-tods.cfg}
|
||||||
{core/editor2-tool-hints.cfg}
|
{core/editor2-tool-hints.cfg}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
8
data/core/editor2-tods.cfg
Normal file
8
data/core/editor2-tods.cfg
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#textdomain wesnoth-editor
|
||||||
|
|
||||||
|
[editor_times]
|
||||||
|
{DAWN}
|
||||||
|
{MORNING}
|
||||||
|
{DUSK}
|
||||||
|
{FIRST_WATCH}
|
||||||
|
[/editor_times]
|
222
data/gui/default/window/editor_settings.cfg
Normal file
222
data/gui/default/window/editor_settings.cfg
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
###
|
||||||
|
### Definition of the window to create a new map in editor2.
|
||||||
|
###
|
||||||
|
|
||||||
|
#define ONE_ROW_GRID
|
||||||
|
[grid]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
#define ONE_ROW_GRID_END
|
||||||
|
[/row]
|
||||||
|
[/grid]
|
||||||
|
#enddef
|
||||||
|
|
||||||
|
[window]
|
||||||
|
id = "editor_settings"
|
||||||
|
description = "Editor settings dialog."
|
||||||
|
|
||||||
|
[resolution]
|
||||||
|
definition = "default"
|
||||||
|
|
||||||
|
automatic_placement = "true"
|
||||||
|
vertical_placement = "center"
|
||||||
|
horizontal_placement = "center"
|
||||||
|
|
||||||
|
[grid]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[label]
|
||||||
|
definition = "title"
|
||||||
|
label = _ "Editor Settings"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
[column]
|
||||||
|
[label]
|
||||||
|
definition = "default"
|
||||||
|
label = _ "Time of day lightning preset"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
horizontal_grow = "true"
|
||||||
|
[grid]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[label]
|
||||||
|
id = "current_tod"
|
||||||
|
definition = "default"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[column]
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "right"
|
||||||
|
[button]
|
||||||
|
id = "next_tod"
|
||||||
|
definition = "default"
|
||||||
|
size_text = _ "Next"
|
||||||
|
label = _ "Next"
|
||||||
|
[/button]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[/grid]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
[label]
|
||||||
|
id = "current_tod_image"
|
||||||
|
definition = "default"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
[toggle_button]
|
||||||
|
id = "custom_tod_toggle"
|
||||||
|
definition = "default"
|
||||||
|
label = _ "Custom lightning setting"
|
||||||
|
[/toggle_button]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
[column]
|
||||||
|
[grid]
|
||||||
|
[row]
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[label]
|
||||||
|
definition = "default"
|
||||||
|
label = _ "Red:"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[slider]
|
||||||
|
id = "custom_tod_red"
|
||||||
|
definition = "default"
|
||||||
|
best_slider_length = 511
|
||||||
|
minimum_value = -255
|
||||||
|
maximum_value = 255
|
||||||
|
step_size = 1
|
||||||
|
[/slider]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[label]
|
||||||
|
definition = "default"
|
||||||
|
label = _ "Green:"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[slider]
|
||||||
|
id = "custom_tod_green"
|
||||||
|
definition = "default"
|
||||||
|
best_slider_length = 511
|
||||||
|
minimum_value = -255
|
||||||
|
maximum_value = 255
|
||||||
|
step_size = 1
|
||||||
|
[/slider]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
[column]
|
||||||
|
grow_factor = 0
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[label]
|
||||||
|
definition = "default"
|
||||||
|
label = _ "Blue:"
|
||||||
|
[/label]
|
||||||
|
[/column]
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "left"
|
||||||
|
[slider]
|
||||||
|
id = "custom_tod_blue"
|
||||||
|
definition = "default"
|
||||||
|
best_slider_length = 511
|
||||||
|
minimum_value = -255
|
||||||
|
maximum_value = 255
|
||||||
|
step_size = 1
|
||||||
|
[/slider]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[/grid]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
grow_factor = 1
|
||||||
|
horizontal_grow = "true"
|
||||||
|
[grid]
|
||||||
|
[row]
|
||||||
|
grow_factor = 0
|
||||||
|
[column]
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "right"
|
||||||
|
[button]
|
||||||
|
id = "ok"
|
||||||
|
definition = "default"
|
||||||
|
label = _ "OK"
|
||||||
|
[/button]
|
||||||
|
[/column]
|
||||||
|
[column]
|
||||||
|
border = "all"
|
||||||
|
border_size = 5
|
||||||
|
horizontal_alignment = "right"
|
||||||
|
[button]
|
||||||
|
id = "cancel"
|
||||||
|
definition = "default"
|
||||||
|
label = _ "Cancel"
|
||||||
|
[/button]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[/grid]
|
||||||
|
[/column]
|
||||||
|
[/row]
|
||||||
|
[/grid]
|
||||||
|
[/resolution]
|
||||||
|
[/window]
|
||||||
|
|
||||||
|
#undef ONE_ROW_GRID
|
||||||
|
#undef ONE_ROW_GRID_END
|
@ -3,8 +3,13 @@ changes may be omitted). For a complete list of changes, see the main
|
|||||||
changelog: http://svn.gna.org/viewcvs/*checkout*/wesnoth/trunk/changelog
|
changelog: http://svn.gna.org/viewcvs/*checkout*/wesnoth/trunk/changelog
|
||||||
|
|
||||||
Version 1.5.4+svn:
|
Version 1.5.4+svn:
|
||||||
|
* Editor2
|
||||||
|
* Allow changing the display time of day from a preset list or to custom
|
||||||
|
values via sliders, available in the new editor settings dialog.
|
||||||
|
|
||||||
* Language and translations
|
* Language and translations
|
||||||
* updated translations: Finnish, Slovak.
|
* updated translations: Finnish, Slovak.
|
||||||
|
|
||||||
* Unit changes and balancing
|
* Unit changes and balancing
|
||||||
* Made units with the healthy trait take a quarter less damage from poison.
|
* Made units with the healthy trait take a quarter less damage from poison.
|
||||||
|
|
||||||
|
@ -318,8 +318,9 @@ IF(ENABLE_EDITOR2)
|
|||||||
|
|
||||||
SET(wesnoth-editor2_SRC
|
SET(wesnoth-editor2_SRC
|
||||||
gui/dialogs/editor_generate_map.cpp
|
gui/dialogs/editor_generate_map.cpp
|
||||||
gui/dialogs/editor_resize_map.cpp
|
|
||||||
gui/dialogs/editor_new_map.cpp
|
gui/dialogs/editor_new_map.cpp
|
||||||
|
gui/dialogs/editor_resize_map.cpp
|
||||||
|
gui/dialogs/editor_settings.cpp
|
||||||
editor2/action.cpp
|
editor2/action.cpp
|
||||||
editor2/brush.cpp
|
editor2/brush.cpp
|
||||||
editor2/editor_main.cpp
|
editor2/editor_main.cpp
|
||||||
|
@ -161,6 +161,7 @@ wesnoth_editor2_SOURCES = \
|
|||||||
gui/dialogs/editor_generate_map.cpp \
|
gui/dialogs/editor_generate_map.cpp \
|
||||||
gui/dialogs/editor_new_map.cpp \
|
gui/dialogs/editor_new_map.cpp \
|
||||||
gui/dialogs/editor_resize_map.cpp \
|
gui/dialogs/editor_resize_map.cpp \
|
||||||
|
gui/dialogs/editor_settings.cpp \
|
||||||
editor2/action.cpp \
|
editor2/action.cpp \
|
||||||
editor2/brush.cpp \
|
editor2/brush.cpp \
|
||||||
editor2/editor_main.cpp \
|
editor2/editor_main.cpp \
|
||||||
|
@ -255,6 +255,7 @@ wesnoth_editor2_sources = Split("""
|
|||||||
gui/dialogs/editor_generate_map.cpp
|
gui/dialogs/editor_generate_map.cpp
|
||||||
gui/dialogs/editor_new_map.cpp
|
gui/dialogs/editor_new_map.cpp
|
||||||
gui/dialogs/editor_resize_map.cpp
|
gui/dialogs/editor_resize_map.cpp
|
||||||
|
gui/dialogs/editor_settings.cpp
|
||||||
editor2/action.cpp
|
editor2/action.cpp
|
||||||
editor2/brush.cpp
|
editor2/brush.cpp
|
||||||
editor2/editor_main.cpp
|
editor2/editor_main.cpp
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "gui/dialogs/editor_new_map.hpp"
|
#include "gui/dialogs/editor_new_map.hpp"
|
||||||
#include "gui/dialogs/editor_generate_map.hpp"
|
#include "gui/dialogs/editor_generate_map.hpp"
|
||||||
#include "gui/dialogs/editor_resize_map.hpp"
|
#include "gui/dialogs/editor_resize_map.hpp"
|
||||||
|
#include "gui/dialogs/editor_settings.hpp"
|
||||||
#include "gui/widgets/button.hpp"
|
#include "gui/widgets/button.hpp"
|
||||||
#include "gui/widgets/window.hpp"
|
#include "gui/widgets/window.hpp"
|
||||||
|
|
||||||
@ -93,11 +94,13 @@ editor_controller::editor_controller(const config &game_config, CVideo& video)
|
|||||||
init_mouse_actions(game_config);
|
init_mouse_actions(game_config);
|
||||||
hotkey_set_mouse_action(hotkey::HOTKEY_EDITOR_TOOL_PAINT);
|
hotkey_set_mouse_action(hotkey::HOTKEY_EDITOR_TOOL_PAINT);
|
||||||
init_map_generators(game_config);
|
init_map_generators(game_config);
|
||||||
|
init_tods(game_config);
|
||||||
hotkey::get_hotkey(hotkey::HOTKEY_QUIT_GAME).set_description(_("Quit Editor"));
|
hotkey::get_hotkey(hotkey::HOTKEY_QUIT_GAME).set_description(_("Quit Editor"));
|
||||||
background_terrain_ = t_translation::GRASS_LAND;
|
background_terrain_ = t_translation::GRASS_LAND;
|
||||||
foreground_terrain_ = t_translation::MOUNTAIN;
|
foreground_terrain_ = t_translation::MOUNTAIN;
|
||||||
get_map_context().set_starting_position_labels(gui());
|
get_map_context().set_starting_position_labels(gui());
|
||||||
cursor::set(cursor::NORMAL);
|
cursor::set(cursor::NORMAL);
|
||||||
|
image::set_colour_adjustment(preferences::editor_r(), preferences::editor_g(), preferences::editor_b());
|
||||||
gui_->invalidate_game_status();
|
gui_->invalidate_game_status();
|
||||||
refresh_all();
|
refresh_all();
|
||||||
events::raise_draw_event();
|
events::raise_draw_event();
|
||||||
@ -169,6 +172,19 @@ void editor_controller::init_map_generators(const config& game_config)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void editor_controller::init_tods(const config& game_config)
|
||||||
|
{
|
||||||
|
const config* cfg = game_config.child("editor_times");
|
||||||
|
if (cfg == NULL) {
|
||||||
|
ERR_ED << "No editor time-of-day defined\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
foreach (const config* i, cfg->get_children("time")) {
|
||||||
|
tods_.push_back(time_of_day(*i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void editor_controller::load_tooltips()
|
void editor_controller::load_tooltips()
|
||||||
{
|
{
|
||||||
// Tooltips for the groups
|
// Tooltips for the groups
|
||||||
@ -220,6 +236,38 @@ void editor_controller::quit_confirm(EXIT_STATUS mode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void editor_controller::editor_settings_dialog()
|
||||||
|
{
|
||||||
|
if (tods_.empty()) {
|
||||||
|
gui::message_dialog(gui(), _("Error"), _("No editor time-of-day found")).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gui2::teditor_settings dialog;
|
||||||
|
dialog.set_tods(tods_);
|
||||||
|
dialog.set_current_adjustment(preferences::editor_r(), preferences::editor_g(), preferences::editor_b());
|
||||||
|
dialog.set_redraw_callback(boost::bind(&editor_controller::editor_settings_dialog_redraw_callback, this, _1, _2, _3));
|
||||||
|
image::colour_adjustment_resetter adjust_resetter;
|
||||||
|
dialog.show(gui().video());
|
||||||
|
|
||||||
|
int res = dialog.get_retval();
|
||||||
|
if(res == gui2::twindow::OK) {
|
||||||
|
image::set_colour_adjustment(dialog.get_red(), dialog.get_green(), dialog.get_blue());
|
||||||
|
preferences::set_editor_r(dialog.get_red());
|
||||||
|
preferences::set_editor_g(dialog.get_green());
|
||||||
|
preferences::set_editor_b(dialog.get_blue());
|
||||||
|
} else {
|
||||||
|
adjust_resetter.reset();
|
||||||
|
}
|
||||||
|
refresh_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void editor_controller::editor_settings_dialog_redraw_callback(int r, int g, int b)
|
||||||
|
{
|
||||||
|
image::set_colour_adjustment(r, g, b);
|
||||||
|
refresh_all();
|
||||||
|
}
|
||||||
|
|
||||||
bool editor_controller::confirm_discard()
|
bool editor_controller::confirm_discard()
|
||||||
{
|
{
|
||||||
if (get_map_context().modified()) {
|
if (get_map_context().modified()) {
|
||||||
@ -492,6 +540,7 @@ bool editor_controller::can_execute_command(hotkey::HOTKEY_COMMAND command, int
|
|||||||
case HOTKEY_EDITOR_PARTIAL_UNDO:
|
case HOTKEY_EDITOR_PARTIAL_UNDO:
|
||||||
return true;
|
return true;
|
||||||
case HOTKEY_EDITOR_QUIT_TO_DESKTOP:
|
case HOTKEY_EDITOR_QUIT_TO_DESKTOP:
|
||||||
|
case HOTKEY_EDITOR_SETTINGS:
|
||||||
case HOTKEY_EDITOR_MAP_NEW:
|
case HOTKEY_EDITOR_MAP_NEW:
|
||||||
case HOTKEY_EDITOR_MAP_LOAD:
|
case HOTKEY_EDITOR_MAP_LOAD:
|
||||||
case HOTKEY_EDITOR_MAP_SAVE_AS:
|
case HOTKEY_EDITOR_MAP_SAVE_AS:
|
||||||
@ -568,6 +617,9 @@ bool editor_controller::execute_command(hotkey::HOTKEY_COMMAND command, int inde
|
|||||||
case HOTKEY_EDITOR_QUIT_TO_DESKTOP:
|
case HOTKEY_EDITOR_QUIT_TO_DESKTOP:
|
||||||
quit_confirm(EXIT_QUIT_TO_DESKTOP);
|
quit_confirm(EXIT_QUIT_TO_DESKTOP);
|
||||||
return true;
|
return true;
|
||||||
|
case HOTKEY_EDITOR_SETTINGS:
|
||||||
|
editor_settings_dialog();
|
||||||
|
return true;
|
||||||
case HOTKEY_EDITOR_TERRAIN_PALETTE_SWAP:
|
case HOTKEY_EDITOR_TERRAIN_PALETTE_SWAP:
|
||||||
palette_->swap();
|
palette_->swap();
|
||||||
if (get_mouse_action()->uses_terrains()) set_mouseover_overlay();
|
if (get_mouse_action()->uses_terrains()) set_mouseover_overlay();
|
||||||
|
@ -80,6 +80,8 @@ class editor_controller : public controller_base,
|
|||||||
*/
|
*/
|
||||||
void quit_confirm(EXIT_STATUS status);
|
void quit_confirm(EXIT_STATUS status);
|
||||||
|
|
||||||
|
void editor_settings_dialog();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows an are-you-sure dialog if the map was modified.
|
* Shows an are-you-sure dialog if the map was modified.
|
||||||
* @return true if the user confirmed or the map was not modified, false otherwise
|
* @return true if the user confirmed or the map was not modified, false otherwise
|
||||||
@ -233,6 +235,7 @@ class editor_controller : public controller_base,
|
|||||||
*/
|
*/
|
||||||
void perform_refresh(const editor_action& action, bool drag_part = false);
|
void perform_refresh(const editor_action& action, bool drag_part = false);
|
||||||
|
|
||||||
|
void editor_settings_dialog_redraw_callback(int r, int g, int b);
|
||||||
private:
|
private:
|
||||||
/** init the display object and general set-up */
|
/** init the display object and general set-up */
|
||||||
void init(CVideo& video);
|
void init(CVideo& video);
|
||||||
@ -246,6 +249,8 @@ class editor_controller : public controller_base,
|
|||||||
/** init available random map generators */
|
/** init available random map generators */
|
||||||
void init_map_generators(const config& game_config);
|
void init_map_generators(const config& game_config);
|
||||||
|
|
||||||
|
void init_tods(const config& game_config);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load editor-specific tooltips
|
* Load editor-specific tooltips
|
||||||
*/
|
*/
|
||||||
@ -294,6 +299,12 @@ class editor_controller : public controller_base,
|
|||||||
|
|
||||||
std::vector<map_generator*> map_generators_;
|
std::vector<map_generator*> map_generators_;
|
||||||
|
|
||||||
|
int current_map_generator_index_;
|
||||||
|
|
||||||
|
std::vector<time_of_day> tods_;
|
||||||
|
|
||||||
|
int current_tod_index_;
|
||||||
|
|
||||||
/** Legacy object required by the legacy terrain palette and brush bar */
|
/** Legacy object required by the legacy terrain palette and brush bar */
|
||||||
size_specs* size_specs_;
|
size_specs* size_specs_;
|
||||||
|
|
||||||
|
171
src/gui/dialogs/editor_settings.cpp
Normal file
171
src/gui/dialogs/editor_settings.cpp
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/*
|
||||||
|
copyright (c) 2008 by mark de wever <koraq@xs4all.nl>
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gui/dialogs/editor_settings.hpp"
|
||||||
|
|
||||||
|
#include "gui/dialogs/field.hpp"
|
||||||
|
#include "gui/dialogs/helper.hpp"
|
||||||
|
|
||||||
|
#include "gui/widgets/button.hpp"
|
||||||
|
#include "gui/widgets/label.hpp"
|
||||||
|
#include "gui/widgets/widget.hpp"
|
||||||
|
#include "gui/widgets/window.hpp"
|
||||||
|
#include "gui/widgets/window_builder.hpp"
|
||||||
|
#include "gui/widgets/settings.hpp"
|
||||||
|
#include "gui/widgets/slider.hpp"
|
||||||
|
#include "gui/widgets/text_box.hpp"
|
||||||
|
#include "gui/widgets/toggle_button.hpp"
|
||||||
|
#include "gettext.hpp"
|
||||||
|
#include "image.hpp"
|
||||||
|
#include "log.hpp"
|
||||||
|
#include "wml_exception.hpp"
|
||||||
|
#define DBG_GUI LOG_STREAM_INDENT(debug, gui)
|
||||||
|
#define LOG_GUI LOG_STREAM_INDENT(info, gui)
|
||||||
|
#define WRN_GUI LOG_STREAM_INDENT(warn, gui)
|
||||||
|
#define ERR_GUI LOG_STREAM_INDENT(err, gui)
|
||||||
|
#define ERR_ED LOG_STREAM_INDENT(err, editor)
|
||||||
|
|
||||||
|
namespace gui2 {
|
||||||
|
|
||||||
|
teditor_settings::teditor_settings()
|
||||||
|
: redraw_callback_(),
|
||||||
|
tods_(), current_tod_(0),
|
||||||
|
current_tod_label_(NULL), current_tod_image_(NULL),
|
||||||
|
custom_tod_toggle_(NULL),
|
||||||
|
custom_tod_toggle_field_(register_bool("custom_tod_toggle", false)),
|
||||||
|
custom_tod_red_(NULL), custom_tod_green_(NULL), custom_tod_blue_(NULL),
|
||||||
|
custom_tod_red_field_(register_integer("custom_tod_red", false)),
|
||||||
|
custom_tod_green_field_(register_integer("custom_tod_green", false)),
|
||||||
|
custom_tod_blue_field_(register_integer("custom_tod_blue", false))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void teditor_settings::do_next_tod(twindow& window)
|
||||||
|
{
|
||||||
|
current_tod_++;
|
||||||
|
current_tod_ %= tods_.size();
|
||||||
|
custom_tod_toggle_->set_value(false);
|
||||||
|
update_selected_tod_info(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
const time_of_day& teditor_settings::get_selected_tod() const
|
||||||
|
{
|
||||||
|
assert(static_cast<size_t>(current_tod_) < tods_.size());
|
||||||
|
return tods_[current_tod_];
|
||||||
|
}
|
||||||
|
|
||||||
|
int teditor_settings::get_red() const
|
||||||
|
{
|
||||||
|
std::cerr << "get red " << custom_tod_red_field_->get_cache_value() << "\n";
|
||||||
|
return custom_tod_red_field_->get_cache_value();
|
||||||
|
}
|
||||||
|
int teditor_settings::get_green() const
|
||||||
|
{
|
||||||
|
std::cerr << "get green " << custom_tod_green_field_->get_cache_value() << "\n";
|
||||||
|
return custom_tod_green_field_->get_cache_value();
|
||||||
|
}
|
||||||
|
int teditor_settings::get_blue() const
|
||||||
|
{
|
||||||
|
std::cerr << "get blue" << custom_tod_blue_field_->get_cache_value() << "\n";
|
||||||
|
return custom_tod_blue_field_->get_cache_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
void teditor_settings::update_tod_display(twindow& window)
|
||||||
|
{
|
||||||
|
redraw_callback_(custom_tod_red_->get_value(),
|
||||||
|
custom_tod_green_->get_value(),
|
||||||
|
custom_tod_blue_->get_value());
|
||||||
|
}
|
||||||
|
|
||||||
|
void teditor_settings::set_current_adjustment(int r, int g, int b)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < tods_.size(); ++i) {
|
||||||
|
time_of_day& tod = tods_[i];
|
||||||
|
if (tod.red == r && tod.green == g && tod.blue == b) {
|
||||||
|
current_tod_ = i;
|
||||||
|
custom_tod_toggle_field_->set_cache_value(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* custom tod */
|
||||||
|
std::cerr << "adj set b\n";
|
||||||
|
custom_tod_red_field_->set_cache_value(r);
|
||||||
|
custom_tod_green_field_->set_cache_value(g);
|
||||||
|
custom_tod_blue_field_->set_cache_value(b);
|
||||||
|
custom_tod_toggle_field_->set_cache_value(true);
|
||||||
|
std::cerr << "adj set " << r << " " << g << " " << b << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
void teditor_settings::update_selected_tod_info(twindow& window)
|
||||||
|
{
|
||||||
|
std::cerr << "update_selected_tod_info begin\n";
|
||||||
|
bool custom = custom_tod_toggle_->get_value();
|
||||||
|
if (custom) {
|
||||||
|
current_tod_label_->set_label(_("Custom setting"));
|
||||||
|
} else {
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << (current_tod_ + 1);
|
||||||
|
ss << "/" << tods_.size();
|
||||||
|
ss << ": " << get_selected_tod().name;
|
||||||
|
current_tod_label_->set_label(ss.str());
|
||||||
|
//current_tod_image_->set_icon_name(get_selected_tod().image);
|
||||||
|
custom_tod_red_->set_value(get_selected_tod().red);
|
||||||
|
custom_tod_green_->set_value(get_selected_tod().green);
|
||||||
|
custom_tod_blue_->set_value(get_selected_tod().blue);
|
||||||
|
custom_tod_red_field_->set_cache_value(get_selected_tod().red);
|
||||||
|
custom_tod_green_field_->set_cache_value(get_selected_tod().green);
|
||||||
|
custom_tod_blue_field_->set_cache_value(get_selected_tod().blue);
|
||||||
|
}
|
||||||
|
custom_tod_red_->set_active(custom);
|
||||||
|
custom_tod_green_->set_active(custom);
|
||||||
|
custom_tod_blue_->set_active(custom);
|
||||||
|
current_tod_label_->set_active(!custom);
|
||||||
|
update_tod_display(window);
|
||||||
|
window.invalidate_layout();
|
||||||
|
std::cerr << "update_selected_tod_info end\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
twindow teditor_settings::build_window(CVideo& video)
|
||||||
|
{
|
||||||
|
return build(video, get_id(EDITOR_SETTINGS));
|
||||||
|
}
|
||||||
|
|
||||||
|
void teditor_settings::pre_show(CVideo& /*video*/, twindow& window)
|
||||||
|
{
|
||||||
|
assert(!tods_.empty());
|
||||||
|
current_tod_label_ = &window.get_widget<tlabel>("current_tod", false);
|
||||||
|
current_tod_image_ = &window.get_widget<tlabel>("current_tod_image", false);
|
||||||
|
custom_tod_toggle_ = &window.get_widget<ttoggle_button>("custom_tod_toggle", false);
|
||||||
|
custom_tod_red_ = &window.get_widget<tslider>("custom_tod_red", false);
|
||||||
|
custom_tod_green_ = &window.get_widget<tslider>("custom_tod_green", false);
|
||||||
|
custom_tod_blue_ = &window.get_widget<tslider>("custom_tod_blue", false);
|
||||||
|
tbutton& next_tod_button = window.get_widget<tbutton>("next_tod", false);
|
||||||
|
next_tod_button.set_callback_mouse_left_click(
|
||||||
|
dialog_callback<teditor_settings, &teditor_settings::do_next_tod>);
|
||||||
|
custom_tod_toggle_->set_callback_state_change(
|
||||||
|
dialog_callback<teditor_settings, &teditor_settings::update_selected_tod_info>);
|
||||||
|
custom_tod_red_->set_callback_positioner_move(
|
||||||
|
dialog_callback<teditor_settings, &teditor_settings::update_tod_display>);
|
||||||
|
custom_tod_green_->set_callback_positioner_move(
|
||||||
|
dialog_callback<teditor_settings, &teditor_settings::update_tod_display>);
|
||||||
|
custom_tod_blue_->set_callback_positioner_move(
|
||||||
|
dialog_callback<teditor_settings, &teditor_settings::update_tod_display>);
|
||||||
|
update_selected_tod_info(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
void teditor_settings::post_show(twindow& /*window*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace gui2
|
95
src/gui/dialogs/editor_settings.hpp
Normal file
95
src/gui/dialogs/editor_settings.hpp
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/*
|
||||||
|
copyright (c) 2008 by mark de wever <koraq@xs4all.nl>
|
||||||
|
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_EDITOR_SETTINGS_HPP_INCLUDED
|
||||||
|
#define GUI_DIALOGS_EDITOR_SETTINGS_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include "time_of_day.hpp"
|
||||||
|
#include "gui/dialogs/dialog.hpp"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
|
namespace gui2 {
|
||||||
|
|
||||||
|
class tlabel;
|
||||||
|
class ttoggle_button;
|
||||||
|
class tslider;
|
||||||
|
|
||||||
|
class teditor_settings : public tdialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
teditor_settings();
|
||||||
|
|
||||||
|
void set_redraw_callback(boost::function<void (int, int, int)> callback) { redraw_callback_ = callback; }
|
||||||
|
|
||||||
|
/** Callback for the next tod button */
|
||||||
|
void do_next_tod(twindow& window);
|
||||||
|
|
||||||
|
void update_tod_display(twindow& window);
|
||||||
|
|
||||||
|
void set_tods(const std::vector<time_of_day>& tods) { tods_ = tods; }
|
||||||
|
const std::vector<time_of_day>& get_tods() const { return tods_; }
|
||||||
|
|
||||||
|
void set_current_adjustment(int r, int g, int b);
|
||||||
|
|
||||||
|
void set_selected_tod(time_of_day tod);
|
||||||
|
const time_of_day& get_selected_tod() const;
|
||||||
|
|
||||||
|
int get_red() const;
|
||||||
|
int get_green() const;
|
||||||
|
int get_blue() const;
|
||||||
|
|
||||||
|
void update_selected_tod_info(twindow& window);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/** Inherited from tdialog. */
|
||||||
|
twindow build_window(CVideo& video);
|
||||||
|
|
||||||
|
/** Inherited from tdialog. */
|
||||||
|
void pre_show(CVideo& video, twindow& window);
|
||||||
|
|
||||||
|
/** Inherited from tdialog. */
|
||||||
|
void post_show(twindow& window);
|
||||||
|
|
||||||
|
boost::function<void (int, int, int)> redraw_callback_;
|
||||||
|
|
||||||
|
/** Available time_of_days */
|
||||||
|
std::vector<time_of_day> tods_;
|
||||||
|
|
||||||
|
/** Current map generator index */
|
||||||
|
int current_tod_;
|
||||||
|
|
||||||
|
/** Label for the current tod */
|
||||||
|
tlabel* current_tod_label_;
|
||||||
|
|
||||||
|
/** Label for the current tod image*/
|
||||||
|
tlabel* current_tod_image_;
|
||||||
|
|
||||||
|
ttoggle_button* custom_tod_toggle_;
|
||||||
|
|
||||||
|
tfield_bool* custom_tod_toggle_field_;
|
||||||
|
|
||||||
|
tslider* custom_tod_red_;
|
||||||
|
tslider* custom_tod_green_;
|
||||||
|
tslider* custom_tod_blue_;
|
||||||
|
|
||||||
|
tfield_integer* custom_tod_red_field_;
|
||||||
|
tfield_integer* custom_tod_green_field_;
|
||||||
|
tfield_integer* custom_tod_blue_field_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gui2
|
||||||
|
|
||||||
|
#endif
|
@ -94,6 +94,7 @@ static void fill_window_types()
|
|||||||
window_type_list[EDITOR_NEW_MAP] = "editor_new_map";
|
window_type_list[EDITOR_NEW_MAP] = "editor_new_map";
|
||||||
window_type_list[EDITOR_GENERATE_MAP] = "editor_generate_map";
|
window_type_list[EDITOR_GENERATE_MAP] = "editor_generate_map";
|
||||||
window_type_list[EDITOR_RESIZE_MAP] = "editor_resize_map";
|
window_type_list[EDITOR_RESIZE_MAP] = "editor_resize_map";
|
||||||
|
window_type_list[EDITOR_SETTINGS] = "editor_settings";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ enum twindow_type {
|
|||||||
EDITOR_NEW_MAP, //<! New map dialog
|
EDITOR_NEW_MAP, //<! New map dialog
|
||||||
EDITOR_GENERATE_MAP, /** Editor random map genarator dialog */
|
EDITOR_GENERATE_MAP, /** Editor random map genarator dialog */
|
||||||
EDITOR_RESIZE_MAP, /** Editor resize map dialog */
|
EDITOR_RESIZE_MAP, /** Editor resize map dialog */
|
||||||
|
EDITOR_SETTINGS, /** Editor settings dialog */
|
||||||
#endif
|
#endif
|
||||||
DUMMY //<! Dummy always the last one.
|
DUMMY //<! Dummy always the last one.
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user