2 #include "canvas/selectables.hpp"
3 #include "common/object_descr.hpp"
4 #include "nlohmann/json_fwd.hpp"
5 #include <gdk/gdkkeysyms.h>
8 #include <sigc++/sigc++.h>
10 #include "document/document.hpp"
11 #include "util/placement.hpp"
44 class Block *get_block()
override
49 class Rules *get_rules()
override
54 class IPool &get_pool()
override
58 virtual ObjectType get_object_type()
const = 0;
64 virtual void rebuild(
bool from_undo =
false);
67 std::pair<bool, bool> tool_can_begin(ToolID tool_id,
const std::set<SelectableRef> &selection);
70 virtual void delete_autosave() = 0;
75 bool can_undo()
const;
76 bool can_redo()
const;
78 inline bool tool_is_active()
80 return tool !=
nullptr;
83 virtual bool set_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
85 virtual bool get_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
class PropertyValue &value);
86 virtual bool get_property_meta(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
89 void set_property_begin();
90 void set_property_commit();
91 bool get_property_transaction()
const;
99 virtual void update_rules()
103 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
108 std::set<SelectableRef> &get_tool_selection();
109 std::set<InToolActionID> get_tool_actions()
const;
111 bool get_needs_save()
const;
112 void set_needs_save();
114 virtual const std::string &get_filename()
const = 0;
116 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
117 type_signal_tool_changed signal_tool_changed()
119 return s_signal_tool_changed;
121 typedef sigc::signal<void> type_signal_rebuilt;
122 type_signal_rebuilt signal_rebuilt()
124 return s_signal_rebuilt;
133 return s_signal_save;
136 type_signal_rebuilt signal_modified()
138 return s_signal_modified;
141 type_signal_rebuilt signal_can_undo_redo()
143 return s_signal_can_undo_redo;
146 typedef sigc::signal<void, bool> type_signal_needs_save;
147 type_signal_needs_save signal_needs_save()
149 return s_signal_needs_save;
152 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
153 type_signal_load_tool_settings signal_load_tool_settings()
155 return s_signal_load_tool_settings;
158 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
159 type_signal_save_tool_settings signal_save_tool_settings()
161 return s_signal_save_tool_settings;
164 virtual void reload_pool()
169 Core(
class IPool &pool);
172 std::unique_ptr<ToolBase> tool =
nullptr;
173 type_signal_tool_changed s_signal_tool_changed;
174 type_signal_rebuilt s_signal_rebuilt;
175 type_signal_rebuilt s_signal_save;
176 type_signal_rebuilt s_signal_modified;
177 type_signal_rebuilt s_signal_can_undo_redo;
178 type_signal_needs_save s_signal_needs_save;
179 type_signal_load_tool_settings s_signal_load_tool_settings;
180 type_signal_save_tool_settings s_signal_save_tool_settings;
181 bool needs_save =
false;
182 void set_needs_save(
bool v);
193 std::deque<std::unique_ptr<HistoryItem>> history;
194 int history_current = -1;
195 virtual void history_push() = 0;
196 virtual void history_load(
unsigned int i) = 0;
197 void history_clear();
200 bool property_transaction =
false;
206 virtual void save(
const std::string &suffix) = 0;
207 static const std::string autosave_suffix;
208 json get_meta_from_file(
const std::string &filename);
211 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);
212 std::set<SelectableRef> tool_selection;