Horizon
Loading...
Searching...
No Matches
sheet_box.hpp
1#pragma once
2#include <gtkmm.h>
3#include "util/uuid.hpp"
4#include "util/uuid_vec.hpp"
5#include <optional>
6
7namespace horizon {
8class SheetBox : public Gtk::Box {
9public:
10 SheetBox(class CoreSchematic &c);
11
12 void update();
13 void clear_highlights();
14 void add_highlights(const UUID &sheet, const UUIDVec &path);
15 void select_sheet(const UUID &sheet_uuid);
16 void go_to_instance(const UUIDVec &path, const UUID &sheet = UUID());
17 void go_to_block_symbol(const UUID &uu);
18 typedef sigc::signal<void, UUID, UUID, UUIDVec> type_signal_select_sheet;
19 type_signal_select_sheet signal_select_sheet()
20 {
21 return s_signal_select_sheet;
22 }
23
24 typedef sigc::signal<void> type_signal_edit_more;
25 type_signal_edit_more signal_edit_more()
26 {
27 return s_signal_edit_more;
28 }
29
30 typedef sigc::signal<void, UUID> type_signal_place_block;
31 type_signal_place_block signal_place_block()
32 {
33 return s_signal_place_block;
34 }
35
36private:
37 enum class RowType { SHEET, BLOCK, BLOCK_INSTANCE, SEPARATOR };
38
39 class TreeColumns : public Gtk::TreeModelColumnRecord {
40 public:
41 TreeColumns()
42 {
43 Gtk::TreeModelColumnRecord::add(name);
44 Gtk::TreeModelColumnRecord::add(sheet);
45 Gtk::TreeModelColumnRecord::add(block);
46 Gtk::TreeModelColumnRecord::add(index);
47 Gtk::TreeModelColumnRecord::add(has_warnings);
48 Gtk::TreeModelColumnRecord::add(has_highlights);
49 Gtk::TreeModelColumnRecord::add(type);
50 Gtk::TreeModelColumnRecord::add(instance_path);
51 }
52 Gtk::TreeModelColumn<Glib::ustring> name;
53 Gtk::TreeModelColumn<UUID> sheet;
54 Gtk::TreeModelColumn<UUID> block;
55 Gtk::TreeModelColumn<unsigned int> index;
56 Gtk::TreeModelColumn<bool> has_warnings;
57 Gtk::TreeModelColumn<bool> has_highlights;
58 Gtk::TreeModelColumn<RowType> type;
59 Gtk::TreeModelColumn<UUIDVec> instance_path;
60 };
61 TreeColumns tree_columns;
62
63 CoreSchematic &core;
64 Gtk::Button *add_button = nullptr;
65 Gtk::Button *remove_button = nullptr;
66 Gtk::Button *move_up_button = nullptr;
67 Gtk::Button *move_down_button = nullptr;
68
69 Gtk::TreeView *view;
70 Glib::RefPtr<Gtk::TreeStore> store;
71
72 Gtk::Menu menu;
73
74 type_signal_select_sheet s_signal_select_sheet;
75 type_signal_edit_more s_signal_edit_more;
76 void selection_changed(void);
77 void remove_clicked(void);
78 void name_edited(const Glib::ustring &path, const Glib::ustring &new_text);
79 void sheet_move(int dir);
80
81 bool updating = false;
82
83 void sheets_to_row(std::function<Gtk::TreeModel::Row()> make_row, const class Schematic &sch,
84 const UUID &block_uuid, const UUIDVec &instance_path, bool in_hierarchy);
85 std::optional<Gtk::TreeModel::iterator> last_iter;
86
87 type_signal_place_block s_signal_place_block;
88 class CellRendererButton *cr_place_block = nullptr;
89};
90} // namespace horizon
Definition sheet_box.cpp:8
Definition core_schematic.hpp:14
A Schematic is the visual representation of a Block.
Definition schematic.hpp:29
Definition sheet_box.hpp:8
This class encapsulates a UUID and allows it to be uses as a value type.
Definition uuid.hpp:16