rbcurse 1.1.3 → 1.1.4
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 +31 -0
- data/NOTES +104 -0
- data/README.markdown +38 -50
- data/VERSION +1 -1
- data/examples/README.txt +36 -0
- data/examples/data.txt +683 -0
- data/examples/rfe.rb +14 -3
- data/examples/sqlc.rb +6 -1
- data/examples/sqlm.rb +7 -1
- data/examples/test1.rb +1 -1
- data/examples/test2.rb +3 -3
- data/examples/testchars.rb +1 -1
- data/examples/testcombo.rb +1 -1
- data/examples/testkeypress.rb +2 -1
- data/examples/testlistbox.rb +114 -0
- data/examples/testmenu.rb +1 -1
- data/examples/testmulticomp.rb +1 -1
- data/examples/testscroller.rb +1 -1
- data/examples/testtable.rb +1 -1
- data/examples/testtabp.rb +1 -1
- data/examples/testtestw.rb +1 -1
- data/examples/testtodo.rb +1 -1
- data/examples/testtpane.rb +1 -1
- data/examples/testtpane2.rb +1 -1
- data/examples/testtpanetable.rb +1 -1
- data/examples/todo.rb +1 -0
- data/examples/viewtodo.rb +91 -33
- data/lib/rbcurse/extras/tableextended.rb +40 -0
- data/lib/rbcurse/rlistbox.rb +8 -0
- data/lib/rbcurse/rtable.rb +46 -12
- data/lib/rbcurse/rwidget.rb +8 -3
- data/lib/rbcurse/undomanager.rb +8 -1
- data/lib/rbcurse/vieditable.rb +45 -3
- data/rbcurse.gemspec +10 -4
- metadata +13 -4
data/examples/rfe.rb
CHANGED
@@ -13,7 +13,7 @@ require 'logger'
|
|
13
13
|
require 'rbcurse'
|
14
14
|
require 'rbcurse/rcombo'
|
15
15
|
require 'rbcurse/rlistbox'
|
16
|
-
require 'rfe_renderer'
|
16
|
+
require './rfe_renderer'
|
17
17
|
#require 'lib/rbcurse/table/tablecellrenderer'
|
18
18
|
require 'rbcurse/keylabelprinter'
|
19
19
|
require 'rbcurse/applicationheader'
|
@@ -197,7 +197,16 @@ class FileExplorer
|
|
197
197
|
end
|
198
198
|
alias :current_dir :cur_dir
|
199
199
|
def draw_screen dir=nil
|
200
|
-
|
200
|
+
# I get an error here if dir in yaml file is non-existent, like deleted or copied from another machine
|
201
|
+
# 2010-08-22 19:25
|
202
|
+
if dir
|
203
|
+
if File.exists?(dir) && File.directory?(dir)
|
204
|
+
cd dir unless dir.nil?
|
205
|
+
else
|
206
|
+
dir = nil
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
201
210
|
wdir = FileUtils.pwd
|
202
211
|
@prev_dirs << wdir
|
203
212
|
@dir = Dir.new(Dir.getwd)
|
@@ -989,7 +998,9 @@ if $0 == __FILE__
|
|
989
998
|
begin
|
990
999
|
# Initialize curses
|
991
1000
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
992
|
-
|
1001
|
+
#$log = Logger.new("view.log")
|
1002
|
+
$log = Logger.new(ENV['LOGDIR'] || "" + "view.log")
|
1003
|
+
|
993
1004
|
$log.level = Logger::DEBUG
|
994
1005
|
|
995
1006
|
catch(:close) do
|
data/examples/sqlc.rb
CHANGED
@@ -26,6 +26,7 @@ require 'rbcurse/rtabbedpane'
|
|
26
26
|
# pls get testd.db from
|
27
27
|
# http://www.benegal.org/files/screen/testd.db
|
28
28
|
# or put some other sqlite3 db name there.
|
29
|
+
# or create using sqlite3 testd.db < data.txt
|
29
30
|
|
30
31
|
## must give me @content, @columns, @datatypes (opt)
|
31
32
|
class Datasource
|
@@ -49,6 +50,7 @@ class Datasource
|
|
49
50
|
instance_eval(&block) if block_given?
|
50
51
|
end
|
51
52
|
def connect dbname
|
53
|
+
raise " #{dbname} does not exist. Please fetch from http://www.benegal.org/files/screen/testd.db" if !File.exists?(dbname)
|
52
54
|
@db = SQLite3::Database.new(dbname)
|
53
55
|
end
|
54
56
|
# get columns and datatypes, prefetch
|
@@ -264,6 +266,7 @@ class Sqlc
|
|
264
266
|
tablist_ht = 6
|
265
267
|
mylist = @db.get_data "select name from sqlite_master"
|
266
268
|
# mylist is an Array of SQLite3::ResultSet::ArrayWithTypesAndFields
|
269
|
+
raise "Database contains no tables! I need some tables" unless mylist
|
267
270
|
mylist.collect!{|x| x[0] } ## 1.9 hack, but will it run on 1.8 ??
|
268
271
|
$listdata = Variable.new mylist
|
269
272
|
tablelist = Listbox.new @form do
|
@@ -412,7 +415,9 @@ if $0 == __FILE__
|
|
412
415
|
begin
|
413
416
|
# Initialize curses
|
414
417
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
415
|
-
|
418
|
+
#$log = Logger.new("view.log")
|
419
|
+
$log = Logger.new(ENV['LOGDIR'] || "" + "view.log")
|
420
|
+
|
416
421
|
$log.level = Logger::DEBUG
|
417
422
|
|
418
423
|
colors = Ncurses.COLORS
|
data/examples/sqlm.rb
CHANGED
@@ -26,6 +26,7 @@ require 'rbcurse/rmulticontainer'
|
|
26
26
|
# pls get testd.db from
|
27
27
|
# http://www.benegal.org/files/screen/testd.db
|
28
28
|
# or put some other sqlite3 db name there.
|
29
|
+
# or create using sqlite3 testd.db < data.txt
|
29
30
|
|
30
31
|
## must give me @content, @columns, @datatypes (opt)
|
31
32
|
class Datasource
|
@@ -49,6 +50,7 @@ class Datasource
|
|
49
50
|
instance_eval(&block) if block_given?
|
50
51
|
end
|
51
52
|
def connect dbname
|
53
|
+
raise " #{dbname} does not exist. Please fetch from http://www.benegal.org/files/screen/testd.db" if !File.exists?(dbname)
|
52
54
|
@db = SQLite3::Database.new(dbname)
|
53
55
|
end
|
54
56
|
# get columns and datatypes, prefetch
|
@@ -264,6 +266,7 @@ class Sqlc
|
|
264
266
|
tablist_ht = 6
|
265
267
|
mylist = @db.get_data "select name from sqlite_master"
|
266
268
|
# mylist is an Array of SQLite3::ResultSet::ArrayWithTypesAndFields
|
269
|
+
raise "Database contains no tables! I need some tables" unless mylist
|
267
270
|
mylist.collect!{|x| x[0] } ## 1.9 hack, but will it run on 1.8 ??
|
268
271
|
$listdata = Variable.new mylist
|
269
272
|
tablelist = Listbox.new @form do
|
@@ -372,6 +375,7 @@ class Sqlc
|
|
372
375
|
atable.set_column_widths cw
|
373
376
|
rescue => exc
|
374
377
|
$log.debug(exc.backtrace.join("\n"))
|
378
|
+
raise exc.to_s
|
375
379
|
alert exc.to_s
|
376
380
|
return
|
377
381
|
end
|
@@ -425,7 +429,9 @@ if $0 == __FILE__
|
|
425
429
|
begin
|
426
430
|
# Initialize curses
|
427
431
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
428
|
-
|
432
|
+
#$log = Logger.new("view.log")
|
433
|
+
$log = Logger.new(ENV['LOGDIR'] || "" + "view.log")
|
434
|
+
|
429
435
|
$log.level = Logger::DEBUG
|
430
436
|
|
431
437
|
colors = Ncurses.COLORS
|
data/examples/test1.rb
CHANGED
@@ -19,7 +19,7 @@ if $0 == __FILE__
|
|
19
19
|
begin
|
20
20
|
# XXX update with new color and kb
|
21
21
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
22
|
-
$log = Logger.new("view.log")
|
22
|
+
$log = Logger.new((File.join(ENV['LOGDIR'] || "./" ,"view.log")))
|
23
23
|
$log.level = Logger::DEBUG
|
24
24
|
|
25
25
|
# @window = VER::Window.root_window
|
data/examples/test2.rb
CHANGED
@@ -13,7 +13,7 @@ require 'rbcurse/listcellrenderer'
|
|
13
13
|
require 'rbcurse/checkboxcellrenderer'
|
14
14
|
require 'rbcurse/comboboxcellrenderer'
|
15
15
|
require 'rbcurse/celleditor'
|
16
|
-
require 'qdfilechooser'
|
16
|
+
require './qdfilechooser'
|
17
17
|
require 'rbcurse/rlistbox'
|
18
18
|
require 'rbcurse/rmessagebox'
|
19
19
|
if $0 == __FILE__
|
@@ -22,8 +22,8 @@ if $0 == __FILE__
|
|
22
22
|
begin
|
23
23
|
# Initialize curses
|
24
24
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
25
|
-
#$log = Logger.new("
|
26
|
-
$log = Logger.new("view.log")
|
25
|
+
#$log = Logger.new(ENV['LOGDIR'] || "" + "view.log")
|
26
|
+
$log = Logger.new((File.join(ENV['LOGDIR'] || "./" ,"view.log")))
|
27
27
|
$log.level = Logger::DEBUG
|
28
28
|
|
29
29
|
@window = VER::Window.root_window
|
data/examples/testchars.rb
CHANGED
@@ -11,7 +11,7 @@ if $0 == __FILE__
|
|
11
11
|
begin
|
12
12
|
# Initialize curses
|
13
13
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
14
|
-
$log = Logger.new("view.log")
|
14
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
15
15
|
$log.level = Logger::DEBUG
|
16
16
|
|
17
17
|
@window = VER::Window.root_window
|
data/examples/testcombo.rb
CHANGED
@@ -14,7 +14,7 @@ if $0 == __FILE__
|
|
14
14
|
begin
|
15
15
|
# Initialize curses
|
16
16
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
17
|
-
$log = Logger.new("view.log")
|
17
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
18
18
|
$log.level = Logger::DEBUG
|
19
19
|
|
20
20
|
@window = VER::Window.root_window
|
data/examples/testkeypress.rb
CHANGED
@@ -12,7 +12,8 @@ if $0 == __FILE__
|
|
12
12
|
begin
|
13
13
|
# Initialize curses
|
14
14
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
15
|
-
$log = Logger.new("view.log")
|
15
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
16
|
+
|
16
17
|
$log.level = Logger::DEBUG
|
17
18
|
|
18
19
|
@window = VER::Window.root_window
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
|
2
|
+
# this program tests out various widgets.
|
3
|
+
require 'ncurses'
|
4
|
+
require 'logger'
|
5
|
+
require 'rbcurse'
|
6
|
+
require 'rbcurse/rwidget'
|
7
|
+
#require 'rbcurse/listcellrenderer'
|
8
|
+
#require 'rbcurse/celleditor'
|
9
|
+
require 'rbcurse/rlistbox'
|
10
|
+
require 'rbcurse/vieditable'
|
11
|
+
require 'rbcurse/undomanager'
|
12
|
+
#require 'rbcurse/rmessagebox'
|
13
|
+
class RubyCurses::Listbox
|
14
|
+
# vieditable includes listeditable which
|
15
|
+
# does bring in some functions which can crash program like x and X TODO
|
16
|
+
# also, f overrides list f mapping. TODO
|
17
|
+
include ViEditable
|
18
|
+
end
|
19
|
+
if $0 == __FILE__
|
20
|
+
include RubyCurses
|
21
|
+
|
22
|
+
begin
|
23
|
+
# Initialize curses
|
24
|
+
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
25
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
26
|
+
$log.level = Logger::DEBUG
|
27
|
+
|
28
|
+
@window = VER::Window.root_window
|
29
|
+
$catch_alt_digits = true; # emacs like alt-1..9 numeric arguments
|
30
|
+
# Initialize few color pairs
|
31
|
+
# Create the window to be associated with the form
|
32
|
+
# Un post form and free the memory
|
33
|
+
|
34
|
+
catch(:close) do
|
35
|
+
colors = Ncurses.COLORS
|
36
|
+
$log.debug "START #{colors} colors testlistbox.rb --------- #{@window} "
|
37
|
+
@form = Form.new @window
|
38
|
+
@form.window.printstring 0, 30, "Demo of Listbox - rbcurse", $normalcolor, 'reverse'
|
39
|
+
r = 1; fc = 1;
|
40
|
+
|
41
|
+
$results = Variable.new
|
42
|
+
$results.value = "A list with vim-like key bindings. Try j k gg G o O C dd u (undo) C-r (redo) f<char> w yy p P. Also try emacs's kill-ring save/yank/cycle using M-w C-y M-y. Also, C-u and M1..9 numeric arguments."
|
43
|
+
var = RubyCurses::Label.new @form, {'text_variable' => $results, "row" => r+12, "col" => fc, "display_length" => 80, "height" => 5}
|
44
|
+
r += 1
|
45
|
+
mylist = []
|
46
|
+
0.upto(100) { |v| mylist << "#{v} scrollable data" }
|
47
|
+
$listdata = Variable.new mylist
|
48
|
+
listb = Listbox.new @form do
|
49
|
+
name "mylist"
|
50
|
+
row r
|
51
|
+
col 1
|
52
|
+
width 40
|
53
|
+
height 11
|
54
|
+
# list mylist
|
55
|
+
list_variable $listdata
|
56
|
+
#selection_mode :SINGLE
|
57
|
+
show_selector true
|
58
|
+
row_selected_symbol "[X] "
|
59
|
+
row_unselected_symbol "[ ] "
|
60
|
+
title "A long list"
|
61
|
+
title_attrib 'reverse'
|
62
|
+
cell_editing_allowed false
|
63
|
+
end
|
64
|
+
listb.one_key_selection = false # this allows us to map keys to methods
|
65
|
+
listb.vieditable_init_listbox
|
66
|
+
undom = SimpleUndo.new listb
|
67
|
+
|
68
|
+
#listb.list.insert 55, "hello ruby", "so long python", "farewell java", "RIP .Net"
|
69
|
+
|
70
|
+
# just for demo, lets scroll the text view as we scroll this.
|
71
|
+
# listb.bind(:ENTER_ROW, @textview) { |alist, tview| tview.top_row alist.current_index }
|
72
|
+
|
73
|
+
#list = ListDataModel.new( %w[spotty tiger panther jaguar leopard ocelot lion])
|
74
|
+
#list.bind(:LIST_DATA_EVENT) { |lde| $message.value = lde.to_s; $log.debug " STA: #{$message.value} #{lde}" }
|
75
|
+
#list.bind(:ENTER_ROW) { |obj| $message.value = "ENTER_ROW :#{obj.current_index} : #{obj.selected_item} "; $log.debug " ENTER_ROW: #{$message.value} , #{obj}" }
|
76
|
+
|
77
|
+
# using ampersand to set mnemonic
|
78
|
+
col = 1
|
79
|
+
row = 20
|
80
|
+
cancel_button = Button.new @form do
|
81
|
+
#variable $results
|
82
|
+
text "&Cancel"
|
83
|
+
row row
|
84
|
+
col col + 10
|
85
|
+
#surround_chars ['{ ',' }'] ## change the surround chars
|
86
|
+
end
|
87
|
+
cancel_button.command { |form|
|
88
|
+
if confirm("Do your really want to quit?")== :YES
|
89
|
+
throw(:close);
|
90
|
+
else
|
91
|
+
$message.value = "Quit aborted"
|
92
|
+
end
|
93
|
+
}
|
94
|
+
|
95
|
+
|
96
|
+
@form.repaint
|
97
|
+
@window.wrefresh
|
98
|
+
Ncurses::Panel.update_panels
|
99
|
+
while((ch = @window.getchar()) != KEY_F1 )
|
100
|
+
@form.handle_key(ch)
|
101
|
+
#@form.repaint
|
102
|
+
@window.wrefresh
|
103
|
+
end
|
104
|
+
end
|
105
|
+
rescue => ex
|
106
|
+
ensure
|
107
|
+
@window.destroy if !@window.nil?
|
108
|
+
VER::stop_ncurses
|
109
|
+
p ex if ex
|
110
|
+
p(ex.backtrace.join("\n")) if ex
|
111
|
+
$log.debug( ex) if ex
|
112
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
113
|
+
end
|
114
|
+
end
|
data/examples/testmenu.rb
CHANGED
@@ -12,7 +12,7 @@ if $0 == __FILE__
|
|
12
12
|
begin
|
13
13
|
# Initialize curses
|
14
14
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
15
|
-
$log = Logger.new("view.log")
|
15
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
16
16
|
$log.level = Logger::DEBUG
|
17
17
|
|
18
18
|
@window = VER::Window.root_window
|
data/examples/testmulticomp.rb
CHANGED
@@ -12,7 +12,7 @@ if $0 == __FILE__
|
|
12
12
|
begin
|
13
13
|
# Initialize curses
|
14
14
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
15
|
-
$log = Logger.new("view.log")
|
15
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
16
16
|
$log.level = Logger::DEBUG
|
17
17
|
|
18
18
|
@window = VER::Window.root_window
|
data/examples/testscroller.rb
CHANGED
@@ -24,7 +24,7 @@ if $0 == __FILE__
|
|
24
24
|
# Initialize curses
|
25
25
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
26
26
|
#$log = Logger.new("v#{$0}.log")
|
27
|
-
$log = Logger.new("view.log")
|
27
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
28
28
|
$log.level = Logger::DEBUG
|
29
29
|
|
30
30
|
@window = VER::Window.root_window
|
data/examples/testtable.rb
CHANGED
@@ -37,7 +37,7 @@ if $0 == __FILE__
|
|
37
37
|
begin
|
38
38
|
# Initialize curses
|
39
39
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
40
|
-
$log = Logger.new("view.log")
|
40
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
41
41
|
$log.level = Logger::DEBUG
|
42
42
|
|
43
43
|
@window = VER::Window.root_window
|
data/examples/testtabp.rb
CHANGED
@@ -94,7 +94,7 @@ if $0 == __FILE__
|
|
94
94
|
begin
|
95
95
|
# XXX update with new color and kb
|
96
96
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
97
|
-
$log = Logger.new("view.log")
|
97
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
98
98
|
$log.level = Logger::DEBUG
|
99
99
|
n = TestTabbedPane.new
|
100
100
|
n.run
|
data/examples/testtestw.rb
CHANGED
@@ -12,7 +12,7 @@ if $0 == __FILE__
|
|
12
12
|
begin
|
13
13
|
# Initialize curses
|
14
14
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
15
|
-
$log = Logger.new("view.log")
|
15
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
16
16
|
$log.level = Logger::DEBUG
|
17
17
|
|
18
18
|
@window = VER::Window.root_window
|
data/examples/testtodo.rb
CHANGED
@@ -563,7 +563,7 @@ if $0 == __FILE__
|
|
563
563
|
begin
|
564
564
|
# Initialize curses
|
565
565
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
566
|
-
$log = Logger.new("view.log")
|
566
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
567
567
|
$log.level = Logger::DEBUG
|
568
568
|
|
569
569
|
colors = Ncurses.COLORS
|
data/examples/testtpane.rb
CHANGED
@@ -188,7 +188,7 @@ if $0 == __FILE__
|
|
188
188
|
begin
|
189
189
|
# XXX update with new color and kb
|
190
190
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
191
|
-
$log = Logger.new("view.log")
|
191
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
192
192
|
$log.level = Logger::DEBUG
|
193
193
|
n = TestTabbedPane.new
|
194
194
|
n.run
|
data/examples/testtpane2.rb
CHANGED
@@ -130,7 +130,7 @@ if $0 == __FILE__
|
|
130
130
|
begin
|
131
131
|
# XXX update with new color and kb
|
132
132
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
133
|
-
$log = Logger.new("view.log")
|
133
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
134
134
|
$log.level = Logger::DEBUG
|
135
135
|
n = TestTabbedPane.new
|
136
136
|
n.run
|
data/examples/testtpanetable.rb
CHANGED
@@ -184,7 +184,7 @@ if $0 == __FILE__
|
|
184
184
|
begin
|
185
185
|
# XXX update with new color and kb
|
186
186
|
VER::start_ncurses # this is initializing colors via ColorMap.setup
|
187
|
-
$log = Logger.new("view.log")
|
187
|
+
$log = Logger.new((File.join(ENV["LOGDIR"] || "./" ,"view.log")))
|
188
188
|
$log.level = Logger::DEBUG
|
189
189
|
n = TestTabbedPane.new
|
190
190
|
n.run
|
data/examples/todo.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
S
|
data/examples/viewtodo.rb
CHANGED
@@ -5,32 +5,62 @@ require 'logger'
|
|
5
5
|
require 'rbcurse'
|
6
6
|
require 'rbcurse/rcombo'
|
7
7
|
require 'rbcurse/rtable'
|
8
|
+
require 'rbcurse/extras/tableextended' # TODO move to extras
|
8
9
|
require 'rbcurse/keylabelprinter'
|
9
10
|
require 'rbcurse/applicationheader'
|
10
11
|
require 'rbcurse/action'
|
11
|
-
require '
|
12
|
+
require 'sqlite3' # changing to sqlite3 since yml, csv a pain for updating
|
13
|
+
#require 'yaml' # 1.9 2009-10-05 13:11
|
12
14
|
###############################
|
13
|
-
##
|
15
|
+
## This uses todo.db, if not in gem, please take from github
|
16
|
+
## Please look at testtodo.rb
|
14
17
|
##############################
|
15
18
|
|
19
|
+
class Table
|
20
|
+
# so we can increase and decrease column width using keys
|
21
|
+
include TableExtended
|
22
|
+
end
|
16
23
|
class TodoList
|
17
24
|
def initialize file
|
18
25
|
@file = file
|
19
26
|
end
|
20
27
|
def load
|
21
|
-
|
22
|
-
@
|
28
|
+
#@todomap = YAML::load(File.open(@file));
|
29
|
+
@db = SQLite3::Database.new(@file)
|
30
|
+
#@records = convert_to_text
|
31
|
+
end
|
32
|
+
# get columns and datatypes, prefetch - copied from sqlc.rb
|
33
|
+
def get_data command
|
34
|
+
@columns, *rows = @db.execute2(command)
|
35
|
+
@content = rows
|
36
|
+
return nil if @content.nil? or @content[0].nil?
|
37
|
+
@datatypes = @content[0].types #if @datatypes.nil?
|
38
|
+
@command = command
|
39
|
+
return @content
|
23
40
|
end
|
24
41
|
def get_statuses
|
25
|
-
|
42
|
+
#@todomap['__STATUSES']
|
43
|
+
## temporary due to structure change
|
44
|
+
#['TODO', 'TOTEST', 'TESTED']
|
45
|
+
c = get_data "select * from status"
|
46
|
+
c.flatten
|
26
47
|
end
|
27
48
|
def get_modules
|
28
|
-
|
49
|
+
#@todomap['__MODULES'].sort
|
50
|
+
## temporary due to structure change
|
51
|
+
['GEN', 'FIELD', 'FORM', 'TABLE']
|
52
|
+
#get_data "select * from status"
|
29
53
|
end
|
30
54
|
def get_categories
|
31
|
-
|
55
|
+
#@todomap.keys.delete_if {|k| k.match(/^__/) }
|
56
|
+
## temporary due to structure change
|
57
|
+
#['TODO', 'FIXME','DONE']# earlier i used to keep todo items in a text file in these sections
|
58
|
+
c = get_data "select * from categ"
|
59
|
+
c.flatten
|
32
60
|
end
|
33
61
|
def get_tasks_for_category categ
|
62
|
+
get_data "select * from todo where categ = '#{categ}' "
|
63
|
+
=begin
|
34
64
|
c = @todomap[categ]
|
35
65
|
d = []
|
36
66
|
c.each_pair {|k,v|
|
@@ -43,12 +73,16 @@ class TodoList
|
|
43
73
|
end
|
44
74
|
}
|
45
75
|
return d
|
76
|
+
=end
|
46
77
|
end
|
78
|
+
# today i really don't know how this differs from previous one (records vs tasks)
|
47
79
|
def get_records_for_category categ
|
48
80
|
if categ.nil? or categ == ""
|
49
|
-
return @records
|
81
|
+
#return @records
|
82
|
+
get_data "select * from todo"
|
50
83
|
else
|
51
|
-
return @records.select { |row| row[0] == categ }
|
84
|
+
#return @records.select { |row| row[0] == categ }
|
85
|
+
get_data "select * from todo where categ = '#{categ}' "
|
52
86
|
end
|
53
87
|
end
|
54
88
|
def sort categ, column, descending=false
|
@@ -130,8 +164,8 @@ def get_key_labels
|
|
130
164
|
end
|
131
165
|
def get_key_labels_table
|
132
166
|
key_labels = [
|
133
|
-
['M-n','NewRow'], ['M-d','DelRow'],
|
134
|
-
['C-x','Select'],
|
167
|
+
#['M-n','NewRow'], ['M-d','DelRow'],
|
168
|
+
['C-x','Select'], ['M-h', 'Popup'],
|
135
169
|
['M-0', 'Top'], ['M-9', 'End'],
|
136
170
|
['C-p', 'PgUp'], ['C-n', 'PgDn'],
|
137
171
|
['M-Tab','Nxt Fld'], ['Tab','Nxt Col'],
|
@@ -145,7 +179,8 @@ class TodoApp
|
|
145
179
|
@form = Form.new @window
|
146
180
|
@sort_dir = true
|
147
181
|
|
148
|
-
|
182
|
+
#@todo = TodoList.new "todo.yml"
|
183
|
+
@todo = TodoList.new "todo.db"
|
149
184
|
@todo.load
|
150
185
|
end
|
151
186
|
def run
|
@@ -173,7 +208,7 @@ class TodoApp
|
|
173
208
|
list_config 'height' => 4
|
174
209
|
help_text "Select a category and <TAB> out. KEY_UP, KEY_DOWN, M-Down"
|
175
210
|
end
|
176
|
-
colnames = %w[ Categ Module Prior Task Status Date]
|
211
|
+
colnames = %w[Sno Categ Module Prior Task Status Date]
|
177
212
|
|
178
213
|
colnames_cbl = colnames.dup
|
179
214
|
colnames_cbl.insert 0, ""
|
@@ -198,7 +233,8 @@ class TodoApp
|
|
198
233
|
set_label Label.new @form, {'text' => "Pattern:", 'color'=>'cyan',:bgcolor => 'black',"mnemonic"=>"P"}
|
199
234
|
help_text "Pattern/Regex to filter on"
|
200
235
|
end
|
201
|
-
|
236
|
+
# prepopulate screen, else error in table
|
237
|
+
data = todo.get_records_for_category 'TODO' # earlier TODO
|
202
238
|
@data = data
|
203
239
|
b_filter = Button.new @form do
|
204
240
|
text "Fi<er"
|
@@ -242,29 +278,50 @@ class TodoApp
|
|
242
278
|
#
|
243
279
|
## key bindings fo atable
|
244
280
|
# column widths
|
245
|
-
|
246
|
-
tcm.column(
|
247
|
-
|
248
|
-
tcm.column(
|
249
|
-
|
250
|
-
tcm.column(
|
281
|
+
x = 0
|
282
|
+
tcm.column(x).width 2 # RK 2010-05-11 19:59 added serial number for updating
|
283
|
+
x += 1
|
284
|
+
tcm.column(x).width 8
|
285
|
+
x += 1
|
286
|
+
tcm.column(x).width 8
|
287
|
+
x += 1
|
288
|
+
tcm.column(x).width 5
|
289
|
+
x += 1
|
290
|
+
tcm.column(x).width 50
|
291
|
+
x += 1
|
292
|
+
tcm.column(x).width 8
|
293
|
+
x += 1
|
294
|
+
tcm.column(x).width 16
|
251
295
|
app = self
|
252
296
|
atable.configure() do
|
253
297
|
#bind_key(330) { atable.remove_column(tcm.column(atable.focussed_col)) rescue "" }
|
298
|
+
#bind_key(?+) {
|
299
|
+
#acolumn = atable.column atable.focussed_col()
|
300
|
+
##num = $multiplier || 1
|
301
|
+
#num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)
|
302
|
+
#$multiplier = 0
|
303
|
+
#w = acolumn.width + num
|
304
|
+
#acolumn.width w
|
305
|
+
##atable.table_structure_changed
|
306
|
+
#}
|
254
307
|
bind_key(?+) {
|
255
|
-
|
256
|
-
|
257
|
-
acolumn.width w
|
258
|
-
#atable.table_structure_changed
|
308
|
+
# this automatically takes care of numeric arguments such as 12+ 22+ etc
|
309
|
+
atable.increase_column
|
259
310
|
}
|
260
311
|
bind_key(?-) {
|
261
|
-
|
262
|
-
|
263
|
-
if w > 3
|
264
|
-
acolumn.width w
|
265
|
-
#atable.table_structure_changed
|
266
|
-
end
|
312
|
+
# this automatically takes care of numeric arguments such as 12- 22- etc
|
313
|
+
atable.decrease_column
|
267
314
|
}
|
315
|
+
#bind_key(?-) {
|
316
|
+
#acolumn = atable.column atable.focussed_col()
|
317
|
+
#num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)
|
318
|
+
#w = acolumn.width - num
|
319
|
+
#$multiplier = 0
|
320
|
+
#if w > 3
|
321
|
+
#acolumn.width w
|
322
|
+
##atable.table_structure_changed
|
323
|
+
#end
|
324
|
+
#}
|
268
325
|
bind_key(?>) {
|
269
326
|
colcount = tcm.column_count-1
|
270
327
|
#atable.move_column sel_col.value, sel_col.value+1 unless sel_col.value == colcount
|
@@ -394,19 +451,20 @@ class TodoApp
|
|
394
451
|
@window.destroy if !@window.nil?
|
395
452
|
end
|
396
453
|
end
|
454
|
+
# Adding was done in testtodo.rb. this is view only
|
397
455
|
def create_table_actions atable, todo, data, categ
|
398
456
|
#@new_act = Action.new("New Row", "mnemonic"=>"N") {
|
399
457
|
@new_act = Action.new("&New Row") {
|
400
458
|
cc = atable.get_table_column_model.column_count
|
401
459
|
if atable.row_count < 1
|
402
|
-
|
460
|
+
categ = nil
|
403
461
|
frow = 0
|
404
462
|
else
|
405
463
|
frow = atable.focussed_row
|
464
|
+
categ = atable.get_value_at(frow,1)
|
406
465
|
frow += 1
|
407
|
-
mod = atable.get_value_at(frow,0)
|
408
466
|
end
|
409
|
-
tmp = [
|
467
|
+
tmp = [nil, categ, "", 5, "", "TODO", Time.now]
|
410
468
|
tm = atable.table_model
|
411
469
|
tm.insert frow, tmp
|
412
470
|
atable.set_focus_on frow
|