gtk3 3.0.9-x64-mingw32 → 3.1.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -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
|
@@ -9,67 +9,98 @@
|
|
9
9
|
when the searched operation is slow such as loads of entries
|
10
10
|
to search, or online searches.
|
11
11
|
=end
|
12
|
-
|
13
|
-
def
|
14
|
-
window = Gtk::Window.new(:toplevel)
|
15
|
-
window.title = "Delayed Search Entry"
|
16
|
-
window.transient_for = main_window
|
17
|
-
window.resizable = true
|
18
|
-
window.set_size_request(200, -1)
|
19
|
-
|
20
|
-
|
21
|
-
window.add(vbox)
|
22
|
-
vbox.border_width = 0
|
23
|
-
|
24
|
-
entry = Gtk::SearchEntry.new
|
25
|
-
container = Gtk::Box.new(:horizontal, 10)
|
26
|
-
container.halign = :center
|
27
|
-
container.pack_start(entry, :expand => false, :fill => false, :padding => 0)
|
12
|
+
class SearchEntry2Demo
|
13
|
+
def initialize(main_window)
|
14
|
+
@window = Gtk::Window.new(:toplevel)
|
15
|
+
@window.title = "Delayed Search Entry"
|
16
|
+
@window.transient_for = main_window
|
17
|
+
@window.resizable = true
|
18
|
+
@window.set_size_request(200, -1)
|
19
|
+
|
20
|
+
initialize_vbox
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
searchbar
|
32
|
-
|
33
|
-
vbox.pack_start(searchbar, :expand => false, :fill => false, :padding => 0)
|
22
|
+
@entry = Gtk::SearchEntry.new
|
23
|
+
initialize_search_bar
|
24
|
+
@vbox.pack_start(@searchbar,
|
25
|
+
:expand => false, :fill => false, :padding => 0)
|
34
26
|
|
35
27
|
# Hook the search bar to key presses
|
36
|
-
window.signal_connect("key-press-event") do |_widget, event|
|
37
|
-
searchbar.handle_event(event)
|
28
|
+
@window.signal_connect("key-press-event") do |_widget, event|
|
29
|
+
@searchbar.handle_event(event)
|
30
|
+
end
|
31
|
+
|
32
|
+
initialize_help_label
|
33
|
+
initialize_toggle_button
|
34
|
+
initialize_result_hbox
|
35
|
+
initialize_signal_hbox
|
36
|
+
end
|
37
|
+
|
38
|
+
def run
|
39
|
+
if !@window.visible?
|
40
|
+
@window.show_all
|
41
|
+
else
|
42
|
+
@window.destroy
|
38
43
|
end
|
44
|
+
@window
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
39
48
|
|
49
|
+
def initialize_search_bar
|
50
|
+
container = Gtk::Box.new(:horizontal, 10)
|
51
|
+
container.halign = :center
|
52
|
+
container.pack_start(@entry,
|
53
|
+
:expand => false, :fill => false, :padding => 0)
|
54
|
+
|
55
|
+
@searchbar = Gtk::SearchBar.new
|
56
|
+
@searchbar.connect_entry(@entry)
|
57
|
+
@searchbar.show_close_button = false
|
58
|
+
@searchbar.add(container)
|
59
|
+
end
|
60
|
+
|
61
|
+
def initialize_vbox
|
62
|
+
@vbox = Gtk::Box.new(:vertical, 0)
|
63
|
+
@window.add(@vbox)
|
64
|
+
@vbox.border_width = 0
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize_help_label
|
40
68
|
# Help
|
41
69
|
label = Gtk::Label.new("Start Typing to search")
|
42
|
-
vbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
70
|
+
@vbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
71
|
+
end
|
43
72
|
|
73
|
+
def initialize_toggle_button
|
44
74
|
# Toggle button
|
45
75
|
button = Gtk::ToggleButton.new(:label => "Search")
|
46
|
-
button.bind_property("active", searchbar, "search-mode-enabled",
|
47
|
-
|
76
|
+
button.bind_property("active", @searchbar, "search-mode-enabled",
|
77
|
+
:bidirectional)
|
78
|
+
@vbox.pack_start(button, :expand => true, :fill => true, :padding => 0)
|
79
|
+
end
|
48
80
|
|
49
|
-
|
81
|
+
def initialize_result_hbox
|
50
82
|
hbox = Gtk::Box.new(:horizontal, 10)
|
51
|
-
vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
83
|
+
@vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
52
84
|
hbox.border_width = 0
|
53
85
|
|
86
|
+
# Result
|
54
87
|
label = Gtk::Label.new("Result:")
|
55
88
|
label.xalign = 0.0
|
56
89
|
label.margin_start = 6
|
57
90
|
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
58
|
-
|
59
91
|
label = Gtk::Label.new("")
|
60
92
|
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
61
93
|
|
62
|
-
entry.signal_connect("search-changed") do |widget|
|
94
|
+
@entry.signal_connect("search-changed") do |widget|
|
63
95
|
puts "search changed: #{widget.text || ''}"
|
64
96
|
label.text = widget.text || ""
|
65
97
|
end
|
98
|
+
@entry.signal_connect("changed") { puts "changed: #{label.text || ''}" }
|
99
|
+
end
|
66
100
|
|
67
|
-
|
68
|
-
puts "changed: #{label.text || ''}"
|
69
|
-
end
|
70
|
-
|
101
|
+
def initialize_signal_hbox
|
71
102
|
hbox = Gtk::Box.new(:horizontal, 10)
|
72
|
-
vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
103
|
+
@vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
73
104
|
hbox.border_width = 0
|
74
105
|
|
75
106
|
label = Gtk::Label.new("Signal:")
|
@@ -80,28 +111,9 @@ module SearchEntry2Demo
|
|
80
111
|
label = Gtk::Label.new("")
|
81
112
|
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
82
113
|
|
83
|
-
entry.signal_connect("search-changed")
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
entry.signal_connect("next-match") do |_widget|
|
89
|
-
label.text = "next-match"
|
90
|
-
end
|
91
|
-
|
92
|
-
entry.signal_connect("previous-match") do |_widget|
|
93
|
-
label.text = "previous-match"
|
94
|
-
end
|
95
|
-
|
96
|
-
entry.signal_connect("stop-search") do |_widget|
|
97
|
-
label.text = "stop-search"
|
98
|
-
end
|
99
|
-
|
100
|
-
if !window.visible?
|
101
|
-
window.show_all
|
102
|
-
else
|
103
|
-
window.destroy
|
104
|
-
end
|
105
|
-
window
|
114
|
+
@entry.signal_connect("search-changed") { label.text = "search-changed" }
|
115
|
+
@entry.signal_connect("next-match") { label.text = "next-match" }
|
116
|
+
@entry.signal_connect("previous-match") { label.text = "previous-match" }
|
117
|
+
@entry.signal_connect("stop-search") { label.text = "stop-search" }
|
106
118
|
end
|
107
119
|
end
|
data/sample/gtk-demo/sidebar.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
|
@@ -9,24 +9,24 @@ navigation of a GtkStack object. This widget automatically updates it
|
|
9
9
|
content based on what is presently available in the GtkStack object,
|
10
10
|
and using the "title" child property to set the display labels.
|
11
11
|
=end
|
12
|
-
|
13
|
-
def
|
14
|
-
window = Gtk::Window.new(:toplevel)
|
15
|
-
window.
|
16
|
-
window.set_size_request(500, 350)
|
12
|
+
class SidebarDemo
|
13
|
+
def initialize(_main_window)
|
14
|
+
@window = Gtk::Window.new(:toplevel)
|
15
|
+
@window.resizable = true
|
16
|
+
@window.set_size_request(500, 350)
|
17
17
|
|
18
18
|
header = Gtk::HeaderBar.new
|
19
|
-
header.
|
20
|
-
window.
|
21
|
-
window.
|
19
|
+
header.show_close_button = true
|
20
|
+
@window.titlebar = header
|
21
|
+
@window.title = "Stack Sidebar"
|
22
22
|
|
23
23
|
box = Gtk::Box.new(:horizontal, 0)
|
24
24
|
sidebar = Gtk::StackSidebar.new
|
25
25
|
box.pack_start(sidebar, :expand => false, :fill => false, :padding => 0)
|
26
26
|
|
27
27
|
stack = Gtk::Stack.new
|
28
|
-
stack.
|
29
|
-
sidebar.
|
28
|
+
stack.transition_type = :slide_up_down
|
29
|
+
sidebar.stack = stack
|
30
30
|
|
31
31
|
widget = Gtk::Separator.new(:vertical)
|
32
32
|
box.pack_start(widget, :expand => false, :fill => false, :padding => 0)
|
@@ -41,14 +41,13 @@ module SidebarDemo
|
|
41
41
|
"Page 6",
|
42
42
|
"Page 7",
|
43
43
|
"Page 8",
|
44
|
-
"Page 9"
|
45
|
-
]
|
44
|
+
"Page 9"]
|
46
45
|
|
47
46
|
pages.each_with_index do |page_string, i|
|
48
47
|
child = nil
|
49
|
-
if i
|
48
|
+
if i.zero?
|
50
49
|
child = Gtk::Image.new(:icon_name => "help-about", :size => :menu)
|
51
|
-
child.
|
50
|
+
child.pixel_size = 256
|
52
51
|
else
|
53
52
|
child = Gtk::Label.new(page_string)
|
54
53
|
end
|
@@ -57,12 +56,14 @@ module SidebarDemo
|
|
57
56
|
stack.child_set_property(child, "title", page_string)
|
58
57
|
end
|
59
58
|
|
60
|
-
window.add(box)
|
59
|
+
@window.add(box)
|
60
|
+
end
|
61
61
|
|
62
|
-
|
63
|
-
|
62
|
+
def run
|
63
|
+
if !@window.visible?
|
64
|
+
@window.show_all
|
64
65
|
else
|
65
|
-
window.destroy
|
66
|
+
@window.destroy
|
66
67
|
end
|
67
68
|
end
|
68
69
|
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
|
@@ -16,53 +16,38 @@
|
|
16
16
|
and not more. For example, if you are packing your widgets
|
17
17
|
into a table, you would not include the GTK_FILL flag.
|
18
18
|
=end
|
19
|
-
|
20
|
-
def
|
19
|
+
class SizegroupDemo
|
20
|
+
def initialize(main_window)
|
21
21
|
color_options = %w(Red Green Blue)
|
22
22
|
dash_options = %w(Solid Dashed Dotted)
|
23
23
|
end_options = %w(Square Round Double Arrow)
|
24
24
|
|
25
|
-
window = Gtk::Window.new(:toplevel)
|
26
|
-
window.screen = main_window.screen
|
27
|
-
window.
|
28
|
-
window.
|
25
|
+
@window = Gtk::Window.new(:toplevel)
|
26
|
+
@window.screen = main_window.screen
|
27
|
+
@window.title = "Size Groups"
|
28
|
+
@window.resizable = false
|
29
29
|
|
30
|
-
vbox = Gtk::Box.new(:vertical, 5)
|
31
|
-
window.add(vbox)
|
32
|
-
vbox.
|
30
|
+
@vbox = Gtk::Box.new(:vertical, 5)
|
31
|
+
@window.add(@vbox)
|
32
|
+
@vbox.border_width = 5
|
33
33
|
|
34
34
|
size_group = Gtk::SizeGroup.new(:horizontal)
|
35
35
|
|
36
36
|
# Create one frame holding color options
|
37
|
-
|
38
|
-
vbox.pack_start(frame, :expand => true, :fill => true, :padding => 0)
|
39
|
-
|
40
|
-
table = Gtk::Grid.new
|
41
|
-
table.set_border_width(5)
|
42
|
-
table.set_row_spacing(5)
|
43
|
-
table.set_column_spacing(10)
|
44
|
-
frame.add(table)
|
45
|
-
|
37
|
+
table = initialize_frame("Color Options")
|
46
38
|
add_row(table, 0, size_group, "_Foreground", color_options)
|
47
39
|
add_row(table, 1, size_group, "_Background", color_options)
|
48
40
|
|
49
41
|
# And another frame holding line style options
|
50
|
-
|
51
|
-
vbox.pack_start(frame, :expand => false, :fill => false, :padding => 0)
|
52
|
-
|
53
|
-
table = Gtk::Grid.new
|
54
|
-
table.set_border_width(5)
|
55
|
-
table.set_row_spacing(5)
|
56
|
-
table.set_column_spacing(10)
|
57
|
-
frame.add(table)
|
58
|
-
|
42
|
+
table = initialize_frame("Line Options")
|
59
43
|
add_row(table, 0, size_group, "_Dashing", dash_options)
|
60
44
|
add_row(table, 1, size_group, "_Line ends", end_options)
|
61
45
|
|
62
46
|
# And a check button to turn grouping on and off
|
63
47
|
check_button = Gtk::CheckButton.new("_Enable grouping")
|
64
48
|
check_button.set_use_underline(true)
|
65
|
-
vbox.pack_start(check_button,
|
49
|
+
@vbox.pack_start(check_button,
|
50
|
+
:expand => false, :fill => false, :padding => 0)
|
66
51
|
|
67
52
|
check_button.signal_connect("toggled") do |widget|
|
68
53
|
if widget.active?
|
@@ -71,16 +56,32 @@ module SizegroupDemo
|
|
71
56
|
size_group.set_mode(:none)
|
72
57
|
end
|
73
58
|
end
|
59
|
+
end
|
74
60
|
|
75
|
-
|
76
|
-
|
61
|
+
def run
|
62
|
+
if !@window.visible?
|
63
|
+
@window.show_all
|
77
64
|
else
|
78
|
-
window.destroy
|
65
|
+
@window.destroy
|
79
66
|
end
|
80
|
-
window
|
67
|
+
@window
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def initialize_frame(title)
|
73
|
+
frame = Gtk::Frame.new(title)
|
74
|
+
@vbox.pack_start(frame, :expand => false, :fill => false, :padding => 0)
|
75
|
+
|
76
|
+
table = Gtk::Grid.new
|
77
|
+
table.set_border_width(5)
|
78
|
+
table.set_row_spacing(5)
|
79
|
+
table.set_column_spacing(10)
|
80
|
+
frame.add(table)
|
81
|
+
table
|
81
82
|
end
|
82
83
|
|
83
|
-
def
|
84
|
+
def add_row(table, row, size_group, label_text, options)
|
84
85
|
label = Gtk::Label.new(label_text, :use_underline => true)
|
85
86
|
label.set_halign(:start)
|
86
87
|
label.set_valign(:baseline)
|
@@ -95,7 +96,7 @@ module SizegroupDemo
|
|
95
96
|
table.attach(combo_box, 1, row, 1, 1)
|
96
97
|
end
|
97
98
|
|
98
|
-
def
|
99
|
+
def create_combo_box(options)
|
99
100
|
combo_box = Gtk::ComboBoxText.new
|
100
101
|
options.each do |o|
|
101
102
|
combo_box.append_text(o)
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# Copyright (c) 2016 Ruby-GNOME2 Project Team
|
2
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
4
|
+
=begin
|
5
|
+
= Spin Button
|
6
|
+
|
7
|
+
GtkSpinButton provides convenient ways to input data
|
8
|
+
that can be seen as a value in a range. The examples
|
9
|
+
here show that this does not necessarily mean numeric
|
10
|
+
values, and it can include custom formatting.
|
11
|
+
=end
|
12
|
+
require "date"
|
13
|
+
|
14
|
+
class SpinbuttonDemo
|
15
|
+
def initialize(main_window)
|
16
|
+
builder = Gtk::Builder.new(:resource => "/spinbutton/spinbutton.ui")
|
17
|
+
builder.connect_signals do |name|
|
18
|
+
case name
|
19
|
+
when "hex_spin_input"
|
20
|
+
proc do |button|
|
21
|
+
hex_spin_input(button)
|
22
|
+
end
|
23
|
+
when "hex_spin_output"
|
24
|
+
proc do |button|
|
25
|
+
hex_spin_output(button)
|
26
|
+
end
|
27
|
+
when "time_spin_input"
|
28
|
+
proc do |button|
|
29
|
+
time_spin_input(button)
|
30
|
+
end
|
31
|
+
when "time_spin_output"
|
32
|
+
proc do |button|
|
33
|
+
time_spin_output(button)
|
34
|
+
end
|
35
|
+
when "month_spin_input"
|
36
|
+
proc do |button|
|
37
|
+
month_spin_input(button)
|
38
|
+
end
|
39
|
+
when "month_spin_output"
|
40
|
+
proc do |button|
|
41
|
+
month_spin_output(button)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
end
|
45
|
+
end
|
46
|
+
@window = builder["window"]
|
47
|
+
@window.screen = main_window.screen
|
48
|
+
@window.title = "Spin Buttons"
|
49
|
+
@window.resizable = false
|
50
|
+
|
51
|
+
value_to_label = proc do |value|
|
52
|
+
value.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
adj = builder["basic_adjustment"]
|
56
|
+
basic_label = builder["basic_label"]
|
57
|
+
adj.bind_property("value", basic_label, "label", :sync_create,
|
58
|
+
:transform_to => value_to_label)
|
59
|
+
|
60
|
+
hex_adj = builder["hex_adjustment"]
|
61
|
+
hex_label = builder["hex_label"]
|
62
|
+
hex_adj.bind_property("value", hex_label, "label", :sync_create,
|
63
|
+
:transform_to => value_to_label)
|
64
|
+
|
65
|
+
adj = builder["time_adjustment"]
|
66
|
+
time_label = builder["time_label"]
|
67
|
+
adj.bind_property("value", time_label, "label", :sync_create,
|
68
|
+
:transform_to => value_to_label)
|
69
|
+
|
70
|
+
adj = builder["month_adjustment"]
|
71
|
+
month_label = builder["month_label"]
|
72
|
+
adj.bind_property("value", month_label, "label", :sync_create,
|
73
|
+
:transform_to => value_to_label)
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
def run
|
78
|
+
if !@window.visible?
|
79
|
+
@window.show_all
|
80
|
+
else
|
81
|
+
@window.destroy
|
82
|
+
end
|
83
|
+
@window
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def hex_spin_input(button)
|
89
|
+
value = button.text.to_i(16)
|
90
|
+
value = 0 if value < 1e-5
|
91
|
+
value
|
92
|
+
end
|
93
|
+
|
94
|
+
def hex_spin_output(button)
|
95
|
+
value = button.value
|
96
|
+
button.text = sprintf("0x%.2X", value)
|
97
|
+
button.text = "0x00" if value.abs < 1e-5
|
98
|
+
true
|
99
|
+
end
|
100
|
+
|
101
|
+
def time_spin_input(button)
|
102
|
+
str = button.text.split(":")
|
103
|
+
hours = str[0].to_i
|
104
|
+
minutes = str[1].to_i
|
105
|
+
value = 0
|
106
|
+
if (0..24).include?(hours) && (0..60).include?(minutes)
|
107
|
+
value = hours * 60 + minutes
|
108
|
+
end
|
109
|
+
value
|
110
|
+
end
|
111
|
+
|
112
|
+
def time_spin_output(button)
|
113
|
+
hours = button.value / 60.0
|
114
|
+
minutes = (hours - hours.floor) * 60.0
|
115
|
+
button.text = sprintf("%02.0f:%02.0f", hours.floor, (minutes + 0.5).floor)
|
116
|
+
true
|
117
|
+
end
|
118
|
+
|
119
|
+
def month_spin_input(button)
|
120
|
+
Date::MONTHNAMES.index(button.text) || 1
|
121
|
+
end
|
122
|
+
|
123
|
+
def month_spin_output(button)
|
124
|
+
value = button.adjustment.value || 1
|
125
|
+
button.text = Date::MONTHNAMES[value]
|
126
|
+
true
|
127
|
+
end
|
128
|
+
end
|