2 #include "canvas/selectables.hpp"
3 #include "canvas/target.hpp"
4 #include "common/layer.hpp"
5 #include "common/object_descr.hpp"
6 #include "common/keepout.hpp"
7 #include "tool_data.hpp"
8 #include "nlohmann/json_fwd.hpp"
9 #include "pool/pool.hpp"
10 #include "pool/symbol.hpp"
11 #include <gdk/gdkkeysyms.h>
14 #include <sigc++/sigc++.h>
16 #include "document/document.hpp"
49 class Block *get_block()
override
54 class Rules *get_rules()
override
59 class Pool *get_pool()
override
63 virtual ObjectType get_object_type()
const = 0;
69 virtual void rebuild(
bool from_undo =
false);
72 std::pair<bool, bool> tool_can_begin(ToolID tool_id,
const std::set<SelectableRef> &selection);
75 virtual void delete_autosave() = 0;
80 bool can_undo()
const;
81 bool can_redo()
const;
83 inline bool tool_is_active()
85 return tool !=
nullptr;
88 virtual bool set_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
90 virtual bool get_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
class PropertyValue &value);
91 virtual bool get_property_meta(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
94 void set_property_begin();
95 void set_property_commit();
96 bool get_property_transaction()
const;
109 virtual void update_rules()
113 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
118 std::set<SelectableRef> &get_tool_selection();
121 std::set<InToolActionID> get_tool_actions()
const;
123 bool get_needs_save()
const;
124 void set_needs_save();
126 virtual const std::string &get_filename()
const = 0;
128 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
129 type_signal_tool_changed signal_tool_changed()
131 return s_signal_tool_changed;
133 typedef sigc::signal<void> type_signal_rebuilt;
134 type_signal_rebuilt signal_rebuilt()
136 return s_signal_rebuilt;
145 return s_signal_save;
148 type_signal_rebuilt signal_modified()
150 return s_signal_modified;
153 type_signal_rebuilt signal_can_undo_redo()
155 return s_signal_can_undo_redo;
158 typedef sigc::signal<void, bool> type_signal_needs_save;
159 type_signal_needs_save signal_needs_save()
161 return s_signal_needs_save;
164 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
165 type_signal_load_tool_settings signal_load_tool_settings()
167 return s_signal_load_tool_settings;
170 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
171 type_signal_save_tool_settings signal_save_tool_settings()
173 return s_signal_save_tool_settings;
176 virtual void reload_pool()
181 std::unique_ptr<ToolBase> tool =
nullptr;
182 type_signal_tool_changed s_signal_tool_changed;
183 type_signal_rebuilt s_signal_rebuilt;
184 type_signal_rebuilt s_signal_save;
185 type_signal_rebuilt s_signal_modified;
186 type_signal_rebuilt s_signal_can_undo_redo;
187 type_signal_needs_save s_signal_needs_save;
188 type_signal_load_tool_settings s_signal_load_tool_settings;
189 type_signal_save_tool_settings s_signal_save_tool_settings;
190 bool needs_save =
false;
191 void set_needs_save(
bool v);
202 std::deque<std::unique_ptr<HistoryItem>> history;
203 int history_current = -1;
204 virtual void history_push() = 0;
205 virtual void history_load(
unsigned int i) = 0;
206 void history_clear();
209 bool property_transaction =
false;
215 virtual void save(
const std::string &suffix) = 0;
216 static const std::string autosave_suffix;
217 json get_meta_from_file(
const std::string &filename);
220 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);
221 std::set<SelectableRef> tool_selection;