rbcurse 1.3.0 → 1.4.0
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.
- data/CHANGELOG +33 -0
- data/README.markdown +7 -1
- data/TODO2.txt +21 -15
- data/VERSION +1 -1
- data/examples/abasiclist.rb +2 -2
- data/examples/alpmenu.rb +1 -1
- data/examples/app.rb +0 -1
- data/examples/appdirtree.rb +4 -2
- data/examples/appemail.rb +7 -3
- data/examples/appemaillb.rb +1 -1
- data/examples/appgcompose.rb +2 -2
- data/examples/appgmail.rb +1 -1
- data/examples/appmethods.rb +20 -2
- data/examples/atree.rb +9 -1
- data/examples/dbdemo.rb +460 -0
- data/examples/dirtree.rb +1 -1
- data/examples/menu1.rb +37 -5
- data/examples/multispl.rb +1 -1
- data/examples/rfe.rb +9 -2
- data/examples/splitp.rb +1 -1
- data/examples/sqlc.rb +6 -10
- data/examples/sqlm.rb +2 -20
- data/examples/sqlt.rb +408 -0
- data/examples/term2.rb +1 -1
- data/examples/test2.rb +169 -97
- data/examples/testapp.rb +1 -1
- data/examples/testapp2.rb +1 -1
- data/examples/testkeypress.rb +4 -2
- data/examples/testtable.rb +6 -0
- data/examples/testtpane.rb +35 -23
- data/examples/testvimsplit.rb +3 -2
- data/lib/rbcurse.rb +1 -1
- data/lib/rbcurse/action.rb +8 -0
- data/lib/rbcurse/app.rb +39 -23
- data/lib/rbcurse/extras/bottomline.rb +101 -13
- data/lib/rbcurse/extras/directorylist.rb +14 -5
- data/lib/rbcurse/extras/divider.rb +1 -1
- data/lib/rbcurse/extras/listselectable.rb +42 -8
- data/lib/rbcurse/extras/masterdetail.rb +2 -2
- data/lib/rbcurse/extras/scrollbar.rb +11 -2
- data/lib/rbcurse/extras/statusline.rb +56 -0
- data/lib/rbcurse/extras/stdscrwindow.rb +11 -0
- data/lib/rbcurse/extras/tabular.rb +2 -1
- data/lib/rbcurse/extras/tabularwidget.rb +60 -17
- data/lib/rbcurse/extras/viewer.rb +16 -4
- data/lib/rbcurse/keylabelprinter.rb +34 -4
- data/lib/rbcurse/listeditable.rb +5 -1
- data/lib/rbcurse/listkeys.rb +1 -1
- data/lib/rbcurse/listscrollable.rb +15 -8
- data/lib/rbcurse/rbasiclistbox.rb +44 -23
- data/lib/rbcurse/rcommandwindow.rb +8 -14
- data/lib/rbcurse/rdialogs.rb +187 -2
- data/lib/rbcurse/rlistbox.rb +38 -19
- data/lib/rbcurse/rmenu.rb +313 -93
- data/lib/rbcurse/rmessagebox.rb +3 -2
- data/lib/rbcurse/rmulticontainer.rb +5 -3
- data/lib/rbcurse/rmultisplit.rb +2 -11
- data/lib/rbcurse/rmultitextview.rb +4 -5
- data/lib/rbcurse/rtabbedpane.rb +223 -69
- data/lib/rbcurse/rtable.rb +6 -10
- data/lib/rbcurse/rtextarea.rb +57 -36
- data/lib/rbcurse/rtextview.rb +12 -15
- data/lib/rbcurse/rtree.rb +79 -22
- data/lib/rbcurse/rvimsplit.rb +16 -25
- data/lib/rbcurse/rwidget.rb +376 -523
- data/lib/rbcurse/tree/treecellrenderer.rb +24 -11
- data/lib/rbcurse/tree/treemodel.rb +1 -1
- data/lib/ver/window.rb +130 -66
- metadata +5 -3
- data/examples/term.rb +0 -48
data/examples/term2.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rbcurse/extras/tabular'
|
|
3
3
|
require 'rbcurse/extras/scrollbar'
|
4
4
|
|
5
5
|
App.new do
|
6
|
-
header = app_header "rbcurse
|
6
|
+
header = app_header "rbcurse #{Rbcurse::VERSION}", :text_center => "Tabular Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
7
7
|
message "Press F10 to escape from here"
|
8
8
|
|
9
9
|
stack :margin_top => 2, :margin => 5, :width => 30 do
|
data/examples/test2.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
|
4
|
-
#
|
1
|
+
# This program tests out various widgets.
|
2
|
+
# This is the old style of creating an application in which the user
|
3
|
+
# has to start and stop ncurses. No shortcuts for widget constructors are available.
|
4
|
+
#
|
5
|
+
# The newer easier way is to use 'App' which manages the environment, and provides shortcuts
|
6
|
+
# for all widgets. See app*.rb, alpmenu.rb, dbdemo.rb etc for samples.
|
7
|
+
#
|
8
|
+
# In case, you are running this in a directory that does not allow writing, set LOGDIR to
|
9
|
+
# your home directory, or temp directory so a log file can be generated.
|
10
|
+
#
|
5
11
|
require 'logger'
|
6
12
|
require 'rbcurse'
|
7
|
-
require 'rbcurse/rwidget'
|
8
13
|
require 'rbcurse/rtextarea'
|
9
14
|
require 'rbcurse/rtextview'
|
10
15
|
require 'rbcurse/rmenu'
|
@@ -13,36 +18,18 @@ require 'rbcurse/listcellrenderer'
|
|
13
18
|
require 'rbcurse/checkboxcellrenderer'
|
14
19
|
require 'rbcurse/comboboxcellrenderer'
|
15
20
|
require 'rbcurse/celleditor'
|
16
|
-
require './qdfilechooser'
|
17
21
|
require 'rbcurse/rlistbox'
|
18
22
|
require 'rbcurse/rmessagebox'
|
19
23
|
require 'rbcurse/rtree'
|
20
24
|
require './appmethods.rb'
|
21
|
-
|
22
|
-
cmd = get_string("Enter shell command:", 50)
|
23
|
-
if cmd && !cmd.empty?
|
24
|
-
run_command cmd
|
25
|
-
end
|
26
|
-
end
|
27
|
-
def run_command cmd
|
28
|
-
# http://whynotwiki.com/Ruby_/_Process_management#What_happens_to_standard_error_.28stderr.29.3F
|
29
|
-
require 'rbcurse/extras/viewer'
|
30
|
-
begin
|
31
|
-
res = `#{cmd} 2>&1`
|
32
|
-
rescue => ex
|
33
|
-
res = ex.to_s
|
34
|
-
res << ex.backtrace.join("\n")
|
35
|
-
end
|
36
|
-
res.gsub!("\t"," ")
|
37
|
-
RubyCurses::Viewer.view(res.split("\n"), :close_key => KEY_RETURN, :title => "<Enter> to close, M-l M-h to scroll")
|
38
|
-
end
|
25
|
+
require 'rbcurse/extras/scrollbar'
|
39
26
|
def help_text
|
40
27
|
<<-eos
|
41
28
|
TEST2 HELP
|
42
29
|
|
43
30
|
This is some help text for test2.
|
44
31
|
|
45
|
-
Alt-C/
|
32
|
+
Alt-C/F10 - Exit application
|
46
33
|
Alt-! - Drop to shell
|
47
34
|
C-x c - Drop to shell
|
48
35
|
C-x l - list of files
|
@@ -60,15 +47,20 @@ def help_text
|
|
60
47
|
eos
|
61
48
|
end
|
62
49
|
if $0 == __FILE__
|
50
|
+
|
63
51
|
include RubyCurses
|
52
|
+
include RubyCurses::Utils
|
64
53
|
|
65
54
|
begin
|
66
55
|
# Initialize curses
|
67
56
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
68
|
-
|
69
|
-
|
57
|
+
path = File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")
|
58
|
+
file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
|
59
|
+
$log = Logger.new(path)
|
70
60
|
$log.level = Logger::DEBUG
|
71
61
|
|
62
|
+
@lookfeel = :classic # :dialog # or :classic
|
63
|
+
|
72
64
|
@window = VER::Window.root_window
|
73
65
|
# Initialize few color pairs
|
74
66
|
# Create the window to be associated with the form
|
@@ -78,12 +70,13 @@ if $0 == __FILE__
|
|
78
70
|
colors = Ncurses.COLORS
|
79
71
|
$log.debug "START #{colors} colors test2.rb --------- #{@window} "
|
80
72
|
@form = Form.new @window
|
81
|
-
|
73
|
+
title = (" "*30) + "Demo of some Ruby Curses Widgets - rbcurse " + Rbcurse::VERSION
|
74
|
+
Label.new @form, {'text' => title, "row" => 0, "col" => 0, :color => 'green', :bgcolor => 'black'}
|
82
75
|
r = 1; fc = 12;
|
83
76
|
mnemonics = %w[ n l r p]
|
84
77
|
%w[ name line regex password].each_with_index do |w,i|
|
85
78
|
field = Field.new @form do
|
86
|
-
name
|
79
|
+
name w
|
87
80
|
row r
|
88
81
|
col fc
|
89
82
|
display_length 30
|
@@ -95,7 +88,9 @@ if $0 == __FILE__
|
|
95
88
|
|
96
89
|
$message = Variable.new
|
97
90
|
$message.value = "Message Comes Here"
|
98
|
-
message_label = RubyCurses::Label.new @form, {'text_variable' => $message,
|
91
|
+
message_label = RubyCurses::Label.new @form, {'text_variable' => $message,
|
92
|
+
"name"=>"message_label","row" => Ncurses.LINES-1, "col" => 1, "display_length" => 60,
|
93
|
+
"height" => 2, 'color' => 'cyan'}
|
99
94
|
|
100
95
|
$results = Variable.new
|
101
96
|
$results.value = "A variable"
|
@@ -120,6 +115,7 @@ if $0 == __FILE__
|
|
120
115
|
title_attrib 'reverse'
|
121
116
|
cell_editing_allowed true
|
122
117
|
end
|
118
|
+
Scrollbar.new @form, :parent => listb # 2011-10-1 added
|
123
119
|
#listb.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
|
124
120
|
#$listdata.value.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
|
125
121
|
listb.list_data_model.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net", "hi lisp", "hi clojure"
|
@@ -131,20 +127,20 @@ if $0 == __FILE__
|
|
131
127
|
width 50
|
132
128
|
height 14
|
133
129
|
title "Editable box"
|
134
|
-
title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
|
130
|
+
#title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
|
135
131
|
print_footer true
|
136
132
|
bind(:CHANGE){|e| $message.value = e.to_s+" CP:"+e.source.curpos.to_s }
|
137
133
|
end
|
138
134
|
texta << "I expect to pass through this world but once." << "Any good therefore that I can do, or any kindness or abilities that I can show to any fellow creature, let me do it now."
|
139
135
|
texta << "Let me not defer it or neglect it, for I shall not pass this way again."
|
140
136
|
texta << " "
|
141
|
-
texta << "
|
137
|
+
texta << " F10 to exit. or click cancel button"
|
142
138
|
texta << " Or alt-c"
|
143
139
|
|
144
140
|
col3 = 92
|
145
141
|
treemodel = nil
|
146
|
-
|
147
|
-
treemodel = root "ruby" do
|
142
|
+
atree = Tree.new @form, :title => "Tree", :row =>1, :col=>col3, :height => 14, :width => 15 do
|
143
|
+
treemodel = root "ruby language" do
|
148
144
|
branch "mri" do
|
149
145
|
leaf "1.9.1"
|
150
146
|
leaf "1.9.2"
|
@@ -152,6 +148,8 @@ if $0 == __FILE__
|
|
152
148
|
end
|
153
149
|
branch "jruby" do
|
154
150
|
leaf "1.5"
|
151
|
+
leaf "a really long leaf"
|
152
|
+
|
155
153
|
end
|
156
154
|
branch "ree" do
|
157
155
|
leaf "1.8"
|
@@ -172,7 +170,7 @@ if $0 == __FILE__
|
|
172
170
|
width w1
|
173
171
|
height 11
|
174
172
|
title "README.mark"
|
175
|
-
title_attrib 'bold'
|
173
|
+
#title_attrib 'bold'
|
176
174
|
print_footer true
|
177
175
|
footer_attrib 'bold'
|
178
176
|
end
|
@@ -217,9 +215,9 @@ if $0 == __FILE__
|
|
217
215
|
list_config 'color' => 'yellow', 'bgcolor'=>'red', 'height' => 4
|
218
216
|
end
|
219
217
|
|
220
|
-
list = ListDataModel.new( %w[
|
221
|
-
list.bind(:LIST_DATA_EVENT) { |lde| $message.value = lde.to_s; $log.debug " STA: #{$message.value} #{lde}"
|
222
|
-
list.bind(:ENTER_ROW) { |obj| $message.value = "ENTER_ROW :#{obj.current_index} : #{obj.selected_item} "; $log.debug " ENTER_ROW: #{$message.value} , #{obj}"
|
218
|
+
list = ListDataModel.new( %w[white yellow cyan magenta red blue black])
|
219
|
+
list.bind(:LIST_DATA_EVENT) { |lde| $message.value = lde.to_s; $log.debug " STA: #{$message.value} #{lde}"; }
|
220
|
+
list.bind(:ENTER_ROW) { |obj| $message.value = "ENTER_ROW :#{obj.current_index} : #{obj.selected_item} "; $log.debug " ENTER_ROW: #{$message.value} , #{obj}"; @form.widgets.each { |e| next unless e.is_a? Widget; e.color = obj.selected_item }; @mb.color = obj.selected_item }
|
223
221
|
|
224
222
|
row += 1
|
225
223
|
combo1 = ComboBox.new @form do
|
@@ -271,39 +269,45 @@ if $0 == __FILE__
|
|
271
269
|
# a special case required since another form (combo popup also modifies)
|
272
270
|
$message.update_command() { message_label.repaint }
|
273
271
|
|
274
|
-
@form.by_name["line"]
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
@form.by_name["
|
280
|
-
|
281
|
-
|
282
|
-
@form.by_name["regex"].
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
@form.by_name["password"].
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
# a form level event, whenever any widget is focussed
|
272
|
+
f = @form.by_name["line"]
|
273
|
+
f.display_length(3).set_buffer(24).valid_range(1..200).
|
274
|
+
maxlen(3).
|
275
|
+
type(:integer)
|
276
|
+
|
277
|
+
@form.by_name["name"].set_buffer( "Not focusable").
|
278
|
+
set_focusable(false)
|
279
|
+
|
280
|
+
@form.by_name["regex"].valid_regex(/^[A-Z][a-z]*/).
|
281
|
+
set_buffer( "SYNOP").
|
282
|
+
display_length(10).
|
283
|
+
maxlen = 20
|
284
|
+
|
285
|
+
@form.by_name["password"].set_buffer("").
|
286
|
+
show('*').
|
287
|
+
color('red').
|
288
|
+
values(%w[scotty tiger secret pass qwerty]).
|
289
|
+
null_allowed true
|
290
|
+
|
291
|
+
# a form level event, whenever any widget is focussed, make the label red
|
294
292
|
@form.bind(:ENTER) { |f| f.label && f.label.bgcolor = 'red' if f.respond_to? :label}
|
295
293
|
@form.bind(:LEAVE) { |f| f.label && f.label.bgcolor = 'black' if f.respond_to? :label}
|
296
294
|
|
297
295
|
row += 1
|
298
|
-
colorlabel = Label.new @form, {'text' => "Select a color:", "row" => row, "col" => col,
|
296
|
+
colorlabel = Label.new @form, {'text' => "Select a color:", "row" => row, "col" => col,
|
297
|
+
"color"=>"cyan", "mnemonic" => 'S'}
|
299
298
|
$radio = Variable.new
|
300
299
|
$radio.update_command(colorlabel) {|tv, label| label.color tv.value; }
|
301
|
-
$radio.update_command() {|tv| message_label.color tv.value; align.bgcolor tv.value;
|
300
|
+
$radio.update_command() {|tv| message_label.color tv.value; align.bgcolor tv.value;
|
301
|
+
combo1.bgcolor tv.value}
|
302
|
+
$radio.update_command() {|tv| @form.widgets.each { |e| next unless e.is_a? Widget;
|
303
|
+
e.bgcolor tv.value }; @mb.bgcolor = tv.value }
|
302
304
|
|
303
305
|
# whenever updated set colorlabel and messagelabel to bold
|
304
|
-
$results.update_command(colorlabel,checkbutton) {|tv, label, cb|
|
306
|
+
$results.update_command(colorlabel,checkbutton) {|tv, label, cb|
|
307
|
+
attrs = cb.value ? 'bold' : 'normal'; label.attr(attrs); message_label.attr(attrs)}
|
305
308
|
|
306
309
|
align.bind(:ENTER_ROW) {|fld| message_label.justify fld.getvalue}
|
310
|
+
|
307
311
|
align.bind(:ENTER_ROW) {|fld|
|
308
312
|
if fld.getvalue == 'right'
|
309
313
|
checkbutton1.align_right true
|
@@ -317,7 +321,9 @@ if $0 == __FILE__
|
|
317
321
|
# whenever updated set colorlabel and messagelabel to reverse
|
318
322
|
#@cb_rev.update_command(colorlabel,checkbutton1) {|tv, label, cb| attrs = cb.value ? 'reverse' : nil; label.attr(attrs); message_label.attr(attrs)}
|
319
323
|
# changing nil to normal since PROP CHAN handler will not fire if nil being set.
|
320
|
-
@cb_rev.update_command(colorlabel,checkbutton1) {|tv, label, cb|
|
324
|
+
@cb_rev.update_command(colorlabel,checkbutton1) {|tv, label, cb|
|
325
|
+
attrs = cb.value ? 'reverse' : 'normal'; label.attr(attrs); message_label.attr(attrs)}
|
326
|
+
|
321
327
|
row += 1
|
322
328
|
dlen = 10
|
323
329
|
radio1 = RadioButton.new @form do
|
@@ -338,6 +344,7 @@ if $0 == __FILE__
|
|
338
344
|
row row
|
339
345
|
col col+24
|
340
346
|
end
|
347
|
+
|
341
348
|
row += 1
|
342
349
|
radio2 = RadioButton.new @form do
|
343
350
|
variable $radio
|
@@ -372,10 +379,29 @@ if $0 == __FILE__
|
|
372
379
|
end
|
373
380
|
}
|
374
381
|
|
382
|
+
# instead of using frozen, I will use a PropertyVeto
|
383
|
+
# to disallow changes to color itself
|
384
|
+
veto = lambda { |e, name|
|
385
|
+
if e.property_name == 'color'
|
386
|
+
if e.newvalue != name
|
387
|
+
raise PropertyVetoException.new("Cannot change this at all!", e)
|
388
|
+
end
|
389
|
+
elsif e.property_name == 'bgcolor'
|
390
|
+
raise PropertyVetoException.new("Cannot change this!", e)
|
391
|
+
end
|
392
|
+
}
|
393
|
+
[radio1, radio2, radio11, radio22].each { |r|
|
394
|
+
r.bind(:PROPERTY_CHANGE) do |e| veto.call(e, r.text) end
|
395
|
+
}
|
396
|
+
|
397
|
+
#
|
398
|
+
# define the menu
|
399
|
+
#
|
375
400
|
@mb = RubyCurses::MenuBar.new
|
376
401
|
filemenu = RubyCurses::Menu.new "File"
|
377
402
|
filemenu.add(item = RubyCurses::MenuItem.new("Open",'O'))
|
378
403
|
item.command(@form) {|it, form| $message.value = "Open called on menu bar";
|
404
|
+
require './qdfilechooser'
|
379
405
|
fchooser = QDFileChooser.new
|
380
406
|
option = fchooser.show_open_dialog
|
381
407
|
$message.value = "File Selection #{option}, #{fchooser.get_selected_file}"
|
@@ -412,14 +438,12 @@ if $0 == __FILE__
|
|
412
438
|
str << " bugs as they crop up."
|
413
439
|
testa.goto_start
|
414
440
|
#testa.cursor_bol
|
415
|
-
testa.handle_key ?\C-a.getbyte(0)
|
441
|
+
testa.handle_key ?\C-a.getbyte(0)
|
416
442
|
str.each_char {|c| testa.putch(c)}
|
417
443
|
testa.repaint
|
418
|
-
testa.handle_key KEY_DOWN
|
419
|
-
testa.handle_key
|
420
|
-
|
421
|
-
testa.handle_key ?\C-a.getbyte(0) # bol XXX should it be getbytes(0) now
|
422
|
-
#testa.cursor_bol
|
444
|
+
3.times { testa.handle_key KEY_DOWN }
|
445
|
+
testa.handle_key ?\C-a.getbyte(0)
|
446
|
+
|
423
447
|
str.each_char {|c| testa.putch(c)}
|
424
448
|
$message.value = "Wrapping textarea"
|
425
449
|
testa.repaint
|
@@ -428,7 +452,7 @@ if $0 == __FILE__
|
|
428
452
|
filemenu.add(item = RubyCurses::MenuItem.new("Wrap",'W'))
|
429
453
|
item.command(@form, texta) do |it, form, testa|
|
430
454
|
#testa.goto_start
|
431
|
-
testa.handle_key ?\C-a.getbyte(0)
|
455
|
+
testa.handle_key ?\C-a.getbyte(0)
|
432
456
|
testa.wrap_para
|
433
457
|
testa.repaint
|
434
458
|
throw(:menubarclose)
|
@@ -445,22 +469,41 @@ if $0 == __FILE__
|
|
445
469
|
#item.text="Labelcb"
|
446
470
|
# in next line, an explicit repaint is required since label is on another form.
|
447
471
|
item.command(colorlabel){|it, label| att = it.getvalue ? 'reverse' : 'normal'; label.attr(att); label.repaint}
|
448
|
-
row
|
449
|
-
|
450
|
-
|
472
|
+
@status_line = status_line :row => Ncurses.LINES-2
|
473
|
+
@status_line.command {
|
474
|
+
"%-20s | F1 Help | F2 Menu | F3 View | F4 Shell | F5 Sh | %20s" % [Time.now, $message.value]
|
475
|
+
}
|
476
|
+
row += 1 #2
|
451
477
|
ok_button = Button.new @form do
|
452
478
|
text "OK"
|
453
479
|
name "OK"
|
454
480
|
row row
|
455
481
|
col col
|
456
|
-
attr 'reverse'
|
457
|
-
highlight_background "white"
|
458
|
-
highlight_foreground "blue"
|
482
|
+
#attr 'reverse'
|
483
|
+
#highlight_background "white"
|
484
|
+
#highlight_foreground "blue"
|
459
485
|
mnemonic 'O'
|
460
486
|
end
|
461
487
|
ok_button.command() { |eve|
|
462
|
-
alert("Hope you enjoyed this demo", {'title' => "Hello", :bgcolor => :blue, :color => :white})
|
488
|
+
#alert("Hope you enjoyed this demo ", {'title' => "Hello", :bgcolor => :blue, :color => :white})
|
489
|
+
sw = case @lookfeel
|
490
|
+
when :dialog
|
491
|
+
progress_dialog :color_pair => $reversecolor, :row_offset => 4, :col_offset => 5
|
492
|
+
else
|
493
|
+
status_window # at footer last 2 rows
|
494
|
+
end
|
495
|
+
|
496
|
+
sw.print "I am adding some stuff to list", "And testing out StatusWindow"
|
497
|
+
sleep 1.0
|
463
498
|
listb.list.insert 0, "hello ruby", "so long python", "farewell java", "RIP .Net"
|
499
|
+
sw.printstring 1,1, "And some more now ..."
|
500
|
+
sleep 0.5
|
501
|
+
listb.list.insert 0, "get milk", "make beds", "clean shark pond","sell summer house"
|
502
|
+
sleep 0.5
|
503
|
+
sw.print "This was a test of Window", "we are almost done now ..."
|
504
|
+
clock = %w[ | / - \ ]
|
505
|
+
listb.list.each_with_index { |e, index| sw.print e, clock[index%4]; sleep 0.1 }
|
506
|
+
sw.linger #@window
|
464
507
|
}
|
465
508
|
|
466
509
|
# using ampersand to set mnemonic
|
@@ -469,26 +512,28 @@ if $0 == __FILE__
|
|
469
512
|
text "&Cancel"
|
470
513
|
row row
|
471
514
|
col col + 10
|
472
|
-
attr 'reverse'
|
473
|
-
highlight_background "white"
|
474
|
-
highlight_foreground "blue"
|
515
|
+
#attr 'reverse'
|
516
|
+
#highlight_background "white"
|
517
|
+
#highlight_foreground "blue"
|
475
518
|
#surround_chars ['{ ',' }'] ## change the surround chars
|
476
519
|
end
|
477
520
|
cancel_button.command { |aeve|
|
478
|
-
if
|
521
|
+
if @lookfeel == :dialog
|
522
|
+
ret = confirm("Do your really want to quit?")
|
523
|
+
else
|
524
|
+
ret = confirm_window("Do your really want to quit?")
|
525
|
+
end
|
526
|
+
if ret == :YES
|
479
527
|
throw(:close);
|
480
528
|
else
|
481
529
|
$message.value = "Quit aborted"
|
482
530
|
end
|
483
531
|
}
|
484
532
|
#col += 22
|
485
|
-
#Label.new @form, {'text' => "| F2 - Menu", "row" => row, "col" => col}
|
486
|
-
#col += 12
|
487
|
-
#Label.new @form, {'text' => "| F3 - View", "row" => row, "col" => col}
|
488
533
|
col += 15
|
489
534
|
require 'rbcurse/rprogress'
|
490
|
-
pbar = Progress.new @form, {:width => 20, :row =>
|
491
|
-
:color => 'red', :name => "pbar"}
|
535
|
+
pbar = Progress.new @form, {:width => 20, :row => Ncurses.LINES-1, :col => Ncurses.COLS-20 ,
|
536
|
+
:bgcolor => 'white', :color => 'red', :name => "pbar"}
|
492
537
|
#len = 1
|
493
538
|
#pbar.fraction(len/100.0)
|
494
539
|
pbar.visible false
|
@@ -544,14 +589,14 @@ if $0 == __FILE__
|
|
544
589
|
item.command { run_command "git diff --name-status" }
|
545
590
|
savemenu2.add(item)
|
546
591
|
savemenu.add(savemenu2)
|
547
|
-
|
592
|
+
|
548
593
|
@mb.toggle_key = FFI::NCurses::KEY_F2
|
549
594
|
@form.set_menu_bar @mb
|
550
|
-
|
595
|
+
|
551
596
|
# END
|
552
597
|
@form.bind_key(FFI::NCurses::KEY_F3) {
|
553
598
|
require 'rbcurse/extras/viewer'
|
554
|
-
RubyCurses::Viewer.view("rbc13.log", :close_key => KEY_RETURN, :title => "<Enter> to close")
|
599
|
+
RubyCurses::Viewer.view(path || "rbc13.log", :close_key => KEY_RETURN, :title => "<Enter> to close")
|
555
600
|
}
|
556
601
|
@form.bind_key(FFI::NCurses::KEY_F4) { shell_output }
|
557
602
|
@form.bind_key(FFI::NCurses::KEY_F5) { suspend }
|
@@ -563,24 +608,51 @@ if $0 == __FILE__
|
|
563
608
|
@form.bind_key([?\C-x,?d]) { run_command "git diff --name-status" }
|
564
609
|
@form.bind_key([?\C-x, ?s]) { run_command "git status" }
|
565
610
|
@form.bind_key([?\C-x,?w]) { run_command "git whatchanged" }
|
566
|
-
@form.bind_key(FFI::NCurses::
|
611
|
+
@form.bind_key(FFI::NCurses::KEY_F1) { display_app_help help_text() }
|
567
612
|
@form.repaint
|
568
613
|
@window.wrefresh
|
569
614
|
Ncurses::Panel.update_panels
|
570
|
-
|
571
|
-
|
572
|
-
|
615
|
+
|
616
|
+
# the main loop
|
617
|
+
|
618
|
+
while((ch = @window.getchar()) != FFI::NCurses::KEY_F10 )
|
619
|
+
begin
|
620
|
+
@form.handle_key(ch)
|
621
|
+
|
622
|
+
rescue FieldValidationException => fve
|
623
|
+
alert fve.to_s
|
624
|
+
|
625
|
+
f = @form.get_current_field
|
626
|
+
# lets restore the value
|
627
|
+
if f.respond_to? :restore_original_value
|
628
|
+
f.restore_original_value
|
629
|
+
@form.repaint
|
630
|
+
end
|
631
|
+
$error_message.value = ""
|
632
|
+
rescue => err
|
633
|
+
$log.debug( err) if err
|
634
|
+
$log.debug(err.backtrace.join("\n")) if err
|
635
|
+
alert "Got an exception in test2: #{err} "
|
636
|
+
$error_message.value = ""
|
637
|
+
end
|
638
|
+
|
639
|
+
# this should be avoided, we should not muffle the exception and set a variable
|
640
|
+
# However, we have been doing that
|
573
641
|
if $error_message.get_value != ""
|
574
|
-
|
642
|
+
if @lookfeel == :dialog
|
643
|
+
alert($error_message, {:bgcolor => :red, 'color' => 'yellow'}) if $error_message.get_value != ""
|
644
|
+
else
|
645
|
+
print_error_message $error_message, {:bgcolor => :red, :color => :yellow}
|
646
|
+
end
|
575
647
|
$error_message.value = ""
|
576
|
-
@form.repaint
|
577
648
|
end
|
649
|
+
|
578
650
|
@window.wrefresh
|
579
|
-
end
|
580
|
-
end
|
651
|
+
end # while loop
|
652
|
+
end # catch
|
581
653
|
rescue => ex
|
582
654
|
ensure
|
583
|
-
$log.debug " -==== EXCEPTION
|
655
|
+
$log.debug " -==== EXCEPTION =====-"
|
584
656
|
$log.debug( ex) if ex
|
585
657
|
$log.debug(ex.backtrace.join("\n")) if ex
|
586
658
|
@window.destroy if !@window.nil?
|