rbcurse 0.1.3 → 1.1.1
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 +126 -0
- data/Manifest.txt +53 -20
- data/README.markdown +423 -0
- data/Rakefile +3 -1
- data/examples/keytest.rb +177 -0
- data/examples/mpad2.rb +156 -0
- data/examples/newtesttabp.rb +121 -0
- data/examples/rfe.rb +48 -10
- data/examples/rfe_renderer.rb +4 -4
- data/examples/rvimsplit.rb +376 -0
- data/examples/sqlc.rb +97 -106
- data/examples/sqlm.rb +446 -0
- data/examples/test1.rb +4 -4
- data/examples/test2.rb +12 -12
- data/examples/testchars.rb +140 -0
- data/examples/testkeypress.rb +9 -4
- data/examples/testmulticomp.rb +72 -0
- data/examples/testscroller.rb +136 -0
- data/examples/testscrolllb.rb +86 -0
- data/examples/testscrollp.rb +87 -0
- data/examples/testscrollta.rb +80 -0
- data/examples/testscrolltable.rb +166 -0
- data/examples/testsplit.rb +87 -0
- data/examples/testsplit2.rb +123 -0
- data/examples/testsplit3.rb +215 -0
- data/examples/testsplit3_1.rb +244 -0
- data/examples/testsplit3a.rb +215 -0
- data/examples/testsplit3b.rb +237 -0
- data/examples/testsplitta.rb +148 -0
- data/examples/testsplittv.rb +142 -0
- data/examples/testsplittvv.rb +144 -0
- data/examples/testtable.rb +1 -1
- data/examples/testtabp.rb +3 -2
- data/examples/testtestw.rb +69 -0
- data/examples/testtodo.rb +5 -3
- data/examples/testtpane.rb +203 -0
- data/examples/testtpane2.rb +145 -0
- data/examples/testtpanetable.rb +199 -0
- data/examples/viewtodo.rb +5 -3
- data/lib/rbcurse.rb +1 -1
- data/lib/rbcurse/celleditor.rb +2 -2
- data/lib/rbcurse/colormap.rb +5 -5
- data/lib/rbcurse/defaultlistselectionmodel.rb +3 -3
- data/lib/rbcurse/io.rb +663 -0
- data/lib/rbcurse/listeditable.rb +306 -0
- data/lib/rbcurse/listkeys.rb +15 -15
- data/lib/rbcurse/listscrollable.rb +168 -27
- data/lib/rbcurse/mapper.rb +35 -13
- data/lib/rbcurse/rchangeevent.rb +28 -0
- data/lib/rbcurse/rform.rb +845 -0
- data/lib/rbcurse/rlistbox.rb +144 -34
- data/lib/rbcurse/rmessagebox.rb +10 -5
- data/lib/rbcurse/rmulticontainer.rb +325 -0
- data/lib/rbcurse/rmultitextview.rb +306 -0
- data/lib/rbcurse/rscrollform.rb +369 -0
- data/lib/rbcurse/rscrollpane.rb +511 -0
- data/lib/rbcurse/rsplitpane.rb +820 -0
- data/lib/rbcurse/rtabbedpane.rb +737 -109
- data/lib/rbcurse/rtabbedwindow.rb +326 -0
- data/lib/rbcurse/rtable.rb +220 -64
- data/lib/rbcurse/rtextarea.rb +340 -181
- data/lib/rbcurse/rtextview.rb +237 -101
- data/lib/rbcurse/rviewport.rb +203 -0
- data/lib/rbcurse/rwidget.rb +919 -95
- data/lib/rbcurse/scrollable.rb +7 -7
- data/lib/rbcurse/selectable.rb +4 -4
- data/lib/rbcurse/table/tablecellrenderer.rb +3 -0
- data/lib/rbcurse/undomanager.rb +181 -0
- data/lib/rbcurse/vieditable.rb +100 -0
- data/lib/ver/window.rb +471 -21
- metadata +66 -22
- data/README.txt +0 -312
- data/examples/testd.db +0 -0
- data/examples/todocsv.csv +0 -28
data/Rakefile
CHANGED
@@ -2,13 +2,15 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
#
|
5
|
-
require 'rubygems'
|
5
|
+
#require 'rubygems'
|
6
6
|
require 'hoe'
|
7
7
|
$:.unshift(File.dirname(__FILE__) + "/lib")
|
8
8
|
require 'rbcurse'
|
9
9
|
#require './lib/rbcurse.rb'
|
10
10
|
|
11
11
|
Hoe.new('rbcurse', Rbcurse::VERSION) do |p|
|
12
|
+
#Hoe.spec('rbcurse', Rbcurse::VERSION) do |p|
|
13
|
+
#Hoe.spec('rbcurse') do
|
12
14
|
p.name = "rbcurse"
|
13
15
|
p.author = "Rahul Kumar"
|
14
16
|
p.description = "Ruby curses widgets for easy application development"
|
data/examples/keytest.rb
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
|
2
|
+
require 'rubygems'
|
3
|
+
require 'ncurses'
|
4
|
+
require 'logger'
|
5
|
+
require 'rbcurse'
|
6
|
+
#require 'lib/ver/ncurses'
|
7
|
+
#require 'lib/ver/window'
|
8
|
+
require 'lib/rbcurse/rwidget'
|
9
|
+
require 'lib/ver/keyboard2'
|
10
|
+
#require 'lib/rbcurse/mapper'
|
11
|
+
|
12
|
+
# Using mapper with keyboard2 which gives numeric keys
|
13
|
+
# The error messages are not so pretty, otherwise its okay... error messages need a little work
|
14
|
+
# Use C-q or q to quit
|
15
|
+
## C-s starts a new mode :cx, 'i' gets back to normal
|
16
|
+
#include Ncurses
|
17
|
+
|
18
|
+
|
19
|
+
def printstr(pad, r,c,string, color, att = Ncurses::A_NORMAL)
|
20
|
+
|
21
|
+
#att = bold ? Ncurses::A_BLINK|Ncurses::A_BOLD : Ncurses::A_NORMAL
|
22
|
+
# att = bold ? Ncurses::A_BOLD : Ncurses::A_NORMAL
|
23
|
+
pad.attrset(Ncurses.COLOR_PAIR(color) | att)
|
24
|
+
#pad.mvprintw(r, c, "%s", string);
|
25
|
+
pad.mvaddstr(r, c, "%s" % string);
|
26
|
+
pad.attroff(Ncurses.COLOR_PAIR(color) | att)
|
27
|
+
end
|
28
|
+
class KeyTest
|
29
|
+
attr_reader :window # needed by keyboard to do getch
|
30
|
+
attr_accessor :mode # needed by handler
|
31
|
+
def initialize win
|
32
|
+
@window = win
|
33
|
+
@color = $datacolor
|
34
|
+
@mode = :normal
|
35
|
+
map_keys
|
36
|
+
VER::Keyboard2.focus = self
|
37
|
+
end
|
38
|
+
def down
|
39
|
+
printstr(@window, 12,1,"GOT Down ", @color, att = Ncurses::A_NORMAL)
|
40
|
+
end
|
41
|
+
def up
|
42
|
+
printstr(@window, 12,1,"GOT Up ", @color, att = Ncurses::A_REVERSE)
|
43
|
+
end
|
44
|
+
def do_select
|
45
|
+
printstr(@window, 12,1,"GOT do_select", @color, att = Ncurses::A_BOLD)
|
46
|
+
end
|
47
|
+
|
48
|
+
def map_keys
|
49
|
+
@mapper = Mapper.new(self)
|
50
|
+
@keyhandler = @mapper # i don't want a separate handler, this will do
|
51
|
+
|
52
|
+
# view refers to the object passed to constrcutor of Mapper, here it is self
|
53
|
+
@mapper.let :normal do
|
54
|
+
map(?\C-x, ?\C-d){ view.down }
|
55
|
+
map(?\C-x, ?\C-u){ view.up }
|
56
|
+
map(?\C-x, ?q){ view.stop }
|
57
|
+
map(?\C-x, ?\C-s){ view.do_search_ask }
|
58
|
+
map(?\C-x, ?\C-x){ view.do_select }
|
59
|
+
map(?q){ view.stop }
|
60
|
+
map(?q){ view.stop }
|
61
|
+
map(32){ view.space }
|
62
|
+
map(?n){ view.space }
|
63
|
+
map(?j){ :down }
|
64
|
+
map(?k){ view.up }
|
65
|
+
map(?p){ view.minus }
|
66
|
+
map(?[) { view.goto_start }
|
67
|
+
map(?]) { view.goto_end }
|
68
|
+
map(?-) { view.minus }
|
69
|
+
|
70
|
+
map('right') { view.right}
|
71
|
+
map(?l) { view.right}
|
72
|
+
map('left') {view.left}
|
73
|
+
map(?h) {view.left}
|
74
|
+
map(KEY_DOWN) { view.down }
|
75
|
+
map(?j) { view.down }
|
76
|
+
map(KEY_UP) { view.up }
|
77
|
+
map(KEY_ENTER) { view.enter }
|
78
|
+
map(?g) { view.handle_goto_ask }
|
79
|
+
map(?/) { view.do_search_ask }
|
80
|
+
map(?\C-n) { view.do_search_next }
|
81
|
+
map(?\C-p) { view.do_search_prev }
|
82
|
+
map(?x) { view.do_select }
|
83
|
+
map(?\') { view.do_next_selection }
|
84
|
+
map(?") { view.do_prev_selection }
|
85
|
+
map(?\C-e) { view.do_clear_selection }
|
86
|
+
## C-s starts a new mode, i gets back to normal
|
87
|
+
map(?\C-s){ view.mode = :cx }
|
88
|
+
# all printable chars not trapped above are caught here
|
89
|
+
map(/^([[:print:]])$/){ view.show("Got printable: #{@arg} ") }
|
90
|
+
|
91
|
+
|
92
|
+
map(?\C-q){ view.stop }
|
93
|
+
end
|
94
|
+
|
95
|
+
## a mode, started by C-s, use i to go back, q to quit
|
96
|
+
@mapper.let :cx do
|
97
|
+
map(?c.getbyte(0)){ view.show(:c) }
|
98
|
+
map(?a.getbyte(0)){ view.show(:a) }
|
99
|
+
map(?r.getbyte(0)){ view.show(:r) }
|
100
|
+
map(?q.getbyte(0)){ view.stop }
|
101
|
+
map(?i.getbyte(0)){ view.mode = :normal }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
def press(key)
|
105
|
+
# I can intercept printable keys here
|
106
|
+
$log.debug("press key: %s" % key)
|
107
|
+
begin
|
108
|
+
@keyhandler.press(key)
|
109
|
+
#break if stopping?
|
110
|
+
return if stopping?
|
111
|
+
if !@message.nil?
|
112
|
+
printstr(@window, 18,1,"%40s" % @message, $promptcolor, att = Ncurses::A_NORMAL)
|
113
|
+
@message = nil
|
114
|
+
end
|
115
|
+
|
116
|
+
rescue ::Exception => ex
|
117
|
+
$log.debug ex
|
118
|
+
show(ex.message)
|
119
|
+
end
|
120
|
+
end # press
|
121
|
+
|
122
|
+
# from VER
|
123
|
+
def stopping?
|
124
|
+
@stop
|
125
|
+
end
|
126
|
+
def show string
|
127
|
+
@message = string
|
128
|
+
end
|
129
|
+
|
130
|
+
# without this system hangs if unknown key presed
|
131
|
+
def info(message)
|
132
|
+
@message = message
|
133
|
+
end
|
134
|
+
|
135
|
+
def stop
|
136
|
+
@stop = true
|
137
|
+
throw(:close)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
if $0 == __FILE__
|
141
|
+
include RubyCurses
|
142
|
+
include RubyCurses::Utils
|
143
|
+
begin
|
144
|
+
# Initialize curses
|
145
|
+
VER::start_ncurses
|
146
|
+
$reversecolor = 2
|
147
|
+
$errorcolor = 7
|
148
|
+
$promptcolor = $selectedcolor = 4
|
149
|
+
$normalcolor = $datacolor = 5
|
150
|
+
$bottomcolor = $topcolor = 6
|
151
|
+
|
152
|
+
# Create the window to be associated with the form
|
153
|
+
# Un post form and free the memory
|
154
|
+
$log = Logger.new("view.log")
|
155
|
+
$log.level = Logger::DEBUG
|
156
|
+
|
157
|
+
catch(:close) do
|
158
|
+
@layout = { :height => 0, :width => 0, :top => 0, :left => 0 }
|
159
|
+
@window = VER::Window.new(@layout)
|
160
|
+
@window.bkgd(Ncurses.COLOR_PAIR(5));
|
161
|
+
@panel = @window.panel
|
162
|
+
@window.wrefresh
|
163
|
+
Ncurses::Panel.update_panels
|
164
|
+
$log.debug "START ---------"
|
165
|
+
kt = KeyTest.new @window
|
166
|
+
end
|
167
|
+
rescue => ex
|
168
|
+
ensure
|
169
|
+
Ncurses::Panel.del_panel(@panel) if !@panel.nil?
|
170
|
+
@window.delwin if !@window.nil?
|
171
|
+
VER::stop_ncurses
|
172
|
+
p ex if ex
|
173
|
+
p(ex.backtrace.join("\n")) if ex
|
174
|
+
$log.debug( ex) if ex
|
175
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
176
|
+
end
|
177
|
+
end
|
data/examples/mpad2.rb
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# REQUIRES A FILE NAMED "TODO" in current folder, to display and page
|
4
|
+
# a basic file pager to check out ncurses ruby pad
|
5
|
+
# working in 1.8.7 but not showing anything when i hit a key in 1.9.1
|
6
|
+
require 'rubygems'
|
7
|
+
require 'ncurses'
|
8
|
+
require 'logger'
|
9
|
+
|
10
|
+
include Ncurses
|
11
|
+
include Ncurses::Form
|
12
|
+
|
13
|
+
class Fixnum
|
14
|
+
def ord
|
15
|
+
self
|
16
|
+
end
|
17
|
+
## mostly for control and meta characters
|
18
|
+
def getbyte(n)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end unless "a"[0] == "a"
|
22
|
+
|
23
|
+
|
24
|
+
# Initialize curses
|
25
|
+
begin
|
26
|
+
stdscr = Ncurses.initscr();
|
27
|
+
Ncurses.start_color();
|
28
|
+
Ncurses.cbreak();
|
29
|
+
Ncurses.noecho();
|
30
|
+
Ncurses.keypad(stdscr, true);
|
31
|
+
|
32
|
+
# Initialize few color pairs
|
33
|
+
Ncurses.init_pair(1, COLOR_RED, COLOR_BLACK);
|
34
|
+
Ncurses.init_pair(2, COLOR_BLACK, COLOR_WHITE);
|
35
|
+
Ncurses.init_pair(3, COLOR_BLACK, COLOR_BLUE);
|
36
|
+
Ncurses.init_pair(4, COLOR_YELLOW, COLOR_RED); # for selected item
|
37
|
+
Ncurses.init_pair(5, COLOR_WHITE, COLOR_BLACK); # for unselected menu items
|
38
|
+
Ncurses.init_pair(6, COLOR_WHITE, COLOR_BLUE); # for bottom/top bar
|
39
|
+
Ncurses.init_pair(7, COLOR_WHITE, COLOR_RED); # for error messages
|
40
|
+
#stdscr.bkgd(Ncurses.COLOR_PAIR(6)); ## DO NOT TOUCH stdscr please
|
41
|
+
|
42
|
+
$log = Logger.new("view.log")
|
43
|
+
$log.level = Logger::DEBUG
|
44
|
+
# Create the window to be associated with the form
|
45
|
+
@screenrows = Ncurses.LINES-3
|
46
|
+
screencols = 80
|
47
|
+
@startrow = 1
|
48
|
+
my_form_win = WINDOW.new(0,0,0,0)
|
49
|
+
x = Array.new
|
50
|
+
y = Array.new
|
51
|
+
Ncurses.getmaxyx(my_form_win, y, x)
|
52
|
+
$log.debug " x = #{x[0]}, y = #{y[0]}"
|
53
|
+
screencols = 99; x[0]-15
|
54
|
+
my_panel = my_form_win.new_panel
|
55
|
+
textary = File.open("../TODO","r").readlines
|
56
|
+
my_pad = Ncurses.newpad(textary.count,100)
|
57
|
+
pad = my_pad.new_panel
|
58
|
+
Ncurses::Panel.update_panels
|
59
|
+
|
60
|
+
my_form_win.bkgd(Ncurses.COLOR_PAIR(5));
|
61
|
+
my_pad.keypad(TRUE);
|
62
|
+
|
63
|
+
# Set main window and sub window
|
64
|
+
|
65
|
+
# Print a border around the main window and print a title */
|
66
|
+
#my_form_win.box(0, 0);
|
67
|
+
#print_in_middle(my_form_win, 1, 0, cols[0] + 14, "Main Menu", Ncurses.COLOR_PAIR(6));
|
68
|
+
Ncurses.refresh();
|
69
|
+
|
70
|
+
textary.each_index { |ix|
|
71
|
+
my_pad.mvaddstr(ix, 0, textary[ix])
|
72
|
+
}
|
73
|
+
|
74
|
+
# Print field types
|
75
|
+
|
76
|
+
#my_pad.prefresh(0,0, 0,0, Ncurses.LINES,Ncurses.COLS-1);
|
77
|
+
#my_form_win.wrefresh();
|
78
|
+
@prow = 0; @pcol = 0;
|
79
|
+
#my_pad.prefresh(0,0, @startrow ,0, @screenrows,Ncurses.COLS-1);
|
80
|
+
# trying out overwrite since copywin retuns ERR -1
|
81
|
+
#ret = Ncurses.copywin(my_pad, my_form_win, 0,0,@startrow,0, @screenrows, Ncurses.COLS-1, 0)
|
82
|
+
### ret = Ncurses.overwrite(my_pad, my_form_win) # worked
|
83
|
+
### $log.debug("overwrite #{ret}")
|
84
|
+
# ret = Ncurses.overwrite(my_form_win, my_pad)
|
85
|
+
#my_form_win.wrefresh(); << this line clears what pad has put, but needed by copywin etc i think
|
86
|
+
|
87
|
+
|
88
|
+
# Loop through to get user requests
|
89
|
+
# # XXX Need to clear pad so earlier data in last line does not still remain
|
90
|
+
while((ch = my_pad.getch()) != KEY_F1 )
|
91
|
+
case ch
|
92
|
+
when ?j.getbyte(0)
|
93
|
+
@prow += 1
|
94
|
+
#next
|
95
|
+
# disallow
|
96
|
+
if @prow > textary.count
|
97
|
+
@prow = textary.count
|
98
|
+
Ncurses.beep
|
99
|
+
next
|
100
|
+
end
|
101
|
+
#when KEY_UP
|
102
|
+
when ?k.getbyte(0)
|
103
|
+
@prow -= 1
|
104
|
+
#next
|
105
|
+
# disallow
|
106
|
+
if @prow <= 0
|
107
|
+
Ncurses.beep
|
108
|
+
@prow = 0
|
109
|
+
next
|
110
|
+
end
|
111
|
+
when 32
|
112
|
+
@prow += @screenrows
|
113
|
+
if @prow > textary.count
|
114
|
+
@prow = textary.count
|
115
|
+
Ncurses.beep
|
116
|
+
next
|
117
|
+
end
|
118
|
+
when ?-.getbyte(0)
|
119
|
+
if @prow <= 0
|
120
|
+
Ncurses.beep
|
121
|
+
@prow = 0
|
122
|
+
next
|
123
|
+
end
|
124
|
+
@prow -= @screenrows
|
125
|
+
when ?t.getbyte(0)
|
126
|
+
@pcol = @prow = 0
|
127
|
+
when ?h.getbyte(0)
|
128
|
+
@pcol += 1
|
129
|
+
when ?l.getbyte(0)
|
130
|
+
@pcol -= 1
|
131
|
+
when ?r.getbyte(0)
|
132
|
+
my_form_win.wclear # 2009-10-10 17:46
|
133
|
+
when KEY_ENTER, 10
|
134
|
+
# selection
|
135
|
+
when ?q.getbyte(0), ?\,
|
136
|
+
break
|
137
|
+
end
|
138
|
+
@pcol = 0 if @pcol < 0
|
139
|
+
# clear is required but in 1.9.1 there is no prefresh after a clear. screen blanks out totally
|
140
|
+
#my_form_win.wclear # 2009-10-10 17:46
|
141
|
+
#my_form_win.werase # 2009-10-10 17:46
|
142
|
+
# my_pad.prefresh(@prow,@pcol, @startrow,0, @screenrows,Ncurses.COLS-1);
|
143
|
+
#ret = Ncurses.copywin(my_pad, my_form_win, @prow,@pcol,@startrow,0, @screenrows, Ncurses.COLS-1, 0)
|
144
|
+
#ret = my_pad.copywin( my_form_win, @prow,@pcol,@startrow,0, @screenrows, Ncurses.COLS-1, 0)
|
145
|
+
ret = my_pad.copywin( my_form_win, @prow,@pcol,0,0, @screenrows, screencols, 0)
|
146
|
+
$log.debug("copywin #{ret} : cols:#{screencols}")
|
147
|
+
my_form_win.wrefresh # if i don't put this then upon return the other screen is still shown
|
148
|
+
# till i press a key
|
149
|
+
Ncurses::Panel.update_panels
|
150
|
+
end
|
151
|
+
# Un post form and free the memory
|
152
|
+
|
153
|
+
|
154
|
+
ensure
|
155
|
+
Ncurses.endwin();
|
156
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# this is a test program, tests out tabbed panes. type F1 to exit
|
2
|
+
#
|
3
|
+
#$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
|
4
|
+
require 'rubygems'
|
5
|
+
require 'ncurses'
|
6
|
+
require 'logger'
|
7
|
+
require 'rbcurse'
|
8
|
+
#require 'rbcurse/newtabbedpane'
|
9
|
+
require 'rbcurse/rtabbedpane'
|
10
|
+
|
11
|
+
class TestTabbedPane
|
12
|
+
def initialize
|
13
|
+
acolor = $reversecolor
|
14
|
+
#$config_hash ||= {}
|
15
|
+
end
|
16
|
+
def run
|
17
|
+
$config_hash ||= Variable.new Hash.new
|
18
|
+
#configvar.update_command(){ |v| $config_hash[v.source()] = v.value }
|
19
|
+
@window = VER::Window.root_window
|
20
|
+
@form = Form.new @window
|
21
|
+
r = 1; c = 30;
|
22
|
+
@tp = RubyCurses::TabbedPane.new @form do
|
23
|
+
height 12
|
24
|
+
width 50
|
25
|
+
row 13
|
26
|
+
col 10
|
27
|
+
button_type :ok
|
28
|
+
end
|
29
|
+
@tab1 = @tp.add_tab "&Language"
|
30
|
+
f1 = @tab1.form
|
31
|
+
#$radio = Variable.new
|
32
|
+
radio1 = RadioButton.new f1 do
|
33
|
+
#variable $radio
|
34
|
+
variable $config_hash
|
35
|
+
name "radio1"
|
36
|
+
text "ruby"
|
37
|
+
value "ruby"
|
38
|
+
color "red"
|
39
|
+
row 4
|
40
|
+
col 5
|
41
|
+
end
|
42
|
+
radio2 = RadioButton.new f1 do
|
43
|
+
#variable $radio
|
44
|
+
variable $config_hash
|
45
|
+
name "radio1"
|
46
|
+
text "jruby"
|
47
|
+
value "jruby"
|
48
|
+
color "green"
|
49
|
+
row 5
|
50
|
+
col 5
|
51
|
+
end
|
52
|
+
radio3 = RadioButton.new f1 do
|
53
|
+
#variable $radio
|
54
|
+
variable $config_hash
|
55
|
+
name "radio1"
|
56
|
+
text "macruby"
|
57
|
+
value "macruby"
|
58
|
+
color "cyan"
|
59
|
+
row 6
|
60
|
+
col 5
|
61
|
+
end
|
62
|
+
@tab2 = @tp.add_tab "&Settings"
|
63
|
+
f2 = @tab2.form
|
64
|
+
r = 4
|
65
|
+
butts = [ "Use &HTTP/1.0", "Use &frames", "&Use SSL" ]
|
66
|
+
bcodes = %w[ HTTP, FRAMES, SSL ]
|
67
|
+
butts.each_with_index do |t, i|
|
68
|
+
RubyCurses::CheckBox.new f2 do
|
69
|
+
text butts[i]
|
70
|
+
variable $config_hash
|
71
|
+
name bcodes[i]
|
72
|
+
row r+i
|
73
|
+
col 5
|
74
|
+
end
|
75
|
+
end
|
76
|
+
@tab3 = @tp.add_tab "&Editors"
|
77
|
+
f3 = @tab3.form
|
78
|
+
butts = %w[ &Vim E&macs &Jed &Other ]
|
79
|
+
bcodes = %w[ VIM EMACS JED OTHER]
|
80
|
+
row = 4
|
81
|
+
butts.each_with_index do |name, i|
|
82
|
+
RubyCurses::CheckBox.new f3 do
|
83
|
+
text name
|
84
|
+
variable $config_hash
|
85
|
+
name bcodes[i]
|
86
|
+
row row+i
|
87
|
+
col 5
|
88
|
+
end
|
89
|
+
end
|
90
|
+
@help = "q to quit. Use any key of key combination to see what's caught. Check logger too"
|
91
|
+
RubyCurses::Label.new @form, {'text' => @help, "row" => 11, "col" => 2, "color" => "yellow"}
|
92
|
+
@form.repaint
|
93
|
+
@window.wrefresh
|
94
|
+
Ncurses::Panel.update_panels
|
95
|
+
while((ch = @window.getchar()) != ?q.getbyte(0) )
|
96
|
+
# @tp.repaint
|
97
|
+
@form.handle_key(ch)
|
98
|
+
@window.wrefresh
|
99
|
+
end
|
100
|
+
#@tp.show
|
101
|
+
#@tp.handle_keys
|
102
|
+
end
|
103
|
+
end
|
104
|
+
if $0 == __FILE__
|
105
|
+
# Initialize curses
|
106
|
+
begin
|
107
|
+
# XXX update with new color and kb
|
108
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
109
|
+
$log = Logger.new("view.log")
|
110
|
+
$log.level = Logger::DEBUG
|
111
|
+
n = TestTabbedPane.new
|
112
|
+
n.run
|
113
|
+
rescue => ex
|
114
|
+
ensure
|
115
|
+
VER::stop_ncurses
|
116
|
+
p ex if ex
|
117
|
+
p(ex.backtrace.join("\n")) if ex
|
118
|
+
$log.debug( ex) if ex
|
119
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
120
|
+
end
|
121
|
+
end
|