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