1 #pragma once 2 #include "core.hpp" 3 #include "pool/symbol.hpp" 4 #include <deque> 5 #include <iostream> 6 #include <memory> 7 #include "document/idocument_symbol.hpp" 8 9 namespace horizon { 10 class CoreSymbol : public Core, public IDocumentSymbol { 11 public: 12 CoreSymbol(const std::string &filename, IPool &pool); 13 bool has_object_type(ObjectType ty) const override; 14 Symbol &get_symbol() override; 15 16 Junction *get_junction(const UUID &uu) override; 17 Line *get_line(const UUID &uu) override; 18 SymbolPin &get_symbol_pin(const UUID &uu) override; 19 Arc *get_arc(const UUID &uu) override; 20 21 Junction *insert_junction(const UUID &uu) override; 22 void delete_junction(const UUID &uu) override; 23 Line *insert_line(const UUID &uu) override; 24 void delete_line(const UUID &uu) override; 25 Arc *insert_arc(const UUID &uu) override; 26 void delete_arc(const UUID &uu) override; 27 28 SymbolPin &insert_symbol_pin(const UUID &uu) override; 29 void delete_symbol_pin(const UUID &uu) override; 30 31 class LayerProvider &get_layer_provider() override; 32 33 std::vector<Line *> get_lines() override; 34 std::vector<Arc *> get_arcs() override; 35 36 void rebuild(bool from_undo = false) override; 37 38 bool set_property(ObjectType type, const UUID &uu, ObjectProperty::ID property, 39 const class PropertyValue &value) override; 40 bool get_property(ObjectType type, const UUID &uu, ObjectProperty::ID property, 41 class PropertyValue &value) override; 42 bool get_property_meta(ObjectType type, const UUID &uu, ObjectProperty::ID property, 43 class PropertyMeta &meta) override; 44 45 std::string get_display_name(ObjectType type, const UUID &uu) override; 46 47 const Symbol &get_canvas_data(); 48 std::pair<Coordi, Coordi> get_bbox() override; 49 50 void reload_pool() override; 51 52 void set_pin_display_mode(Symbol::PinDisplayMode mode); 53 54 const std::string &get_filename() const override; 55 get_object_type() const56 ObjectType get_object_type() const override 57 { 58 return ObjectType::SYMBOL; 59 } 60 61 class Rules *get_rules() override; 62 get_version() const63 const FileVersion &get_version() const override 64 { 65 return sym.version; 66 } 67 68 69 private: 70 std::map<UUID, Text> *get_text_map() override; 71 std::map<UUID, Polygon> *get_polygon_map() override; 72 73 Symbol sym; 74 std::string m_filename; 75 Symbol::PinDisplayMode pin_display_mode = Symbol::PinDisplayMode::PRIMARY; 76 77 SymbolRules rules; 78 79 class HistoryItem : public Core::HistoryItem { 80 public: HistoryItem(const Symbol & s)81 HistoryItem(const Symbol &s) : sym(s) 82 { 83 } 84 Symbol sym; 85 }; 86 void history_push() override; 87 void history_load(unsigned int i) override; 88 void save(const std::string &suffix) override; 89 void delete_autosave() override; 90 }; 91 } // namespace horizon 92