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