1 #pragma once
2 #include "common/common.hpp"
3 #include <gtkmm.h>
4 
5 namespace horizon {
6 
7 class MainWindow : public Gtk::ApplicationWindow {
8 public:
9     MainWindow(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &x);
10     static MainWindow *create();
11     class CanvasGL *canvas = nullptr;
12     Gtk::Label *tool_hint_label = nullptr;
13     Gtk::Label *cursor_label = nullptr;
14     Gtk::Box *left_panel = nullptr;
15     Gtk::Box *grid_box_square = nullptr;
16     Gtk::Box *grid_box_rect = nullptr;
17     Gtk::Label *grid_mul_label = nullptr;
18     Gtk::Label *selection_label = nullptr;
19     Gtk::Viewport *property_viewport = nullptr;
20     Gtk::ScrolledWindow *property_scrolled_window = nullptr;
21     Gtk::Revealer *property_throttled_revealer = nullptr;
22     Gtk::HeaderBar *header = nullptr;
23     Glib::RefPtr<Gtk::Builder> builder;
24 
25     Gtk::Button *pool_reload_button = nullptr;
26 
27     Gtk::SearchEntry *search_entry = nullptr;
28     Gtk::Button *search_previous_button = nullptr;
29     Gtk::Button *search_next_button = nullptr;
30     Gtk::Label *search_status_label = nullptr;
31     Gtk::Revealer *search_revealer = nullptr;
32     Gtk::CheckButton *search_exact_cb = nullptr;
33     Gtk::Expander *search_expander = nullptr;
34     Gtk::Box *search_types_box = nullptr;
35     Gtk::Label *selection_mode_label = nullptr;
36     Gtk::MenuButton *view_options_button = nullptr;
37 
38     Gtk::Revealer *action_bar_revealer = nullptr;
39     Gtk::Box *action_bar_box = nullptr;
40     void set_use_action_bar(bool u);
41 
42     Gtk::RadioButton *grid_square_button = nullptr;
43     Gtk::RadioButton *grid_rect_button = nullptr;
44     Gtk::Grid *grid_grid = nullptr;
45     Gtk::Button *grid_reset_origin_button = nullptr;
46 
47     Gtk::Button *grid_window_button = nullptr;
48 
49     Gtk::ListBox *key_hint_box = nullptr;
50     Glib::RefPtr<Gtk::SizeGroup> key_hint_size_group;
51     void key_hint_set_visible(bool v);
52 
signal_activate_hud_link()53     Glib::SignalProxy<bool, const Glib::ustring &> signal_activate_hud_link()
54     {
55         return hud_label->signal_activate_link();
56     }
57 
58 
59     void tool_bar_set_visible(bool v);
60     void tool_bar_set_tool_name(const std::string &s);
61     void tool_bar_set_tool_tip(const std::string &s);
62     void tool_bar_flash(const std::string &s);
63     void tool_bar_set_use_actions(bool use_actions);
64     void tool_bar_clear_actions();
65     void tool_bar_append_action(Gtk::Widget &w);
66 
67     void hud_update(const std::string &s);
68     void hud_hide();
69 
70     void show_nonmodal(const std::string &la, const std::string &button, std::function<void(void)> fn,
71                        const std::string &la2 = "");
72 
73     void set_view_hints_label(const std::vector<std::string> &s);
74 
75     void disable_grid_options();
76 
77     void set_version_info(const std::string &s);
78 
79     // virtual ~MainWindow();
80 private:
81     Gtk::EventBox *gl_container = nullptr;
82 
83     Gtk::Revealer *tool_bar = nullptr;
84     Gtk::Label *tool_bar_name_label = nullptr;
85     Gtk::Label *tool_bar_tip_label = nullptr;
86     Gtk::Label *tool_bar_flash_label = nullptr;
87     Gtk::Stack *tool_bar_stack = nullptr;
88     Gtk::Label *tool_bar_action_tip_label = nullptr;
89     Gtk::Box *tool_bar_actions_box = nullptr;
90     sigc::connection tip_timeout_connection;
91     bool tool_bar_queue_close = false;
92 
93     Gtk::Revealer *hud = nullptr;
94     Gtk::Label *hud_label = nullptr;
95 
96     sigc::connection hud_timeout_connection;
97     bool hud_queue_close = false;
98 
99     Gtk::Button *nonmodal_close_button = nullptr;
100     Gtk::Button *nonmodal_button = nullptr;
101     Gtk::Revealer *nonmodal_rev = nullptr;
102     Gtk::Label *nonmodal_label = nullptr;
103     Gtk::Label *nonmodal_label2 = nullptr;
104     std::function<void(void)> nonmodal_fn;
105 
106     Gtk::Label *view_hints_label = nullptr;
107 
108     Gtk::ToggleButton *grid_options_button = nullptr;
109     Gtk::Revealer *grid_options_revealer = nullptr;
110 
111     Gtk::Stack *grid_box_stack = nullptr;
112 
113     Gtk::InfoBar *version_info_bar = nullptr;
114     Gtk::Label *version_label = nullptr;
115 
116     bool tool_bar_use_actions = false;
117 
118     Gtk::Revealer *key_hint_revealer = nullptr;
119     sigc::connection key_hint_connection;
120     void update_key_hint_position();
121 };
122 } // namespace horizon
123