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