rbcurse 1.4.1 → 1.5.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +31 -0
- data/README.markdown +69 -11
- data/VERSION +1 -1
- data/lib/rbcurse.rb +5 -5
- metadata +10 -198
- data/Makefile +0 -21
- data/Manifest.txt +0 -91
- data/TODO +0 -372
- data/TODO2.txt +0 -118
- data/examples/README.txt +0 -67
- data/examples/abasiclist.rb +0 -33
- data/examples/alpmenu.rb +0 -42
- data/examples/app.rb +0 -859
- data/examples/app.sample +0 -10
- data/examples/appdirtree.rb +0 -75
- data/examples/appemail.rb +0 -191
- data/examples/appemaillb.rb +0 -308
- data/examples/appgcompose.rb +0 -315
- data/examples/atree.rb +0 -64
- data/examples/common/file.rb +0 -40
- data/examples/common/rmail.rb +0 -257
- data/examples/data.txt +0 -683
- data/examples/data/README.markdown +0 -9
- data/examples/data/brew.txt +0 -38
- data/examples/data/color.2 +0 -37
- data/examples/data/gemlist.txt +0 -60
- data/examples/data/lotr.txt +0 -12
- data/examples/data/ports.txt +0 -136
- data/examples/data/tasks.txt +0 -27
- data/examples/data/todocsv.csv +0 -28
- data/examples/data/unix1.txt +0 -21
- data/examples/data/unix2.txt +0 -11
- data/examples/dbdemo.rb +0 -495
- data/examples/deprecated/appgmail.rb +0 -952
- data/examples/deprecated/splitp.rb +0 -56
- data/examples/deprecated/testscrolllb.rb +0 -86
- data/examples/deprecated/testscrollp.rb +0 -88
- data/examples/deprecated/testscrollta.rb +0 -80
- data/examples/deprecated/testscrolltable.rb +0 -165
- data/examples/deprecated/testsplit.rb +0 -87
- data/examples/deprecated/testsplit2.rb +0 -123
- data/examples/deprecated/testsplit3.rb +0 -215
- data/examples/deprecated/testsplit3_1.rb +0 -244
- data/examples/deprecated/testsplit3a.rb +0 -215
- data/examples/deprecated/testsplit3b.rb +0 -237
- data/examples/deprecated/testsplitta.rb +0 -148
- data/examples/deprecated/testsplittv.rb +0 -142
- data/examples/deprecated/testsplittvv.rb +0 -144
- data/examples/deprecated/testtpane.rb +0 -215
- data/examples/deprecated/testtpane2.rb +0 -145
- data/examples/deprecated/testtpanetable.rb +0 -203
- data/examples/dirtree.rb +0 -88
- data/examples/experimental/resultsetdemo.rb +0 -280
- data/examples/experimental/testmform.rb +0 -35
- data/examples/experimental/testscroller.rb +0 -117
- data/examples/experimental/teststackflow.rb +0 -111
- data/examples/menu1.rb +0 -112
- data/examples/multispl.rb +0 -86
- data/examples/newmessagebox.rb +0 -130
- data/examples/newtabbedwindow.rb +0 -100
- data/examples/newtesttabp.rb +0 -121
- data/examples/qdfilechooser.rb +0 -68
- data/examples/rfe.rb +0 -1195
- data/examples/rfe_renderer.rb +0 -121
- data/examples/sqlc.rb +0 -454
- data/examples/sqlm.rb +0 -437
- data/examples/sqlt.rb +0 -408
- data/examples/status.txt +0 -68
- data/examples/table1.rb +0 -24
- data/examples/term2.rb +0 -84
- data/examples/test1.rb +0 -239
- data/examples/test2.rb +0 -674
- data/examples/testapp.rb +0 -44
- data/examples/testapp2.rb +0 -58
- data/examples/testchars.rb +0 -137
- data/examples/testcombo.rb +0 -91
- data/examples/testkeypress.rb +0 -66
- data/examples/testlistbox.rb +0 -113
- data/examples/testmenu.rb +0 -101
- data/examples/testmulticomp.rb +0 -70
- data/examples/testmulticontainer.rb +0 -94
- data/examples/testmultispl.rb +0 -199
- data/examples/testree.rb +0 -106
- data/examples/testtable.rb +0 -263
- data/examples/testtabp.rb +0 -107
- data/examples/testtodo.rb +0 -584
- data/examples/testvimsplit.rb +0 -112
- data/examples/testwsshortcuts.rb +0 -64
- data/examples/testwsshortcuts2.rb +0 -126
- data/examples/todo.db +0 -0
- data/examples/todo.yml +0 -191
- data/examples/viewtodo.rb +0 -574
- data/lib/rbcurse/action.rb +0 -40
- data/lib/rbcurse/app.rb +0 -1374
- data/lib/rbcurse/applicationheader.rb +0 -102
- data/lib/rbcurse/celleditor.rb +0 -112
- data/lib/rbcurse/checkboxcellrenderer.rb +0 -57
- data/lib/rbcurse/colormap.rb +0 -159
- data/lib/rbcurse/comboboxcellrenderer.rb +0 -30
- data/lib/rbcurse/common/ansiparser.rb +0 -117
- data/lib/rbcurse/common/appmethods.rb +0 -112
- data/lib/rbcurse/common/basestack.rb +0 -407
- data/lib/rbcurse/common/bordertitle.rb +0 -41
- data/lib/rbcurse/common/chunk.rb +0 -177
- data/lib/rbcurse/common/colorparser.rb +0 -71
- data/lib/rbcurse/common/keydefs.rb +0 -30
- data/lib/rbcurse/common/widgetshortcuts.rb +0 -302
- data/lib/rbcurse/defaultlistselectionmodel.rb +0 -79
- data/lib/rbcurse/deprecated/README.markdown +0 -12
- data/lib/rbcurse/deprecated/rscrollpane.rb +0 -512
- data/lib/rbcurse/deprecated/rsplitpane.rb +0 -894
- data/lib/rbcurse/deprecated/rsplitpane2.rb +0 -1009
- data/lib/rbcurse/deprecated/rviewport.rb +0 -204
- data/lib/rbcurse/experimental/README.markdown +0 -14
- data/lib/rbcurse/experimental/resultsettextview.rb +0 -585
- data/lib/rbcurse/experimental/stackflow.rb +0 -478
- data/lib/rbcurse/extras/bottomline.rb +0 -1850
- data/lib/rbcurse/extras/box.rb +0 -58
- data/lib/rbcurse/extras/directorylist.rb +0 -467
- data/lib/rbcurse/extras/directorytree.rb +0 -69
- data/lib/rbcurse/extras/divider.rb +0 -310
- data/lib/rbcurse/extras/focusmanager.rb +0 -31
- data/lib/rbcurse/extras/horizlist.rb +0 -203
- data/lib/rbcurse/extras/listselectable.rb +0 -264
- data/lib/rbcurse/extras/masterdetail.rb +0 -166
- data/lib/rbcurse/extras/menutree.rb +0 -63
- data/lib/rbcurse/extras/multiform.rb +0 -330
- data/lib/rbcurse/extras/multilinelabel.rb +0 -142
- data/lib/rbcurse/extras/newmessagebox.rb +0 -328
- data/lib/rbcurse/extras/newtabbedpane.rb +0 -612
- data/lib/rbcurse/extras/newtabbedwindow.rb +0 -68
- data/lib/rbcurse/extras/padreader.rb +0 -189
- data/lib/rbcurse/extras/rcomboedit.rb +0 -256
- data/lib/rbcurse/extras/resultsetbrowser.rb +0 -281
- data/lib/rbcurse/extras/rlink.rb +0 -27
- data/lib/rbcurse/extras/rmenulink.rb +0 -21
- data/lib/rbcurse/extras/scrollbar.rb +0 -143
- data/lib/rbcurse/extras/statusline.rb +0 -94
- data/lib/rbcurse/extras/stdscrwindow.rb +0 -309
- data/lib/rbcurse/extras/tableextended.rb +0 -40
- data/lib/rbcurse/extras/tabular.rb +0 -264
- data/lib/rbcurse/extras/tabularwidget.rb +0 -1150
- data/lib/rbcurse/extras/textpad.rb +0 -516
- data/lib/rbcurse/extras/viewer.rb +0 -136
- data/lib/rbcurse/io.rb +0 -850
- data/lib/rbcurse/keylabelprinter.rb +0 -178
- data/lib/rbcurse/listcellrenderer.rb +0 -140
- data/lib/rbcurse/listeditable.rb +0 -310
- data/lib/rbcurse/listkeys.rb +0 -37
- data/lib/rbcurse/listscrollable.rb +0 -564
- data/lib/rbcurse/listselectable.rb +0 -142
- data/lib/rbcurse/mapper.rb +0 -130
- data/lib/rbcurse/orderedhash.rb +0 -77
- data/lib/rbcurse/ractionevent.rb +0 -67
- data/lib/rbcurse/rbasiclistbox.rb +0 -768
- data/lib/rbcurse/rchangeevent.rb +0 -27
- data/lib/rbcurse/rcombo.rb +0 -238
- data/lib/rbcurse/rcommandwindow.rb +0 -587
- data/lib/rbcurse/rcontainer.rb +0 -415
- data/lib/rbcurse/rdialogs.rb +0 -451
- data/lib/rbcurse/rinputdataevent.rb +0 -47
- data/lib/rbcurse/rlistbox.rb +0 -1196
- data/lib/rbcurse/rmenu.rb +0 -939
- data/lib/rbcurse/rmessagebox.rb +0 -348
- data/lib/rbcurse/rmulticontainer.rb +0 -304
- data/lib/rbcurse/rmultisplit.rb +0 -722
- data/lib/rbcurse/rmultitextview.rb +0 -306
- data/lib/rbcurse/rpopupmenu.rb +0 -755
- data/lib/rbcurse/rprogress.rb +0 -118
- data/lib/rbcurse/rscrollform.rb +0 -418
- data/lib/rbcurse/rtabbedpane.rb +0 -1158
- data/lib/rbcurse/rtabbedwindow.rb +0 -167
- data/lib/rbcurse/rtable.rb +0 -1718
- data/lib/rbcurse/rtextarea.rb +0 -920
- data/lib/rbcurse/rtextview.rb +0 -761
- data/lib/rbcurse/rtree.rb +0 -780
- data/lib/rbcurse/rvimsplit.rb +0 -763
- data/lib/rbcurse/rwidget.rb +0 -2915
- data/lib/rbcurse/scrollable.rb +0 -301
- data/lib/rbcurse/table/tablecellrenderer.rb +0 -86
- data/lib/rbcurse/table/tabledatecellrenderer.rb +0 -98
- data/lib/rbcurse/tree/treecellrenderer.rb +0 -150
- data/lib/rbcurse/tree/treemodel.rb +0 -428
- data/lib/rbcurse/undomanager.rb +0 -188
- data/lib/rbcurse/vieditable.rb +0 -144
- data/lib/ver/keyboard.rb +0 -150
- data/lib/ver/keyboard2.rb +0 -170
- data/lib/ver/ncurses.rb +0 -218
- data/lib/ver/panel.rb +0 -162
- data/lib/ver/rpad.rb +0 -375
- data/lib/ver/window.rb +0 -882
- data/test/test_rbcurse.rb +0 -0
data/examples/app.sample
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'rbcurse/app'
|
2
|
-
|
3
|
-
App.new do
|
4
|
-
header = app_header "rbcurse #{Rbcurse::VERSION}", :text_center => "My Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
5
|
-
message "Press F10 to exit from here, F1 for help, F2 for menu"
|
6
|
-
|
7
|
-
stack :margin_top => 2, :margin => 5, :width => 30 do
|
8
|
-
|
9
|
-
end # stack
|
10
|
-
end # app
|
data/examples/appdirtree.rb
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'rbcurse/app'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'rbcurse/tree/treemodel'
|
4
|
-
require 'rbcurse/extras/directorylist'
|
5
|
-
require 'rbcurse/extras/directorytree'
|
6
|
-
|
7
|
-
# TODO - tree expand - also populate list
|
8
|
-
# TODO - startup = populate list
|
9
|
-
App.new do
|
10
|
-
this = self
|
11
|
-
# this is for tree to get only directories
|
12
|
-
def _directories wd
|
13
|
-
$log.debug " directories got XXX: #{wd} "
|
14
|
-
d = Dir.new(wd)
|
15
|
-
ent = d.entries.reject{|e| !File.directory? File.join(wd,e)}
|
16
|
-
$log.debug " directories got XXX: #{ent} "
|
17
|
-
ent.delete(".");ent.delete("..")
|
18
|
-
return ent
|
19
|
-
end
|
20
|
-
ht = 24
|
21
|
-
borderattrib = :reverse
|
22
|
-
dl = RubyCurses::DirectoryList.new nil, :width=>40, :height => ht, :border_attrib => borderattrib, :selection_mode => :multiple, :suppress_borders => true
|
23
|
-
dl.title_attrib = "reverse"
|
24
|
-
#@l.bind :LIST_SELECTION_EVENT do |ev|
|
25
|
-
dl.bind :PRESS do |ev|
|
26
|
-
value = ev.source.text
|
27
|
-
#TODO when selecting, sync tree with this
|
28
|
-
end
|
29
|
-
pwd = Dir.getwd
|
30
|
-
entries = _directories pwd
|
31
|
-
patharray = pwd.split("/")
|
32
|
-
# we have an array of path, to add recursively, one below the other`
|
33
|
-
nodes = []
|
34
|
-
patharray[0]="/" if patharray.first == ""
|
35
|
-
nodes << TreeNode.new(patharray.shift)
|
36
|
-
patharray.each do |e|
|
37
|
-
nodes << nodes.last.add(e)
|
38
|
-
end
|
39
|
-
last = nodes.last
|
40
|
-
nodes.last.add entries
|
41
|
-
model = DefaultTreeModel.new nodes.first
|
42
|
-
header = app_header "rbcurse #{Rbcurse::VERSION}", :text_center => "Yet Another File Manager", :text_right =>"Directory Lister", :color => :black, :bgcolor => :white#, :attr => Ncurses::A_BLINK
|
43
|
-
message "Press Enter to expand/collapse"
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
stack :margin_top => 1, :margin => 0, :width => :EXPAND do
|
48
|
-
vimsplit :height => Ncurses.LINES-2, :weight => 0.4, :orientation => :VERTICAL, :suppress_borders => true do |s|
|
49
|
-
# TODO make this into a separate class in extras DirectoryTree
|
50
|
-
#@t = tree :data => model, :height => ht, :border_attrib => borderattrib, :suppress_borders => true
|
51
|
-
@t = RubyCurses::DirectoryTree.new nil, :data => model, :height => ht, :border_attrib => borderattrib, :suppress_borders => true, :default_value => last
|
52
|
-
# store for later use
|
53
|
-
@t.config[:dl] = dl
|
54
|
-
@t.config[:app] = this
|
55
|
-
def @t.selected_path_changed path
|
56
|
-
dl = @config[:dl]
|
57
|
-
dl.current_path path
|
58
|
-
end
|
59
|
-
def @t.path_expanded path
|
60
|
-
dl = @config[:dl]
|
61
|
-
dl.current_path path
|
62
|
-
o = @config[:app]
|
63
|
-
o.message " #{path} will be expanded "
|
64
|
-
end
|
65
|
-
@t.expand_node last #
|
66
|
-
#@t.mark_parents_expanded last # make parents visible
|
67
|
-
@t.expand_parents last # make parents visible and expand
|
68
|
-
s.add @t, :FIRST
|
69
|
-
#@l = list_box :height => ht, :border_attrib => borderattrib, :selection_mode => :multiple
|
70
|
-
s.add dl, :SECOND
|
71
|
-
end # vimsplit
|
72
|
-
end # stack
|
73
|
-
sl = status_line :row => Ncurses.LINES-1
|
74
|
-
sl.command { "%-20s | v View" % [File.absolute_path(dl.current_path)] }
|
75
|
-
end # app
|
data/examples/appemail.rb
DELETED
@@ -1,191 +0,0 @@
|
|
1
|
-
require 'rbcurse/app'
|
2
|
-
require 'fileutils'
|
3
|
-
require './common/rmail'
|
4
|
-
# You need mailread.rb which is present in 1.8, but missing in 1.9
|
5
|
-
# I've loaded it here ... http://gist.github.com/634166 with line encoding
|
6
|
-
# You need to fix paths of local mbox files
|
7
|
-
|
8
|
-
# this will go into top namespace so will conflict with other apps!
|
9
|
-
def testchoose
|
10
|
-
# list filters as you type
|
11
|
-
$log.debug "called CHOOSE " if $log.debug?
|
12
|
-
filter = "*"
|
13
|
-
filter = ENV['PWD']+"/*"
|
14
|
-
str = choose filter, :title => "Files", :prompt => "Choose a file: "
|
15
|
-
message "We got #{str} "
|
16
|
-
end
|
17
|
-
def testnumberedmenu
|
18
|
-
list1 = %w{ ruby perl python erlang rake java lisp scheme chicken }
|
19
|
-
list1[0] = %w{ ruby ruby1.9 ruby1.8.x jruby rubinius ROR }
|
20
|
-
list1[5] = %w{ java groovy grails }
|
21
|
-
str = numbered_menu list1, { :title => "Languages: ", :prompt => "Select :" }
|
22
|
-
$log.debug "17 We got #{str.class} "
|
23
|
-
message "We got #{str} "
|
24
|
-
end
|
25
|
-
def testdisplay_list
|
26
|
-
# scrollable list
|
27
|
-
str = display_list Dir.glob("t*.rb"), :title => "Select a file"
|
28
|
-
$log.debug "23 We got #{str} : #{str.class} , #{str.list[str.current_index]} "
|
29
|
-
message "We got #{str.list[str.current_index]} "
|
30
|
-
end
|
31
|
-
def testdisplay_text
|
32
|
-
str = display_text_interactive File.read($0), :title => "#{$0}"
|
33
|
-
end
|
34
|
-
def testdir
|
35
|
-
# this behaves like vim's file selector, it fills in values
|
36
|
-
str = ask("File? ", Pathname) do |q|
|
37
|
-
q.completion_proc = Proc.new {|str| Dir.glob(str +"*").collect { |f| File.directory?(f) ? f+"/" : f } }
|
38
|
-
q.helptext = "Enter start of filename and tab to get completion"
|
39
|
-
end
|
40
|
-
message "We got #{str} "
|
41
|
-
end
|
42
|
-
def test
|
43
|
-
end
|
44
|
-
def saveas1
|
45
|
-
@tv.saveas
|
46
|
-
end
|
47
|
-
|
48
|
-
# experimental.
|
49
|
-
# if components have some commands, can we find a way of passing the command to them
|
50
|
-
# method_missing gave a stack overflow.
|
51
|
-
def execute_this(meth, *args)
|
52
|
-
$log.debug "app email got #{meth} " if $log.debug?
|
53
|
-
cc = @vim.current_component
|
54
|
-
[cc, @lb2, @tv].each do |c|
|
55
|
-
if c.respond_to?(meth, true)
|
56
|
-
c.send(meth, *args)
|
57
|
-
return true
|
58
|
-
end
|
59
|
-
end
|
60
|
-
false
|
61
|
-
end
|
62
|
-
|
63
|
-
App.new do
|
64
|
-
ht = 24
|
65
|
-
@messages = nil
|
66
|
-
$unread_hash = {}
|
67
|
-
@tv = nil
|
68
|
-
borderattrib = :reverse
|
69
|
-
@header = app_header "rbcurse #{Rbcurse::VERSION}", :text_center => "Yet Another Email Client that sucks", :text_right =>"", :color => :black, :bgcolor => :white
|
70
|
-
message "Press F10 to exit ...................................................."
|
71
|
-
|
72
|
-
|
73
|
-
stack :margin_top => 1, :margin => 0, :width => :EXPAND do
|
74
|
-
# NOTE: please fix the next 2 lines based on where your mbox files reside
|
75
|
-
model = ["~/mbox"]
|
76
|
-
others = "~/mail/"
|
77
|
-
boxes = Dir.new(File.expand_path(others)).entries
|
78
|
-
boxes.delete(".")
|
79
|
-
boxes.delete("..")
|
80
|
-
boxes = boxes.collect do |e| others+e; end
|
81
|
-
model.push *boxes
|
82
|
-
|
83
|
-
#@vim = MasterDetail.new @form, :row => 1, :col => 1, :width => :EXPAND
|
84
|
-
@vim = master_detail :width => :EXPAND
|
85
|
-
@dirs = list_box :list => model, :height => ht, :border_attrib => borderattrib, :suppress_borders => true
|
86
|
-
@dirs.one_key_selection = false
|
87
|
-
|
88
|
-
# commands that can be mapped to or executed using M-x
|
89
|
-
# however, commands of components aren't yet accessible.
|
90
|
-
def get_commands
|
91
|
-
%w{ testchoose testnumberedmenu testdisplay_list testdisplay_text testdir saveas1 }
|
92
|
-
end
|
93
|
-
# we override/open instance so as to only print basename. Also, print unread count
|
94
|
-
def @dirs.convert_value_to_text(text, crow)
|
95
|
-
str = File.basename(text)
|
96
|
-
if $unread_hash.has_key?(str)
|
97
|
-
str << " (#{$unread_hash[str]})"
|
98
|
-
else
|
99
|
-
str
|
100
|
-
end
|
101
|
-
end
|
102
|
-
def test1XX
|
103
|
-
$log.debug "called test1 " if $log.debug?
|
104
|
-
str = choose "*.rb", :title => "Files", :prompt => "Choose a file: "
|
105
|
-
end
|
106
|
-
def help_text
|
107
|
-
<<-eos
|
108
|
-
APPEMAIL HELP
|
109
|
-
|
110
|
-
This is some help text for appemail.
|
111
|
-
We are testing out this feature.
|
112
|
-
|
113
|
-
Alt-x - Command mode (<tab> to see commands and select)
|
114
|
-
: - Command mode
|
115
|
-
<Enter> - Display mail headers for mailbox
|
116
|
-
Display body for selected header
|
117
|
-
F3 - Enable sidebars in order to change size of windows (toggle)
|
118
|
-
F10 - Quit application
|
119
|
-
|
120
|
-
Some commands for using bottom of screen as vim and emacs do.
|
121
|
-
|
122
|
-
testchoose - filter directory list as you type
|
123
|
-
testdir - vim style, tabbing completes matching files
|
124
|
-
testnumberedmenu - use menu indexes to select options
|
125
|
-
testdisplaylist - display a list at bottom of screen
|
126
|
-
testdisplaytext - display text at bottom
|
127
|
-
|
128
|
-
-----------------------------------------------------------------------
|
129
|
-
Hope you enjoyed this help.
|
130
|
-
eos
|
131
|
-
end
|
132
|
-
@vim.set_left_component @dirs
|
133
|
-
|
134
|
-
|
135
|
-
@mails = []
|
136
|
-
headings = %w{ Stat # Date From Subject }
|
137
|
-
@lb2 = tabular_widget :suppress_borders => true
|
138
|
-
@lb2.columns = headings
|
139
|
-
@lb2.column_align 1, :right
|
140
|
-
@lb2.column_align 0, :right
|
141
|
-
@lb2.header_fgcolor :white
|
142
|
-
@lb2.header_bgcolor :cyan
|
143
|
-
@vim.set_right_top_component @lb2
|
144
|
-
@dirs.bind :PRESS do |e|
|
145
|
-
@lines = []
|
146
|
-
mx = Mbox.new File.expand_path(e.text)
|
147
|
-
mx.array_each do |text|
|
148
|
-
@lines << text
|
149
|
-
end
|
150
|
-
message_immediate " #{e.text} has #{@lines.size} messages"
|
151
|
-
$unread_hash[File.basename(e.text)] = mx.unread_count
|
152
|
-
@lb2.set_content @lines
|
153
|
-
@lb2.estimate_column_widths=true
|
154
|
-
@messages = mx.mails()
|
155
|
-
end
|
156
|
-
@lb2.bind :PRESS do |e|
|
157
|
-
case @lb2
|
158
|
-
when RubyCurses::TabularWidget
|
159
|
-
if e.action_command == :header
|
160
|
-
# now does sorting on multiple keys
|
161
|
-
else
|
162
|
-
index = e.source.current_index - 1 # this should check what first data index is
|
163
|
-
if index >= 0
|
164
|
-
@tv.set_content(@messages[index].body, :WRAP_WORD)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
else
|
168
|
-
@tv.set_content(@messages[e.source.current_index].body, :WRAP_WORD)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
@lb2.bind :ENTER_ROW do |e|
|
172
|
-
@header.text_right "Row #{e.current_index} of #{@messages.size} "
|
173
|
-
message "Row #{e.current_index} of #{@messages.size} "
|
174
|
-
raw_message "Row #{e.current_index} of #{@messages.size} " # 2011-10-17 14:08:27
|
175
|
-
x = e.current_index
|
176
|
-
y = @messages.size
|
177
|
-
#raw_progress((x*1.0)/y)
|
178
|
-
#raw_progress([x,y])
|
179
|
-
end
|
180
|
-
|
181
|
-
@tv = @vim.set_right_bottom_component "Email body comes here. "
|
182
|
-
@tv.suppress_borders true
|
183
|
-
@tv.border_attrib = borderattrib
|
184
|
-
end # stack
|
185
|
-
@statusline = status_line :row => Ncurses.LINES-1
|
186
|
-
#@statusline.command { }
|
187
|
-
@form.bind_key(?\M-v) { test11() }
|
188
|
-
@form.bind_key(?\M-V) { testme() }
|
189
|
-
@form.bind_key(?\M-c) { test1() }
|
190
|
-
@form.bind_key(?\M-C) { test2() }
|
191
|
-
end # app
|
data/examples/appemaillb.rb
DELETED
@@ -1,308 +0,0 @@
|
|
1
|
-
require 'rbcurse/app'
|
2
|
-
require 'rbcurse/rvimsplit'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'rbcurse/extras/tabularwidget'
|
5
|
-
require './common/rmail'
|
6
|
-
class ColumnBrowse < Widget
|
7
|
-
require 'forwardable'
|
8
|
-
extend Forwardable
|
9
|
-
def_delegators :@vim, :on_enter, :on_leave, :handle_key
|
10
|
-
def initialize form, config={}, &block
|
11
|
-
@focusable = true
|
12
|
-
@height = Ncurses.LINES-2
|
13
|
-
@weight = 0.25
|
14
|
-
super
|
15
|
-
_create_vimsplit
|
16
|
-
init_vars
|
17
|
-
end
|
18
|
-
def init_vars
|
19
|
-
@first_time = true
|
20
|
-
@repaint_required = true
|
21
|
-
end
|
22
|
-
def repaint
|
23
|
-
if @first_time
|
24
|
-
@first_time = nil
|
25
|
-
[@vim, @left, @right1, @right2].each { |e|
|
26
|
-
e.set_buffering(:target_window => @target_window || @form.window, :form => @form)
|
27
|
-
}
|
28
|
-
end
|
29
|
-
@vim.repaint
|
30
|
-
end
|
31
|
-
def set_left_component comp
|
32
|
-
@left = @vim.add comp, :FIRST
|
33
|
-
_add_component comp
|
34
|
-
@left
|
35
|
-
end
|
36
|
-
def set_right_top_component comp
|
37
|
-
@added_top = true
|
38
|
-
@right1 = @vim.add comp, :SECOND, 0.5
|
39
|
-
_add_component comp
|
40
|
-
@right1
|
41
|
-
end
|
42
|
-
def set_right_bottom_component comp
|
43
|
-
raise "Please add top component first!" unless @added_top
|
44
|
-
# what if user gives in wrong order !!
|
45
|
-
@gb = @vim.add :grabbar, :SECOND, 0
|
46
|
-
@right2 = @vim.add comp, :SECOND, nil
|
47
|
-
@gb.next_component(@right2)
|
48
|
-
_add_component comp
|
49
|
-
@right2
|
50
|
-
end
|
51
|
-
private
|
52
|
-
def _add_component comp #:nodoc:
|
53
|
-
#comp.parent = self
|
54
|
-
#comp.form = @form
|
55
|
-
end
|
56
|
-
def _create_vimsplit #:nodoc:
|
57
|
-
@vim = VimSplit.new nil, :row => @row, :col => @col, :width => @width, :height => @height, :weight => @weight, :orientation => :VERTICAL, :suppress_borders => true do |s|
|
58
|
-
s.parent_component = self
|
59
|
-
#s.target_window = @form.window
|
60
|
-
#s.add @left, :FIRST
|
61
|
-
#s.add @right1, :SECOND
|
62
|
-
#s.add @right2, :SECOND
|
63
|
-
s.bind :COMPONENT_RESIZE_EVENT do |e|
|
64
|
-
#alert "got a resize event #{e.type} "
|
65
|
-
case e.type
|
66
|
-
when :INCREASE
|
67
|
-
case e.source
|
68
|
-
when @right2
|
69
|
-
increase_body
|
70
|
-
when @right1
|
71
|
-
increase_headers
|
72
|
-
when @left
|
73
|
-
|
74
|
-
end
|
75
|
-
when :DECREASE
|
76
|
-
case e.source
|
77
|
-
when @right2
|
78
|
-
increase_headers
|
79
|
-
when @right1
|
80
|
-
increase_body
|
81
|
-
when @left
|
82
|
-
@left.width -= 1
|
83
|
-
@right2.col -=1
|
84
|
-
@right1.col -=1
|
85
|
-
@right1.width +=1
|
86
|
-
@right2.width +=1
|
87
|
-
@right2.repaint_required true
|
88
|
-
@right1.repaint_required true
|
89
|
-
@left.repaint_required true
|
90
|
-
end
|
91
|
-
when :EXPAND
|
92
|
-
case e.source
|
93
|
-
when @right2
|
94
|
-
h = 3
|
95
|
-
@right2.row(@right1.row + h)
|
96
|
-
oldh = @right1.height
|
97
|
-
@right1.height = h
|
98
|
-
@right1.current_index = 0
|
99
|
-
@right2.height += (oldh - h)
|
100
|
-
@right2.repaint_required true
|
101
|
-
@right1.repaint_required true
|
102
|
-
when @right1
|
103
|
-
h = 3
|
104
|
-
@right2.row(@right2.row + (@right2.height - 3))
|
105
|
-
oldh = @right2.height
|
106
|
-
@right2.height = h
|
107
|
-
#@right1.current_index = 0
|
108
|
-
@right1.height += (oldh - h)
|
109
|
-
@right2.repaint_required true
|
110
|
-
@right1.repaint_required true
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end # bind
|
114
|
-
end
|
115
|
-
end # def
|
116
|
-
def increase_headers
|
117
|
-
@right2.row @right2.row()+1
|
118
|
-
@right1.height +=1
|
119
|
-
@right2.height -=1
|
120
|
-
@right2.repaint_required true
|
121
|
-
@right1.repaint_required true
|
122
|
-
end
|
123
|
-
def increase_body
|
124
|
-
@right2.row @right2.row()-1
|
125
|
-
@right1.height -=1
|
126
|
-
@right2.height +=1
|
127
|
-
@right2.repaint_required true
|
128
|
-
@right1.repaint_required true
|
129
|
-
end
|
130
|
-
end # class
|
131
|
-
|
132
|
-
class MailCellRenderer #< ListCellRenderer
|
133
|
-
include RubyCurses::ConfigSetup
|
134
|
-
include RubyCurses::Utils
|
135
|
-
dsl_accessor :justify # :right, :left, :center # added 2008-12-22 19:02
|
136
|
-
dsl_accessor :display_length # please give this to ensure the we only print this much
|
137
|
-
dsl_accessor :height # if you want a multiline label.
|
138
|
-
dsl_accessor :text # text of label
|
139
|
-
dsl_accessor :color, :bgcolor
|
140
|
-
dsl_accessor :row, :col
|
141
|
-
dsl_accessor :parent #usuall the table to get colors and other default info
|
142
|
-
|
143
|
-
def initialize text="", config={}, &block
|
144
|
-
@text = text
|
145
|
-
@editable = false
|
146
|
-
@focusable = false
|
147
|
-
config_setup config # @config.each_pair { |k,v| variable_set(k,v) }
|
148
|
-
instance_eval &block if block_given?
|
149
|
-
init_vars
|
150
|
-
end
|
151
|
-
# NOTE: please call super() if you override this
|
152
|
-
def init_vars #:nodoc:
|
153
|
-
# omg, some classes won't have justify !!
|
154
|
-
#@justify ||= (@parent.justify || :left)
|
155
|
-
unless @justify
|
156
|
-
if @parent.respond_to? :justify
|
157
|
-
@justify ||= (@parent.justify || :left)
|
158
|
-
else
|
159
|
-
@justify ||= :left
|
160
|
-
end
|
161
|
-
end
|
162
|
-
@format = @justify.to_sym == :right ? "%*s" : "%-*s"
|
163
|
-
@display_length ||= 10
|
164
|
-
# create color pairs once for this 2010-09-26 20:53
|
165
|
-
end
|
166
|
-
# creates pairs of colors at start
|
167
|
-
# since often classes are overriding init_vars, so not gettin created
|
168
|
-
def create_color_pairs
|
169
|
-
@color_pair = get_color $datacolor
|
170
|
-
@pairs = Hash.new(@color_pair)
|
171
|
-
@attrs = Hash.new(Ncurses::A_NORMAL)
|
172
|
-
color_pair = get_color $selectedcolor, @parent.selected_color, @parent.selected_bgcolor
|
173
|
-
@pairs[:normal] = @color_pair
|
174
|
-
@pairs[:selected] = color_pair
|
175
|
-
@pairs[:focussed] = @pairs[:normal]
|
176
|
-
@attrs[:selected] = $row_selected_attr
|
177
|
-
@attrs[:focussed] = $row_focussed_attr
|
178
|
-
|
179
|
-
end
|
180
|
-
#def getvalue
|
181
|
-
#@text
|
182
|
-
#end
|
183
|
-
##
|
184
|
-
# sets @color_pair and @attr
|
185
|
-
def select_colors focussed, selected
|
186
|
-
create_color_pairs unless @pairs
|
187
|
-
raise ArgumentError, "pairs hash is null. Changes have happened in listcellrenderer" unless @pairs
|
188
|
-
@color_pair = @pairs[:normal]
|
189
|
-
@attr = $row_attr
|
190
|
-
# give precedence to a selected row
|
191
|
-
if selected
|
192
|
-
@color_pair = @pairs[:selected]
|
193
|
-
@attr = @attrs[:selected]
|
194
|
-
elsif focussed
|
195
|
-
@color_pair = @pairs[:focussed]
|
196
|
-
@attr = @attrs[:focussed]
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
##
|
201
|
-
# paint a list box cell
|
202
|
-
#
|
203
|
-
# @param [Buffer] window or buffer object used for printing
|
204
|
-
# @param [Fixnum] row
|
205
|
-
# @param [Fixnum] column
|
206
|
-
# @param [Fixnum] actual index into data, some lists may have actual data elsewhere and
|
207
|
-
# display data separate. e.g. rfe_renderer (directory listing)
|
208
|
-
# @param [String] text to print in cell
|
209
|
-
# @param [Boolean, cell focussed, not focussed
|
210
|
-
# @param [Boolean] cell selected or not
|
211
|
-
def repaint graphic, r=@row,c=@col, row_index=-1,value=@text, focussed=false, selected=false
|
212
|
-
|
213
|
-
select_colors focussed, selected
|
214
|
-
# if listboxes width is reduced, display_len remains the same
|
215
|
-
# XXX FIXME parent may not be the list but a container like rfe !!
|
216
|
-
# maybe caller should update at start of repain loop.
|
217
|
-
#@display_length = @parent.width - 2 - @parent.left_margin
|
218
|
-
|
219
|
-
value=value.to_s
|
220
|
-
if !@display_length.nil?
|
221
|
-
if value.length > @display_length
|
222
|
-
value = value[0..@display_length-1]
|
223
|
-
end
|
224
|
-
# added 2010-09-27 11:05 TO UNCOMMENT AND TEST IT OUT
|
225
|
-
if @justify == :center
|
226
|
-
value = value.center(@display_length)
|
227
|
-
end
|
228
|
-
end
|
229
|
-
len = @display_length || value.length
|
230
|
-
graphic.printstring r, c, @format % [len, value], @color_pair, @attr
|
231
|
-
if value =~ /^ *O/
|
232
|
-
graphic.mvchgat(y=r, x=c,3, Ncurses::A_NORMAL, $promptcolor, nil)
|
233
|
-
else
|
234
|
-
graphic.mvchgat(y=r, x=c,3, Ncurses::A_NORMAL, $datacolor, nil)
|
235
|
-
end
|
236
|
-
|
237
|
-
end # repaiat
|
238
|
-
|
239
|
-
end # class
|
240
|
-
|
241
|
-
App.new do
|
242
|
-
# this is for tree to get only directories
|
243
|
-
ht = 24
|
244
|
-
@messages = nil
|
245
|
-
@tv = nil
|
246
|
-
borderattrib = :reverse
|
247
|
-
@header = app_header "rbcurse #{Rbcurse::VERSION}", :text_center => "Yet Another Email Client that sucks", :text_right =>"", :color => :black, :bgcolor => :white#, :attr => Ncurses::A_BLINK
|
248
|
-
message "Press F10 to exit ...................................................."
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
stack :margin_top => 1, :margin => 0, :width => :EXPAND do
|
255
|
-
model = ["~/mbox"]
|
256
|
-
boxes = Dir.new(File.expand_path("~/mail/")).entries
|
257
|
-
boxes.delete(".")
|
258
|
-
boxes.delete("..")
|
259
|
-
boxes = boxes.collect do |e| "~/mail/"+e; end
|
260
|
-
model.push *boxes
|
261
|
-
#@vim = vimsplit :height => Ncurses.LINES-2, :weight => 0.25, :orientation => :VERTICAL do |s|
|
262
|
-
# try with new listbox
|
263
|
-
@vim = ColumnBrowse.new @form, :row => 1, :col => 1, :width => :EXPAND
|
264
|
-
@dirs = list_box :list => model, :height => ht, :border_attrib => borderattrib, :suppress_borders => true
|
265
|
-
@dirs.one_key_selection = false
|
266
|
-
def @dirs.convert_value_to_text(text, crow) ; File.basename(text); end
|
267
|
-
@vim.set_left_component @dirs
|
268
|
-
|
269
|
-
#@tw = TabularWidget.new nil
|
270
|
-
@mails = []
|
271
|
-
# FIXME why was list required in next, should have managed. length
|
272
|
-
# error
|
273
|
-
@lb2 = list_box :border_attrib => borderattrib, :suppress_borders => true #, :list => []
|
274
|
-
@lb2.one_key_selection = false
|
275
|
-
def @lb2.create_default_cell_renderer
|
276
|
-
return MailCellRenderer.new "", {"color"=>@color, "bgcolor"=>@bgcolor, "parent" => self, "display_length"=> @width-@internal_width-@left_margin}
|
277
|
-
end
|
278
|
-
@vim.set_right_top_component @lb2
|
279
|
-
@dirs.bind :PRESS do |e|
|
280
|
-
@lines = []
|
281
|
-
mx = Mbox.new File.expand_path(e.text)
|
282
|
-
mx.formatted_each do |text|
|
283
|
-
@lines << text
|
284
|
-
#@tw.add text
|
285
|
-
end
|
286
|
-
message " #{e.text} has #{@lines.size} messages"
|
287
|
-
@lb2.list @lines
|
288
|
-
@messages = mx.mails()
|
289
|
-
end
|
290
|
-
@lb2.bind :PRESS do |e|
|
291
|
-
#alert " line clicked #{e.source.current_index} "
|
292
|
-
@tv.set_content(@messages[e.source.current_index].body, :WRAP_WORD)
|
293
|
-
end
|
294
|
-
@lb2.bind :ENTER_ROW do |e|
|
295
|
-
@header.text_right "Row #{e.current_index+1} of #{@messages.size} "
|
296
|
-
end
|
297
|
-
|
298
|
-
#s.add @dirs, :FIRST
|
299
|
-
#@tw.columns = [
|
300
|
-
#s.add @lb2, :SECOND
|
301
|
-
#@tv = textview
|
302
|
-
#s.add "email body comes here. Press Enter on list above", :SECOND
|
303
|
-
@tv = @vim.set_right_bottom_component "email body comes here. "
|
304
|
-
#@tv = s.components_for(:SECOND).last
|
305
|
-
@tv.suppress_borders true
|
306
|
-
@tv.border_attrib = borderattrib
|
307
|
-
end # stack
|
308
|
-
end # app
|