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