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()
207 ToolID tool_id = ToolID::NONE;
208 bool is_transient =
false;
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;
299 virtual void save() = 0;
303 bool can_undo()
const;
304 bool can_redo()
const;
306 inline bool tool_is_active()
308 return tool !=
nullptr;
311 virtual bool set_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
313 virtual bool get_property(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
class PropertyValue &value);
314 virtual bool get_property_meta(ObjectType type,
const UUID &uu, ObjectProperty::ID property,
317 virtual std::string get_display_name(ObjectType type,
const UUID &uu);
318 virtual std::string get_display_name(ObjectType type,
const UUID &uu,
const UUID &sheet);
320 void set_property_begin();
321 void set_property_commit();
322 bool get_property_transaction()
const;
333 virtual json get_meta();
335 virtual class Rules *get_rules()
339 virtual void update_rules()
343 virtual bool can_search_for_object_type(ObjectType type)
const 351 std::set<ObjectType> types;
352 std::pair<Coordf, Coordf> area_visible;
364 bool selectable =
false;
367 virtual std::list<SearchResult> search(
const SearchQuery &q)
372 virtual std::pair<Coordi, Coordi> get_bbox() = 0;
377 std::set<SelectableRef> selection;
380 bool get_needs_save()
const;
381 void set_needs_save();
383 virtual const std::string &get_filename()
const = 0;
385 typedef sigc::signal<void, ToolID> type_signal_tool_changed;
386 type_signal_tool_changed signal_tool_changed()
388 return s_signal_tool_changed;
390 typedef sigc::signal<void> type_signal_rebuilt;
391 type_signal_rebuilt signal_rebuilt()
393 return s_signal_rebuilt;
402 return s_signal_save;
405 type_signal_rebuilt signal_can_undo_redo()
407 return s_signal_can_undo_redo;
410 typedef sigc::signal<json> type_signal_request_save_meta;
417 return s_signal_request_save_meta;
420 typedef sigc::signal<void, bool> type_signal_needs_save;
421 type_signal_needs_save signal_needs_save()
423 return s_signal_needs_save;
426 typedef sigc::signal<json, ToolID> type_signal_load_tool_settings;
427 type_signal_load_tool_settings signal_load_tool_settings()
429 return s_signal_load_tool_settings;
432 typedef sigc::signal<void, ToolID, json> type_signal_save_tool_settings;
433 type_signal_save_tool_settings signal_save_tool_settings()
435 return s_signal_save_tool_settings;
438 virtual void reload_pool()
443 virtual std::map<UUID, Junction> *get_junction_map(
bool work =
true)
447 virtual std::map<UUID, Line> *get_line_map(
bool work =
true)
451 virtual std::map<UUID, Arc> *get_arc_map(
bool work =
true)
455 virtual std::map<UUID, Text> *get_text_map(
bool work =
true)
459 virtual std::map<UUID, Polygon> *get_polygon_map(
bool work =
true)
463 virtual std::map<UUID, Hole> *get_hole_map(
bool work =
true)
467 virtual std::map<UUID, Dimension> *get_dimension_map()
471 virtual std::map<UUID, Keepout> *get_keepout_map()
476 bool reverted =
false;
477 std::unique_ptr<ToolBase> tool =
nullptr;
478 type_signal_tool_changed s_signal_tool_changed;
479 type_signal_rebuilt s_signal_rebuilt;
480 type_signal_rebuilt s_signal_save;
481 type_signal_rebuilt s_signal_can_undo_redo;
482 type_signal_request_save_meta s_signal_request_save_meta;
483 type_signal_needs_save s_signal_needs_save;
484 type_signal_load_tool_settings s_signal_load_tool_settings;
485 type_signal_save_tool_settings s_signal_save_tool_settings;
486 bool needs_save =
false;
487 void set_needs_save(
bool v);
498 std::deque<std::unique_ptr<HistoryItem>> history;
499 int history_current = -1;
500 virtual void history_push() = 0;
501 virtual void history_load(
unsigned int i) = 0;
502 void history_clear();
504 bool property_transaction =
false;
510 void sort_search_results(std::list<Core::SearchResult> &results,
const SearchQuery &q);
513 std::unique_ptr<ToolBase> create_tool(ToolID tool_id);
Polygon used in Padstack, Package and Board for specifying filled Regions.
Definition: polygon.hpp:27
a class to store JSON values
Definition: json.hpp:161
type_signal_request_save_meta signal_request_save_meta()
connect to this signal for providing meta information when the document is saved
Definition: core.hpp:415
Graphical line.
Definition: line.hpp:19
Definition: core_properties.hpp:7
Definition: placement.hpp:8
Definition: keepout.hpp:9
A block is one level of hierarchy in the netlist.
Definition: block.hpp:26
Tools use this class to actually access the core.
Definition: cores.hpp:13
Used wherever a user-editable text is needed.
Definition: text.hpp:19
Definition: imp_interface.hpp:7
Where Tools and and documents meet.
Definition: core.hpp:240
Definition: dimension.hpp:12
Definition: layer_provider.hpp:7
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:21
type_signal_rebuilt signal_save()
Gets emitted right before saving.
Definition: core.hpp:400
A Junction is a point in 2D-Space.
Definition: junction.hpp:25
Graphical arc.
Definition: arc.hpp:20
A hole with diameter and position, that's it.
Definition: hole.hpp:19