blob: 194ca80272ec6482fe8a3cd35bfcebea62b40466 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#ifndef SEEN_INK_SELECT_ONE_ACTION
#define SEEN_INK_SELECT_ONE_ACTION
/*
* Authors:
* Tavmjong Bah <tavmjong@free.fr>
*
* Copyright (C) 2017 Tavmjong Bah
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
/**
An action (menu/toolbar item) that allows selecting one choice out of many.
The choices may be displayed as:
1. A group of items in a toolbar with labels and/or icons.
2. As a drop-down menu with a labels and/or icons.
*/
#include <gtkmm/action.h>
#include <gtkmm/liststore.h>
#include <sigc++/sigc++.h>
#include <vector>
namespace Gtk {
class ComboBox;
class RadioAction;
class MenuItem;
class RadioMenuItem;
}
class InkSelectOneActionColumns : public Gtk::TreeModel::ColumnRecord {
public:
InkSelectOneActionColumns() {
add (col_label);
add (col_icon);
add (col_tooltip);
add (col_sensitive);
}
Gtk::TreeModelColumn<Glib::ustring> col_label;
Gtk::TreeModelColumn<Glib::ustring> col_icon;
Gtk::TreeModelColumn<Glib::ustring> col_tooltip;
Gtk::TreeModelColumn<bool> col_sensitive;
};
class InkSelectOneAction : public Gtk::Action {
public:
static InkSelectOneAction* create(const Glib::ustring &name,
const Glib::ustring &label,
const Glib::ustring &tooltip,
const Glib::ustring &stock_id,
Glib::RefPtr<Gtk::ListStore> store );
/* Style of action */
void use_radio( bool use_radio ) { _use_radio = use_radio; }
void use_label( bool use_label ) { _use_label = use_label; }
void use_icon( bool use_icon ) { _use_icon = use_icon; }
gint get_active() { return _active; }
void set_active( gint active );
void set_icon_size( Gtk::BuiltinIconSize size ) { _icon_size = size; }
Glib::RefPtr<Gtk::ListStore> get_store() { return _store; }
sigc::signal<void, int> signal_changed() { return _changed; }
protected:
virtual Gtk::Widget* create_menu_item_vfunc();
virtual Gtk::Widget* create_tool_item_vfunc();
/* Signals */
sigc::signal<void, int> _changed;
private:
Glib::ustring _name;
Glib::ustring _label;
Glib::ustring _tooltip;
Glib::ustring _stock_id;
Glib::RefPtr<Gtk::ListStore> _store;
gint _active; /* Active menu item/button */
/* Style */
bool _use_radio; // Applies to tool item only
bool _use_label;
bool _use_icon; // Applies to menu item only
Gtk::BuiltinIconSize _icon_size;
/* Combobox in tool */
Gtk::ComboBox* _combobox;
/* Need to track one action to get active action. */
Glib::RefPtr<Gtk::RadioAction> _radioaction;
Gtk::MenuItem* _menuitem;
std::vector<Gtk::RadioMenuItem*> _radiomenuitems;
/* Internal Callbacks */
void on_changed_combobox();
void on_changed_radioaction(const Glib::RefPtr<Gtk::RadioAction>& current);
void on_toggled_radiomenu(int n);
InkSelectOneAction (const Glib::ustring &name,
const Glib::ustring &label,
const Glib::ustring &tooltip,
const Glib::ustring &stock_id,
Glib::RefPtr<Gtk::ListStore> store );
};
#endif /* SEEN_INK_SELECT_ONE_ACTION */
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|