Horizon
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 
7 namespace horizon {
8 class SheetBox : public Gtk::Box {
9 public:
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 
36 private:
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:30
Definition: sheet_box.hpp:8
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16