Horizon
core_schematic.hpp
1 #pragma once
2 #include "block/block.hpp"
3 #include "core.hpp"
4 #include "schematic/schematic.hpp"
5 #include "document/idocument_schematic.hpp"
6 #include <memory>
7 #include <optional>
8 
9 namespace horizon {
10 class CoreSchematic : public Core, public virtual IDocumentSchematic {
11 public:
12  CoreSchematic(const std::string &schematic_filename, const std::string &block_filename,
13  const std::string &pictures_dir, IPool &pool);
14  bool has_object_type(ObjectType ty) const override;
15 
16  Junction *get_junction(const UUID &uu) override;
17  Line *get_line(const UUID &uu) override;
18  Arc *get_arc(const UUID &uu) override;
19  SchematicSymbol *get_schematic_symbol(const UUID &uu) override;
20  Schematic *get_schematic() override;
21  Sheet *get_sheet() override;
22  const Sheet *get_sheet() const;
23  Text *get_text(const UUID &uu) override;
24 
25  Junction *insert_junction(const UUID &uu) override;
26  void delete_junction(const UUID &uu) override;
27  Line *insert_line(const UUID &uu) override;
28  void delete_line(const UUID &uu) override;
29  Arc *insert_arc(const UUID &uu) override;
30  void delete_arc(const UUID &uu) override;
31  SchematicSymbol *insert_schematic_symbol(const UUID &uu, const Symbol *sym) override;
32  void delete_schematic_symbol(const UUID &uu) override;
33 
34  LineNet *insert_line_net(const UUID &uu) override;
35  void delete_line_net(const UUID &uu) override;
36 
37  Text *insert_text(const UUID &uu) override;
38  void delete_text(const UUID &uu) override;
39 
40  class Picture *insert_picture(const UUID &uu) override;
41  class Picture *get_picture(const UUID &uu) override;
42  void delete_picture(const UUID &uu) override;
43 
44  std::vector<Line *> get_lines() override;
45  std::vector<Arc *> get_arcs() override;
46  std::vector<LineNet *> get_net_lines() override;
47  std::vector<NetLabel *> get_net_labels() override;
48 
49  class Block *get_block() override;
50  class LayerProvider &get_layer_provider() override;
51 
52  bool set_property(ObjectType type, const UUID &uu, ObjectProperty::ID property,
53  const class PropertyValue &value) override;
54  bool get_property(ObjectType type, const UUID &uu, ObjectProperty::ID property,
55  class PropertyValue &value) override;
56  bool get_property_meta(ObjectType type, const UUID &uu, ObjectProperty::ID property,
57  class PropertyMeta &meta) override;
58 
59  std::string get_display_name(ObjectType type, const UUID &uu) override;
60  std::string get_display_name(ObjectType type, const UUID &uu, const UUID &sheet) override;
61 
62  class Rules *get_rules() override;
63 
64  BOMExportSettings *get_bom_export_settings()
65  {
66  return &bom_export_settings;
67  }
68 
69  PDFExportSettings *get_pdf_export_settings()
70  {
71  return &pdf_export_settings;
72  }
73 
74  void rebuild(bool from_undo = false) override;
75 
76  void add_sheet();
77  void delete_sheet(const UUID &uu);
78 
79  void set_sheet(const UUID &uu);
80  const Sheet &get_canvas_data();
81  std::pair<Coordi, Coordi> get_bbox() override;
82 
83  const std::string &get_filename() const override;
84 
85  bool get_project_meta_loaded_from_block() const
86  {
87  return project_meta_loaded_from_block;
88  };
89 
90  ObjectType get_object_type() const override
91  {
92  return ObjectType::SCHEMATIC;
93  }
94 
95  const FileVersion &get_version() const override
96  {
97  return sch->version;
98  }
99 
100  void reload_pool() override;
101 
102 private:
103  std::optional<Block> block;
104  const bool project_meta_loaded_from_block;
105  std::optional<Schematic> sch;
106 
107  SchematicRules rules;
108 
109  BOMExportSettings bom_export_settings;
110  PDFExportSettings pdf_export_settings;
111 
112  UUID sheet_uuid;
113  std::string m_schematic_filename;
114  std::string m_block_filename;
115  std::string m_pictures_dir;
116 
117  class HistoryItem : public Core::HistoryItem {
118  public:
119  HistoryItem(const Block &b, const Schematic &s) : block(b), sch(s)
120  {
121  }
122  Block block;
123  Schematic sch;
124  };
125  void history_push() override;
126  void history_load(unsigned int i) override;
127  void save(const std::string &suffix) override;
128  void delete_autosave() override;
129 };
130 } // namespace horizon
Graphical arc.
Definition: arc.hpp:20
Definition: bom_export_settings.hpp:11
A block is one level of hierarchy in the netlist.
Definition: block.hpp:26
Definition: core_schematic.hpp:10
void rebuild(bool from_undo=false) override
Expands the non-working document.
Definition: core_schematic.cpp:606
Definition: core.hpp:184
Where Tools and and documents meet.
Definition: core.hpp:42
Definition: file_version.hpp:8
Definition: idocument_schematic.hpp:5
Definition: ipool.hpp:12
A Junction is a point in 2D-Space.
Definition: junction.hpp:20
Definition: layer_provider.hpp:7
LineNet is similar to Line, except it denotes electrical connection.
Definition: line_net.hpp:17
Graphical line.
Definition: line.hpp:19
Definition: pdf_export_settings.hpp:9
Definition: picture.hpp:10
Definition: core_properties.hpp:90
Definition: core_properties.hpp:7
Definition: rules.hpp:48
Definition: schematic_rules.hpp:10
Definition: schematic_symbol.hpp:17
A Schematic is the visual representation of a Block.
Definition: schematic.hpp:29
Definition: sheet.hpp:39
Definition: symbol.hpp:71
Used wherever a user-editable text is needed.
Definition: text.hpp:18
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16