rbcurse-core 0.0.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/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
|