rbcurse 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +1570 -0
- data/History.txt +6 -0
- data/Manifest.txt +54 -0
- data/README.txt +304 -0
- data/Rakefile +28 -0
- data/examples/qdfilechooser.rb +68 -0
- data/examples/rfe.rb +853 -0
- data/examples/rfe_renderer.rb +69 -0
- data/examples/test1.rb +242 -0
- data/examples/test2.rb +498 -0
- data/examples/testcombo.rb +95 -0
- data/examples/testkeypress.rb +61 -0
- data/examples/testmenu.rb +105 -0
- data/examples/testtable.rb +266 -0
- data/examples/testtabp.rb +106 -0
- data/examples/testtodo.rb +532 -0
- data/examples/viewtodo.rb +512 -0
- data/lib/rbcurse/action.rb +31 -0
- data/lib/rbcurse/applicationheader.rb +57 -0
- data/lib/rbcurse/celleditor.rb +120 -0
- data/lib/rbcurse/checkboxcellrenderer.rb +69 -0
- data/lib/rbcurse/colormap.rb +133 -0
- data/lib/rbcurse/comboboxcellrenderer.rb +45 -0
- data/lib/rbcurse/defaultlistselectionmodel.rb +49 -0
- data/lib/rbcurse/keylabelprinter.rb +143 -0
- data/lib/rbcurse/listcellrenderer.rb +99 -0
- data/lib/rbcurse/listkeys.rb +33 -0
- data/lib/rbcurse/listscrollable.rb +216 -0
- data/lib/rbcurse/listselectable.rb +67 -0
- data/lib/rbcurse/mapper.rb +108 -0
- data/lib/rbcurse/orderedhash.rb +77 -0
- data/lib/rbcurse/rcombo.rb +243 -0
- data/lib/rbcurse/rdialogs.rb +183 -0
- data/lib/rbcurse/rform.rb +845 -0
- data/lib/rbcurse/rinputdataevent.rb +36 -0
- data/lib/rbcurse/rlistbox.rb +804 -0
- data/lib/rbcurse/rmenu.rb +666 -0
- data/lib/rbcurse/rmessagebox.rb +325 -0
- data/lib/rbcurse/rpopupmenu.rb +754 -0
- data/lib/rbcurse/rtabbedpane.rb +259 -0
- data/lib/rbcurse/rtable.rb +1296 -0
- data/lib/rbcurse/rtextarea.rb +673 -0
- data/lib/rbcurse/rtextview.rb +335 -0
- data/lib/rbcurse/rwidget.rb +1731 -0
- data/lib/rbcurse/scrollable.rb +301 -0
- data/lib/rbcurse/selectable.rb +94 -0
- data/lib/rbcurse/table/tablecellrenderer.rb +85 -0
- data/lib/rbcurse/table/tabledatecellrenderer.rb +102 -0
- data/lib/rbcurse.rb +7 -0
- data/lib/ver/keyboard.rb +150 -0
- data/lib/ver/keyboard2.rb +170 -0
- data/lib/ver/ncurses.rb +102 -0
- data/lib/ver/window.rb +369 -0
- data/test/test_rbcurse.rb +0 -0
- metadata +118 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
CHANGELOG
|
5
|
+
Rakefile
|
6
|
+
lib/rbcurse.rb
|
7
|
+
test/test_rbcurse.rb
|
8
|
+
lib/rbcurse/action.rb
|
9
|
+
lib/rbcurse/applicationheader.rb
|
10
|
+
lib/rbcurse/celleditor.rb
|
11
|
+
lib/rbcurse/checkboxcellrenderer.rb
|
12
|
+
lib/rbcurse/colormap.rb
|
13
|
+
lib/rbcurse/comboboxcellrenderer.rb
|
14
|
+
lib/rbcurse/defaultlistselectionmodel.rb
|
15
|
+
lib/rbcurse/keylabelprinter.rb
|
16
|
+
lib/rbcurse/listcellrenderer.rb
|
17
|
+
lib/rbcurse/listkeys.rb
|
18
|
+
lib/rbcurse/listscrollable.rb
|
19
|
+
lib/rbcurse/listselectable.rb
|
20
|
+
lib/rbcurse/mapper.rb
|
21
|
+
lib/rbcurse/orderedhash.rb
|
22
|
+
lib/rbcurse/rcombo.rb
|
23
|
+
lib/rbcurse/rdialogs.rb
|
24
|
+
lib/rbcurse/rform.rb
|
25
|
+
lib/rbcurse/rinputdataevent.rb
|
26
|
+
lib/rbcurse/rlistbox.rb
|
27
|
+
lib/rbcurse/rmenu.rb
|
28
|
+
lib/rbcurse/rmessagebox.rb
|
29
|
+
lib/rbcurse/rpopupmenu.rb
|
30
|
+
lib/rbcurse/rtabbedpane.rb
|
31
|
+
lib/rbcurse/rtable.rb
|
32
|
+
lib/rbcurse/rtextarea.rb
|
33
|
+
lib/rbcurse/rtextview.rb
|
34
|
+
lib/rbcurse/rwidget.rb
|
35
|
+
lib/rbcurse/scrollable.rb
|
36
|
+
lib/rbcurse/selectable.rb
|
37
|
+
lib/rbcurse/table/tablecellrenderer.rb
|
38
|
+
lib/rbcurse/table/tabledatecellrenderer.rb
|
39
|
+
lib/ver/keyboard.rb
|
40
|
+
lib/ver/keyboard2.rb
|
41
|
+
lib/ver/ncurses.rb
|
42
|
+
lib/ver/window.rb
|
43
|
+
examples/qdfilechooser.rb
|
44
|
+
examples/rfe.rb
|
45
|
+
examples/rfe_renderer.rb
|
46
|
+
examples/test1.rb
|
47
|
+
examples/test2.rb
|
48
|
+
examples/testcombo.rb
|
49
|
+
examples/testkeypress.rb
|
50
|
+
examples/testmenu.rb
|
51
|
+
examples/testtable.rb
|
52
|
+
examples/testtabp.rb
|
53
|
+
examples/testtodo.rb
|
54
|
+
examples/viewtodo.rb
|
data/README.txt
ADDED
@@ -0,0 +1,304 @@
|
|
1
|
+
= rbcurse
|
2
|
+
|
3
|
+
* http://totalrecall.wordpress.com << CORRECTED !!!
|
4
|
+
|
5
|
+
* See latest changes on http://github.com/rkumar/rbcurse/tree/master/CHANGELOG
|
6
|
+
|
7
|
+
* For a working example, execute test2.rb (exit with F1, Or Cancel
|
8
|
+
button/Alt-C).
|
9
|
+
|
10
|
+
* Screenshots on http://github.com/rkumar/rbcurse/wikis/screenshots
|
11
|
+
and http://www.benegal.org/files/screen/
|
12
|
+
|
13
|
+
Full screen sample: http://www.benegal.org/files/screen/nc_ss_full.png
|
14
|
+
|
15
|
+
== DESCRIPTION:
|
16
|
+
|
17
|
+
A small widget library written in ruby for creating ncurses
|
18
|
+
applications.
|
19
|
+
See lib/rbcurse/rwidgets.rb and lib/rbcurse/rform.rb.
|
20
|
+
Test programs are in base dir: test1.rb, test2.rb, testtabp.rb
|
21
|
+
|
22
|
+
== FEATURES
|
23
|
+
|
24
|
+
* entry fields in ruby
|
25
|
+
* scrollable list box (new, editable with Field, checkbox and combos)
|
26
|
+
* multi-line editable area
|
27
|
+
* togglebutton, radio and check buttons (with mnemonics)
|
28
|
+
* message box
|
29
|
+
* menubar - with submenu and CheckBoxMenuItem
|
30
|
+
* popup list
|
31
|
+
* tabbedpane (multiple forms using tabbed metaphor)
|
32
|
+
* combobox
|
33
|
+
* labels with mnemonics (hotkeys)
|
34
|
+
* multi-column table - with cell selection and editing
|
35
|
+
|
36
|
+
Above may be created using DSL like syntax, or hashes.
|
37
|
+
|
38
|
+
== Sample programs:
|
39
|
+
|
40
|
+
* test2.rb most widgets (including menus)
|
41
|
+
http://github.com/rkumar/rbcurse/tree/master/test2.rb
|
42
|
+
* test1.rb various kinds of messageboxes (input, list, custom)
|
43
|
+
http://github.com/rkumar/rbcurse/tree/master/test1.rb
|
44
|
+
* testtabp.rb tabbed pane
|
45
|
+
http://github.com/rkumar/rbcurse/tree/master/testtabp.rb
|
46
|
+
* testcombo.rb combos with various insert policies and vertical
|
47
|
+
alignments
|
48
|
+
|
49
|
+
== PROBLEMS, ISSUES
|
50
|
+
TextArea not bug free. Some situations wrapping errors could exist.
|
51
|
+
|
52
|
+
== Terminal related issues.
|
53
|
+
|
54
|
+
* Some terminals may not show underlines (e.g screen).
|
55
|
+
|
56
|
+
* Some terminals (xterm-color) do not process Function keys, avoid declaring F1 etc if
|
57
|
+
unsure of client terminals. I have put in fixes for xterm-color F1 and
|
58
|
+
backtab.
|
59
|
+
|
60
|
+
* To use ALT/META keys on a Mac OS X, in Terminal preferences, under
|
61
|
+
Keyboard, select
|
62
|
+
"use Option as Meta key". All hotkeys are automatically, ALT combinations.
|
63
|
+
|
64
|
+
* Some screens do not display window background color under spaces.
|
65
|
+
This is okay under "screen" and "xterm-color" but not under "xterm". You will notice
|
66
|
+
this in the message box samples.
|
67
|
+
|
68
|
+
I am developing and testing under "screen" under OS X Leopard.
|
69
|
+
|
70
|
+
== SYNOPSIS:
|
71
|
+
|
72
|
+
See lib/rbcurse/rwidgets.rb.
|
73
|
+
For test programs, see test1, test2, testcombo etc in root folder.
|
74
|
+
|
75
|
+
This depends only on "window" provided by ncurses. Does not use forms
|
76
|
+
and fields. Minor changes and improvements may have happened to sample
|
77
|
+
code below. See test programs for latest, working code.
|
78
|
+
|
79
|
+
=== create a window and a form based on window
|
80
|
+
|
81
|
+
@layout = { :height => 0, :width => 0, :top => 0, :left => 0 }
|
82
|
+
@win = VER::Window.new(@layout)
|
83
|
+
|
84
|
+
@form = Form.new @win
|
85
|
+
|
86
|
+
|
87
|
+
=== create a bunch of fields with dependent labels
|
88
|
+
|
89
|
+
r = 1; c = 22;
|
90
|
+
%w[ name age company].each do |w|
|
91
|
+
field = Field.new @form do
|
92
|
+
name w
|
93
|
+
row r
|
94
|
+
col c
|
95
|
+
display_length 30
|
96
|
+
set_buffer "abcd #{w}"
|
97
|
+
set_label Label.new @form, {'text' => w}
|
98
|
+
end
|
99
|
+
r += 1
|
100
|
+
end
|
101
|
+
|
102
|
+
=== create a variable (like TkVariable) and tie a label to it.
|
103
|
+
|
104
|
+
$results = Variable.new
|
105
|
+
$results.value = "A variable"
|
106
|
+
var = RubyCurses::Label.new @form, {'text_variable' => $results, "row" => r, "col" => 22}
|
107
|
+
r += 1
|
108
|
+
|
109
|
+
=== create a list and a list box based on the list.
|
110
|
+
|
111
|
+
mylist = []
|
112
|
+
0.upto(100) { |v| mylist << "#{v} scrollable data" }
|
113
|
+
|
114
|
+
field = Listbox.new @form do
|
115
|
+
name "mylist"
|
116
|
+
row r
|
117
|
+
col 1
|
118
|
+
width 40
|
119
|
+
height 10
|
120
|
+
list mylist
|
121
|
+
end
|
122
|
+
field.insert 5, "hello ruby", "so long python", "farewell java", "RIP .Net"
|
123
|
+
|
124
|
+
=== create a textarea for entry (this can be buggy at present)
|
125
|
+
|
126
|
+
texta = TextArea.new @form do
|
127
|
+
name "mytext"
|
128
|
+
row 1
|
129
|
+
col 52
|
130
|
+
width 40
|
131
|
+
height 20
|
132
|
+
end
|
133
|
+
texta << "hello there" << "we are testing deletes in this application"
|
134
|
+
texta << "HELLO there" << "WE ARE testing deletes in this application"
|
135
|
+
|
136
|
+
=== create a check box, updates a Variable
|
137
|
+
|
138
|
+
checkbutton = CheckBox.new @form do
|
139
|
+
text_variable $results
|
140
|
+
#value = true
|
141
|
+
onvalue "selected cb"
|
142
|
+
offvalue "UNselected cb"
|
143
|
+
text "Please click me"
|
144
|
+
row 17
|
145
|
+
col 22
|
146
|
+
end
|
147
|
+
|
148
|
+
=== change field properties at any time by referring to them by name
|
149
|
+
|
150
|
+
@form.by_name["age"].display_length = 3
|
151
|
+
@form.by_name["age"].maxlen = 3
|
152
|
+
@form.by_name["age"].set_buffer "24"
|
153
|
+
@form.by_name["name"].set_buffer "Not focusable"
|
154
|
+
@form.by_name["age"].chars_allowed = /\d/
|
155
|
+
@form.by_name["company"].type(:ALPHA)
|
156
|
+
@form.by_name["name"].set_focusable(false)
|
157
|
+
|
158
|
+
@form.by_name["password"].color 'red'
|
159
|
+
@form.by_name["password"].bgcolor 'blue'
|
160
|
+
|
161
|
+
# restrict entry to some values
|
162
|
+
password.values(%w[ scotty tiger secret qwerty])
|
163
|
+
|
164
|
+
# validation using ruby's regular expressions
|
165
|
+
|
166
|
+
field.valid_regex(/^[A-Z]\d+/)
|
167
|
+
|
168
|
+
=== bind events to forms, and fields
|
169
|
+
|
170
|
+
@form.bind(:ENTER) { |f| f.label.bgcolor = $promptcolor if f.instance_of? RubyCurses::Field}
|
171
|
+
@form.bind(:LEAVE) { |f| f.label.bgcolor = $datacolor if f.instance_of? RubyCurses::Field}
|
172
|
+
|
173
|
+
=== create buttons
|
174
|
+
|
175
|
+
ok_button = Button.new @form do
|
176
|
+
text "OK"
|
177
|
+
name "OK"
|
178
|
+
row 18
|
179
|
+
col 22
|
180
|
+
end
|
181
|
+
ok_button.command { |form| $results.value = "OK PRESS:";form.printstr(@window, 23,45, "OK CALLED") }
|
182
|
+
#text "Cancel"
|
183
|
+
cancel_button = Button.new @form do
|
184
|
+
text_variable $results
|
185
|
+
row 18
|
186
|
+
col 28
|
187
|
+
end
|
188
|
+
cancel_button.command { |form| form.printstr(@window, 23,45, "Cancel CALLED"); throw(:close); }
|
189
|
+
|
190
|
+
=== create radio buttons
|
191
|
+
|
192
|
+
colorlabel = Label.new @form, {'text' => "Select a color:", "row" => 20,
|
193
|
+
"col" => 22, "color"=> "cyan"}
|
194
|
+
$radio = Variable.new
|
195
|
+
radio1 = RadioButton.new @form do
|
196
|
+
text_variable $radio
|
197
|
+
text "red"
|
198
|
+
value "red"
|
199
|
+
color "red"
|
200
|
+
row 21
|
201
|
+
col 22
|
202
|
+
end
|
203
|
+
radio2 = RadioButton.new @form do
|
204
|
+
text_variable $radio
|
205
|
+
text "green"
|
206
|
+
value "green"
|
207
|
+
color "green"
|
208
|
+
row 22
|
209
|
+
col 22
|
210
|
+
end
|
211
|
+
|
212
|
+
=== create a messagebox
|
213
|
+
|
214
|
+
@mb = RubyCurses::MessageBox.new do
|
215
|
+
title "Enter your name"
|
216
|
+
message "Enter your name"
|
217
|
+
type :input
|
218
|
+
default_value "rahul"
|
219
|
+
default_button 0
|
220
|
+
end
|
221
|
+
#title "Color selector"
|
222
|
+
#type :custom
|
223
|
+
#buttons %w[red green blue yellow]
|
224
|
+
#underlines [0,0,0,0]
|
225
|
+
|
226
|
+
$log.debug "MBOX : #{@mb.selected_index} "
|
227
|
+
$log.debug "MBOX : #{@mb.input_value} "
|
228
|
+
|
229
|
+
=== create a read-only scrollable view of data
|
230
|
+
|
231
|
+
@textview = TextView.new @form do
|
232
|
+
name "myView"
|
233
|
+
row 16
|
234
|
+
col 52
|
235
|
+
width 40
|
236
|
+
height 7
|
237
|
+
end
|
238
|
+
content = File.open("../../README.txt","r").readlines
|
239
|
+
@textview.set_content content
|
240
|
+
|
241
|
+
## set it to point to row 21
|
242
|
+
@textview.top_row 21
|
243
|
+
|
244
|
+
|
245
|
+
# lets scroll the text view as we scroll the listbox
|
246
|
+
|
247
|
+
listb.bind(:ENTER_ROW, @textview) { |arow, tview| tview.top_row arow }
|
248
|
+
|
249
|
+
# lets scroll the text view to the line you enter in the numeric
|
250
|
+
# field
|
251
|
+
@form.by_name["line"].bind(:LEAVE, @textview) { |fld, tv| tv.top_row(fld.getvalue.to_i) }
|
252
|
+
|
253
|
+
# lets scroll the text view to the first match of the regex you
|
254
|
+
# enter
|
255
|
+
@form.by_name["regex"].bind(:LEAVE, @textview) { |fld, tv| tv.top_row(tv.find_first_match(fld.getvalue)) }
|
256
|
+
|
257
|
+
# change the value of colorlabel to the selected radiobutton
|
258
|
+
# (red or green)
|
259
|
+
|
260
|
+
$radio.update_command(colorlabel) {|tv, label| label.color tv.value}
|
261
|
+
|
262
|
+
# change the attribute of colorlabel to bold or normal
|
263
|
+
|
264
|
+
$results.update_command(colorlabel,checkbutton) {|tv, label, cb|
|
265
|
+
attrs = cb.value ? 'bold' : nil; label.attrs(attrs)}
|
266
|
+
|
267
|
+
# during menu creation, create a checkboxmenuitem
|
268
|
+
|
269
|
+
item = RubyCurses::CheckBoxMenuItem.new "CheckMe"
|
270
|
+
|
271
|
+
# when selected, make colorlabel attribute reverse.
|
272
|
+
|
273
|
+
item.command(colorlabel){|it, label| att = it.getvalue ? 'reverse' :
|
274
|
+
nil; label.attrs(att); label.repaint}
|
275
|
+
|
276
|
+
== REQUIREMENTS:
|
277
|
+
|
278
|
+
* ruby 1.8.7 (not compatible with 1.9)
|
279
|
+
|
280
|
+
* ncurses-ruby
|
281
|
+
|
282
|
+
(following is provided with source)
|
283
|
+
|
284
|
+
* uses the window class created by "manveru" (michael) - this can be
|
285
|
+
removed if not needed. (lib/ver/window)
|
286
|
+
It is provided with this package, and has some alterations from the
|
287
|
+
original. I have added a method getchar() which traps and returns
|
288
|
+
ALT/META, META+CTRL, META+SHIFT+CONTROL, ALT+Fn etc.
|
289
|
+
|
290
|
+
So basically do not remove it unless you have very different
|
291
|
+
requirements.
|
292
|
+
|
293
|
+
== INSTALL:
|
294
|
+
|
295
|
+
* currently, just unzip/untar in a folder. Please change the path in
|
296
|
+
the top line of the test programs.
|
297
|
+
|
298
|
+
(Please advice me how i can improve installation procedure)
|
299
|
+
|
300
|
+
== LICENSE:
|
301
|
+
|
302
|
+
Copyright (c) 2008 rkumar
|
303
|
+
|
304
|
+
Same as ruby license.
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
|
4
|
+
#
|
5
|
+
require 'rubygems'
|
6
|
+
require 'hoe'
|
7
|
+
$:.unshift(File.dirname(__FILE__) + "/lib")
|
8
|
+
require 'rbcurse'
|
9
|
+
#require './lib/rbcurse.rb'
|
10
|
+
|
11
|
+
Hoe.new('rbcurse', Rbcurse::VERSION) do |p|
|
12
|
+
p.name = "rbcurse"
|
13
|
+
p.author = "Rahul Kumar"
|
14
|
+
p.description = "Ruby curses widgets for easy application development"
|
15
|
+
p.email = 'sentinel.2001@gmx.com'
|
16
|
+
p.summary = "Ruby curses widgets."
|
17
|
+
p.url = "http://rbcurse.rubyforge.org/"
|
18
|
+
p.clean_globs = ['test/actual'] # Remove this directory on "rake clean"
|
19
|
+
p.remote_rdoc_dir = '' # Release to root
|
20
|
+
p.changes = p.paragraphs_of('CHANGELOG', 0..1).join("\n\n")
|
21
|
+
# * extra_deps - An array of rubygem dependencies.
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
desc "Release and publish documentation"
|
26
|
+
task :repubdoc => [:release, :publish_docs]
|
27
|
+
|
28
|
+
# vim: syntax=Ruby
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# this is a test program, tests out messageboxes. type F1 to exit
|
2
|
+
# a quick dirty file chooser in 2 lines of code.
|
3
|
+
#$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
|
4
|
+
require 'rubygems'
|
5
|
+
require 'ncurses'
|
6
|
+
require 'logger'
|
7
|
+
require 'ver/ncurses'
|
8
|
+
require 'ver/window'
|
9
|
+
require 'rbcurse/rwidget'
|
10
|
+
|
11
|
+
##
|
12
|
+
# a quick dirty file chooser - only temporary till we make something better.
|
13
|
+
class QDFileChooser
|
14
|
+
attr_accessor :show_folders # bool
|
15
|
+
attr_accessor :traverse_folders # bool
|
16
|
+
attr_accessor :default_pattern # e.g. "*.*"
|
17
|
+
attr_accessor :dialog_title # File Chooser
|
18
|
+
def initialize
|
19
|
+
|
20
|
+
end
|
21
|
+
def show_open_dialog
|
22
|
+
@form = RubyCurses::Form.new nil
|
23
|
+
label = RubyCurses::Label.new @form, {'text' => 'File', 'row'=>3, 'col'=>4, 'color'=>'black', 'bgcolor'=>'white', 'mnemonic'=>'F'}
|
24
|
+
field = RubyCurses::Field.new @form do
|
25
|
+
name "file"
|
26
|
+
row 3
|
27
|
+
col 10
|
28
|
+
display_length 40
|
29
|
+
set_label label
|
30
|
+
end
|
31
|
+
default_pattern ||= "*.*"
|
32
|
+
flist = Dir.glob(default_pattern)
|
33
|
+
@listb = RubyCurses::Listbox.new @form do
|
34
|
+
name "mylist"
|
35
|
+
row 5
|
36
|
+
col 10
|
37
|
+
width 40
|
38
|
+
height 10
|
39
|
+
list flist
|
40
|
+
title "File list"
|
41
|
+
title_attrib 'bold'
|
42
|
+
end
|
43
|
+
#@listb.list.bind(:ENTER_ROW) { field.set_buffer @listb.selected_item }
|
44
|
+
listb = @listb
|
45
|
+
field.bind(:CHANGE) do |f|
|
46
|
+
flist = Dir.glob(f.getvalue+"*")
|
47
|
+
l = listb.list
|
48
|
+
l.remove_all
|
49
|
+
l.insert 0, *flist
|
50
|
+
end
|
51
|
+
atitle = @dialog_title || "Quick Dirty(TM) File Chooser"
|
52
|
+
@mb = RubyCurses::MessageBox.new @form do
|
53
|
+
title atitle
|
54
|
+
type :override
|
55
|
+
height 20
|
56
|
+
width 60
|
57
|
+
top 5
|
58
|
+
left 20
|
59
|
+
default_button 0
|
60
|
+
button_type :ok_cancel
|
61
|
+
end
|
62
|
+
return @mb.selected_index == 0 ? :OK : :CANCEL
|
63
|
+
$log.debug "MBOX :selected #{@listb.selected_item}"
|
64
|
+
end
|
65
|
+
def get_selected_file
|
66
|
+
return @mb.selected_index == 0 ? @listb.selected_item : nil
|
67
|
+
end
|
68
|
+
end
|