The Battle for Wesnoth  1.17.0-dev
action_select.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2008 - 2021
3  by Fabian Mueller <fabianmueller5@gmx.de>
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 /**
17  * @file
18  * Editor label action classes
19  */
20 #define GETTEXT_DOMAIN "wesnoth-editor"
21 
24 
25 namespace editor
26 {
27 IMPLEMENT_ACTION(select)
28 
29 void editor_action_select::extend(const editor_map& /*map*/, const std::set<map_location>& locs)
30 {
31  for(const map_location& loc : locs) {
32  LOG_ED << "Extending by " << loc << "\n";
33  area_.insert(loc);
34  }
35 }
36 
37 std::unique_ptr<editor_action> editor_action_select::perform(map_context& mc) const
38 {
39  std::set<map_location> undo_locs;
40  for(const map_location& loc : area_) {
41  undo_locs.insert(loc);
42  mc.add_changed_location(loc);
43  }
44 
46  return std::make_unique<editor_action_select>(undo_locs);
47 }
48 
50 {
51  for(const map_location& loc : area_) {
52  mc.map().add_to_selection(loc);
53  mc.add_changed_location(loc);
54  }
55 }
56 
57 IMPLEMENT_ACTION(deselect)
58 
59 void editor_action_deselect::extend(const editor_map& map, const std::set<map_location>& locs)
60 {
61  for(const map_location& loc : locs) {
62  LOG_ED << "Checking " << loc << "\n";
63  if(!map.in_selection(loc)) {
64  LOG_ED << "Extending by " << loc << "\n";
65  area_.insert(loc);
66  }
67  }
68 }
69 
70 std::unique_ptr<editor_action> editor_action_deselect::perform(map_context& mc) const
71 {
72  std::set<map_location> undo_locs;
73  for(const map_location& loc : area_) {
74  if(mc.map().in_selection(loc)) {
75  undo_locs.insert(loc);
76  mc.add_changed_location(loc);
77  }
78  }
79 
81  return std::make_unique<editor_action_select>(undo_locs);
82 }
83 
85 {
86  for(const map_location& loc : area_) {
87  mc.map().remove_from_selection(loc);
88  mc.add_changed_location(loc);
89  }
90 }
91 
92 IMPLEMENT_ACTION(select_all)
93 
95 {
96  std::set<map_location> current = mc.map().selection();
97  mc.map().select_all();
98 
99  std::set<map_location> all = mc.map().selection();
100  std::set<map_location> undo_locs;
101 
102  std::set_difference(
103  all.begin(), all.end(), current.begin(), current.end(), std::inserter(undo_locs, undo_locs.begin()));
104 
105  mc.set_everything_changed();
106  return std::make_unique<editor_action_select>(undo_locs);
107 }
108 
110 {
111  mc.map().select_all();
113 }
114 
115 IMPLEMENT_ACTION(select_none)
116 
118 {
119  std::set<map_location> current = mc.map().selection();
120  mc.map().clear_selection();
121  mc.set_everything_changed();
122  return std::make_unique<editor_action_select>(current);
123 }
124 
126 {
127  mc.map().clear_selection();
129 }
130 
131 IMPLEMENT_ACTION(select_inverse)
132 
134 {
136  return std::make_unique<editor_action_select_inverse>();
137 }
138 
140 {
141  mc.map().invert_selection();
143 }
144 
145 } // end namespace editor
void add_changed_location(const map_location &loc)
Select the entire map.
void perform_without_undo(map_context &mc) const override
Perform the action without creating an undo action.
void perform_without_undo(map_context &mc) const override
Perform the action without creating an undo action.
void set(CURSOR_TYPE type)
Use the default parameter to reset cursors.
Definition: cursor.cpp:176
void perform_without_undo(map_context &mc) const override
Perform the action without creating an undo action.
bool in_selection(const map_location &loc) const
Definition: editor_map.cpp:158
#define LOG_ED
STL namespace.
void extend(const editor_map &map, const std::set< map_location > &locs) override
The crux of the extendable contract.
void invert_selection()
Invert the selection, i.e.
Definition: editor_map.cpp:188
Select the given locations.
void perform_without_undo(map_context &mc) const override
Perform the action without creating an undo action.
Manage the empty-palette in the editor.
Definition: action.cpp:30
bool add_to_selection(const map_location &loc)
Add a location to the selection.
Definition: editor_map.cpp:163
Encapsulates the map of the game.
Definition: location.hpp:38
std::unique_ptr< editor_action > perform(map_context &mc) const override
Perform the action, returning an undo action that, when performed, shall reverse any effects of this ...
This class adds extra editor-specific functionality to a normal gamemap.
Definition: editor_map.hpp:70
Base class for all editor actions.
Definition: action_base.hpp:41
void clear_selection()
Clear the selection.
Definition: editor_map.cpp:183
This class wraps around a map to provide a concise interface for the editor to work with...
Definition: map_context.hpp:60
void select_all()
Select all map hexes.
Definition: editor_map.cpp:201
void perform_without_undo(map_context &mc) const override
Perform the action without creating an undo action.
virtual const editor_map & map() const override
Const map accessor.
#define IMPLEMENT_ACTION(id)
Helper macro to implement common action methods.
Deselect the given locations.
std::set< map_location > area_
Definition: action.hpp:236
Editor action classes.
std::unique_ptr< editor_action > perform(map_context &mc) const override
Perform the action, returning an undo action that, when performed, shall reverse any effects of this ...
bool remove_from_selection(const map_location &loc)
Remove a location to the selection.
Definition: editor_map.cpp:178