44 class Block *get_top_block()
override
49 class Rules *get_rules()
override
59 class IPool &get_pool()
override
63 class IPool &get_pool_caching()
override
65 return m_pool_caching;
67 virtual ObjectType get_object_type()
const = 0;
73 void rebuild(
const std::string &comment);
76 std::optional<ToolArgs> get_pending_tool_args();
77 std::pair<bool, bool> tool_can_begin(ToolID tool_id,
const std::set<SelectableRef> &selection);
80 virtual void delete_autosave() = 0;
85 bool can_undo()
const;
86 bool can_redo()
const;
88 const std::string &get_undo_comment()
const;
89 const std::string &get_redo_comment()
const;
91 void set_history_max(
unsigned int m);
92 void set_history_never_forgets(
bool x);
94 inline bool tool_is_active()
96 return tool !=
nullptr;
99 virtual bool set_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
101 virtual bool get_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
class PropertyValue &value);
102 virtual bool get_property_meta(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
105 void set_property_begin();
106 void set_property_commit();
107 bool get_property_transaction()
const;
115 virtual void update_rules()
119 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
124 std::set<SelectableRef> &get_tool_selection();
125 std::set<InToolActionID> get_tool_actions()
const;
127 bool get_needs_save()
const;
128 void set_needs_save();
130 virtual const std::string &get_filename()
const = 0;
132 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
133 type_signal_tool_changed signal_tool_changed()
135 return s_signal_tool_changed;
137 typedef sigc::signal<void> type_signal_rebuilt;
138 type_signal_rebuilt signal_rebuilt()
140 return s_signal_rebuilt;
149 return s_signal_save;
152 type_signal_rebuilt signal_modified()
154 return s_signal_modified;
157 type_signal_rebuilt signal_can_undo_redo()
159 return s_signal_can_undo_redo;
162 typedef sigc::signal<void, bool> type_signal_needs_save;
163 type_signal_needs_save signal_needs_save()
165 return s_signal_needs_save;
168 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
169 type_signal_load_tool_settings signal_load_tool_settings()
171 return s_signal_load_tool_settings;
174 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
175 type_signal_save_tool_settings signal_save_tool_settings()
177 return s_signal_save_tool_settings;
180 virtual void reload_pool()
185 Core(
class IPool &pool, IPool *m_pool_caching);
187 class IPool &m_pool_caching;
189 type_signal_tool_changed s_signal_tool_changed;
190 type_signal_rebuilt s_signal_rebuilt;
191 type_signal_rebuilt s_signal_save;
192 type_signal_rebuilt s_signal_modified;
193 type_signal_rebuilt s_signal_can_undo_redo;
194 type_signal_needs_save s_signal_needs_save;
195 type_signal_load_tool_settings s_signal_load_tool_settings;
196 type_signal_save_tool_settings s_signal_save_tool_settings;
197 bool needs_save =
false;
198 void set_needs_save(
bool v);
200 void rebuild_finish(
bool from_undo,
const std::string &comment);
202 HistoryManager history_manager;
204 virtual std::unique_ptr<HistoryManager::HistoryItem> make_history_item(
const std::string &comment) = 0;
205 virtual void history_load(
const HistoryManager::HistoryItem &it) = 0;
206 virtual std::string get_history_comment_context()
const;
208 bool property_transaction =
false;
210 void layers_to_meta(
class PropertyMeta &
meta);
211 void get_placement(
const Placement &placement,
class PropertyValue &value, ObjectProperty::ID property);
212 void set_placement(Placement &placement,
const class PropertyValue &value, ObjectProperty::ID property);
214 virtual void save(
const std::string &suffix) = 0;
215 static const std::string autosave_suffix;
216 json get_meta_from_file(
const std::string &filename);
219 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);
220 std::set<SelectableRef> tool_selection;
221 void maybe_end_tool(
const ToolResponse &r);
222 virtual void rebuild_internal(
bool from_undo,
const std::string &comment) = 0;
224 ToolID tool_id_current;
225 std::unique_ptr<ToolBase> tool =
nullptr;
226 enum class ToolState { NONE, BEGINNING, UPDATING };
227 ToolState tool_state = ToolState::NONE;
229 std::list<ToolArgs> pending_tool_args;
231 class ToolStateSetter {
233 ToolStateSetter(ToolState &s, ToolState target);
234 bool check_error()
const
243 static std::string tool_state_to_string(ToolState s);