Horizon
rules_window.hpp
1 #pragma once
2 #include "common/common.hpp"
3 #include "rules/rules.hpp"
4 #include "util/uuid.hpp"
5 #include "util/changeable.hpp"
6 #include <array>
7 #include <gtkmm.h>
8 #include <set>
9 namespace horizon {
10 
11 class RulesWindow : public Gtk::Window, public Changeable {
12 public:
13  RulesWindow(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x, class CanvasGL *ca, class Rules *ru,
14  class Core *c);
15  static RulesWindow *create(Gtk::Window *p, class CanvasGL *ca, class Rules *ru, class Core *c);
16  typedef sigc::signal<void, Coordi, UUID> type_signal_goto;
17  type_signal_goto signal_goto()
18  {
19  return s_signal_goto;
20  }
21 
22  typedef sigc::signal<void> type_signal_canvas_update;
23  type_signal_canvas_update signal_canvas_update()
24  {
25  return s_signal_canvas_update;
26  }
27 
28  void run_checks();
29  void apply_rules();
30 
31 private:
32  Gtk::ListBox *lb_rules = nullptr;
33  Gtk::ListBox *lb_multi = nullptr;
34  Gtk::Revealer *rev_multi = nullptr;
35  Gtk::Button *button_rule_instance_add = nullptr;
36  Gtk::Button *button_rule_instance_remove = nullptr;
37  Gtk::Button *button_rule_instance_move_up = nullptr;
38  Gtk::Button *button_rule_instance_move_down = nullptr;
39  Gtk::Box *rule_editor_box = nullptr;
40  Gtk::Button *run_button = nullptr;
41  Gtk::Button *apply_button = nullptr;
42  Gtk::Stack *stack = nullptr;
43  Glib::RefPtr<Gtk::SizeGroup> sg_order;
44 
45  void rule_selected(RuleID id);
46  void rule_instance_selected(RuleID id, const UUID &uu);
47  void update_rule_instances(RuleID id);
48  void update_rule_instance_labels();
49  void update_rules_enabled();
50 
51 
52  CanvasGL *canvas = nullptr;
53  Rules *rules = nullptr;
54  Core *core = nullptr;
55  class CanvasAnnotation *annotation;
56 
57  class Block *get_block();
58  type_signal_goto s_signal_goto;
59  type_signal_canvas_update s_signal_canvas_update;
60  RuleID rule_current = RuleID::NONE;
61 
62  class RuleEditor *editor = nullptr;
63  void show_editor(RuleEditor *e);
64  RuleEditor *create_editor(Rule *r);
65 
66  class TreeColumns : public Gtk::TreeModelColumnRecord {
67  public:
68  TreeColumns()
69  {
70  Gtk::TreeModelColumnRecord::add(name);
71  Gtk::TreeModelColumnRecord::add(result);
72  Gtk::TreeModelColumnRecord::add(comment);
73  Gtk::TreeModelColumnRecord::add(has_location);
74  Gtk::TreeModelColumnRecord::add(location);
75  Gtk::TreeModelColumnRecord::add(sheet);
76  }
77  Gtk::TreeModelColumn<Glib::ustring> name;
78  Gtk::TreeModelColumn<RulesCheckErrorLevel> result;
79  Gtk::TreeModelColumn<Glib::ustring> comment;
80  Gtk::TreeModelColumn<bool> has_location;
81  Gtk::TreeModelColumn<Coordi> location;
82  Gtk::TreeModelColumn<UUID> sheet;
83  };
84  TreeColumns tree_columns;
85 
86  Glib::RefPtr<Gtk::TreeStore> check_result_store;
87  Gtk::TreeView *check_result_treeview = nullptr;
88 };
89 } // namespace horizon
Definition: annotation.hpp:7
Definition: rules_window.hpp:11
Definition: changeable.hpp:5
Definition: rule_editor.hpp:9
Definition: rule.hpp:24
Definition: rules.hpp:41
Definition: canvas_gl.hpp:10
A block is one level of hierarchy in the netlist.
Definition: block.hpp:25
Where Tools and and documents meet.
Definition: core.hpp:249
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
Definition: block.cpp:7