The Battle for Wesnoth  1.15.13+dev
editor_toolkit.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2012 - 2018 by Fabian Mueller <fabianmueller5@gmx.de>
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
16 #include "config.hpp"
17 
24 
25 #include "game_config_view.hpp"
26 
27 namespace editor {
28 
30  const game_config_view& game_config, context_manager& c_manager)
31  : gui_(gui)
32  , key_(key)
33  , palette_manager_()
34  , mouse_action_(nullptr) // Will be set before this constructor ends.
35  , mouse_actions_()
36  , brush_(nullptr)
37  , brushes_()
38 {
39  init_brushes(game_config);
40  init_sidebar(game_config);
41  init_mouse_actions(c_manager);
42 }
43 
45 
47 {
48  for (const config &i : game_config.child_range("brush")) {
49  brushes_.emplace_back(i);
50  }
51  if (brushes_.empty()) {
52  ERR_ED << "No brushes defined!";
53  brushes_.emplace_back();
54  brushes_[0].add_relative_location(0, 0);
55  }
56  brush_ = &brushes_[0];
57 }
58 
60 {
61  palette_manager_.reset(new palette_manager(gui_, game_config, *this));
62 }
63 
65 {
67  std::make_shared<mouse_action_paint>(&brush_, key_, *palette_manager_->terrain_palette_.get()));
69  std::make_shared<mouse_action_fill>(key_, *palette_manager_->terrain_palette_.get()));
71  std::make_shared<mouse_action_select>(&brush_, key_, *palette_manager_->empty_palette_.get()));
73  std::make_shared<mouse_action_starting_position>(key_, *palette_manager_->location_palette_.get()));
75  std::make_shared<mouse_action_map_label>(key_, *palette_manager_->empty_palette_.get()));
77  std::make_shared<mouse_action_unit>(key_, *palette_manager_->unit_palette_.get()));
79  std::make_shared<mouse_action_village>(key_, *palette_manager_->empty_palette_.get()));
81  std::make_shared<mouse_action_paste>(cmanager.get_clipboard(), key_, *palette_manager_->empty_palette_.get()));
83  std::make_shared<mouse_action_item>(key_, *palette_manager_->item_palette_.get()));
84 
85  for (const theme::menu& menu : gui_.get_theme().menus()) {
86  if (menu.items().size() == 1) {
87  hotkey::HOTKEY_COMMAND hk = hotkey::get_id(menu.items().front()["id"]);
89  if (i != mouse_actions_.end()) {
90  i->second->set_toolbar_button(&menu);
91  }
92  }
93  }
94 
97 }
98 
99 
101 {
103  if (i != mouse_actions_.end()) {
104  palette_manager_->active_palette().hide(true);
105  mouse_action_ = i->second;
106  palette_manager_->adjust_size();
107 
110  palette_manager_->active_palette().hide(false);
111  } else {
112  ERR_ED << "Invalid hotkey command ("
113  << static_cast<int>(command) << ") passed to set_mouse_action\n";
114  }
115 
116 }
117 
119 {
120  mouse_action_map::const_iterator i = mouse_actions_.find(command);
121  return (i != mouse_actions_.end()) && (i->second == mouse_action_);
122 }
123 
125 {
126  return get_mouse_action().get_palette();
127 }
128 
130 {
131  DBG_ED << __func__ << "\n";
132  int x, y;
133  SDL_GetMouseState(&x, &y);
134  map_location hex_clicked = gui_.hex_clicked_on(x,y);
136 }
137 
139 {
141 }
142 
144 {
146 }
147 
148 void editor_toolkit::set_brush(std::string id) {
149 
150  for (brush& i : brushes_) {
151  if (i.id() == id) {
152  brush_ = &i;
153  }
154  }
155 }
156 
158 {
159  if (brush_ == &brushes_.back()) {
160  brush_ = &brushes_.front();
161  } else {
162  ++brush_;
163  }
164 
166 }
167 
169 {
170  palette_manager_->adjust_size();
171 }
172 
173 
174 } //Namespace editor
editor_display & gui_
void invalidate_game_status()
Function to invalidate the game status displayed on the sidebar.
Definition: display.hpp:294
theme & get_theme()
Definition: display.hpp:382
void hotkey_set_mouse_action(hotkey::HOTKEY_COMMAND command)
Set the current mouse action based on a hotkey id.
const map_location hex_clicked_on(int x, int y) const
given x,y co-ordinates of an onscreen pixel, will return the location of the hex that this pixel corr...
Definition: display.cpp:598
mouse_action_map mouse_actions_
void cycle_brush()
Cycle to the next brush.
config_array_view child_range(config_key_type key) const
std::shared_ptr< mouse_action > mouse_action_
The current mouse action.
General purpose widgets.
editor_toolkit(editor_display &gui, const CKey &key, const game_config_view &game_config, context_manager &c_manager)
void clear_mouseover_hex_overlay()
Definition: display.hpp:449
Definitions for the interface to Wesnoth Markup Language (WML).
brush * brush_
The current brush.
void set_brush(std::string id)
TODO.
void init_sidebar(const game_config_view &game_config)
init the sidebar objects
common_palette & get_palette()
Get the current palette.
std::vector< brush > brushes_
All available brushes.
common_palette & get_palette()
Getter for the associated palette.
void update_brush_highlights(editor_display &disp, const map_location &hex)
Unconditionally update the brush highlights for the current tool when hex is the center location...
The brush class represents a single brush – a set of relative locations around a "hotspot"...
Definition: brush.hpp:25
void init_brushes(const game_config_view &game_config)
init the brushes
std::unique_ptr< palette_manager > palette_manager_
Manage the empty-palette in the editor.
Definition: action.cpp:29
map_fragment & get_clipboard()
Encapsulates the map of the game.
Definition: location.hpp:37
void init_mouse_actions(context_manager &c_manager)
init the mouse actions (tools)
std::string id
Text to match against addon_info.tags()
Definition: manager.cpp:214
std::size_t i
Definition: function.cpp:940
Game configuration data as global variables.
Definition: build_info.cpp:58
mouse_action & get_mouse_action()
Get the current mouse action.
virtual void set_mouse_overlay(editor_display &disp)
Set the mouse overlay for this action.
#define ERR_ED
bool is_mouse_action_set(hotkey::HOTKEY_COMMAND command) const
const std::vector< menu > & menus() const
Definition: theme.hpp:254
#define DBG_ED
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:59
Class that keeps track of all the keys on the keyboard.
Definition: key.hpp:27
std::string::const_iterator iterator
Definition: tokenizer.hpp:24
HOTKEY_COMMAND get_id(const std::string &command)
returns get_hotkey_command(command).id