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
354 std::set<ObjectType> types;
355 std::pair<Coordf, Coordf> area_visible;
367 bool selectable =
false;
370 virtual std::list<SearchResult> search(
const SearchQuery &q)
375 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
380 std::set<SelectableRef> selection;
383 bool get_needs_save()
const;
384 void set_needs_save();
386 virtual const std::string &get_filename()
const = 0;
388 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
389 type_signal_tool_changed signal_tool_changed()
391 return s_signal_tool_changed;
393 typedef sigc::signal<void> type_signal_rebuilt;
394 type_signal_rebuilt signal_rebuilt()
396 return s_signal_rebuilt;
405 return s_signal_save;
408 type_signal_rebuilt signal_modified()
410 return s_signal_modified;
413 type_signal_rebuilt signal_can_undo_redo()
415 return s_signal_can_undo_redo;
418 typedef sigc::signal<json> type_signal_request_save_meta;
425 return s_signal_request_save_meta;
428 typedef sigc::signal<void, bool> type_signal_needs_save;
429 type_signal_needs_save signal_needs_save()
431 return s_signal_needs_save;
434 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
435 type_signal_load_tool_settings signal_load_tool_settings()
437 return s_signal_load_tool_settings;
440 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
441 type_signal_save_tool_settings signal_save_tool_settings()
443 return s_signal_save_tool_settings;
446 virtual void reload_pool()
451 virtual std::map<UUID, Junction> *get_junction_map(
bool work =
true)
455 virtual std::map<UUID, Line> *get_line_map(
bool work =
true)
459 virtual std::map<UUID, Arc> *get_arc_map(
bool work =
true)
463 virtual std::map<UUID, Text> *get_text_map(
bool work =
true)
467 virtual std::map<UUID, Polygon> *get_polygon_map(
bool work =
true)
471 virtual std::map<UUID, Hole> *get_hole_map(
bool work =
true)
475 virtual std::map<UUID, Dimension> *get_dimension_map()
479 virtual std::map<UUID, Keepout> *get_keepout_map()
484 bool reverted =
false;
485 std::unique_ptr<ToolBase> tool =
nullptr;
486 type_signal_tool_changed s_signal_tool_changed;
487 type_signal_rebuilt s_signal_rebuilt;
488 type_signal_rebuilt s_signal_save;
489 type_signal_rebuilt s_signal_modified;
490 type_signal_rebuilt s_signal_can_undo_redo;
491 type_signal_request_save_meta s_signal_request_save_meta;
492 type_signal_needs_save s_signal_needs_save;
493 type_signal_load_tool_settings s_signal_load_tool_settings;
494 type_signal_save_tool_settings s_signal_save_tool_settings;
495 bool needs_save =
false;
496 void set_needs_save(
bool v);
507 std::deque<std::unique_ptr<HistoryItem>> history;
508 int history_current = -1;
509 virtual void history_push() = 0;
510 virtual void history_load(
unsigned int i) = 0;
511 void history_clear();
513 bool property_transaction =
false;
519 void sort_search_results(std::list<Core::SearchResult> &results,
const SearchQuery &q);
521 virtual void save(
const std::string &suffix) = 0;
522 static const std::string autosave_suffix;
525 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);