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>
9 #include "tool_pub.hpp"
10 #include "document/document.hpp"
11 #include "util/placement.hpp"
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);
93 inline bool tool_is_active()
95 return tool !=
nullptr;
98 virtual bool set_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
100 virtual bool get_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
class PropertyValue &value);
101 virtual bool get_property_meta(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
104 void set_property_begin();
105 void set_property_commit();
106 bool get_property_transaction()
const;
114 virtual void update_rules()
118 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
123 std::set<SelectableRef> &get_tool_selection();
124 std::set<InToolActionID> get_tool_actions()
const;
126 bool get_needs_save()
const;
127 void set_needs_save();
129 virtual const std::string &get_filename()
const = 0;
131 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
132 type_signal_tool_changed signal_tool_changed()
134 return s_signal_tool_changed;
136 typedef sigc::signal<void> type_signal_rebuilt;
137 type_signal_rebuilt signal_rebuilt()
139 return s_signal_rebuilt;
148 return s_signal_save;
151 type_signal_rebuilt signal_modified()
153 return s_signal_modified;
156 type_signal_rebuilt signal_can_undo_redo()
158 return s_signal_can_undo_redo;
161 typedef sigc::signal<void, bool> type_signal_needs_save;
162 type_signal_needs_save signal_needs_save()
164 return s_signal_needs_save;
167 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
168 type_signal_load_tool_settings signal_load_tool_settings()
170 return s_signal_load_tool_settings;
173 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
174 type_signal_save_tool_settings signal_save_tool_settings()
176 return s_signal_save_tool_settings;
179 virtual void reload_pool()
184 Core(
class IPool &pool, IPool *m_pool_caching);
186 class IPool &m_pool_caching;
188 type_signal_tool_changed s_signal_tool_changed;
189 type_signal_rebuilt s_signal_rebuilt;
190 type_signal_rebuilt s_signal_save;
191 type_signal_rebuilt s_signal_modified;
192 type_signal_rebuilt s_signal_can_undo_redo;
193 type_signal_needs_save s_signal_needs_save;
194 type_signal_load_tool_settings s_signal_load_tool_settings;
195 type_signal_save_tool_settings s_signal_save_tool_settings;
196 bool needs_save =
false;
197 void set_needs_save(
bool v);
199 void rebuild_finish(
bool from_undo,
const std::string &comment);
206 const std::string comment;
211 std::deque<std::unique_ptr<HistoryItem>> history;
212 int history_current = -1;
213 size_t history_max = 50;
214 virtual void history_push(
const std::string &comment) = 0;
215 virtual void history_load(
unsigned int i) = 0;
216 virtual std::string get_history_comment_context()
const;
217 void history_clear();
220 bool property_transaction =
false;
226 virtual void save(
const std::string &suffix) = 0;
227 static const std::string autosave_suffix;
228 json get_meta_from_file(
const std::string &filename);
231 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);
232 std::set<SelectableRef> tool_selection;
234 virtual void rebuild_internal(
bool from_undo,
const std::string &comment) = 0;
236 ToolID tool_id_current;
237 std::unique_ptr<ToolBase> tool =
nullptr;
238 enum class ToolState { NONE, BEGINNING, UPDATING };
239 ToolState tool_state = ToolState::NONE;
241 std::list<ToolArgs> pending_tool_args;
243 class ToolStateSetter {
245 ToolStateSetter(ToolState &s, ToolState target);
246 bool check_error()
const
255 static std::string tool_state_to_string(ToolState s);
A block is one level of hierarchy in the netlist.
Definition: block.hpp:29
Where Tools and and documents meet.
Definition: core.hpp:42
virtual json get_meta()
Definition: core.cpp:326
void rebuild(const std::string &comment)
Expands the non-working document.
Definition: core.cpp:204
type_signal_rebuilt signal_save()
Gets emitted right before saving.
Definition: core.hpp:146
Definition: document.hpp:5
Definition: grid_settings.hpp:9
Definition: imp_interface.hpp:12
Definition: placement.hpp:8
Definition: core_properties.hpp:7
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
a class to store JSON values
Definition: json.hpp:177