rbcurse 0.1.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 +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
@@ -0,0 +1,69 @@
|
|
1
|
+
module RubyCurses
|
2
|
+
|
3
|
+
##
|
4
|
+
# This is a basic list cell renderer that will render the to_s value of anything.
|
5
|
+
# Using alignment one can use for numbers too.
|
6
|
+
# However, for booleans it will print true and false. If editing, you may want checkboxes
|
7
|
+
class RfeRenderer < ListCellRenderer
|
8
|
+
def initialize text="", config={}, &block
|
9
|
+
super
|
10
|
+
@orig_bgcolor = @bgcolor
|
11
|
+
@orig_color = @color
|
12
|
+
@orig_attr = @attr
|
13
|
+
end
|
14
|
+
##
|
15
|
+
##
|
16
|
+
#
|
17
|
+
def repaint graphic, r=@row,c=@col, row_index=-1, value=@text, focussed=false, selected=false
|
18
|
+
|
19
|
+
@bgcolor = @orig_bgcolor
|
20
|
+
@color = @orig_color
|
21
|
+
@row_attr = @orig_attr
|
22
|
+
value = @parent.entries[row_index]
|
23
|
+
if value[0,1]=="/"
|
24
|
+
path = value.dup
|
25
|
+
else
|
26
|
+
path = @parent.cur_dir()+"/"+value
|
27
|
+
end
|
28
|
+
stat = File.stat(path)
|
29
|
+
if File.directory? path
|
30
|
+
@row_attr = Ncurses::A_BOLD
|
31
|
+
#@color = 'yellow'
|
32
|
+
end
|
33
|
+
value = format_string(value, path, stat)
|
34
|
+
super
|
35
|
+
|
36
|
+
end
|
37
|
+
GIGA_SIZE = 1073741824.0
|
38
|
+
MEGA_SIZE = 1048576.0
|
39
|
+
KILO_SIZE = 1024.0
|
40
|
+
|
41
|
+
# Return the file size with a readable style.
|
42
|
+
def readable_file_size(size, precision)
|
43
|
+
case
|
44
|
+
#when size == 1 : "1 B"
|
45
|
+
when size < KILO_SIZE : "%d B" % size
|
46
|
+
when size < MEGA_SIZE : "%.#{precision}f K" % (size / KILO_SIZE)
|
47
|
+
when size < GIGA_SIZE : "%.#{precision}f M" % (size / MEGA_SIZE)
|
48
|
+
else "%.#{precision}f G" % (size / GIGA_SIZE)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
def date_format t
|
52
|
+
t.strftime "%Y/%m/%d"
|
53
|
+
end
|
54
|
+
def format_string fn, path,stat
|
55
|
+
max_len = 30
|
56
|
+
f = fn.dup
|
57
|
+
if File.directory? path
|
58
|
+
#"%-*s\t(dir)" % [max_len,f]
|
59
|
+
#f = "/"+f # disallows search on keypress
|
60
|
+
f = "/"+f
|
61
|
+
end
|
62
|
+
if f.size > max_len
|
63
|
+
f = f[0..max_len-1]
|
64
|
+
end
|
65
|
+
"%-*s %10s %s" % [max_len,f, readable_file_size(stat.size,1), date_format(stat.mtime)]
|
66
|
+
end
|
67
|
+
# ADD HERE
|
68
|
+
end
|
69
|
+
end
|
data/examples/test1.rb
ADDED
@@ -0,0 +1,242 @@
|
|
1
|
+
# this is a test program, tests out messageboxes. type F1 to exit
|
2
|
+
# 2008-12-17 22:13 tried out the listdatamodel
|
3
|
+
# Certain terminals are not displaying background colors correctly.
|
4
|
+
# TERM=screen does but does not show UNDERLINES.
|
5
|
+
# TERM=xterm-color does but does not trap F1, f2 etc
|
6
|
+
# TERM=xterm does not but other things are fine.
|
7
|
+
#
|
8
|
+
#$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
|
9
|
+
require 'rubygems'
|
10
|
+
require 'ncurses'
|
11
|
+
require 'logger'
|
12
|
+
#require 'lib/rbcurse/mapper'
|
13
|
+
#require 'lib/rbcurse/keylabelprinter'
|
14
|
+
require 'rbcurse'
|
15
|
+
require 'rbcurse/rmessagebox'
|
16
|
+
|
17
|
+
if $0 == __FILE__
|
18
|
+
# Initialize curses
|
19
|
+
begin
|
20
|
+
# XXX update with new color and kb
|
21
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
22
|
+
$log = Logger.new("view.log")
|
23
|
+
$log.level = Logger::DEBUG
|
24
|
+
|
25
|
+
# @window = VER::Window.root_window
|
26
|
+
|
27
|
+
|
28
|
+
catch(:close) do
|
29
|
+
choice = ARGV[0] && ARGV[0].to_i || 3
|
30
|
+
$log.debug "START MESSAGE BOX TEST #{ARGV[0]}. choice==#{choice} ---------"
|
31
|
+
# need to pass a form, not window.
|
32
|
+
case choice
|
33
|
+
when 1:
|
34
|
+
@mb = RubyCurses::MessageBox.new do
|
35
|
+
title "Enter your name"
|
36
|
+
message "Enter your name"
|
37
|
+
type :list
|
38
|
+
button_type :ok_cancel
|
39
|
+
list %w[john tim lee wong rahul edward why chad andy]
|
40
|
+
list_selection_mode 'multiple'
|
41
|
+
default_values %w[ lee why ]
|
42
|
+
|
43
|
+
default_button 0
|
44
|
+
end
|
45
|
+
when 2:
|
46
|
+
@mb = RubyCurses::MessageBox.new do
|
47
|
+
title "Color selector"
|
48
|
+
message "Select a color"
|
49
|
+
type :custom
|
50
|
+
button_type :custom
|
51
|
+
buttons %w[&red &green &blue &yellow]
|
52
|
+
underlines [0,0,0,0]
|
53
|
+
default_button 0
|
54
|
+
end
|
55
|
+
when 3
|
56
|
+
config = {}
|
57
|
+
config["input_config"] = {}
|
58
|
+
config["input_config"]["chars_allowed"]=/[^xzq]/
|
59
|
+
config["input_config"]["valid_regex"]=/[A-Z][a-z]*/
|
60
|
+
@mb = RubyCurses::MessageBox.new nil, config do
|
61
|
+
title "Enter your name"
|
62
|
+
#message "Enter your first name. You are not permitted to enter x z or q and must enter a capital first"
|
63
|
+
message "Enter your first name. "
|
64
|
+
type :input
|
65
|
+
button_type :ok_cancel
|
66
|
+
default_value "Rahul"
|
67
|
+
end
|
68
|
+
when 4:
|
69
|
+
@form = RubyCurses::Form.new nil
|
70
|
+
field_list = []
|
71
|
+
titlelabel = RubyCurses::Label.new @form, {'text' => 'User', 'row'=>3, 'col'=>4, 'color'=>'black', 'bgcolor'=>'white', 'mnemonic'=>'U'}
|
72
|
+
field_list << titlelabel
|
73
|
+
field = RubyCurses::Field.new @form do
|
74
|
+
name "url"
|
75
|
+
row 3
|
76
|
+
col 10
|
77
|
+
display_length 30
|
78
|
+
# set_buffer "http://"
|
79
|
+
set_label titlelabel
|
80
|
+
end
|
81
|
+
checkbutton = RubyCurses::CheckBox.new @form do
|
82
|
+
# variable $results
|
83
|
+
#value = true
|
84
|
+
onvalue "Selected cb "
|
85
|
+
offvalue "UNselected cb"
|
86
|
+
color 'black'
|
87
|
+
bgcolor 'white'
|
88
|
+
text "No &frames"
|
89
|
+
row 4
|
90
|
+
col 4
|
91
|
+
end
|
92
|
+
field_list << field
|
93
|
+
field_list << checkbutton
|
94
|
+
checkbutton = RubyCurses::CheckBox.new @form do
|
95
|
+
# variable $results
|
96
|
+
value true
|
97
|
+
color 'black'
|
98
|
+
bgcolor 'white'
|
99
|
+
text "Use &HTTP/1.0"
|
100
|
+
row 5
|
101
|
+
col 4
|
102
|
+
end
|
103
|
+
field_list << checkbutton
|
104
|
+
checkbutton = RubyCurses::CheckBox.new @form do
|
105
|
+
# variable $results
|
106
|
+
color 'black'
|
107
|
+
bgcolor 'white'
|
108
|
+
text "Use &passive FTP"
|
109
|
+
row 6
|
110
|
+
col 4
|
111
|
+
end
|
112
|
+
field_list << checkbutton
|
113
|
+
titlelabel = RubyCurses::Label.new @form, {'text' => 'Language', 'row'=>8, 'col'=>4, 'color'=>'black', 'bgcolor'=>'white'}
|
114
|
+
field_list << titlelabel
|
115
|
+
$radio = RubyCurses::Variable.new
|
116
|
+
#$radio.update_command(colorlabel) {|tv, label| label.color tv.value}
|
117
|
+
radio1 = RubyCurses::RadioButton.new @form do
|
118
|
+
variable $radio
|
119
|
+
text "rub&y"
|
120
|
+
value "ruby"
|
121
|
+
color "red"
|
122
|
+
bgcolor 'white'
|
123
|
+
row 9
|
124
|
+
col 4
|
125
|
+
end
|
126
|
+
radio2 = RubyCurses::RadioButton.new @form do
|
127
|
+
variable $radio
|
128
|
+
text "python"
|
129
|
+
value "py&thon"
|
130
|
+
color "blue"
|
131
|
+
bgcolor 'white'
|
132
|
+
row 10
|
133
|
+
col 4
|
134
|
+
end
|
135
|
+
field_list << radio1
|
136
|
+
field_list << radio2
|
137
|
+
field.bind(:ENTER) do |f|
|
138
|
+
listconfig = {'bgcolor' => 'blue', 'color' => 'white'}
|
139
|
+
url_list= RubyCurses::ListDataModel.new(%w[john tim lee wong rahul edward _why chad andy])
|
140
|
+
pl = RubyCurses::PopupList.new do
|
141
|
+
# title "Enter URL "
|
142
|
+
row 4
|
143
|
+
col 10
|
144
|
+
width 30
|
145
|
+
#list url_list
|
146
|
+
list_data_model url_list
|
147
|
+
list_selection_mode 'single'
|
148
|
+
relative_to f
|
149
|
+
list_config listconfig
|
150
|
+
#default_values %w[ lee _why ]
|
151
|
+
bind :PRESS do |index|
|
152
|
+
field.set_buffer url_list[index]
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
@mb = RubyCurses::MessageBox.new @form do
|
157
|
+
#title "Color selector"
|
158
|
+
title "HTTP Configuration"
|
159
|
+
# message "Enter your name"
|
160
|
+
# type :custom
|
161
|
+
# buttons %w[red green blue yellow]
|
162
|
+
# underlines [0,0,0,0]
|
163
|
+
# type :input
|
164
|
+
# default_value "rahul"
|
165
|
+
#type :field_list
|
166
|
+
#field_list field_list
|
167
|
+
button_type :ok
|
168
|
+
default_button 0
|
169
|
+
end
|
170
|
+
when 5:
|
171
|
+
@form = RubyCurses::Form.new nil
|
172
|
+
label = RubyCurses::Label.new @form, {'text' => 'File', 'row'=>3, 'col'=>4, 'color'=>'black', 'bgcolor'=>'white', 'mnemonic'=>'F'}
|
173
|
+
field = RubyCurses::Field.new @form do
|
174
|
+
name "file"
|
175
|
+
row 3
|
176
|
+
col 10
|
177
|
+
display_length 40
|
178
|
+
set_label label
|
179
|
+
end
|
180
|
+
flist = Dir.glob("*.*")
|
181
|
+
listb = RubyCurses::Listbox.new @form do
|
182
|
+
name "mylist"
|
183
|
+
row 5
|
184
|
+
col 10
|
185
|
+
width 40
|
186
|
+
height 10
|
187
|
+
list flist
|
188
|
+
title "File list"
|
189
|
+
title_attrib 'bold'
|
190
|
+
end
|
191
|
+
#listb.list.bind(:ENTER_ROW) { field.set_buffer listb.selected_item }
|
192
|
+
field.bind(:CHANGE) do |f|
|
193
|
+
flist = Dir.glob(f.getvalue+"*")
|
194
|
+
l = listb.list
|
195
|
+
l.remove_all
|
196
|
+
l.insert 0, *flist
|
197
|
+
end
|
198
|
+
@mb = RubyCurses::MessageBox.new @form do
|
199
|
+
title "Sample File Selector"
|
200
|
+
type :override
|
201
|
+
height 20
|
202
|
+
width 60
|
203
|
+
top 5
|
204
|
+
left 20
|
205
|
+
default_button 0
|
206
|
+
button_type :ok_cancel
|
207
|
+
|
208
|
+
end
|
209
|
+
$log.debug "MBOX :selected #{listb.selected_item}"
|
210
|
+
end
|
211
|
+
|
212
|
+
$log.debug "MBOX :selected button index #{@mb.selected_index} "
|
213
|
+
$log.debug "MBOX :input val #{@mb.input_value} "
|
214
|
+
# $log.debug "row : #{@form.row} "
|
215
|
+
# $log.debug "col : #{@form.col} "
|
216
|
+
# $log.debug "Config : #{@form.config.inspect} "
|
217
|
+
# @form.configure "row", 23
|
218
|
+
# @form.configure "col", 83
|
219
|
+
# $log.debug "row : #{@form.row} "
|
220
|
+
# x = @form.row
|
221
|
+
# @form.depth 21
|
222
|
+
# @form.depth = 22
|
223
|
+
# @form.depth 24
|
224
|
+
# @form.depth = 25
|
225
|
+
# $log.debug "col : #{@form.col} "
|
226
|
+
# $log.debug "config : #{@form.config.inspect} "
|
227
|
+
# $log.debug "row : #{@form.configure('row')} "
|
228
|
+
#$log.debug "mrgods : #{@form.public_methods.sort.inspect}"
|
229
|
+
#while((ch = @window.getchar()) != ?q )
|
230
|
+
# @window.wrefresh
|
231
|
+
#end
|
232
|
+
end
|
233
|
+
rescue => ex
|
234
|
+
ensure
|
235
|
+
@window.destroy unless @window.nil?
|
236
|
+
VER::stop_ncurses
|
237
|
+
p ex if ex
|
238
|
+
p(ex.backtrace.join("\n")) if ex
|
239
|
+
$log.debug( ex) if ex
|
240
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
241
|
+
end
|
242
|
+
end
|