rbhex-core 1.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.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/CHANGELOG +2000 -0
- data/LICENSE +56 -0
- data/README.md +44 -0
- data/examples/abasiclist.rb +179 -0
- data/examples/alpmenu.rb +50 -0
- data/examples/app.sample +19 -0
- data/examples/atree.rb +100 -0
- data/examples/bline.rb +136 -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/todo.txt.bak +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 +502 -0
- data/examples/dirtree.rb +94 -0
- data/examples/newtabbedwindow.rb +100 -0
- data/examples/newtesttabp.rb +92 -0
- data/examples/tabular.rb +146 -0
- data/examples/tasks.rb +178 -0
- data/examples/term2.rb +84 -0
- data/examples/testbuttons.rb +296 -0
- data/examples/testcombo.rb +102 -0
- data/examples/testfields.rb +195 -0
- data/examples/testkeypress.rb +72 -0
- data/examples/testlistbox.rb +170 -0
- data/examples/testmessagebox.rb +140 -0
- data/examples/testprogress.rb +116 -0
- data/examples/testree.rb +106 -0
- data/examples/testwsshortcuts.rb +66 -0
- data/examples/testwsshortcuts2.rb +128 -0
- data/lib/rbhex.rb +6 -0
- data/lib/rbhex/core/docs/index.txt +73 -0
- data/lib/rbhex/core/include/action.rb +80 -0
- data/lib/rbhex/core/include/actionmanager.rb +49 -0
- data/lib/rbhex/core/include/appmethods.rb +214 -0
- data/lib/rbhex/core/include/bordertitle.rb +48 -0
- data/lib/rbhex/core/include/chunk.rb +203 -0
- data/lib/rbhex/core/include/io.rb +553 -0
- data/lib/rbhex/core/include/listbindings.rb +74 -0
- data/lib/rbhex/core/include/listcellrenderer.rb +140 -0
- data/lib/rbhex/core/include/listeditable.rb +317 -0
- data/lib/rbhex/core/include/listscrollable.rb +663 -0
- data/lib/rbhex/core/include/listselectable.rb +271 -0
- data/lib/rbhex/core/include/multibuffer.rb +83 -0
- data/lib/rbhex/core/include/orderedhash.rb +77 -0
- data/lib/rbhex/core/include/ractionevent.rb +73 -0
- data/lib/rbhex/core/include/rchangeevent.rb +27 -0
- data/lib/rbhex/core/include/rhistory.rb +95 -0
- data/lib/rbhex/core/include/rinputdataevent.rb +47 -0
- data/lib/rbhex/core/include/vieditable.rb +172 -0
- data/lib/rbhex/core/include/widgetmenu.rb +66 -0
- data/lib/rbhex/core/system/colormap.rb +165 -0
- data/lib/rbhex/core/system/keyboard.rb +150 -0
- data/lib/rbhex/core/system/keydefs.rb +30 -0
- data/lib/rbhex/core/system/ncurses.rb +236 -0
- data/lib/rbhex/core/system/panel.rb +162 -0
- data/lib/rbhex/core/system/window.rb +913 -0
- data/lib/rbhex/core/util/ansiparser.rb +119 -0
- data/lib/rbhex/core/util/app.rb +1228 -0
- data/lib/rbhex/core/util/basestack.rb +410 -0
- data/lib/rbhex/core/util/bottomline.rb +1859 -0
- data/lib/rbhex/core/util/colorparser.rb +77 -0
- data/lib/rbhex/core/util/focusmanager.rb +31 -0
- data/lib/rbhex/core/util/padreader.rb +192 -0
- data/lib/rbhex/core/util/rcommandwindow.rb +604 -0
- data/lib/rbhex/core/util/rdialogs.rb +574 -0
- data/lib/rbhex/core/util/viewer.rb +149 -0
- data/lib/rbhex/core/util/widgetshortcuts.rb +506 -0
- data/lib/rbhex/core/version.rb +5 -0
- data/lib/rbhex/core/widgets/applicationheader.rb +103 -0
- data/lib/rbhex/core/widgets/box.rb +58 -0
- data/lib/rbhex/core/widgets/divider.rb +310 -0
- data/lib/rbhex/core/widgets/keylabelprinter.rb +194 -0
- data/lib/rbhex/core/widgets/rcombo.rb +253 -0
- data/lib/rbhex/core/widgets/rcontainer.rb +415 -0
- data/lib/rbhex/core/widgets/rlink.rb +30 -0
- data/lib/rbhex/core/widgets/rlist.rb +696 -0
- data/lib/rbhex/core/widgets/rmenu.rb +958 -0
- data/lib/rbhex/core/widgets/rmenulink.rb +22 -0
- data/lib/rbhex/core/widgets/rmessagebox.rb +387 -0
- data/lib/rbhex/core/widgets/rprogress.rb +118 -0
- data/lib/rbhex/core/widgets/rtabbedpane.rb +634 -0
- data/lib/rbhex/core/widgets/rtabbedwindow.rb +70 -0
- data/lib/rbhex/core/widgets/rtextarea.rb +960 -0
- data/lib/rbhex/core/widgets/rtextview.rb +739 -0
- data/lib/rbhex/core/widgets/rtree.rb +768 -0
- data/lib/rbhex/core/widgets/rwidget.rb +3277 -0
- data/lib/rbhex/core/widgets/scrollbar.rb +143 -0
- data/lib/rbhex/core/widgets/statusline.rb +113 -0
- data/lib/rbhex/core/widgets/tabular.rb +264 -0
- data/lib/rbhex/core/widgets/tabularwidget.rb +1142 -0
- data/lib/rbhex/core/widgets/textpad.rb +995 -0
- data/lib/rbhex/core/widgets/tree/treecellrenderer.rb +150 -0
- data/lib/rbhex/core/widgets/tree/treemodel.rb +428 -0
- data/rbhex-core.gemspec +32 -0
- metadata +172 -0
data/examples/term2.rb
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'rbhex/core/util/app'
|
|
2
|
+
require 'rbhex/core/widgets/tabular'
|
|
3
|
+
require 'rbhex/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 "rbhex #{Rbhex::Core::VERSION}", :text_center => "Tabular Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
|
28
|
+
message "F10 quit, F1 Help, ? Bindings"
|
|
29
|
+
#install_help_text my_help_text
|
|
30
|
+
@form.help_manager.help_text = my_help_text
|
|
31
|
+
|
|
32
|
+
flow :width => FFI::NCurses.COLS , :height => FFI::NCurses.LINES-2 do
|
|
33
|
+
stack :margin_top => 1, :width_pc => 20 do
|
|
34
|
+
t = Tabular.new(['a', 'b'], [1, 2], [3, 4])
|
|
35
|
+
listbox :list => t.render
|
|
36
|
+
|
|
37
|
+
t = Tabular.new ['a', 'b']
|
|
38
|
+
t << [1, 2]
|
|
39
|
+
t << [3, 4]
|
|
40
|
+
t << [4, 6]
|
|
41
|
+
#list_box :list => t.to_s.split("\n")
|
|
42
|
+
listbox :list => t.render
|
|
43
|
+
end # stack
|
|
44
|
+
file = File.expand_path("../data/tasks.csv", __FILE__)
|
|
45
|
+
lines = File.open(file,'r').readlines
|
|
46
|
+
heads = %w[ id sta type prio title ]
|
|
47
|
+
t = Tabular.new do |t|
|
|
48
|
+
t.headings = heads
|
|
49
|
+
lines.each { |e| t.add_row e.split '|' }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
t = t.render
|
|
53
|
+
wid = t[0].length + 2
|
|
54
|
+
wid = 30
|
|
55
|
+
stack :margin_top => 1, :width_pc => 80 , :height_pc => 100 do
|
|
56
|
+
listbox :list => t, :title => '[ tasks ]', :height_pc => 60
|
|
57
|
+
|
|
58
|
+
r = `ls -l`
|
|
59
|
+
res = r.split("\n")
|
|
60
|
+
|
|
61
|
+
t = Tabular.new do
|
|
62
|
+
# self.headings = 'Perm', 'Gr', 'User', 'U', 'Size', 'Mon', 'Date', 'Time', 'File' # changed 2011 dts
|
|
63
|
+
self.headings = 'User', 'Size', 'Mon', 'Date', 'Time', 'File'
|
|
64
|
+
res.each { |e|
|
|
65
|
+
cols = e.split
|
|
66
|
+
next if cols.count < 6
|
|
67
|
+
cols = cols[3..-1]
|
|
68
|
+
cols = cols[0..5] if cols.count > 6
|
|
69
|
+
add_row cols
|
|
70
|
+
}
|
|
71
|
+
column_width 1, 6
|
|
72
|
+
align_column 1, :right
|
|
73
|
+
end
|
|
74
|
+
#lb = list_box :list => t.render2
|
|
75
|
+
lb = textview :set_content => t.render, :title => '[ls -l]', :height_pc => 40
|
|
76
|
+
lb.bind(:PRESS){|tae|
|
|
77
|
+
alert "Pressed list on line #{tae.current_index} #{tae.word_under_cursor(nil, nil, "|")} "
|
|
78
|
+
}
|
|
79
|
+
Scrollbar.new @form, :parent => lb
|
|
80
|
+
#make a textview that is vienabled by default.
|
|
81
|
+
end
|
|
82
|
+
end # end
|
|
83
|
+
|
|
84
|
+
end # app
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# This program tests out various buttons.
|
|
2
|
+
## I have used both DSL and conventional constructors for each button to test out.
|
|
3
|
+
## Had to fix checkbox code (text and mnemonic to return self).
|
|
4
|
+
# Had to fix radio button code, remove raise from constructor
|
|
5
|
+
## -----
|
|
6
|
+
## -- THIS WILL NOT WORK WITH < 0.0.15. WILL REQUIRE DOWNLOADING FIXES FROM GITHUB
|
|
7
|
+
## OR HAVING AT LEAST 0.0.15
|
|
8
|
+
#
|
|
9
|
+
require 'logger'
|
|
10
|
+
require 'rbhex'
|
|
11
|
+
require 'rbhex/core/include/appmethods.rb'
|
|
12
|
+
def help_text
|
|
13
|
+
<<-eos
|
|
14
|
+
BUTTONS HELP
|
|
15
|
+
|
|
16
|
+
This is some help text for testbuttons.
|
|
17
|
+
To select any button press the SPACEBAR, although ENTER will also work.
|
|
18
|
+
You may also press the mnemonic or hotkey on the label..
|
|
19
|
+
|
|
20
|
+
The toggle button toggles the kind of dialog for the Cancel button. Modern look
|
|
21
|
+
and feel refers to a popup with buttons. This is like the links editor.
|
|
22
|
+
|
|
23
|
+
Classic look and feel refers to a line at the bottom of the screen, with a y/n prompt.
|
|
24
|
+
THis is like a lot of older apps, i think Pine and maybe vim.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Alt-c/F10 - Exit application
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
-----------------------------------------------------------------------
|
|
32
|
+
eos
|
|
33
|
+
end
|
|
34
|
+
if $0 == __FILE__
|
|
35
|
+
|
|
36
|
+
include RubyCurses
|
|
37
|
+
include RubyCurses::Utils
|
|
38
|
+
|
|
39
|
+
begin
|
|
40
|
+
# Initialize curses
|
|
41
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
|
42
|
+
path = File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")
|
|
43
|
+
file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
|
|
44
|
+
$log = Logger.new(path)
|
|
45
|
+
$log.level = Logger::DEBUG
|
|
46
|
+
|
|
47
|
+
@lookfeel = :classic # :dialog # or :classic
|
|
48
|
+
@lookfeel = :dialog # or :classic
|
|
49
|
+
|
|
50
|
+
@window = VER::Window.root_window
|
|
51
|
+
# Initialize few color pairs
|
|
52
|
+
# Create the window to be associated with the form
|
|
53
|
+
# Un post form and free the memory
|
|
54
|
+
|
|
55
|
+
catch(:close) do
|
|
56
|
+
colors = Ncurses.COLORS
|
|
57
|
+
$log.debug "START #{colors} colors test2.rb --------- #{@window} "
|
|
58
|
+
@form = Form.new @window
|
|
59
|
+
title = (" "*30) + "Original Demo of basic Ruby Curses Widgets " + Rbhex::Core::VERSION
|
|
60
|
+
Label.new @form, {'text' => title, :row => 0, :col => 0, :color => 'green', :bgcolor => 'black'}
|
|
61
|
+
r = 1; fc = 12;
|
|
62
|
+
r += 1
|
|
63
|
+
row = 5
|
|
64
|
+
col = 3
|
|
65
|
+
|
|
66
|
+
$message = Variable.new
|
|
67
|
+
$message.value = "Message Comes Here"
|
|
68
|
+
message_label = RubyCurses::Label.new @form, {'text_variable' => $message,
|
|
69
|
+
"name"=>"message_label","row" => Ncurses.LINES-1, "col" => 1, "display_length" => 60,
|
|
70
|
+
"height" => 2, 'color' => 'cyan'}
|
|
71
|
+
|
|
72
|
+
$results = Variable.new
|
|
73
|
+
$results.value = "A variable"
|
|
74
|
+
|
|
75
|
+
row += 1
|
|
76
|
+
checkbutton = CheckBox.new(@form).
|
|
77
|
+
variable($results).
|
|
78
|
+
onvalue("Selected bold ").
|
|
79
|
+
offvalue("UNselected bold").
|
|
80
|
+
display_length(18).
|
|
81
|
+
text("Bold attribute ").
|
|
82
|
+
mnemonic('B').
|
|
83
|
+
row(row).
|
|
84
|
+
col(col)
|
|
85
|
+
row += 1
|
|
86
|
+
@cb_rev = Variable.new false # related to checkbox reverse
|
|
87
|
+
cbb = @cb_rev
|
|
88
|
+
checkbutton1 = CheckBox.new @form do
|
|
89
|
+
variable cbb # $cb_rev
|
|
90
|
+
#value = true
|
|
91
|
+
onvalue "Selected reverse "
|
|
92
|
+
offvalue "UNselected reverse"
|
|
93
|
+
text "Reverse attribute "
|
|
94
|
+
display_length 18
|
|
95
|
+
row row
|
|
96
|
+
col col
|
|
97
|
+
mnemonic 'R'
|
|
98
|
+
end
|
|
99
|
+
row += 1
|
|
100
|
+
togglebutton = ToggleButton.new(@form).
|
|
101
|
+
value( true).
|
|
102
|
+
onvalue( " Toggle Down ").
|
|
103
|
+
offvalue(" Untoggle ").
|
|
104
|
+
row(row).
|
|
105
|
+
col(col).
|
|
106
|
+
mnemonic('T')
|
|
107
|
+
#underline 0
|
|
108
|
+
togglebutton.command do
|
|
109
|
+
if togglebutton.value
|
|
110
|
+
$message.value = "Modern look and feel for dialogs"
|
|
111
|
+
else
|
|
112
|
+
$message.value = "Classic look and feel for dialogs"
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
# a special case required since another form (combo popup also modifies)
|
|
116
|
+
$message.update_command() { message_label.repaint }
|
|
117
|
+
|
|
118
|
+
@form.bind(:ENTER) { |f| f.label && f.label.bgcolor = 'red' if f.respond_to? :label}
|
|
119
|
+
@form.bind(:LEAVE) { |f| f.label && f.label.bgcolor = 'black' if f.respond_to? :label}
|
|
120
|
+
|
|
121
|
+
row += 1
|
|
122
|
+
colorlabel = Label.new @form, {'text' => "Select a color:", "row" => row, "col" => col,
|
|
123
|
+
"color"=>"cyan", "mnemonic" => 'S'}
|
|
124
|
+
$radio = Variable.new
|
|
125
|
+
$radio.update_command(colorlabel) {|tv, label| label.color tv.value; }
|
|
126
|
+
#$radio.update_command() {|tv| message_label.color tv.value; align.bgcolor tv.value; combo1.bgcolor tv.value}
|
|
127
|
+
$radio.update_command() {|tv| @form.widgets.each { |e| next unless e.is_a? Widget;
|
|
128
|
+
e.bgcolor tv.value }; }
|
|
129
|
+
|
|
130
|
+
# whenever updated set colorlabel and messagelabel to bold
|
|
131
|
+
$results.update_command(colorlabel,checkbutton) {|tv, label, cb|
|
|
132
|
+
attrs = cb.value ? 'bold' : 'normal'; label.attr(attrs); message_label.attr(attrs)}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
# whenever updated set colorlabel and messagelabel to reverse
|
|
136
|
+
#@cb_rev.update_command(colorlabel,checkbutton1) {|tv, label, cb| attrs = cb.value ? 'reverse' : nil; label.attr(attrs); message_label.attr(attrs)}
|
|
137
|
+
# changing nil to normal since PROP CHAN handler will not fire if nil being set.
|
|
138
|
+
@cb_rev.update_command(colorlabel,checkbutton1) {|tv, label, cb|
|
|
139
|
+
attrs = cb.value ? 'reverse' : 'normal'; label.attr(attrs); message_label.attr(attrs)}
|
|
140
|
+
|
|
141
|
+
row += 1
|
|
142
|
+
dlen = 10
|
|
143
|
+
# if we try conventional style then constructor throws exception since @variable must be set
|
|
144
|
+
radio1 = RadioButton.new(@form).
|
|
145
|
+
variable($radio).
|
|
146
|
+
text("red").
|
|
147
|
+
value("red").
|
|
148
|
+
color("red").
|
|
149
|
+
display_length(dlen). # helps when right aligning
|
|
150
|
+
row(row).
|
|
151
|
+
col(col)
|
|
152
|
+
|
|
153
|
+
radio11 = RadioButton.new @form do
|
|
154
|
+
variable $radio
|
|
155
|
+
text "c&yan"
|
|
156
|
+
value "cyan"
|
|
157
|
+
color "cyan"
|
|
158
|
+
display_length dlen # helps when right aligning
|
|
159
|
+
row row
|
|
160
|
+
col col+24
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
row += 1
|
|
164
|
+
radio2 = RadioButton.new @form do
|
|
165
|
+
variable $radio
|
|
166
|
+
text "&green"
|
|
167
|
+
value "green"
|
|
168
|
+
color "green"
|
|
169
|
+
display_length dlen # helps when right aligning
|
|
170
|
+
row row
|
|
171
|
+
col col
|
|
172
|
+
end
|
|
173
|
+
radio22 = RadioButton.new @form do
|
|
174
|
+
variable $radio
|
|
175
|
+
text "magenta"
|
|
176
|
+
value "magenta"
|
|
177
|
+
color "magenta"
|
|
178
|
+
display_length dlen # helps when right aligning
|
|
179
|
+
row row
|
|
180
|
+
col col+24
|
|
181
|
+
end
|
|
182
|
+
colorlabel.label_for radio1
|
|
183
|
+
|
|
184
|
+
# instead of using frozen, I will use a PropertyVeto
|
|
185
|
+
# to disallow changes to color itself
|
|
186
|
+
veto = lambda { |e, name|
|
|
187
|
+
if e.property_name == 'color'
|
|
188
|
+
if e.newvalue != name
|
|
189
|
+
raise PropertyVetoException.new("Cannot change this at all!", e)
|
|
190
|
+
end
|
|
191
|
+
elsif e.property_name == 'bgcolor'
|
|
192
|
+
raise PropertyVetoException.new("Cannot change this!", e)
|
|
193
|
+
end
|
|
194
|
+
}
|
|
195
|
+
[radio1, radio2, radio11, radio22].each { |r|
|
|
196
|
+
r.bind(:PROPERTY_CHANGE) do |e| veto.call(e, r.text) end
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
@status_line = status_line :row => Ncurses.LINES-2
|
|
200
|
+
@status_line.command {
|
|
201
|
+
"F1 Help | F2 Menu | F3 View | F4 Shell | F5 Sh | %20s" % [$message.value]
|
|
202
|
+
}
|
|
203
|
+
row += 1 #2
|
|
204
|
+
## DSL style of construction
|
|
205
|
+
ok_button = Button.new @form do
|
|
206
|
+
text "OK"
|
|
207
|
+
name "OK"
|
|
208
|
+
row row
|
|
209
|
+
col col
|
|
210
|
+
#attr 'reverse'
|
|
211
|
+
#highlight_background "white"
|
|
212
|
+
#highlight_foreground "blue"
|
|
213
|
+
mnemonic 'O'
|
|
214
|
+
end
|
|
215
|
+
ok_button.command() { |eve|
|
|
216
|
+
alert("Hope you enjoyed this demo - Press the Cancel button to quit", {'title' => "Hello", :bgcolor => :blue , :color => :white})
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
## conventional style of construction
|
|
220
|
+
# using ampersand to set mnemonic
|
|
221
|
+
cancel_button = Button.new(@form).
|
|
222
|
+
text("&Cancel").
|
|
223
|
+
name("Cancel").
|
|
224
|
+
row(row).
|
|
225
|
+
col(col + 10)
|
|
226
|
+
#attr 'reverse'
|
|
227
|
+
#highlight_background "white"
|
|
228
|
+
#highlight_foreground "blue"
|
|
229
|
+
#surround_chars ['{ ',' }'] ## change the surround chars
|
|
230
|
+
cancel_button.command { |aeve|
|
|
231
|
+
#if @lookfeel == :dialog
|
|
232
|
+
if togglebutton.value == true
|
|
233
|
+
ret = confirm("Do your really want to quit?")
|
|
234
|
+
else
|
|
235
|
+
ret = confirm_window("Do your really want to quit?")
|
|
236
|
+
end
|
|
237
|
+
if ret == :YES || ret == true
|
|
238
|
+
throw(:close);
|
|
239
|
+
else
|
|
240
|
+
$message.value = "Quit aborted"
|
|
241
|
+
end
|
|
242
|
+
}
|
|
243
|
+
#col += 22
|
|
244
|
+
@form.repaint
|
|
245
|
+
@window.wrefresh
|
|
246
|
+
Ncurses::Panel.update_panels
|
|
247
|
+
|
|
248
|
+
# the main loop
|
|
249
|
+
|
|
250
|
+
while((ch = @window.getchar()) != FFI::NCurses::KEY_F10 )
|
|
251
|
+
break if ch == ?\C-q.getbyte(0)
|
|
252
|
+
begin
|
|
253
|
+
@form.handle_key(ch)
|
|
254
|
+
|
|
255
|
+
rescue FieldValidationException => fve
|
|
256
|
+
alert fve.to_s
|
|
257
|
+
|
|
258
|
+
f = @form.get_current_field
|
|
259
|
+
# lets restore the value
|
|
260
|
+
if f.respond_to? :restore_original_value
|
|
261
|
+
f.restore_original_value
|
|
262
|
+
@form.repaint
|
|
263
|
+
end
|
|
264
|
+
$error_message.value = ""
|
|
265
|
+
rescue => err
|
|
266
|
+
$log.error( err) if err
|
|
267
|
+
$log.error(err.backtrace.join("\n")) if err
|
|
268
|
+
textdialog err
|
|
269
|
+
$error_message.value = ""
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# this should be avoided, we should not muffle the exception and set a variable
|
|
273
|
+
# However, we have been doing that
|
|
274
|
+
if $error_message.get_value != ""
|
|
275
|
+
if @lookfeel == :dialog
|
|
276
|
+
alert($error_message, {:bgcolor => :red, 'color' => 'yellow'}) if $error_message.get_value != ""
|
|
277
|
+
else
|
|
278
|
+
print_error_message $error_message, {:bgcolor => :red, :color => :yellow}
|
|
279
|
+
end
|
|
280
|
+
$error_message.value = ""
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
@window.wrefresh
|
|
284
|
+
end # while loop
|
|
285
|
+
end # catch
|
|
286
|
+
rescue => ex
|
|
287
|
+
ensure
|
|
288
|
+
$log.debug " -==== EXCEPTION =====-"
|
|
289
|
+
$log.debug( ex) if ex
|
|
290
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
|
291
|
+
@window.destroy if !@window.nil?
|
|
292
|
+
VER::stop_ncurses
|
|
293
|
+
puts ex if ex
|
|
294
|
+
puts(ex.backtrace.join("\n")) if ex
|
|
295
|
+
end
|
|
296
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
require 'rbhex'
|
|
3
|
+
require 'rbhex/core/widgets/rcombo'
|
|
4
|
+
require 'rbhex/core/include/appmethods.rb'
|
|
5
|
+
def help_text
|
|
6
|
+
<<-eos
|
|
7
|
+
COMBO HELP
|
|
8
|
+
|
|
9
|
+
This is some help text for Combos
|
|
10
|
+
|
|
11
|
+
You may press SPACE to invoke the popup and then use arrow keys to traverse. (j and k may also work)
|
|
12
|
+
SPACE on the popup to select.
|
|
13
|
+
|
|
14
|
+
You may press the first character of the desired item to see all those items starting with that char.
|
|
15
|
+
e.g. pressing "v" will cycle through vt100 and vt102
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
If the arrow_key_policy is set to :popup then a down arrow will also invoke popup. However, if you
|
|
19
|
+
prefer the down arrow to go to the next field, use :ignore. In that case, only SPACE can trigger POPUP.
|
|
20
|
+
|
|
21
|
+
-----------------------------------------------------------------------
|
|
22
|
+
eos
|
|
23
|
+
end
|
|
24
|
+
if $0 == __FILE__
|
|
25
|
+
|
|
26
|
+
include RubyCurses
|
|
27
|
+
include RubyCurses::Utils
|
|
28
|
+
|
|
29
|
+
begin
|
|
30
|
+
# Initialize curses
|
|
31
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
|
32
|
+
path = File.join(ENV["LOGDIR"] || "./" ,"rbc13.log")
|
|
33
|
+
file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
|
|
34
|
+
$log = Logger.new(path)
|
|
35
|
+
$log.level = Logger::DEBUG
|
|
36
|
+
|
|
37
|
+
@window = VER::Window.root_window
|
|
38
|
+
# Initialize few color pairs
|
|
39
|
+
# Create the window to be associated with the form
|
|
40
|
+
# Un post form and free the memory
|
|
41
|
+
|
|
42
|
+
catch(:close) do
|
|
43
|
+
colors = Ncurses.COLORS
|
|
44
|
+
$log.debug "START #{colors} colors testcombo.rb --------- #{@window} "
|
|
45
|
+
@form = Form.new @window
|
|
46
|
+
title = (" "*30) + "Demo of Combo (F10 quits, F1 help, SPACE to popup combo) " + Rbhex::Core::VERSION
|
|
47
|
+
Label.new @form, {:text => title, :row => 1, :col => 0, :color => :green, :bgcolor => :black}
|
|
48
|
+
r = 3; fc = 12;
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
cb = ComboBox.new @form, :row => 7, :col => 2, :display_length => 20,
|
|
53
|
+
:list => %w[xterm xterm-color xterm-256color screen vt100 vt102],
|
|
54
|
+
:arrow_key_policy => :popup,
|
|
55
|
+
:label => "Declare terminal as: "
|
|
56
|
+
|
|
57
|
+
# arrow_key_policy can be popup or ignore
|
|
58
|
+
# display_length is used to place combo symbol and popup and should be calculated
|
|
59
|
+
# from label.text
|
|
60
|
+
|
|
61
|
+
@form.help_manager.help_text = help_text
|
|
62
|
+
#@form.bind_key(FFI::NCurses::KEY_F1, 'help') { display_app_help help_text() }
|
|
63
|
+
@form.bind_key(FFI::NCurses::KEY_F1, 'help') { display_app_help }
|
|
64
|
+
@form.repaint
|
|
65
|
+
@window.wrefresh
|
|
66
|
+
Ncurses::Panel.update_panels
|
|
67
|
+
|
|
68
|
+
# the main loop
|
|
69
|
+
|
|
70
|
+
while((ch = @window.getchar()) != FFI::NCurses::KEY_F10 )
|
|
71
|
+
break if ch == ?\C-q.getbyte(0)
|
|
72
|
+
begin
|
|
73
|
+
@form.handle_key(ch)
|
|
74
|
+
|
|
75
|
+
rescue => err
|
|
76
|
+
$log.error( err) if err
|
|
77
|
+
$log.error(err.backtrace.join("\n")) if err
|
|
78
|
+
textdialog err
|
|
79
|
+
$error_message.value = ""
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# this should be avoided, we should not muffle the exception and set a variable
|
|
83
|
+
# However, we have been doing that
|
|
84
|
+
if $error_message.get_value != ""
|
|
85
|
+
alert($error_message, {:bgcolor => :red, 'color' => 'yellow'}) if $error_message.get_value != ""
|
|
86
|
+
$error_message.value = ""
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
@window.wrefresh
|
|
90
|
+
end # while loop
|
|
91
|
+
end # catch
|
|
92
|
+
rescue => ex
|
|
93
|
+
ensure
|
|
94
|
+
$log.debug " -==== EXCEPTION =====-"
|
|
95
|
+
$log.debug( ex) if ex
|
|
96
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
|
97
|
+
@window.destroy if !@window.nil?
|
|
98
|
+
VER::stop_ncurses
|
|
99
|
+
puts ex if ex
|
|
100
|
+
puts(ex.backtrace.join("\n")) if ex
|
|
101
|
+
end
|
|
102
|
+
end
|