-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathoption_selector_mvc_implicit_controller.rb
70 lines (58 loc) · 1.44 KB
/
option_selector_mvc_implicit_controller.rb
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
require 'glimmer-dsl-libui'
class OptionSelectorModel
attr_accessor :selected_options
def initialize
@selected_options = []
end
def toggle_option(option_number)
if @selected_options.include?(option_number)
@selected_options.delete(option_number)
else
@selected_options << option_number
end
end
def summary
if @selected_options.empty?
'None'
else
@selected_options.sort.map { |option_number| "Option #{option_number}" }.join(', ')
end
end
end
class OptionSelectorView
include Glimmer
def initialize
@option_selector_model = OptionSelectorModel.new
create_gui_body
register_observers
end
def create_gui_body
@window = window('Option Selector') {
content_size 50, 20
margined true
vertical_box {
@selected_options_label = label('None')
horizontal_box {
3.times.map do |n|
option_number = n + 1
checkbox("Option #{option_number}") {
on_toggled do
@option_selector_model.toggle_option(option_number)
end
}
end
}
}
}
end
def register_observers
observe(@option_selector_model, :selected_options) do
@selected_options_label.text = @option_selector_model.summary
end
end
def launch
@window.show
end
end
option_selector_view = OptionSelectorView.new
option_selector_view.launch