The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
editor_controller.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2008 - 2025
3 by Tomasz Sniatowski <kailoran@gmail.com>
4 Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY.
12
13 See the COPYING file for more details.
14*/
15
16#pragma once
17
22
23#include "controller_base.hpp"
25#include "help/help.hpp"
28#include "sound_music_track.hpp"
29#include "tooltips.hpp"
30
31namespace font {
33}
34
35namespace editor {
36
37/**
38 * The editor_controller class contains the mouse and keyboard event handling
39 * routines for the editor. It also serves as the main editor class with the
40 * general logic.
41 */
46{
47public:
50
52
54
55 /** Editor main loop */
57
58 /** Takes a screenshot **/
59 void do_screenshot(const std::string& screenshot_filename = "map_screenshot.png");
60
61 /** Show a quit confirmation dialog and returns true if the user pressed 'yes' */
62 bool quit_confirm();
63
64 /** Show Unit Editor dialog */
65 void unit_editor_dialog();
66
67 /** Display the settings dialog, used to control e.g. the lighting settings */
68 void custom_tods_dialog();
69
70 /** Updates schedule and the map display */
71 void update_map_schedule(const std::vector<time_of_day>& schedule);
72
73 /** Save the map, open dialog if not named yet. */
74 void save_map() override {context_manager_->save_map();}
75
76 /** command_executor override */
77 bool can_execute_command(const hotkey::ui_command& command) const override;
78
79 /** command_executor override */
80 hotkey::action_state get_action_state(const hotkey::ui_command& command) const override;
81
82 /** command_executor override */
83 bool do_execute_command(const hotkey::ui_command& command, bool press = true, bool release = false) override;
84
85 /** command_executor override */
86 bool keep_menu_open() const override;
87
88 /** command_executor override */
89 void show_menu(const std::vector<config>& items_arg, const point& menu_loc, bool context_menu) override;
90
91 void show_help() override;
92 void status_table() override;
93
94 /** Show the preferences dialog */
95 void preferences() override;
96
97 /** Handle hotkeys to scroll map */
98 void scroll_up(bool on) override;
99 void scroll_down(bool on) override;
100 void scroll_left(bool on) override;
101 void scroll_right(bool on) override;
102
103 /** Grid toggle */
104 void toggle_grid() override;
105
106 void terrain_description() override;
107 void unit_description() override;
108 void change_unit_id();
109 void rename_unit() override;
110
111 void unit_list() override;
112
113 /** Copy the selection on the current map to the clipboard */
114 void copy_selection();
115
116 /** Cut the selection from the current map to the clipboard */
117 void cut_selection();
118
119 /** Export the WML-compatible list of selected tiles to the system clipboard */
121
122 /** Save the current selection to the active area. */
123 void save_area();
124
125 /** Add a new area to the current context, filled with the selection if any. */
126 void add_area();
127
128 /* mouse_handler_base overrides */
129 void mouse_motion(int x, int y, const bool browse, bool update, map_location new_loc = map_location::null_location()) override;
130 void touch_motion(int x, int y, const bool browse, bool update=false, map_location new_loc = map_location::null_location()) override;
131 editor_display& gui() override { return *gui_; }
132 const editor_display& gui() const override { return *gui_; }
133 bool allow_mouse_wheel_scroll(int x, int y) override;
134 bool right_click_show_menu(int x, int y, const bool browse) override;
135 bool left_click(int x, int y, const bool browse) override;
136 void left_drag_end(int x, int y, const bool browse) override;
137 void left_mouse_up(int x, int y, const bool browse) override;
138 bool right_click(int x, int y, const bool browse) override;
139 void right_drag_end(int x, int y, const bool browse) override;
140 void right_mouse_up(int x, int y, const bool browse) override;
141
143
145 {
146 return context_manager_->get_map_context();
147 }
148
149 /** Show dialog to select active addon or create a new one. */
150 void select_addon();
151
152 /**
153 * Show dialog to select active addon or create a new one if one is
154 * not yet initialized. Does nothing otherwise.
155 * @return If the initialization succeeded.
156 */
157 bool initialize_addon();
158
159protected:
160 /* controller_base overrides */
161 void process_keyup_event(const SDL_Event& event) override;
162 mouse_handler_base& get_mouse_handler_base() override { return *this; }
163 editor_display& get_display() override { return *gui_; }
164
165 /** Get the current mouse action */
166 const mouse_action& get_mouse_action() const { return toolkit_->get_mouse_action(); }
167 /** Get the current mouse action */
168 mouse_action& get_mouse_action() { return toolkit_->get_mouse_action(); }
169
170 /**
171 * Perform an action, then delete the action object.
172 * The pointer can be nullptr, in which case nothing will happen.
173 */
174 void perform_delete(std::unique_ptr<editor_action> action);
175
176 /**
177 * Peform an action on the current map_context, then refresh the display
178 * and delete the pointer. The pointer can be nullptr, in which case nothing will happen.
179 */
180 void perform_refresh_delete(std::unique_ptr<editor_action> action, bool drag_part = false);
181
182 virtual std::vector<std::string> additional_actions_pressed() override;
183
184private:
185 enum class menu_type {
186 map,
187 load_mru,
188 palette,
189 area,
190 side,
191 time,
193 schedule,
195 music,
197 none
198 };
199
200 /** init the display object and general set-up */
201 void init_gui();
202
203 /** init the available time-of-day settings */
205
206 /** Reload images */
207 void refresh_image_cache();
208
209 /**
210 * Callback function passed to display to be called on queue_rerender.
211 * Redraws toolbar, brush bar and related items.
212 */
214
215 /**
216 * Undos an action in the current map context
217 */
218 void undo() override;
219
220 /**
221 * Redos an action in the current map context
222 */
223 void redo() override;
224
225 /** The currently invoked dropdown menu. Outside of show_menu, this will be menu_type::none. */
227
228 /** Reports object. Must be initialized before the gui_ */
229 const std::unique_ptr<reports> reports_;
230
231 /** The display object used and owned by the editor. */
232 const std::unique_ptr<editor_display> gui_;
233
234 /** Pre-defined time of day lighting settings for the settings dialog */
235 typedef std::map<std::string, std::pair<std::string ,std::vector<time_of_day>>> tods_map;
237
238 /* managers */
239public:
240 const std::unique_ptr<context_manager> context_manager_;
241
242 static std::string current_addon_id_;
243private:
244 std::unique_ptr<editor_toolkit> toolkit_;
246 std::unique_ptr<font::floating_label_context> floating_label_manager_;
247
248 std::shared_ptr<help::help_manager> help_manager_;
249
250 /** Quit main loop flag */
253
254 std::vector<std::shared_ptr<sound::music_track>> music_tracks_;
255
256 /** Available random map generators */
257 std::vector<std::unique_ptr<map_generator>> map_generators_;
258};
259
260} //end namespace editor
Sort-of-Singleton that many classes, both GUI and non-GUI, use to access the game data.
Definition display.hpp:88
The editor_controller class contains the mouse and keyboard event handling routines for the editor.
const std::unique_ptr< context_manager > context_manager_
void preferences() override
Show the preferences dialog.
void refresh_image_cache()
Reload images.
editor_display & gui() override
Reference to the used display objects.
mouse_handler_base & get_mouse_handler_base() override
Get a reference to a mouse handler member a derived class uses.
void right_drag_end(int x, int y, const bool browse) override
Called whenever the right mouse drag has "ended".
mouse_action & get_mouse_action()
Get the current mouse action.
void unit_editor_dialog()
Show Unit Editor dialog.
const editor_display & gui() const override
Const version of gui.
bool can_execute_command(const hotkey::ui_command &command) const override
command_executor override
bool quit_confirm()
Show a quit confirmation dialog and returns true if the user pressed 'yes'.
void update_map_schedule(const std::vector< time_of_day > &schedule)
Updates schedule and the map display.
void scroll_up(bool on) override
Handle hotkeys to scroll map.
void cut_selection()
Cut the selection from the current map to the clipboard.
bool keep_menu_open() const override
command_executor override
void display_redraw_callback(display &)
Callback function passed to display to be called on queue_rerender.
std::unique_ptr< font::floating_label_context > floating_label_manager_
menu_type active_menu_
The currently invoked dropdown menu.
void undo() override
Undos an action in the current map context.
void left_mouse_up(int x, int y, const bool browse) override
Called when the left mouse button is up.
bool left_click(int x, int y, const bool browse) override
Overridden in derived classes, called on a left click (mousedown).
bool allow_mouse_wheel_scroll(int x, int y) override
Derived classes can override this to disable mousewheel scrolling under some circumstances,...
void touch_motion(int x, int y, const bool browse, bool update=false, map_location new_loc=map_location::null_location()) override
void select_addon()
Show dialog to select active addon or create a new one.
virtual std::vector< std::string > additional_actions_pressed() override
void perform_refresh_delete(std::unique_ptr< editor_action > action, bool drag_part=false)
Peform an action on the current map_context, then refresh the display and delete the pointer.
map_context & get_current_map_context() const
void init_tods(const game_config_view &game_config)
init the available time-of-day settings
bool initialize_addon()
Show dialog to select active addon or create a new one if one is not yet initialized.
std::unique_ptr< editor_toolkit > toolkit_
std::vector< std::shared_ptr< sound::music_track > > music_tracks_
void scroll_right(bool on) override
const std::unique_ptr< editor_display > gui_
The display object used and owned by the editor.
bool do_execute_command(const hotkey::ui_command &command, bool press=true, bool release=false) override
command_executor override
void export_selection_coords()
Export the WML-compatible list of selected tiles to the system clipboard.
void redo() override
Redos an action in the current map context.
void perform_delete(std::unique_ptr< editor_action > action)
Perform an action, then delete the action object.
std::vector< std::unique_ptr< map_generator > > map_generators_
Available random map generators.
void right_mouse_up(int x, int y, const bool browse) override
Called when the right mouse button is up.
virtual hotkey::command_executor * get_hotkey_command_executor() override
Optionally get a command executor to handle context menu events.
std::map< std::string, std::pair< std::string,std::vector< time_of_day > > > tods_map
Pre-defined time of day lighting settings for the settings dialog.
void mouse_motion(int x, int y, const bool browse, bool update, map_location new_loc=map_location::null_location()) override
Called when a mouse motion event takes place.
EXIT_STATUS main_loop()
Editor main loop.
editor_controller(const editor_controller &)=delete
void custom_tods_dialog()
Display the settings dialog, used to control e.g.
void do_screenshot(const std::string &screenshot_filename="map_screenshot.png")
Takes a screenshot.
std::shared_ptr< help::help_manager > help_manager_
void toggle_grid() override
Grid toggle.
void scroll_left(bool on) override
bool right_click(int x, int y, const bool browse) override
Overridden in derived classes, called on a right click (mousedown).
void save_area()
Save the current selection to the active area.
void process_keyup_event(const SDL_Event &event) override
Process keyup (always).
editor_display & get_display() override
Get a reference to a display member a derived class uses.
void copy_selection()
Copy the selection on the current map to the clipboard.
editor_controller & operator=(const editor_controller &)=delete
void init_gui()
init the display object and general set-up
hotkey::action_state get_action_state(const hotkey::ui_command &command) const override
command_executor override
bool right_click_show_menu(int x, int y, const bool browse) override
Called in the default right_click when the context menu is about to be shown, can be used for preproc...
void show_menu(const std::vector< config > &items_arg, const point &menu_loc, bool context_menu) override
command_executor override
static std::string current_addon_id_
void add_area()
Add a new area to the current context, filled with the selection if any.
const std::unique_ptr< reports > reports_
Reports object.
void scroll_down(bool on) override
void left_drag_end(int x, int y, const bool browse) override
Called whenever the left mouse drag has "ended".
const mouse_action & get_mouse_action() const
Get the current mouse action.
bool do_quit_
Quit main loop flag.
void save_map() override
Save the map, open dialog if not named yet.
This class wraps around a map to provide a concise interface for the editor to work with.
A mouse action receives events from the controller, and responds to them by creating an appropriate e...
A class grating read only view to a vector of config objects, viewed as one config with all children ...
Implements a quit confirmation dialog.
controller_base framework: controller_base is roughly analogous to a "dialog" class in a GUI toolkit ...
Manage the empty-palette in the editor.
Definition action.cpp:31
Graphical text output.
Game configuration data as global variables.
structure which will hide all current floating labels, and cause floating labels instantiated after i...
Used as the main parameter for can_execute_command/do_execute_command These functions are used to exe...
Encapsulates the map of the game.
Definition location.hpp:46
static const map_location & null_location()
Definition location.hpp:103
Holds a 2D point.
Definition point.hpp:25