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
68 virtual void rebuild(
bool from_undo =
false);
71 std::pair<bool, bool> tool_can_begin(ToolID tool_id,
const std::set<SelectableRef> &selection);
72 bool tool_handles_esc();
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 bool get_needs_save()
const;
122 void set_needs_save();
124 virtual const std::string &get_filename()
const = 0;
126 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
127 type_signal_tool_changed signal_tool_changed()
129 return s_signal_tool_changed;
131 typedef sigc::signal<void> type_signal_rebuilt;
132 type_signal_rebuilt signal_rebuilt()
134 return s_signal_rebuilt;
143 return s_signal_save;
146 type_signal_rebuilt signal_modified()
148 return s_signal_modified;
151 type_signal_rebuilt signal_can_undo_redo()
153 return s_signal_can_undo_redo;
156 typedef sigc::signal<void, bool> type_signal_needs_save;
157 type_signal_needs_save signal_needs_save()
159 return s_signal_needs_save;
162 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
163 type_signal_load_tool_settings signal_load_tool_settings()
165 return s_signal_load_tool_settings;
168 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
169 type_signal_save_tool_settings signal_save_tool_settings()
171 return s_signal_save_tool_settings;
174 virtual void reload_pool()
179 std::unique_ptr<ToolBase> tool =
nullptr;
180 type_signal_tool_changed s_signal_tool_changed;
181 type_signal_rebuilt s_signal_rebuilt;
182 type_signal_rebuilt s_signal_save;
183 type_signal_rebuilt s_signal_modified;
184 type_signal_rebuilt s_signal_can_undo_redo;
185 type_signal_needs_save s_signal_needs_save;
186 type_signal_load_tool_settings s_signal_load_tool_settings;
187 type_signal_save_tool_settings s_signal_save_tool_settings;
188 bool needs_save =
false;
189 void set_needs_save(
bool v);
200 std::deque<std::unique_ptr<HistoryItem>> history;
201 int history_current = -1;
202 virtual void history_push() = 0;
203 virtual void history_load(
unsigned int i) = 0;
204 void history_clear();
207 bool property_transaction =
false;
213 virtual void save(
const std::string &suffix) = 0;
214 static const std::string autosave_suffix;
215 json get_meta_from_file(
const std::string &filename);
218 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);
219 std::set<SelectableRef> tool_selection;