rbcurse-core 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +69 -0
- data/VERSION +1 -0
- data/examples/abasiclist.rb +151 -0
- data/examples/alpmenu.rb +46 -0
- data/examples/app.sample +17 -0
- data/examples/atree.rb +100 -0
- data/examples/common/file.rb +45 -0
- data/examples/data/README.markdown +9 -0
- data/examples/data/brew.txt +38 -0
- data/examples/data/color.2 +37 -0
- data/examples/data/gemlist.txt +60 -0
- data/examples/data/lotr.txt +12 -0
- data/examples/data/ports.txt +136 -0
- data/examples/data/table.txt +37 -0
- data/examples/data/tasks.csv +88 -0
- data/examples/data/tasks.txt +27 -0
- data/examples/data/todo.txt +10 -0
- data/examples/data/todocsv.csv +28 -0
- data/examples/data/unix1.txt +21 -0
- data/examples/data/unix2.txt +11 -0
- data/examples/dbdemo.rb +487 -0
- data/examples/dirtree.rb +90 -0
- data/examples/newtabbedwindow.rb +100 -0
- data/examples/newtesttabp.rb +92 -0
- data/examples/tabular.rb +132 -0
- data/examples/tasks.rb +167 -0
- data/examples/term2.rb +83 -0
- data/examples/testkeypress.rb +72 -0
- data/examples/testlistbox.rb +158 -0
- data/examples/testmessagebox.rb +140 -0
- data/examples/testree.rb +106 -0
- data/examples/testwsshortcuts.rb +66 -0
- data/examples/testwsshortcuts2.rb +127 -0
- data/lib/rbcurse.rb +8 -0
- data/lib/rbcurse/core/docs/index.txt +73 -0
- data/lib/rbcurse/core/include/action.rb +40 -0
- data/lib/rbcurse/core/include/appmethods.rb +112 -0
- data/lib/rbcurse/core/include/bordertitle.rb +41 -0
- data/lib/rbcurse/core/include/chunk.rb +182 -0
- data/lib/rbcurse/core/include/io.rb +953 -0
- data/lib/rbcurse/core/include/listcellrenderer.rb +140 -0
- data/lib/rbcurse/core/include/listeditable.rb +317 -0
- data/lib/rbcurse/core/include/listscrollable.rb +590 -0
- data/lib/rbcurse/core/include/listselectable.rb +264 -0
- data/lib/rbcurse/core/include/multibuffer.rb +83 -0
- data/lib/rbcurse/core/include/orderedhash.rb +77 -0
- data/lib/rbcurse/core/include/ractionevent.rb +67 -0
- data/lib/rbcurse/core/include/rchangeevent.rb +27 -0
- data/lib/rbcurse/core/include/rhistory.rb +62 -0
- data/lib/rbcurse/core/include/rinputdataevent.rb +47 -0
- data/lib/rbcurse/core/include/vieditable.rb +170 -0
- data/lib/rbcurse/core/system/colormap.rb +163 -0
- data/lib/rbcurse/core/system/keyboard.rb +150 -0
- data/lib/rbcurse/core/system/keydefs.rb +30 -0
- data/lib/rbcurse/core/system/ncurses.rb +218 -0
- data/lib/rbcurse/core/system/panel.rb +162 -0
- data/lib/rbcurse/core/system/window.rb +901 -0
- data/lib/rbcurse/core/util/ansiparser.rb +117 -0
- data/lib/rbcurse/core/util/app.rb +1235 -0
- data/lib/rbcurse/core/util/basestack.rb +407 -0
- data/lib/rbcurse/core/util/bottomline.rb +1850 -0
- data/lib/rbcurse/core/util/colorparser.rb +71 -0
- data/lib/rbcurse/core/util/focusmanager.rb +31 -0
- data/lib/rbcurse/core/util/padreader.rb +189 -0
- data/lib/rbcurse/core/util/rcommandwindow.rb +587 -0
- data/lib/rbcurse/core/util/rdialogs.rb +619 -0
- data/lib/rbcurse/core/util/viewer.rb +149 -0
- data/lib/rbcurse/core/util/widgetshortcuts.rb +505 -0
- data/lib/rbcurse/core/widgets/applicationheader.rb +102 -0
- data/lib/rbcurse/core/widgets/box.rb +58 -0
- data/lib/rbcurse/core/widgets/divider.rb +310 -0
- data/lib/rbcurse/core/widgets/keylabelprinter.rb +178 -0
- data/lib/rbcurse/core/widgets/rcombo.rb +238 -0
- data/lib/rbcurse/core/widgets/rcontainer.rb +415 -0
- data/lib/rbcurse/core/widgets/rlink.rb +30 -0
- data/lib/rbcurse/core/widgets/rlist.rb +723 -0
- data/lib/rbcurse/core/widgets/rmenu.rb +939 -0
- data/lib/rbcurse/core/widgets/rmenulink.rb +22 -0
- data/lib/rbcurse/core/widgets/rmessagebox.rb +373 -0
- data/lib/rbcurse/core/widgets/rprogress.rb +118 -0
- data/lib/rbcurse/core/widgets/rtabbedpane.rb +615 -0
- data/lib/rbcurse/core/widgets/rtabbedwindow.rb +68 -0
- data/lib/rbcurse/core/widgets/rtextarea.rb +920 -0
- data/lib/rbcurse/core/widgets/rtextview.rb +780 -0
- data/lib/rbcurse/core/widgets/rtree.rb +787 -0
- data/lib/rbcurse/core/widgets/rwidget.rb +3040 -0
- data/lib/rbcurse/core/widgets/scrollbar.rb +143 -0
- data/lib/rbcurse/core/widgets/statusline.rb +94 -0
- data/lib/rbcurse/core/widgets/tabular.rb +264 -0
- data/lib/rbcurse/core/widgets/tabularwidget.rb +1211 -0
- data/lib/rbcurse/core/widgets/textpad.rb +516 -0
- data/lib/rbcurse/core/widgets/tree/treecellrenderer.rb +150 -0
- data/lib/rbcurse/core/widgets/tree/treemodel.rb +428 -0
- metadata +156 -0
data/examples/term2.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'rbcurse/core/util/app'
|
2
|
+
require 'rbcurse/core/widgets/tabular'
|
3
|
+
require 'rbcurse/core/widgets/scrollbar'
|
4
|
+
|
5
|
+
def my_help_text
|
6
|
+
<<-eos
|
7
|
+
term2.rb
|
8
|
+
=========================================================================
|
9
|
+
Basic Usage
|
10
|
+
|
11
|
+
This example shows different ways of putting data in tabular format.
|
12
|
+
|
13
|
+
The 2 tables on the right differ in behaviour. The first puts tabular data
|
14
|
+
into a listbox so you get single/multiple selection. The second puts tabular
|
15
|
+
data into a textview, so there's no selection. <space> scrolls instead of
|
16
|
+
selects <ENTER> allows us to use the word under cursor for further actions.
|
17
|
+
|
18
|
+
To see an example of placing tabular data in a tabular widget, see tabular.rb.
|
19
|
+
The advantage of tabular_widget is column resizing, hiding, aligning and sorting.
|
20
|
+
|
21
|
+
=========================================================================
|
22
|
+
:n or Alt-n for next buffer. 'q' to quit.
|
23
|
+
|
24
|
+
eos
|
25
|
+
end
|
26
|
+
App.new do
|
27
|
+
header = app_header "rbcurse #{Rbcurse::VERSION}", :text_center => "Tabular Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
28
|
+
message "Press F10 to escape from here"
|
29
|
+
install_help_text my_help_text
|
30
|
+
|
31
|
+
flow :width => FFI::NCurses.COLS , :height => FFI::NCurses.LINES-2 do
|
32
|
+
stack :margin_top => 1, :width_pc => 20 do
|
33
|
+
t = Tabular.new(['a', 'b'], [1, 2], [3, 4])
|
34
|
+
listbox :list => t.render
|
35
|
+
|
36
|
+
t = Tabular.new ['a', 'b']
|
37
|
+
t << [1, 2]
|
38
|
+
t << [3, 4]
|
39
|
+
t << [4, 6]
|
40
|
+
#list_box :list => t.to_s.split("\n")
|
41
|
+
listbox :list => t.render
|
42
|
+
end # stack
|
43
|
+
file = "data/tasks.csv"
|
44
|
+
lines = File.open(file,'r').readlines
|
45
|
+
heads = %w[ id sta type prio title ]
|
46
|
+
t = Tabular.new do |t|
|
47
|
+
t.headings = heads
|
48
|
+
lines.each { |e| t.add_row e.split '|' }
|
49
|
+
end
|
50
|
+
|
51
|
+
t = t.render
|
52
|
+
wid = t[0].length + 2
|
53
|
+
wid = 30
|
54
|
+
stack :margin_top => 1, :width_pc => 80 , :height_pc => 100 do
|
55
|
+
listbox :list => t, :title => '[ tasks ]', :height_pc => 60
|
56
|
+
|
57
|
+
r = `ls -l`
|
58
|
+
res = r.split("\n")
|
59
|
+
|
60
|
+
t = Tabular.new do
|
61
|
+
# self.headings = 'Perm', 'Gr', 'User', 'U', 'Size', 'Mon', 'Date', 'Time', 'File' # changed 2011 dts
|
62
|
+
self.headings = 'User', 'Size', 'Mon', 'Date', 'Time', 'File'
|
63
|
+
res.each { |e|
|
64
|
+
cols = e.split
|
65
|
+
next if cols.count < 6
|
66
|
+
cols = cols[3..-1]
|
67
|
+
cols = cols[0..5] if cols.count > 6
|
68
|
+
add_row cols
|
69
|
+
}
|
70
|
+
column_width 1, 6
|
71
|
+
align_column 1, :right
|
72
|
+
end
|
73
|
+
#lb = list_box :list => t.render2
|
74
|
+
lb = textview :set_content => t.render, :title => '[ls -l]', :height_pc => 40
|
75
|
+
lb.bind(:PRESS){|tae|
|
76
|
+
alert "Pressed list on line #{tae.current_index} #{tae.word_under_cursor(nil, nil, "|")} "
|
77
|
+
}
|
78
|
+
Scrollbar.new @form, :parent => lb
|
79
|
+
#make a textview that is vienabled by default.
|
80
|
+
end
|
81
|
+
end # end
|
82
|
+
|
83
|
+
end # app
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# demo to test keypresses
|
2
|
+
# press any key and see the value that ncurses or our routines catch.
|
3
|
+
# Press alt and control combinations and Function keys
|
4
|
+
# Ideally each key should return only one value. Sometimes, some TERM setting
|
5
|
+
# or terminal emulator may not give correct values or may give different values
|
6
|
+
# from what we are expecting.
|
7
|
+
# Exit using 'q'.
|
8
|
+
require 'logger'
|
9
|
+
require 'rbcurse'
|
10
|
+
require 'rbcurse/core/widgets/rtextview'
|
11
|
+
if $0 == __FILE__
|
12
|
+
include RubyCurses
|
13
|
+
include RubyCurses::Utils
|
14
|
+
|
15
|
+
begin
|
16
|
+
# Initialize curses
|
17
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
18
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
|
19
|
+
|
20
|
+
$log.level = Logger::DEBUG
|
21
|
+
|
22
|
+
@window = VER::Window.root_window
|
23
|
+
|
24
|
+
catch(:close) do
|
25
|
+
colors = Ncurses.COLORS
|
26
|
+
$log.debug "START #{colors} colors ---------"
|
27
|
+
@form = Form.new @window
|
28
|
+
r = 1; c = 30;
|
29
|
+
|
30
|
+
# please use a hash to pass these values, avoid this old style
|
31
|
+
# i want to move away from it as it comlpicates code
|
32
|
+
texta = TextView.new @form do
|
33
|
+
name "mytext"
|
34
|
+
row r
|
35
|
+
col c
|
36
|
+
width 60
|
37
|
+
height 15
|
38
|
+
#editable false
|
39
|
+
focusable false
|
40
|
+
title "[ Keypresses ]"
|
41
|
+
#title_attrib (Ncurses::A_REVERSE | Ncurses::A_BOLD)
|
42
|
+
title_attrib (Ncurses::A_BOLD)
|
43
|
+
end
|
44
|
+
help = "q to quit. Check keys. F1..10, C-a..z, Alt a-zA-Z0-9, C-left,rt, Sh-F5..10 .: #{$0}"
|
45
|
+
help1 = "Press in quick succession: 1) M-[, w and (2) M-[, M-w. (3) M-Sh-O, w."
|
46
|
+
RubyCurses::Label.new @form, {'text' => help, "row" => 21, "col" => 2, "color" => "yellow"}
|
47
|
+
RubyCurses::Label.new @form, {'text' => help1, "row" => 22, "col" => 2, "color" => "green"}
|
48
|
+
|
49
|
+
@form.repaint
|
50
|
+
@window.wrefresh
|
51
|
+
Ncurses::Panel.update_panels
|
52
|
+
while((ch = @window.getchar()) != 999 )
|
53
|
+
str = keycode_tos ch
|
54
|
+
$log.debug "#{ch} got (#{str})"
|
55
|
+
texta << "#{ch} got (#{str})"
|
56
|
+
texta.goto_end
|
57
|
+
texta.repaint
|
58
|
+
@form.repaint
|
59
|
+
@window.wrefresh
|
60
|
+
break if ch == ?\q.getbyte(0)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
rescue => ex
|
64
|
+
ensure
|
65
|
+
@window.destroy if !@window.nil?
|
66
|
+
VER::stop_ncurses
|
67
|
+
p ex if ex
|
68
|
+
p(ex.backtrace.join("\n")) if ex
|
69
|
+
$log.debug( ex) if ex
|
70
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
# this program tests out a listbox
|
2
|
+
# This is written in the old style where we start and end ncurses and initiate a
|
3
|
+
# getch loop. It gives more control.
|
4
|
+
# The new style is to use App which does the ncurses setup and teardown, as well
|
5
|
+
# as manages keys. It also takes care of logger and includes major stuff.
|
6
|
+
require 'logger'
|
7
|
+
require 'rbcurse'
|
8
|
+
require 'rbcurse/core/widgets/rlist'
|
9
|
+
require 'rbcurse/core/widgets/rtextview'
|
10
|
+
require 'rbcurse/core/include/vieditable'
|
11
|
+
#require 'rbcurse/experimental/widgets/undomanager'
|
12
|
+
class RubyCurses::List
|
13
|
+
# vieditable includes listeditable which
|
14
|
+
# does bring in some functions which can crash program like x and X TODO
|
15
|
+
# also, f overrides list f mapping. TODO
|
16
|
+
include ViEditable
|
17
|
+
end
|
18
|
+
def my_help_text
|
19
|
+
<<-eos
|
20
|
+
|
21
|
+
=========================================================================
|
22
|
+
Basic Usage
|
23
|
+
|
24
|
+
Press <ENTER> on a class name on the first list, to view ri information
|
25
|
+
for it on the right.
|
26
|
+
|
27
|
+
Tab to right area, and press <ENTER> on a method name, to see its details
|
28
|
+
Press / <slash> in any box to search. e.g /String will take you to the
|
29
|
+
first occurrence of String. <n> will take you to next.
|
30
|
+
|
31
|
+
To go quickly to first class starting with 'S', type <f> followed by <S>.
|
32
|
+
Then press <n> to go to next match.
|
33
|
+
|
34
|
+
=========================================================================
|
35
|
+
Vim Edit Keys
|
36
|
+
|
37
|
+
The list on left has some extra vim keys enabled such as :
|
38
|
+
yy - yank/copy current line/s
|
39
|
+
P, p - paste after or before
|
40
|
+
dd - delete current line
|
41
|
+
o - insert a line after this one
|
42
|
+
C - change content of current line
|
43
|
+
These are not of use here, but are demonstrative of list capabilities.
|
44
|
+
|
45
|
+
=========================================================================
|
46
|
+
Buffers
|
47
|
+
|
48
|
+
Ordinary a textview contains only one buffer. However, the one on the right
|
49
|
+
is extended for multiple buffers. Pressing ENTER on the left on several
|
50
|
+
rows opens multiple buffers on the right. Use M-n (Alt-N) and M-p to navigate.
|
51
|
+
ALternatively, : maps to a menu, so :n and :p may also be used.
|
52
|
+
<BACKSPACE> will also go to previous buffer, like a browser.
|
53
|
+
|
54
|
+
=========================================================================
|
55
|
+
Press <M-n> for next help screen, or try :n
|
56
|
+
|
57
|
+
eos
|
58
|
+
end
|
59
|
+
if $0 == __FILE__
|
60
|
+
include RubyCurses
|
61
|
+
|
62
|
+
begin
|
63
|
+
# Initialize curses
|
64
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
65
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")))
|
66
|
+
$log.level = Logger::DEBUG
|
67
|
+
|
68
|
+
@window = VER::Window.root_window
|
69
|
+
$catch_alt_digits = true; # emacs like alt-1..9 numeric arguments
|
70
|
+
install_help_text my_help_text
|
71
|
+
# Initialize few color pairs
|
72
|
+
# Create the window to be associated with the form
|
73
|
+
# Un post form and free the memory
|
74
|
+
|
75
|
+
catch(:close) do
|
76
|
+
@form = Form.new @window
|
77
|
+
@form.bind_key(KEY_F1, 'help'){ display_app_help }
|
78
|
+
|
79
|
+
# this is the old style of printing something directly on the window.
|
80
|
+
# The new style is to use a header
|
81
|
+
@form.window.printstring 0, 30, "Demo of Listbox - some vim keys", $normalcolor, BOLD
|
82
|
+
r = 1; fc = 1;
|
83
|
+
|
84
|
+
# this is the old style of using a label at the screen bottom, you can use the status_line
|
85
|
+
|
86
|
+
v = "F10 quits. F1 Help. Try j k gg G o O C dd f<char> w yy p P / . Press ENTER on Class or Method"
|
87
|
+
var = RubyCurses::Label.new @form, {'text' => v, "row" => FFI::NCurses.LINES-2,
|
88
|
+
"col" => fc, "display_length" => 100}
|
89
|
+
|
90
|
+
h = FFI::NCurses.LINES-3
|
91
|
+
file = "./data/ports.txt"
|
92
|
+
#mylist = File.open(file,'r').readlines
|
93
|
+
mylist = `ri -f bs`.split("\n")
|
94
|
+
w = 25
|
95
|
+
#0.upto(100) { |v| mylist << "#{v} scrollable data" }
|
96
|
+
#
|
97
|
+
listb = List.new @form, :name => "mylist" ,
|
98
|
+
:row => r ,
|
99
|
+
:col => 1 ,
|
100
|
+
:width => w,
|
101
|
+
:height => h,
|
102
|
+
:list => mylist,
|
103
|
+
:selection_mode => :SINGLE,
|
104
|
+
:show_selector => true,
|
105
|
+
#row_selected_symbol "[X] "
|
106
|
+
#row_unselected_symbol "[ ] "
|
107
|
+
:title => " Ruby Classes "
|
108
|
+
#title_attrib 'reverse'
|
109
|
+
listb.one_key_selection = false # this allows us to map keys to methods
|
110
|
+
listb.vieditable_init_listbox
|
111
|
+
include Io
|
112
|
+
listb.bind_key(?r, 'get file'){ get_file("Get a file:", 70) }
|
113
|
+
listb.bind(:PRESS) {
|
114
|
+
w = @form.by_name["tv"];
|
115
|
+
lines = `ri -f bs #{listb.text}`.split("\n")
|
116
|
+
#w.set_content(lines, :ansi)
|
117
|
+
w.add_content(lines, :content_type => :ansi, :title => listb.text)
|
118
|
+
w.buffer_last
|
119
|
+
#w.title = listb.text
|
120
|
+
}
|
121
|
+
|
122
|
+
tv = RubyCurses::TextView.new @form, :row => r, :col => w+1, :height => h, :width => FFI::NCurses.COLS-w-1,
|
123
|
+
:name => "tv", :title => "Press Enter on method"
|
124
|
+
tv.set_content ["Press Enter on list to view ri information in this area.",
|
125
|
+
"Press ENTER on method name to see details"]
|
126
|
+
require 'rbcurse/core/include/multibuffer'
|
127
|
+
tv.extend(RubyCurses::MultiBuffers)
|
128
|
+
|
129
|
+
# pressing ENTER on a method name will popup details for that method
|
130
|
+
tv.bind(:PRESS) { |ev|
|
131
|
+
w = ev.word_under_cursor.strip
|
132
|
+
# check that user did not hit enter on empty area
|
133
|
+
if w != ""
|
134
|
+
text = `ri -f bs #{tv.title}.#{w}` rescue "No details for #{w}"
|
135
|
+
text = text.split("\n")
|
136
|
+
view(text, :content_type => :ansi)
|
137
|
+
end
|
138
|
+
}
|
139
|
+
|
140
|
+
|
141
|
+
@form.repaint
|
142
|
+
@window.wrefresh
|
143
|
+
Ncurses::Panel.update_panels
|
144
|
+
while((ch = @window.getchar()) != KEY_F10 )
|
145
|
+
@form.handle_key(ch)
|
146
|
+
@window.wrefresh
|
147
|
+
end
|
148
|
+
end
|
149
|
+
rescue => ex
|
150
|
+
$log.debug( ex) if ex
|
151
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
152
|
+
ensure
|
153
|
+
@window.destroy if !@window.nil?
|
154
|
+
VER::stop_ncurses
|
155
|
+
p ex if ex
|
156
|
+
p(ex.backtrace.join("\n")) if ex
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# To test out the new messagebox
|
2
|
+
# The old messagebox provided a lot of convenience methods that were complicated
|
3
|
+
# and confusing. This one is simpler.
|
4
|
+
# The examples here are based on the old test1.rb that will not work now
|
5
|
+
# since the interface has been changed and simplified
|
6
|
+
#
|
7
|
+
require 'logger'
|
8
|
+
require 'rbcurse'
|
9
|
+
require 'rbcurse/core/widgets/rmessagebox'
|
10
|
+
#require 'rbcurse/deprecated/widgets/rmessagebox'
|
11
|
+
|
12
|
+
if $0 == __FILE__
|
13
|
+
# Initialize curses
|
14
|
+
begin
|
15
|
+
# XXX update with new color and kb
|
16
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
17
|
+
$log = Logger.new((File.join(ENV['LOGDIR'] || "./" ,"rbc13.log")))
|
18
|
+
$log.level = Logger::DEBUG
|
19
|
+
|
20
|
+
# @window = VER::Window.root_window
|
21
|
+
|
22
|
+
|
23
|
+
catch(:close) do
|
24
|
+
choice = ARGV[0] && ARGV[0].to_i || 3
|
25
|
+
$log.debug "START MESSAGE BOX TEST #{ARGV[0]}. choice==#{choice} ---------"
|
26
|
+
# need to pass a form, not window.
|
27
|
+
case choice
|
28
|
+
when 1
|
29
|
+
require 'rbcurse/core/widgets/rlist'
|
30
|
+
nn = "mylist"
|
31
|
+
l = List.new nil, :row => 2, :col => 5, :list => %w[john tim lee wong rahul edward why chad andy],
|
32
|
+
:selection_mode => :multiple, :height => 10, :width => 20 , :selected_color => :green, :selected_bgcolor => :white, :selected_indices => [2,6], :name => nn
|
33
|
+
#default_values %w[ lee why ]
|
34
|
+
@mb = MessageBox.new :width => 30, :height => 18 do
|
35
|
+
title "Select a name"
|
36
|
+
button_type :ok_cancel
|
37
|
+
item Label.new :row => 1, :col => 1, :text => "Enter your name:"
|
38
|
+
item l
|
39
|
+
|
40
|
+
#default_button 0 # TODO
|
41
|
+
end
|
42
|
+
@mb.run
|
43
|
+
$log.debug "XXX: #{l.selected_indices} "
|
44
|
+
n = @mb.widget(nn)
|
45
|
+
$log.debug "XXXX: #{n.selected_indices}, #{n.name} "
|
46
|
+
when 2
|
47
|
+
@mb = RubyCurses::MessageBox.new do
|
48
|
+
title "Color selector"
|
49
|
+
message "Select a color"
|
50
|
+
#item Label.new :text => "Select a color", :row => 1 , :col => 2
|
51
|
+
|
52
|
+
r = 3
|
53
|
+
c = 2
|
54
|
+
%w[&red &green &blue &yellow].each_with_index { |b, i|
|
55
|
+
bu = Button.new :name => b, :text => b, :row => r, :col => c
|
56
|
+
bu.command { throw(:close, i) }
|
57
|
+
item bu
|
58
|
+
#bu.default_button(true) if i == 0
|
59
|
+
#r += 1
|
60
|
+
c += b.length + 5
|
61
|
+
}
|
62
|
+
end
|
63
|
+
index = @mb.run
|
64
|
+
$log.debug "XXX: messagebox 2 ret #{index} "
|
65
|
+
when 3
|
66
|
+
@mb = RubyCurses::MessageBox.new do
|
67
|
+
title "Enter your name"
|
68
|
+
#message "Enter your first name. You are not permitted to enter x z or q and must enter a capital first"
|
69
|
+
message "Enter your first name. Initcaps "
|
70
|
+
add Field.new :chars_allowed => /[^0-9xyz]/, :valid_regex => /^[A-Z][a-z]*/, :default => "Matz", :bgcolor => :cyan
|
71
|
+
button_type :ok_cancel
|
72
|
+
end
|
73
|
+
@mb.run
|
74
|
+
$log.debug "XXX: got #{@mb.widget(1).text} "
|
75
|
+
when 4
|
76
|
+
mb = MessageBox.new :title => "HTTP Configuration" , :width => 50 do
|
77
|
+
add Field.new :label => 'User', :name => "user", :display_length => 30, :bgcolor => :cyan
|
78
|
+
add CheckBox.new :text => "No &frames", :onvalue => "Selected", :offvalue => "UNselected"
|
79
|
+
add CheckBox.new :text => "Use &HTTP/1.0", :value => true
|
80
|
+
add CheckBox.new :text => "Use &passive FTP"
|
81
|
+
add Label.new :text => " Language ", :attr => REVERSE
|
82
|
+
$radio = RubyCurses::Variable.new
|
83
|
+
add RadioButton.new :text => "py&thon", :value => "python", :color => :blue, :variable => $radio
|
84
|
+
add RadioButton.new :text => "rub&y", :color => :red, :variable => $radio
|
85
|
+
button_type :ok
|
86
|
+
end
|
87
|
+
field = mb.widget("user")
|
88
|
+
field.bind(:ENTER) do |f|
|
89
|
+
listconfig = {'bgcolor' => 'blue', 'color' => 'white'}
|
90
|
+
users= %w[john tim lee wong rahul edward _why chad andy]
|
91
|
+
index = popuplist(users, :relative_to => field, :col => field.col + 6, :width => field.display_length)
|
92
|
+
field.set_buffer users[index] if index
|
93
|
+
end
|
94
|
+
mb.run
|
95
|
+
|
96
|
+
when 5
|
97
|
+
require 'rbcurse/core/widgets/rlist'
|
98
|
+
label = Label.new 'text' => 'File', 'mnemonic'=>'F', :row => 3, :col => 5
|
99
|
+
field = Field.new :name => "file", :row => 3 , :col => 10, :width => 40, :set_label => label
|
100
|
+
#flist = Dir.glob(File.join( File.expand_path("~/"), "*"))
|
101
|
+
flist = Dir.glob("*")
|
102
|
+
listb = List.new :name => "mylist", :row => 4, :col => 3, :width => 50, :height => 10,
|
103
|
+
:list => flist, :title => "File List", :selected_bgcolor => :white, :selected_color => :blue,
|
104
|
+
:selection_mode => :single, :border_attrib => REVERSE
|
105
|
+
#listb.bind(:ENTER_ROW) { field.set_buffer listb.selected_item }
|
106
|
+
# if you find that cursor goes into listbox while typing, then
|
107
|
+
# i've put set_form_row in listbox list_data_changed
|
108
|
+
field.bind(:CHANGE) do |f|
|
109
|
+
flist = Dir.glob("*"+f.getvalue+"*")
|
110
|
+
#l.insert( 0, *flist) if flist
|
111
|
+
listb.list flist
|
112
|
+
end
|
113
|
+
mb = RubyCurses::MessageBox.new :height => 20, :width => 60 do
|
114
|
+
title "Sample File Selector"
|
115
|
+
add label
|
116
|
+
add field
|
117
|
+
add listb
|
118
|
+
#height 20
|
119
|
+
#width 60
|
120
|
+
#top 5
|
121
|
+
#left 20
|
122
|
+
#default_button 0
|
123
|
+
button_type :ok_cancel
|
124
|
+
|
125
|
+
end
|
126
|
+
mb.run
|
127
|
+
$log.debug "MBOX :selected #{listb.selected_item}"
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
rescue => ex
|
132
|
+
ensure
|
133
|
+
@window.destroy unless @window.nil?
|
134
|
+
VER::stop_ncurses
|
135
|
+
p ex if ex
|
136
|
+
p(ex.backtrace.join("\n")) if ex
|
137
|
+
$log.debug( ex) if ex
|
138
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
139
|
+
end
|
140
|
+
end
|