Horizon
Loading...
Searching...
No Matches
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
10namespace horizon {
11class CoreSchematic : public Core,
12 public virtual IDocumentSchematic,
13 public virtual IDocumentBlockSymbol,
15public:
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 const Sheet &get_canvas_data();
73 const BlockSymbol &get_canvas_data_block_symbol();
74 std::pair<Coordi, Coordi> get_bbox() override;
75
76 const UUID &get_current_block_uuid() const;
77 const UUID &get_top_block_uuid() const;
78
79 void set_block_symbol_mode(const UUID &block);
80 bool get_block_symbol_mode() const override;
81
82 const BlocksSchematic &get_blocks() const;
83 BlocksSchematic &get_blocks() override;
84 bool current_block_is_top() const override;
85
86 void set_instance_path(const UUID &sheet, const UUID &block, const UUIDVec &path);
87 const UUIDVec &get_instance_path() const override;
88 bool in_hierarchy() const override;
89
90 const BlockInstanceMapping *get_block_instance_mapping() const override;
91 BlockInstanceMapping *get_block_instance_mapping();
92
93 unsigned int get_sheet_index(const class UUID &sheet) const override;
94 unsigned int get_sheet_total() const override;
95 unsigned int get_sheet_index_for_path(const class UUID &sheet, const UUIDVec &path) const;
96
97 Schematic &get_schematic_for_instance_path(const UUIDVec &path) override;
98
99 const std::string &get_filename() const override;
100
101 ObjectType get_object_type() const override
102 {
103 return ObjectType::SCHEMATIC;
104 }
105
106 const FileVersion &get_version() const override
107 {
108 return get_top_schematic()->version;
109 }
110
111 void reload_pool() override;
112
113private:
114 std::map<UUID, Line> *get_line_map() override;
115 std::map<UUID, Arc> *get_arc_map() override;
116 std::map<UUID, Text> *get_text_map() override;
117 std::map<UUID, Picture> *get_picture_map() override;
118
119 std::optional<BlocksSchematic> blocks;
120
121 SchematicRules rules;
122
123 BOMExportSettings bom_export_settings;
124 PDFExportSettings pdf_export_settings;
125
126 UUID sheet_uuid;
127 UUID block_uuid;
128 UUIDVec instance_path;
129
130 Filenames filenames;
131
132 void rebuild_internal(bool from_undo, const std::string &comment) override;
133 std::unique_ptr<HistoryManager::HistoryItem> make_history_item(const std::string &comment) override;
134 void history_load(const HistoryManager::HistoryItem &it) override;
135 std::string get_history_comment_context() const override;
136 void save(const std::string &suffix) override;
137 void delete_autosave() override;
138 void fix_current_block();
139};
140} // 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:15
A Junction is a point in 2D-Space.
Definition junction.hpp:20
Definition layer_provider.hpp:8
Definition pdf_export_settings.hpp:9
Definition core_properties.hpp:104
Definition core_properties.hpp:8
Definition rules.hpp:54
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