Horizon
core_schematic.hpp
1 #pragma once
2 #include "blocks/blocks_schematic.hpp"
3 #include "core.hpp"
4 #include "document/idocument_schematic.hpp"
5 #include "document/idocument_block_symbol.hpp"
6 #include "schematic/iinstancce_mapping_provider.hpp"
7 #include <memory>
8 #include <optional>
9 
10 namespace horizon {
11 class CoreSchematic : public Core,
12  public virtual IDocumentSchematic,
13  public virtual IDocumentBlockSymbol,
15 public:
16  CoreSchematic(const std::string &blocks_filename, const std::string &pictures_dir, IPool &pool,
17  IPool &pool_caching);
18  bool has_object_type(ObjectType ty) const override;
19 
20  Schematic *get_current_schematic() override;
21  const Schematic *get_current_schematic() const;
22  Schematic *get_top_schematic() override;
23  const Schematic *get_top_schematic() const;
24  Sheet *get_sheet() override;
25  const Sheet *get_sheet() const;
26 
27  BlockSymbol &get_block_symbol() override;
28 
29  Junction *get_junction(const UUID &uu) override;
30  Junction *insert_junction(const UUID &uu) override;
31  void delete_junction(const UUID &uu) override;
32 
33  class Block *get_top_block() override;
34  class Block *get_current_block() override;
35  class LayerProvider &get_layer_provider() override;
36 
37  bool set_property(ObjectType type, const UUID &uu, ObjectProperty::ID property,
38  const class PropertyValue &value) override;
39  bool get_property(ObjectType type, const UUID &uu, ObjectProperty::ID property,
40  class PropertyValue &value) override;
41  bool get_property_meta(ObjectType type, const UUID &uu, ObjectProperty::ID property,
42  class PropertyMeta &meta) override;
43 
44  std::string get_display_name(ObjectType type, const UUID &uu) override;
45  std::string get_display_name(ObjectType type, const UUID &uu, const UUID &sheet) override;
46 
47  class Rules *get_rules() override;
48 
49  BOMExportSettings *get_bom_export_settings()
50  {
51  return &bom_export_settings;
52  }
53 
54  PDFExportSettings *get_pdf_export_settings()
55  {
56  return &pdf_export_settings;
57  }
58 
59  void add_sheet();
60  void delete_sheet(const UUID &uu);
61 
62  void set_sheet(const UUID &uu);
63  const Sheet &get_canvas_data();
64  const BlockSymbol &get_canvas_data_block_symbol();
65  std::pair<Coordi, Coordi> get_bbox() override;
66 
67  void set_block(const UUID &uu);
68  const UUID &get_current_block_uuid() const;
69  const UUID &get_top_block_uuid() const;
70 
71  void set_block_symbol_mode();
72  bool get_block_symbol_mode() const override;
73 
74  const BlocksSchematic &get_blocks() const;
75  BlocksSchematic &get_blocks() override;
76  bool current_block_is_top() const override;
77 
78  void set_instance_path(const UUIDVec &path);
79  const UUIDVec &get_instance_path() const override;
80  bool in_hierarchy() const override;
81 
82  const BlockInstanceMapping *get_block_instance_mapping() const override;
83  BlockInstanceMapping *get_block_instance_mapping();
84 
85  unsigned int get_sheet_index(const class UUID &sheet) const override;
86  unsigned int get_sheet_total() const override;
87  unsigned int get_sheet_index_for_path(const class UUID &sheet, const UUIDVec &path) const;
88 
89  Schematic &get_schematic_for_instance_path(const UUIDVec &path) override;
90 
91  const std::string &get_filename() const override;
92 
93  ObjectType get_object_type() const override
94  {
95  return ObjectType::SCHEMATIC;
96  }
97 
98  const FileVersion &get_version() const override
99  {
100  return get_top_schematic()->version;
101  }
102 
103  void reload_pool() override;
104 
105 private:
106  std::map<UUID, Line> *get_line_map() override;
107  std::map<UUID, Arc> *get_arc_map() override;
108  std::map<UUID, Text> *get_text_map() override;
109  std::map<UUID, Picture> *get_picture_map() override;
110 
111  std::optional<BlocksSchematic> blocks;
112 
113  SchematicRules rules;
114 
115  BOMExportSettings bom_export_settings;
116  PDFExportSettings pdf_export_settings;
117 
118  UUID sheet_uuid;
119  UUID block_uuid;
120  UUIDVec instance_path;
121 
122  std::string m_blocks_filename;
123  std::string m_pictures_dir;
124 
125  class HistoryItem : public Core::HistoryItem {
126  public:
127  HistoryItem(const BlocksSchematic &bl, const std::string &cm) : Core::HistoryItem(cm), blocks(bl)
128  {
129  }
130  BlocksSchematic blocks;
131  };
132  void rebuild_internal(bool from_undo, const std::string &comment) override;
133  void history_push(const std::string &comment) override;
134  void history_load(unsigned int i) override;
135  void save(const std::string &suffix) override;
136  void delete_autosave() override;
137  void fix_current_block();
138 };
139 } // namespace horizon
Definition: bom_export_settings.hpp:12
Definition: block_instance.hpp:8
Definition: block_symbol.hpp:51
A block is one level of hierarchy in the netlist.
Definition: block.hpp:29
Definition: blocks_schematic.hpp:8
Definition: core_schematic.hpp:14
Definition: core.hpp:202
Where Tools and and documents meet.
Definition: core.hpp:42
Definition: file_version.hpp:9
Definition: idocument_block_symbol.hpp:5
Definition: idocument_schematic.hpp:6
Definition: iinstancce_mapping_provider.hpp:4
Definition: ipool.hpp:14
A Junction is a point in 2D-Space.
Definition: junction.hpp:20
Definition: layer_provider.hpp:7
Definition: pdf_export_settings.hpp:9
Definition: core_properties.hpp:90
Definition: core_properties.hpp:7
Definition: rules.hpp:51
Definition: schematic_rules.hpp:10
A Schematic is the visual representation of a Block.
Definition: schematic.hpp:30
Definition: sheet.hpp:40
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16