blob: 1e459016380deeac7faa2ab59822d8125bff6788 (
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
|
// SPDX-License-Identifier: GPL-2.0-or-later
#ifndef SEEN_COMBO_TOOL_ITEM
#define SEEN_COMBO_TOOL_ITEM
/*
* Authors:
* Tavmjong Bah <tavmjong@free.fr>
*
* Copyright (C) 2017 Tavmjong Bah
*
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
/**
A combobox that can be displayed in a toolbar
*/
#include <gtkmm/toolitem.h>
#include <gtkmm/liststore.h>
#include <sigc++/sigc++.h>
#include <vector>
namespace Gtk {
class ComboBox;
class MenuItem;
class RadioMenuItem;
}
namespace Inkscape {
namespace UI {
namespace Widget {
class ComboToolItemColumns : public Gtk::TreeModel::ColumnRecord {
public:
ComboToolItemColumns() {
add (col_label);
add (col_icon);
add (col_pixbuf);
add (col_data); // Used to store a pointer
add (col_tooltip);
add (col_sensitive);
}
Gtk::TreeModelColumn<Glib::ustring> col_label;
Gtk::TreeModelColumn<Glib::ustring> col_icon;
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > col_pixbuf;
Gtk::TreeModelColumn<void *> col_data;
Gtk::TreeModelColumn<Glib::ustring> col_tooltip;
Gtk::TreeModelColumn<bool> col_sensitive;
};
class ComboToolItem : public Gtk::ToolItem {
public:
static ComboToolItem* create(const Glib::ustring &label,
const Glib::ustring &tooltip,
const Glib::ustring &stock_id,
Glib::RefPtr<Gtk::ListStore> store );
/* Style of action */
void use_label( bool use_label ) { _use_label = use_label; }
void use_icon( bool use_icon ) { _use_icon = use_icon; }
void use_pixbuf( bool use_pixbuf ) { _use_pixbuf = use_pixbuf; }
void use_group_label( bool use_group_label ) { _use_group_label = use_group_label; }
gint get_active() { return _active; }
Glib::ustring get_active_text();
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; }
sigc::signal<void, int> signal_changed_after() { return _changed_after; }
protected:
bool on_create_menu_proxy() override;
/* Signals */
sigc::signal<void, int> _changed;
sigc::signal<void, int> _changed_after; // Needed for unit tracker which eats _changed.
private:
Glib::ustring _group_label;
Glib::ustring _tooltip;
Glib::ustring _stock_id;
Glib::RefPtr<Gtk::ListStore> _store;
gint _active; /* Active menu item/button */
/* Style */
bool _use_label;
bool _use_icon; // Applies to menu item only
bool _use_pixbuf;
bool _use_group_label; // Applies to tool item only
Gtk::BuiltinIconSize _icon_size;
/* Combobox in tool */
Gtk::ComboBox* _combobox;
Gtk::MenuItem* _menuitem;
std::vector<Gtk::RadioMenuItem*> _radiomenuitems;
/* Internal Callbacks */
void on_changed_combobox();
void on_toggled_radiomenu(int n);
ComboToolItem(Glib::ustring group_label,
Glib::ustring tooltip,
Glib::ustring stock_id,
Glib::RefPtr<Gtk::ListStore> store );
};
}
}
}
#endif /* SEEN_COMBO_TOOL_ITEM */
/*
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 :
|