/
object_api_tree.rb
167 lines (127 loc) · 2.62 KB
/
object_api_tree.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
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# Simple example to demonstrate object API for CWM
require_relative "example_helper"
require "cwm/widget"
require "cwm/tree_pager"
Yast.import "CWM"
Yast.import "Popup"
Yast.import "Wizard"
class LuckyNumberWidget < ::CWM::IntField
attr_reader :result, :minimum, :maximum
def initialize
@minimum = 0
@maximum = 1000
end
def label
_("Lucky number")
end
def init
self.value = @result if @result
end
def store
@result = value
end
end
class GenerateButton < ::CWM::PushButton
def initialize(lucky_number_widget)
@lucky_number_widget = lucky_number_widget
end
def label
_("Generate Lucky Number")
end
def handle
@lucky_number_widget.value = rand(1000)
nil
end
end
class LuckyNumberTab < ::CWM::Tab
def initialize
self.initial = true
end
def contents
HBox(
button_widget,
lucky_number_widget
)
end
def result
lucky_number_widget.result
end
def label
_("Lucky Number")
end
private
def button_widget
@button_widget ||= GenerateButton.new(lucky_number_widget)
end
def lucky_number_widget
@lucky_number_widget ||= LuckyNumberWidget.new
end
end
class TrueLoveSelector < ::CWM::RadioButtons
def initialize
@chosen = nil
end
def label
_("Select true love")
end
def items
[
[:human, "Human"],
[:pc, "PC"]
]
end
def init
self.value = @chosen if @chosen
end
def validate
if value == :pc
Yast::Popup.Error(_("Human will be exterminated, pc cannot allow you to be your true love"))
return false
end
true
end
def store
@chosen = value
end
def result
@chosen
end
end
class TrueLoveTab < ::CWM::Tab
def contents
HBox(
true_love_selector
)
end
def label
_("True Love")
end
def result
true_love_selector.result
end
private
def true_love_selector
@true_love_selector ||= TrueLoveSelector.new
end
end
module Yast
class ExampleDialog
include Yast::I18n
include Yast::UIShortcuts
include Yast::Logger
def run
textdomain "example"
lucky_number_tab = LuckyNumberTab.new
true_love_tab = TrueLoveTab.new
tl_item = ::CWM::PagerTreeItem.new(true_love_tab)
ln_item = ::CWM::PagerTreeItem.new(lucky_number_tab, children: [tl_item])
tabs = ::CWM::TreePager.new(ln_item, label: "")
contents = VBox(tabs)
Yast::Wizard.CreateDialog
CWM.show(contents, caption: _("Tabs example"))
Yast::Wizard.CloseDialog
log.info "Lucky number: #{lucky_number_tab.result}, true love: #{true_love_tab.result}"
end
end
end
Yast::ExampleDialog.new.run