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"
8 #include "tool_data.hpp"
9 #include "nlohmann/json_fwd.hpp"
10 #include "pool/pool.hpp"
11 #include "pool/symbol.hpp"
12 #include <gdk/gdkkeysyms.h>
15 #include <sigc++/sigc++.h>
16 #include "tool_id.hpp"
19 enum class ToolEventType { NONE, MOVE, CLICK, CLICK_RELEASE, KEY, LAYER_CHANGE, DATA };
28 ToolEventType type = ToolEventType::NONE;
30 std::set<SelectableRef> selection;
31 bool keep_selection =
false;
32 unsigned int button = 0;
43 std::unique_ptr<ToolData> data =
nullptr;
54 ToolID next_tool = ToolID::NONE;
55 std::unique_ptr<ToolData> data =
nullptr;
56 bool end_tool =
false;
58 bool fast_draw =
false;
99 r.data = std::move(data);
106 virtual void load_from_json(
const json &j) = 0;
107 virtual json serialize()
const = 0;
145 void set_transient();
146 virtual ToolID get_tool_id_for_settings()
const
158 virtual void apply_settings()
206 class ImpInterface *imp =
nullptr;
207 ToolID tool_id = ToolID::NONE;
208 bool is_transient =
false;
209 virtual ToolSettings *get_settings()
242 virtual bool has_object_type(ObjectType ty)
const
247 virtual class Junction *insert_junction(
const UUID &uu,
bool work =
true);
248 virtual class Junction *get_junction(
const UUID &uu,
bool work =
true);
249 virtual void delete_junction(
const UUID &uu,
bool work =
true);
251 virtual class Line *insert_line(
const UUID &uu,
bool work =
true);
252 virtual class Line *get_line(
const UUID &uu,
bool work =
true);
253 virtual void delete_line(
const UUID &uu,
bool work =
true);
255 virtual class Arc *insert_arc(
const UUID &uu,
bool work =
true);
256 virtual class Arc *get_arc(
const UUID &uu,
bool work =
true);
257 virtual void delete_arc(
const UUID &uu,
bool work =
true);
259 virtual class Text *insert_text(
const UUID &uu,
bool work =
true);
260 virtual class Text *get_text(
const UUID &uu,
bool work =
true);
261 virtual void delete_text(
const UUID &uu,
bool work =
true);
263 virtual class Polygon *insert_polygon(
const UUID &uu,
bool work =
true);
264 virtual class Polygon *get_polygon(
const UUID &uu,
bool work =
true);
265 virtual void delete_polygon(
const UUID &uu,
bool work =
true);
267 virtual class Hole *insert_hole(
const UUID &uu,
bool work =
true);
268 virtual class Hole *get_hole(
const UUID &uu,
bool work =
true);
269 virtual void delete_hole(
const UUID &uu,
bool work =
true);
273 virtual void delete_dimension(
const UUID &uu);
275 virtual class Keepout *insert_keepout(
const UUID &uu);
276 virtual class Keepout *get_keepout(
const UUID &uu);
277 virtual void delete_keepout(
const UUID &uu);
279 virtual std::vector<Line *> get_lines(
bool work =
true);
280 virtual std::vector<Arc *> get_arcs(
bool work =
true);
281 virtual std::vector<Keepout *> get_keepouts();
283 virtual class Block *get_block(
bool work =
true)
292 virtual void rebuild(
bool from_undo =
false);
295 std::pair<bool, bool> tool_can_begin(ToolID tool_id,
const std::set<SelectableRef> &selection);
296 bool tool_handles_esc();
297 virtual void commit() = 0;
298 virtual void revert() = 0;
301 virtual void delete_autosave() = 0;
306 bool can_undo()
const;
307 bool can_redo()
const;
309 inline bool tool_is_active()
311 return tool !=
nullptr;
314 virtual bool set_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
316 virtual bool get_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
class PropertyValue &value);
317 virtual bool get_property_meta(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
320 virtual std::string get_display_name(ObjectType type,
const UUID &uu);
321 virtual std::string get_display_name(ObjectType type,
const UUID &uu,
const UUID &sheet);
323 void set_property_begin();
324 void set_property_commit();
325 bool get_property_transaction()
const;
338 virtual class Rules *get_rules()
342 virtual void update_rules()
346 virtual bool can_search_for_object_type(ObjectType type)
const
353 void set_query(
const std::string &q);
354 const std::string &get_query()
const;
355 bool contains(
const std::string &haystack)
const;
356 std::set<ObjectType> types;
357 std::pair<Coordf, Coordf> area_visible;
372 bool selectable =
false;
375 virtual std::list<SearchResult> search(
const SearchQuery &q)
380 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
385 std::set<SelectableRef> selection;
388 bool get_needs_save()
const;
389 void set_needs_save();
391 virtual const std::string &get_filename()
const = 0;
393 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
394 type_signal_tool_changed signal_tool_changed()
396 return s_signal_tool_changed;
398 typedef sigc::signal<void> type_signal_rebuilt;
399 type_signal_rebuilt signal_rebuilt()
401 return s_signal_rebuilt;
410 return s_signal_save;
413 type_signal_rebuilt signal_modified()
415 return s_signal_modified;
418 type_signal_rebuilt signal_can_undo_redo()
420 return s_signal_can_undo_redo;
423 typedef sigc::signal<json> type_signal_request_save_meta;
430 return s_signal_request_save_meta;
433 typedef sigc::signal<void, bool> type_signal_needs_save;
434 type_signal_needs_save signal_needs_save()
436 return s_signal_needs_save;
439 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
440 type_signal_load_tool_settings signal_load_tool_settings()
442 return s_signal_load_tool_settings;
445 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
446 type_signal_save_tool_settings signal_save_tool_settings()
448 return s_signal_save_tool_settings;
451 virtual void reload_pool()
456 virtual std::map<UUID, Junction> *get_junction_map(
bool work =
true)
460 virtual std::map<UUID, Line> *get_line_map(
bool work =
true)
464 virtual std::map<UUID, Arc> *get_arc_map(
bool work =
true)
468 virtual std::map<UUID, Text> *get_text_map(
bool work =
true)
472 virtual std::map<UUID, Polygon> *get_polygon_map(
bool work =
true)
476 virtual std::map<UUID, Hole> *get_hole_map(
bool work =
true)
480 virtual std::map<UUID, Dimension> *get_dimension_map()
484 virtual std::map<UUID, Keepout> *get_keepout_map()
489 bool reverted =
false;
490 std::unique_ptr<ToolBase> tool =
nullptr;
491 type_signal_tool_changed s_signal_tool_changed;
492 type_signal_rebuilt s_signal_rebuilt;
493 type_signal_rebuilt s_signal_save;
494 type_signal_rebuilt s_signal_modified;
495 type_signal_rebuilt s_signal_can_undo_redo;
496 type_signal_request_save_meta s_signal_request_save_meta;
497 type_signal_needs_save s_signal_needs_save;
498 type_signal_load_tool_settings s_signal_load_tool_settings;
499 type_signal_save_tool_settings s_signal_save_tool_settings;
500 bool needs_save =
false;
501 void set_needs_save(
bool v);
512 std::deque<std::unique_ptr<HistoryItem>> history;
513 int history_current = -1;
514 virtual void history_push() = 0;
515 virtual void history_load(
unsigned int i) = 0;
516 void history_clear();
519 bool property_transaction =
false;
525 void sort_search_results(std::list<Core::SearchResult> &results,
const SearchQuery &q);
527 virtual void save(
const std::string &suffix) = 0;
528 static const std::string autosave_suffix;
531 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);