gtk3 3.0.9-x64-mingw32 → 3.1.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/gtk3/rb-gtk3-private.h +1 -0
- data/ext/gtk3/rb-gtk3-spin-button.c +85 -0
- data/ext/gtk3/rb-gtk3.c +3 -0
- data/lib/2.2/gtk3.so +0 -0
- data/lib/2.3/gtk3.so +0 -0
- data/lib/gtk3/deprecated.rb +0 -8
- data/lib/gtk3/loader.rb +1 -7
- data/lib/gtk3/tree-model.rb +2 -0
- data/sample/gtk-demo/TODO +10 -10
- data/sample/gtk-demo/assistant.rb +44 -39
- data/sample/gtk-demo/builder.rb +71 -50
- data/sample/gtk-demo/button_box.rb +39 -28
- data/sample/gtk-demo/clipboard.rb +139 -46
- data/sample/gtk-demo/colorsel.rb +50 -36
- data/sample/gtk-demo/css_accordion.rb +18 -17
- data/sample/gtk-demo/css_basics.rb +60 -47
- data/sample/gtk-demo/css_multiplebgs.rb +92 -71
- data/sample/gtk-demo/css_pixbufs.rb +61 -48
- data/sample/gtk-demo/css_shadows.rb +63 -50
- data/sample/gtk-demo/cursors.rb +95 -64
- data/sample/gtk-demo/dialog.rb +95 -78
- data/sample/gtk-demo/drawingarea.rb +138 -171
- data/sample/gtk-demo/editable_cells.rb +169 -130
- data/sample/gtk-demo/entry_buffer.rb +15 -13
- data/sample/gtk-demo/entry_completion.rb +22 -17
- data/sample/gtk-demo/expander.rb +39 -31
- data/sample/gtk-demo/filtermodel.rb +67 -63
- data/sample/gtk-demo/font_features.rb +91 -60
- data/sample/gtk-demo/glarea.rb +277 -0
- data/sample/gtk-demo/headerbar.rb +17 -15
- data/sample/gtk-demo/hypertext.rb +146 -167
- data/sample/gtk-demo/iconview.rb +132 -91
- data/sample/gtk-demo/iconview_edit.rb +49 -38
- data/sample/gtk-demo/infobar.rb +81 -62
- data/sample/gtk-demo/links.rb +35 -30
- data/sample/gtk-demo/list_store.rb +169 -114
- data/sample/gtk-demo/listbox.rb +183 -0
- data/sample/gtk-demo/main.rb +32 -21
- data/sample/gtk-demo/markup.rb +65 -52
- data/sample/gtk-demo/menus.rb +57 -58
- data/sample/gtk-demo/modelbutton.rb +11 -9
- data/sample/gtk-demo/modelbutton.ui +3 -0
- data/sample/gtk-demo/overlay.rb +39 -32
- data/sample/gtk-demo/overlay2.rb +68 -54
- data/sample/gtk-demo/panes.rb +56 -68
- data/sample/gtk-demo/pickers.rb +46 -45
- data/sample/gtk-demo/pixbufs.rb +27 -25
- data/sample/gtk-demo/popover.rb +70 -63
- data/sample/gtk-demo/printing.rb +94 -69
- data/sample/gtk-demo/revealer.rb +46 -38
- data/sample/gtk-demo/rotated_text.rb +75 -54
- data/sample/gtk-demo/scale.rb +10 -8
- data/sample/gtk-demo/search_entry.rb +195 -0
- data/sample/gtk-demo/search_entry2.rb +71 -59
- data/sample/gtk-demo/sidebar.rb +20 -19
- data/sample/gtk-demo/sizegroup.rb +36 -35
- data/sample/gtk-demo/spinbutton.rb +128 -0
- data/sample/gtk-demo/spinner.rb +55 -40
- data/sample/gtk-demo/stack.rb +11 -8
- data/sample/gtk-demo/textmask.rb +14 -13
- data/sample/gtk-demo/textscroll.rb +16 -12
- data/sample/gtk-demo/theming_style_classes.rb +14 -12
- data/sample/gtk-demo/transparent.rb +17 -13
- data/sample/misc/treemodelfilter.rb +1 -1
- metadata +24 -19
data/sample/gtk-demo/iconview.rb
CHANGED
@@ -1,110 +1,151 @@
|
|
1
|
-
# Copyright (c)
|
1
|
+
# Copyright (c) 2016 Ruby-GNOME2 Project Team
|
2
2
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
3
|
#
|
4
|
-
# $Id: iconview.rb,v 1.7 2007/08/05 15:41:31 mutoh Exp $
|
5
4
|
=begin
|
6
|
-
= Icon View
|
5
|
+
= Icon View/Icon View Basics
|
7
6
|
|
8
|
-
The
|
9
|
-
It uses a
|
10
|
-
might be helpful.
|
7
|
+
The GtkIconView widget is used to display and manipulate icons.
|
8
|
+
It uses a GtkTreeModel for data storage, so the list store
|
9
|
+
example might be helpful.
|
11
10
|
=end
|
11
|
+
class IconviewDemo
|
12
|
+
COL_PATH, COL_DISPLAY_NAME, COL_PIXBUF, COL_IS_DIRECTORY = (0..3).to_a
|
13
|
+
FOLDER_NAME = "/iconview/gnome-fs-directory.png".freeze
|
14
|
+
FILE_NAME = "/iconview/gnome-fs-regular.png".freeze
|
15
|
+
|
16
|
+
def initialize(main_window)
|
17
|
+
@window = Gtk::Window.new(:toplevel)
|
18
|
+
@window.screen = main_window.screen
|
19
|
+
@window.title = "Icon View Basics"
|
20
|
+
@window.set_default_size(650, 400)
|
21
|
+
load_pixbufs
|
22
|
+
|
23
|
+
vbox = Gtk::Box.new(:vertical, 0)
|
24
|
+
@window.add(vbox)
|
25
|
+
|
26
|
+
tool_bar = Gtk::Toolbar.new
|
27
|
+
vbox.pack_start(tool_bar, :expand => false, :fill => false, :padding => 0)
|
28
|
+
|
29
|
+
up_button = Gtk::ToolButton.new
|
30
|
+
up_button.label = "_Up"
|
31
|
+
up_button.use_underline = true
|
32
|
+
up_button.icon_name = "go-up"
|
33
|
+
up_button.is_important = true
|
34
|
+
up_button.sensitive = false
|
35
|
+
tool_bar.insert(up_button, -1)
|
36
|
+
|
37
|
+
home_button = Gtk::ToolButton.new
|
38
|
+
home_button.label = "_Home"
|
39
|
+
home_button.use_underline = true
|
40
|
+
home_button.icon_name = "go-home"
|
41
|
+
home_button.is_important = true
|
42
|
+
tool_bar.insert(home_button, -1)
|
43
|
+
|
44
|
+
sw = Gtk::ScrolledWindow.new
|
45
|
+
sw.shadow_type = :etched_in
|
46
|
+
sw.set_policy(:automatic, :automatic)
|
47
|
+
vbox.pack_start(sw, :expand => true, :fill => true, :padding => 0)
|
48
|
+
|
49
|
+
# Create the store and fill it with the contents of '/'
|
50
|
+
@parent = "/"
|
51
|
+
create_store
|
52
|
+
fill_store
|
53
|
+
|
54
|
+
icon_view = Gtk::IconView.new(:model => @store)
|
55
|
+
icon_view.selection_mode = :multiple
|
56
|
+
|
57
|
+
# Connect to the "clicked" signal of the "Up" tool button
|
58
|
+
up_button.signal_connect "clicked" do
|
59
|
+
@parent = File.dirname(@parent)
|
60
|
+
fill_store
|
12
61
|
|
62
|
+
# Maybe de-sensitive the up button
|
63
|
+
up_button.sensitive = @parent == "/"
|
64
|
+
end
|
13
65
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
def fill_store
|
21
|
-
@store.clear
|
22
|
-
Dir.glob(File.join(@parent, "*")).each do |path|
|
23
|
-
is_dir = FileTest.directory?(path)
|
24
|
-
iter = @store.append
|
25
|
-
# set COL_DISPLAY_NAME first because changing an iter will trigger the
|
26
|
-
# sort function; if we set something else first, the value of
|
27
|
-
# COL_DISPLAY_NAME for this row will be "nil" and the sort function will fail
|
28
|
-
#puts path
|
29
|
-
#puts GLib.convert(GLib.filename_to_utf8(path), "Shift_JIS", "UTF-8")
|
30
|
-
#puts File.basename(GLib.convert(GLib.filename_to_utf8(path), "Shift_JIS", "UTF-8"))
|
31
|
-
# iter[COL_DISPLAY_NAME] = File.basename(GLib.filename_to_utf8(path))
|
32
|
-
iter[COL_DISPLAY_NAME] = GLib.filename_to_utf8(path)
|
33
|
-
iter[COL_PATH] = path
|
34
|
-
iter[COL_IS_DIR] = is_dir
|
35
|
-
iter[COL_PIXBUF] = is_dir ? @folder_pixbuf : @file_pixbuf
|
36
|
-
end
|
66
|
+
# Connect to the "clicked" signal of the "Home" too button
|
67
|
+
home_button.signal_connect "clicked" do
|
68
|
+
@parent = ENV["HOME"]
|
69
|
+
fill_store
|
70
|
+
up_button.sensitive = true
|
37
71
|
end
|
38
72
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
a[COL_DISPLAY_NAME] <=> b[COL_DISPLAY_NAME]
|
54
|
-
end
|
73
|
+
# We now set which model columns that correspond to the text
|
74
|
+
# and pixbbuf of each of item
|
75
|
+
icon_view.text_column = COL_DISPLAY_NAME
|
76
|
+
icon_view.pixbuf_column = COL_PIXBUF
|
77
|
+
|
78
|
+
# Connec the "item-activated" signal
|
79
|
+
icon_view.signal_connect "item-activated" do |_widget, tree_path|
|
80
|
+
iter = @store.get_iter(tree_path)
|
81
|
+
path = iter[COL_PATH]
|
82
|
+
directory = iter[COL_IS_DIRECTORY]
|
83
|
+
if directory
|
84
|
+
@parent = path
|
85
|
+
fill_store
|
86
|
+
up_button.sensitive = true
|
55
87
|
end
|
56
|
-
|
57
|
-
|
88
|
+
end
|
89
|
+
sw.add(icon_view)
|
90
|
+
icon_view.grab_focus
|
91
|
+
end
|
58
92
|
|
59
|
-
|
60
|
-
|
61
|
-
|
93
|
+
def run
|
94
|
+
if !@window.visible?
|
95
|
+
@window.show_all
|
96
|
+
else
|
97
|
+
@window.destroy
|
98
|
+
end
|
99
|
+
@window
|
100
|
+
end
|
62
101
|
|
63
|
-
|
64
|
-
add(vbox)
|
102
|
+
private
|
65
103
|
|
66
|
-
|
67
|
-
|
104
|
+
def load_pixbufs
|
105
|
+
# Loads the images for the demo and returns whether the operation succeeded
|
106
|
+
return if @file_pixbuf
|
68
107
|
|
69
|
-
|
70
|
-
|
71
|
-
up_button.sensitive = false
|
72
|
-
toolbar.insert(up_button, -1)
|
73
|
-
up_button.signal_connect("clicked") do
|
74
|
-
@parent = File.dirname(@parent)
|
75
|
-
fill_store
|
76
|
-
up_button.sensitive = @parent != "/"
|
77
|
-
end
|
108
|
+
@file_pixbuf = GdkPixbuf::Pixbuf.new(:resource => FILE_NAME)
|
109
|
+
return false unless @file_pixbuf
|
78
110
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
home_button.signal_connect("clicked") do
|
83
|
-
@parent = GLib.home_dir
|
84
|
-
fill_store
|
85
|
-
up_button.sensitive = true
|
86
|
-
end
|
111
|
+
@folder_pixbuf = GdkPixbuf::Pixbuf.new(:resource => FOLDER_NAME)
|
112
|
+
return false unless @folder_pixbuf
|
113
|
+
end
|
87
114
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
iconview.selection_mode = :multiple
|
95
|
-
iconview.text_column = COL_DISPLAY_NAME
|
96
|
-
iconview.pixbuf_column = COL_PIXBUF
|
97
|
-
iconview.signal_connect("item_activated") do |iview, path|
|
98
|
-
iter = @store.get_iter(path)
|
99
|
-
if iter[COL_DISPLAY_NAME]
|
100
|
-
@parent = iter[COL_PATH]
|
101
|
-
fill_store
|
102
|
-
up_button.sensitive = true
|
103
|
-
end
|
104
|
-
end
|
105
|
-
sw.add(iconview)
|
106
|
-
iconview.grab_focus
|
115
|
+
def create_store
|
116
|
+
@store = Gtk::ListStore.new(String, String, GdkPixbuf::Pixbuf, TrueClass)
|
117
|
+
|
118
|
+
# Set sort column and function
|
119
|
+
@store.set_default_sort_func do |_model, a, b|
|
120
|
+
sort_function(a, b)
|
107
121
|
end
|
122
|
+
@store.set_sort_column_id(Gtk::TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
|
123
|
+
:ascending)
|
108
124
|
end
|
109
|
-
end
|
110
125
|
|
126
|
+
def fill_store
|
127
|
+
@store.clear
|
128
|
+
Dir.glob(File.join(@parent, "*")).each do |path|
|
129
|
+
is_dir = FileTest.directory?(path)
|
130
|
+
iter = @store.append
|
131
|
+
iter[COL_DISPLAY_NAME] = File.basename(path) || "-"
|
132
|
+
iter[COL_PATH] = path
|
133
|
+
iter[COL_PIXBUF] = is_dir ? @folder_pixbuf : @file_pixbuf
|
134
|
+
iter[COL_IS_DIRECTORY] = is_dir
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def sort_function(a, b)
|
139
|
+
if !a[COL_IS_DIRECTORY] and b[COL_IS_DIRECTORY]
|
140
|
+
1
|
141
|
+
elsif a[COL_IS_DIRECTORY] and !b[COL_IS_DIRECTORY]
|
142
|
+
-1
|
143
|
+
elsif !a[COL_DISPLAY_NAME] and b[COL_DISPLAY_NAME]
|
144
|
+
1
|
145
|
+
elsif a[COL_DISPLAY_NAME] and !b[COL_DISPLAY_NAME]
|
146
|
+
-1
|
147
|
+
else
|
148
|
+
a[COL_DISPLAY_NAME] <=> b[COL_DISPLAY_NAME]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2015 Ruby-GNOME2 Project Team
|
1
|
+
# Copyright (c) 2015-2016 Ruby-GNOME2 Project Team
|
2
2
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
3
|
#
|
4
4
|
=begin
|
@@ -8,27 +8,53 @@
|
|
8
8
|
This example also demonstrates using the generic GtkCellLayout
|
9
9
|
interface to set up cell renderers in an icon view.
|
10
10
|
=end
|
11
|
-
|
11
|
+
class IconviewEditDemo
|
12
12
|
COL_TEXT = 0
|
13
13
|
NUM_COLS = 1
|
14
|
-
def
|
15
|
-
window = Gtk::Window.new(:toplevel)
|
16
|
-
window.screen = main_window.screen
|
17
|
-
window.
|
14
|
+
def initialize(main_window)
|
15
|
+
@window = Gtk::Window.new(:toplevel)
|
16
|
+
@window.screen = main_window.screen
|
17
|
+
@window.title = "Editing and Drag-and-drop"
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
initialize_store
|
20
|
+
initialize_icon_view
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
icon_view.set_item_orientation(:horizontal)
|
25
|
-
icon_view.set_columns(2)
|
26
|
-
icon_view.set_reorderable(true)
|
22
|
+
icon_view_add_renderer_pixbuf
|
23
|
+
icon_view_add_renderer_text
|
27
24
|
|
25
|
+
@window.add(@icon_view)
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
if !@window.visible?
|
30
|
+
@window.show_all
|
31
|
+
else
|
32
|
+
@window.destroy
|
33
|
+
end
|
34
|
+
@window
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize_store
|
38
|
+
@store = Gtk::ListStore.new(String)
|
39
|
+
|
40
|
+
%w(Red Green Blue Yellow).each do |color|
|
41
|
+
@store.append.set_values([color])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def initialize_icon_view
|
46
|
+
@icon_view = Gtk::IconView.new(:model => @store)
|
47
|
+
@icon_view.selection_mode = :single
|
48
|
+
@icon_view.item_orientation = :horizontal
|
49
|
+
@icon_view.columns = 2
|
50
|
+
@icon_view.reorderable = true
|
51
|
+
end
|
52
|
+
|
53
|
+
def icon_view_add_renderer_pixbuf
|
28
54
|
renderer = Gtk::CellRendererPixbuf.new
|
29
|
-
icon_view.pack_start(renderer, true)
|
55
|
+
@icon_view.pack_start(renderer, true)
|
30
56
|
|
31
|
-
icon_view.set_cell_data_func(renderer) do |_layout, cell_renderer, model, iter|
|
57
|
+
@icon_view.set_cell_data_func(renderer) do |_layout, cell_renderer, model, iter|
|
32
58
|
text = model.get_value(iter, COL_TEXT)
|
33
59
|
if text
|
34
60
|
color = Gdk::RGBA.parse(text)
|
@@ -39,41 +65,26 @@ module IconviewEditDemo
|
|
39
65
|
(color.blue * 255).to_i << 8 |
|
40
66
|
(color.alpha * 255).to_i
|
41
67
|
end
|
42
|
-
pixbuf =
|
68
|
+
pixbuf = GdkPixbuf::Pixbuf.new(:colorspace => :rgb, :has_alpha => true,
|
69
|
+
:bits_per_sample => 8,
|
70
|
+
:width => 24, :height => 24)
|
43
71
|
pixbuf.fill!(pixel) if pixel
|
44
72
|
cell_renderer.set_property("pixbuf", pixbuf)
|
45
73
|
end
|
46
74
|
end
|
75
|
+
end
|
47
76
|
|
77
|
+
def icon_view_add_renderer_text
|
48
78
|
renderer = Gtk::CellRendererText.new
|
49
|
-
icon_view.pack_start(renderer, true)
|
79
|
+
@icon_view.pack_start(renderer, true)
|
50
80
|
renderer.set_property("editable", true)
|
51
81
|
renderer.signal_connect("edited") do |_cell, path_string, text|
|
52
|
-
model = icon_view.model
|
82
|
+
model = @icon_view.model
|
53
83
|
path = Gtk::TreePath.new(path_string)
|
54
84
|
iter = model.get_iter(path)
|
55
85
|
iter[COL_TEXT] = text
|
56
86
|
end
|
57
87
|
|
58
|
-
icon_view.set_attributes(renderer, "text" => COL_TEXT)
|
59
|
-
window.add(icon_view)
|
60
|
-
|
61
|
-
if !window.visible?
|
62
|
-
window.show_all
|
63
|
-
else
|
64
|
-
window.destroy
|
65
|
-
end
|
66
|
-
window
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.create_store
|
70
|
-
store = Gtk::ListStore.new(String)
|
71
|
-
store
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.fill_store(store)
|
75
|
-
%w(Red Green Blue Yellow).each do |color|
|
76
|
-
store.append.set_values([color])
|
77
|
-
end
|
88
|
+
@icon_view.set_attributes(renderer, "text" => COL_TEXT)
|
78
89
|
end
|
79
90
|
end
|
data/sample/gtk-demo/infobar.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2015 Ruby-GNOME2 Project Team
|
1
|
+
# Copyright (c) 2015-2016 Ruby-GNOME2 Project Team
|
2
2
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
3
|
#
|
4
4
|
=begin
|
@@ -6,89 +6,108 @@
|
|
6
6
|
|
7
7
|
Info bar widgets are used to report important messages to the user.
|
8
8
|
=end
|
9
|
-
|
10
|
-
def
|
11
|
-
actions = Gtk::Box.new(:horizontal, 0)
|
9
|
+
class InfobarDemo
|
10
|
+
def initialize(main_window)
|
11
|
+
@actions = Gtk::Box.new(:horizontal, 0)
|
12
12
|
|
13
|
-
window = Gtk::Window.new(:toplevel)
|
14
|
-
window.screen = main_window.screen
|
15
|
-
window.set_title("Info Bars")
|
16
|
-
window.set_border_width(8)
|
13
|
+
@window = Gtk::Window.new(:toplevel)
|
14
|
+
@window.screen = main_window.screen
|
15
|
+
@window.set_title("Info Bars")
|
16
|
+
@window.set_border_width(8)
|
17
17
|
|
18
|
-
vbox = Gtk::Box.new(:vertical, 0)
|
19
|
-
window.add(vbox)
|
18
|
+
@vbox = Gtk::Box.new(:vertical, 0)
|
19
|
+
@window.add(@vbox)
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
generate_simple_infobar("info")
|
22
|
+
generate_simple_infobar("warning")
|
23
23
|
|
24
|
-
|
25
|
-
bar.add_button("_OK", Gtk::ResponseType::OK)
|
26
|
-
bar.set_show_close_button(true)
|
27
|
-
bar.signal_connect "response" do |info_bar, response_id|
|
28
|
-
info_bar.hide if response_id == Gtk::ResponseType::CLOSE
|
29
|
-
dialog = Gtk::MessageDialog.new(:parent => info_bar.toplevel,
|
30
|
-
:flags => [:modal, :destroy_with_parent],
|
31
|
-
:type => :info,
|
32
|
-
:buttons => :ok,
|
33
|
-
:message => "You clicked a button on an info bar")
|
34
|
-
dialog.secondary_text = "Your response has id #{response_id}"
|
35
|
-
dialog.signal_connect("response") { |widget| widget.destroy }
|
36
|
-
dialog.show_all
|
37
|
-
end
|
24
|
+
generate_infobar_with_dialog
|
38
25
|
|
39
|
-
|
40
|
-
|
41
|
-
:fill => false,
|
42
|
-
:padding => 0)
|
43
|
-
|
44
|
-
bar.set_message_type(:question)
|
45
|
-
label = Gtk::Label.new("This is an info bar with message type Gtk::MessageType::QUESTION")
|
46
|
-
label.set_line_wrap(true)
|
47
|
-
label.set_xalign(0)
|
48
|
-
|
49
|
-
bar.content_area.pack_start(label, :expand => false, :fill => false, :padding => 0)
|
50
|
-
|
51
|
-
button = Gtk::ToggleButton.new(:label => "Question")
|
52
|
-
button.bind_property("active", bar, "visible", :bidirectional)
|
53
|
-
actions.add(button)
|
54
|
-
button.set_active(false)
|
55
|
-
|
56
|
-
generate_simple_infobar_and_button("error", vbox, actions)
|
57
|
-
generate_simple_infobar_and_button("other", vbox, actions)
|
26
|
+
generate_simple_infobar("error")
|
27
|
+
generate_simple_infobar("other")
|
58
28
|
|
59
29
|
frame = Gtk::Frame.new("Info bars")
|
60
|
-
vbox.pack_start(frame, :expand => false, :fill => false, :padding => 8)
|
30
|
+
@vbox.pack_start(frame, :expand => false, :fill => false, :padding => 8)
|
61
31
|
|
62
32
|
vbox2 = Gtk::Box.new(:vertical, 8)
|
63
|
-
vbox2.
|
33
|
+
vbox2.border_width = 8
|
64
34
|
frame.add(vbox2)
|
65
35
|
|
66
36
|
label = Gtk::Label.new("An example of different info bars")
|
67
37
|
vbox2.pack_start(label, :expand => false, :fill => false, :padding => 0)
|
68
|
-
actions.show_all
|
69
|
-
vbox2.pack_start(actions, :expand => false, :fill => false, :padding => 0)
|
38
|
+
@actions.show_all
|
39
|
+
vbox2.pack_start(@actions, :expand => false, :fill => false, :padding => 0)
|
40
|
+
end
|
70
41
|
|
71
|
-
|
72
|
-
|
42
|
+
def run
|
43
|
+
if !@window.visible?
|
44
|
+
@window.show_all
|
73
45
|
else
|
74
|
-
window.destroy
|
46
|
+
@window.destroy
|
75
47
|
end
|
76
|
-
window
|
48
|
+
@window
|
77
49
|
end
|
78
50
|
|
79
|
-
|
80
|
-
bar = Gtk::InfoBar.new
|
81
|
-
bar_parent.pack_start(bar, :expand => false, :fill => false, :padding => 0)
|
82
|
-
bar.set_message_type(message_type.to_sym)
|
51
|
+
private
|
83
52
|
|
84
|
-
|
85
|
-
label.
|
86
|
-
label.
|
53
|
+
def generate_infobar_label(message)
|
54
|
+
label = Gtk::Label.new(message)
|
55
|
+
label.line_wrap = true
|
56
|
+
label.xalign = 0
|
57
|
+
label
|
58
|
+
end
|
87
59
|
|
60
|
+
def add_a_label_message_in_an_infobar(bar, message)
|
61
|
+
label = generate_infobar_label(message)
|
88
62
|
bar.content_area.pack_start(label, :expand => false, :fill => false, :padding => 0)
|
63
|
+
end
|
64
|
+
|
65
|
+
def generate_simple_infobar(message_type)
|
66
|
+
bar = Gtk::InfoBar.new
|
67
|
+
@vbox.pack_start(bar, :expand => false, :fill => false, :padding => 0)
|
68
|
+
bar.message_type = message_type.to_sym
|
89
69
|
|
90
|
-
|
70
|
+
message = "This is an info bar with message type Gtk::MessageType::#{message_type.upcase}"
|
71
|
+
add_a_label_message_in_an_infobar(bar, message)
|
72
|
+
|
73
|
+
link_bar_to_a_toggle_button(bar, message_type.capitalize)
|
74
|
+
end
|
75
|
+
|
76
|
+
def link_bar_to_a_toggle_button(bar, message)
|
77
|
+
button = Gtk::ToggleButton.new(:label => message)
|
91
78
|
button.bind_property("active", bar, "visible", :bidirectional)
|
92
|
-
|
79
|
+
@actions.add(button)
|
80
|
+
button
|
81
|
+
end
|
82
|
+
|
83
|
+
def generate_infobar_with_dialog
|
84
|
+
bar = Gtk::InfoBar.new
|
85
|
+
bar.add_button("_OK", Gtk::ResponseType::OK)
|
86
|
+
bar.show_close_button = true
|
87
|
+
|
88
|
+
manage_response_event_of_infobar(bar)
|
89
|
+
|
90
|
+
@vbox.pack_start(bar, :expand => false, :fill => false, :padding => 0)
|
91
|
+
|
92
|
+
bar.message_type = :question
|
93
|
+
message = "This is an info bar with message type Gtk::MessageType::QUESTION"
|
94
|
+
add_a_label_message_in_an_infobar(bar, message)
|
95
|
+
|
96
|
+
button = link_bar_to_a_toggle_button(bar, "Question")
|
97
|
+
button.active = false
|
98
|
+
end
|
99
|
+
|
100
|
+
def manage_response_event_of_infobar(bar)
|
101
|
+
bar.signal_connect "response" do |info_bar, response_id|
|
102
|
+
info_bar.hide if response_id == Gtk::ResponseType::CLOSE
|
103
|
+
dialog = Gtk::MessageDialog.new(:parent => info_bar.toplevel,
|
104
|
+
:flags => [:modal, :destroy_with_parent],
|
105
|
+
:type => :info,
|
106
|
+
:buttons => :ok,
|
107
|
+
:message => "You clicked a button on an info bar")
|
108
|
+
dialog.secondary_text = "Your response has id #{response_id}"
|
109
|
+
dialog.signal_connect("response", &:destroy)
|
110
|
+
dialog.show_all
|
111
|
+
end
|
93
112
|
end
|
94
113
|
end
|