Horizon
Loading...
Searching...
No Matches
action_button.hpp
1#pragma once
2#include <gtkmm.h>
3#include "imp/action.hpp"
4
5namespace horizon {
6
8public:
9 typedef sigc::signal<void, ActionToolID> type_signal_action;
10 type_signal_action signal_action()
11 {
12 return s_signal_action;
13 }
14
15 virtual void update_key_sequences();
16 virtual void add_action(ActionToolID act) = 0;
17 virtual void set_keep_primary_action(bool keep)
18 {
19 }
20
21 virtual ~ActionButtonBase()
22 {
23 }
24
25protected:
26 ActionButtonBase(const std::map<ActionToolID, ActionConnection> &k);
27
28 type_signal_action s_signal_action;
29 std::map<ActionToolID, Gtk::Label *> key_labels;
30 const std::map<ActionToolID, ActionConnection> &keys;
31};
32
33class ActionButton : public Gtk::Overlay, public ActionButtonBase {
34public:
35 ActionButton(ActionToolID action, const std::map<ActionToolID, ActionConnection> &k);
36
37 void update_key_sequences() override;
38 void add_action(ActionToolID act) override;
39 void set_keep_primary_action(bool keep) override;
40
41private:
42 const ActionToolID action_orig;
43 ActionToolID action;
44 Gtk::Button *button = nullptr;
45 Gtk::MenuButton *menu_button = nullptr;
46 Gtk::Menu menu;
47 int button_current = -1;
48 Gtk::MenuItem &add_menu_item(ActionToolID act);
49 void set_primary_action(ActionToolID act);
50 bool keep_primary_action = false;
51};
52
53class ActionButtonMenu : public Gtk::Button, public ActionButtonBase {
54public:
55 ActionButtonMenu(const char *icon_name, const std::map<ActionToolID, ActionConnection> &k);
56
57 void add_action(ActionToolID act) override;
58
59private:
60 Gtk::Menu menu;
61 int button_current = -1;
62 Gtk::MenuItem &add_menu_item(ActionToolID act);
63};
64
65
66} // namespace horizon
Definition action_button.hpp:7
Definition action_button.hpp:53
Definition action_button.hpp:33
Definition action.hpp:13