canis 0.0.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.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +45 -0
  3. data/CHANGES +52 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +24 -0
  7. data/Rakefile +2 -0
  8. data/canis.gemspec +25 -0
  9. data/examples/alpmenu.rb +46 -0
  10. data/examples/app.sample +19 -0
  11. data/examples/appemail.rb +191 -0
  12. data/examples/atree.rb +105 -0
  13. data/examples/bline.rb +181 -0
  14. data/examples/common/devel.rb +319 -0
  15. data/examples/common/file.rb +93 -0
  16. data/examples/data/README.markdown +9 -0
  17. data/examples/data/brew.txt +38 -0
  18. data/examples/data/color.2 +37 -0
  19. data/examples/data/gemlist.txt +59 -0
  20. data/examples/data/lotr.txt +12 -0
  21. data/examples/data/ports.txt +136 -0
  22. data/examples/data/table.txt +37 -0
  23. data/examples/data/tasks.csv +88 -0
  24. data/examples/data/tasks.txt +27 -0
  25. data/examples/data/todo.txt +16 -0
  26. data/examples/data/todocsv.csv +28 -0
  27. data/examples/data/unix1.txt +21 -0
  28. data/examples/data/unix2.txt +11 -0
  29. data/examples/dbdemo.rb +506 -0
  30. data/examples/dirtree.rb +177 -0
  31. data/examples/newtabbedwindow.rb +100 -0
  32. data/examples/newtesttabp.rb +92 -0
  33. data/examples/tabular.rb +212 -0
  34. data/examples/tasks.rb +179 -0
  35. data/examples/term2.rb +88 -0
  36. data/examples/testbuttons.rb +307 -0
  37. data/examples/testcombo.rb +102 -0
  38. data/examples/testdb.rb +182 -0
  39. data/examples/testfields.rb +208 -0
  40. data/examples/testflowlayout.rb +43 -0
  41. data/examples/testkeypress.rb +98 -0
  42. data/examples/testlistbox.rb +187 -0
  43. data/examples/testlistbox1.rb +199 -0
  44. data/examples/testmessagebox.rb +144 -0
  45. data/examples/testprogress.rb +116 -0
  46. data/examples/testree.rb +107 -0
  47. data/examples/testsplitlayout.rb +53 -0
  48. data/examples/testsplitlayout1.rb +49 -0
  49. data/examples/teststacklayout.rb +48 -0
  50. data/examples/testwsshortcuts.rb +68 -0
  51. data/examples/testwsshortcuts2.rb +129 -0
  52. data/lib/canis.rb +16 -0
  53. data/lib/canis/core/docs/index.txt +104 -0
  54. data/lib/canis/core/docs/list.txt +16 -0
  55. data/lib/canis/core/docs/style_help.yml +34 -0
  56. data/lib/canis/core/docs/tabbedpane.txt +15 -0
  57. data/lib/canis/core/docs/table.txt +31 -0
  58. data/lib/canis/core/docs/textpad.txt +48 -0
  59. data/lib/canis/core/docs/tree.txt +23 -0
  60. data/lib/canis/core/include/.DS_Store +0 -0
  61. data/lib/canis/core/include/action.rb +83 -0
  62. data/lib/canis/core/include/actionmanager.rb +49 -0
  63. data/lib/canis/core/include/appmethods.rb +179 -0
  64. data/lib/canis/core/include/bordertitle.rb +49 -0
  65. data/lib/canis/core/include/canisparser.rb +100 -0
  66. data/lib/canis/core/include/colorparser.rb +437 -0
  67. data/lib/canis/core/include/defaultfilerenderer.rb +64 -0
  68. data/lib/canis/core/include/io.rb +320 -0
  69. data/lib/canis/core/include/layouts/SplitLayout.rb +161 -0
  70. data/lib/canis/core/include/layouts/abstractlayout.rb +213 -0
  71. data/lib/canis/core/include/layouts/flowlayout.rb +104 -0
  72. data/lib/canis/core/include/layouts/stacklayout.rb +109 -0
  73. data/lib/canis/core/include/listbindings.rb +89 -0
  74. data/lib/canis/core/include/listeditable.rb +319 -0
  75. data/lib/canis/core/include/listoperations.rb +61 -0
  76. data/lib/canis/core/include/listselectionmodel.rb +388 -0
  77. data/lib/canis/core/include/multibuffer.rb +173 -0
  78. data/lib/canis/core/include/ractionevent.rb +73 -0
  79. data/lib/canis/core/include/rchangeevent.rb +27 -0
  80. data/lib/canis/core/include/rhistory.rb +95 -0
  81. data/lib/canis/core/include/rinputdataevent.rb +47 -0
  82. data/lib/canis/core/include/textdocument.rb +111 -0
  83. data/lib/canis/core/include/vieditable.rb +175 -0
  84. data/lib/canis/core/include/widgetmenu.rb +66 -0
  85. data/lib/canis/core/system/colormap.rb +165 -0
  86. data/lib/canis/core/system/keydefs.rb +32 -0
  87. data/lib/canis/core/system/ncurses.rb +237 -0
  88. data/lib/canis/core/system/panel.rb +129 -0
  89. data/lib/canis/core/system/window.rb +1081 -0
  90. data/lib/canis/core/util/ansiparser.rb +119 -0
  91. data/lib/canis/core/util/app.rb +696 -0
  92. data/lib/canis/core/util/basestack.rb +412 -0
  93. data/lib/canis/core/util/defaultcolorparser.rb +84 -0
  94. data/lib/canis/core/util/extras/README +5 -0
  95. data/lib/canis/core/util/extras/bottomline.rb +1815 -0
  96. data/lib/canis/core/util/extras/padreader.rb +192 -0
  97. data/lib/canis/core/util/focusmanager.rb +31 -0
  98. data/lib/canis/core/util/helpmanager.rb +160 -0
  99. data/lib/canis/core/util/oldwidgetshortcuts.rb +304 -0
  100. data/lib/canis/core/util/promptmenu.rb +235 -0
  101. data/lib/canis/core/util/rcommandwindow.rb +933 -0
  102. data/lib/canis/core/util/rdialogs.rb +520 -0
  103. data/lib/canis/core/util/textutils.rb +74 -0
  104. data/lib/canis/core/util/viewer.rb +238 -0
  105. data/lib/canis/core/util/widgetshortcuts.rb +508 -0
  106. data/lib/canis/core/widgets/applicationheader.rb +103 -0
  107. data/lib/canis/core/widgets/box.rb +58 -0
  108. data/lib/canis/core/widgets/divider.rb +310 -0
  109. data/lib/canis/core/widgets/extras/README.md +12 -0
  110. data/lib/canis/core/widgets/extras/rtextarea.rb +960 -0
  111. data/lib/canis/core/widgets/extras/stackflow.rb +474 -0
  112. data/lib/canis/core/widgets/keylabelprinter.rb +194 -0
  113. data/lib/canis/core/widgets/listbox.rb +326 -0
  114. data/lib/canis/core/widgets/listfooter.rb +86 -0
  115. data/lib/canis/core/widgets/rcombo.rb +210 -0
  116. data/lib/canis/core/widgets/rcontainer.rb +415 -0
  117. data/lib/canis/core/widgets/rlink.rb +30 -0
  118. data/lib/canis/core/widgets/rmenu.rb +970 -0
  119. data/lib/canis/core/widgets/rmenulink.rb +30 -0
  120. data/lib/canis/core/widgets/rmessagebox.rb +400 -0
  121. data/lib/canis/core/widgets/rprogress.rb +118 -0
  122. data/lib/canis/core/widgets/rtabbedpane.rb +631 -0
  123. data/lib/canis/core/widgets/rtabbedwindow.rb +70 -0
  124. data/lib/canis/core/widgets/rwidget.rb +3634 -0
  125. data/lib/canis/core/widgets/scrollbar.rb +147 -0
  126. data/lib/canis/core/widgets/statusline.rb +113 -0
  127. data/lib/canis/core/widgets/table.rb +1072 -0
  128. data/lib/canis/core/widgets/tabular.rb +264 -0
  129. data/lib/canis/core/widgets/textpad.rb +1674 -0
  130. data/lib/canis/core/widgets/tree.rb +690 -0
  131. data/lib/canis/core/widgets/tree/treecellrenderer.rb +150 -0
  132. data/lib/canis/core/widgets/tree/treemodel.rb +432 -0
  133. data/lib/canis/version.rb +3 -0
  134. metadata +229 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 816492c76956497f6216f58530ac662a8914f404
4
+ data.tar.gz: 81030d5970df8c6ada548ad6a5cbe1782d8c2f16
5
+ SHA512:
6
+ metadata.gz: 6a2294dabd5cd4b38db99ca783c7b3d2005dd9c3b3cb2823c4d284cf60d88f503f870cca06b9596224696a4e70f611417a9e29a341f862921df3e07497face81
7
+ data.tar.gz: 6510464a766ee936761d32fbbaef6e2d9ed21f3e81d7425956f7d45de5dd2d5b1797cfd71c8799f1499187917f1d8a4c971ab8c0de88d777f134ed00730873f5
data/.gitignore ADDED
@@ -0,0 +1,45 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ *.log
24
+ *.sqlite
25
+ *.bak
26
+ todo
27
+ issues
28
+ deprecated
29
+ .srclist
30
+ NOTES
31
+ bug
32
+ examples/common/rmail.rb
33
+ examples/dump.yml
34
+ examples/oldwidgetshortcuts.rb
35
+ examples/test2.rb
36
+ examples/testskel.rb
37
+ examples/teststackflow.rb
38
+ examples/todo.txt
39
+ examples/ugu.rb
40
+ examples/x.tsv
41
+ examples/xxx.rb
42
+ issues.txt
43
+ tags
44
+ test.yml
45
+ todo.0.0.1
data/CHANGES ADDED
@@ -0,0 +1,52 @@
1
+ 2014-04-22 - 00:13
2
+
3
+ Made some changes in getchar to return STRINGS but not implemented. Evaluating benefits
4
+ in moving to chars, and how to go about.
5
+
6
+ 2014-04-23 - 00:23
7
+
8
+ removed many dead methods from window and some from widget
9
+ slight changes in button and label : when_form replaced by FORM_ATTACHED
10
+
11
+ 2014-05-05 - 20:12
12
+
13
+ - moved to new cleaner method of reading keys from keyboard
14
+ - Added ButtonGroup for RadioButtons.
15
+ - removed Bottomline and enhanced rcommandline instead
16
+
17
+ 2014-05-09 - 22:23
18
+
19
+ - introduced layouts. Now a user can hardcode locations of widgets or use a layout
20
+ to do the same. A layout is able to handle a resize of the screen.
21
+
22
+ 2014-05-25 - 16:03
23
+
24
+ - Major rewrite of colorparser. now colors are not hardcoded while parsing. We now store link
25
+ to parent chunk, so that a change in textpads color can affect the pad without a re-parse.
26
+ Parent's color's are resolved at render time.
27
+
28
+ 2014-05-31 - 18:20
29
+ - minor changes that could result in some color related issues with buttons or other widgets
30
+ - repaint in various widgets no longer sets @bgcolor and @color, it uses the method
31
+ Same with @attr. messagebox also does not set the color variables but uses the method
32
+ - clear_pad clear_row uses content_cols i/o width so complete pad is cleared.
33
+ Also i have put a return in the middle, i think the second part of clear is redundant
34
+ now, if the first half works properly.
35
+
36
+ 2014-06-06 - 00:05
37
+ - Released 0.0.1
38
+
39
+ 2014-06-19 - 17:16
40
+ - Still trying to simplify and refactor TextPad so there are no changes for a fairly long time.
41
+ - Removed content_type complexity into TextDocument so Textpad can be dumb.
42
+
43
+ Built 0.0.2 but i did not release it.
44
+
45
+ 2014-07-09 - 22:48
46
+ - for 0.0.3
47
+ - removed label string from Field and moved to LabeledField
48
+ This change has an impact in many examples, and combo
49
+ - some changes in creation of $log so that if none specified then it can go to /dev/null
50
+ This way an app can have its own logger and not bother about canis' logging.
51
+ Or it can merge the two.
52
+ - Moved helpmanager from rwidgets to its own file. Needs to be refactored and cleaned up.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in canis.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 kepler
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # Canis
2
+
3
+ ncurses library for ruby with essential components/controls only
4
+
5
+ Things are looking better now. Textpad seems to be more or less stable as far
6
+ as changes are concerned
7
+
8
+ ## Installation
9
+
10
+ gem install canis
11
+
12
+ ## Usage
13
+
14
+ TODO: Write usage instructions here
15
+
16
+ Textpad is more or less frozen. I have also simplified Field a bit.
17
+
18
+ ## Contributing
19
+
20
+ 1. Fork it ( https://github.com/[my-github-username]/canis/fork )
21
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
22
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
23
+ 4. Push to the branch (`git push origin my-new-feature`)
24
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/canis.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'canis/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "canis"
8
+ spec.version = Canis::VERSION
9
+ spec.authors = ["kepler"]
10
+ spec.email = ["githubkepler.50s@gishpuppy.com"]
11
+ spec.summary = %q{ruby ncurses library for easy application development}
12
+ spec.description = %q{ruby ncurses library for easy application development providing most controls, minimal source}
13
+ spec.homepage = "https://github.com/mare-imbrium/canis"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", ">= 0.9.6"
23
+ #spec.add_development_dependency "ffi-ncurses", ">= 0.4.0"
24
+ spec.add_runtime_dependency "ffi-ncurses", ">= 0.4.0", ">= 0.4.0"
25
+ end
@@ -0,0 +1,46 @@
1
+ require 'canis/core/util/app'
2
+
3
+ App.new do
4
+ #title "Demo of Menu - canis"
5
+ #subtitle "Hit F1 to quit, F2 for menubar toggle"
6
+ header = app_header "canis #{Canis::VERSION}", :text_center => "Alpine Menu Demo", :text_right =>""
7
+
8
+ stack :margin_top => 10, :margin_left => 15 do
9
+ #w = "Messages".length + 1
10
+ w = 60
11
+ menulink :text => "&View Dirs", :width => w, :description => "View Dirs in tree" do |s, *stuff|
12
+ message "Pressed #{s.text} "
13
+ load './dirtree.rb'
14
+ #require './viewtodo'; todo = ViewTodo::TodoApp.new; todo.run
15
+ end
16
+ blank
17
+ menulink :text => "&Tabular", :width => w, :description => "Tabula Rasa" do |s, *stuff|
18
+ message "Pressed #{s.text} "
19
+ load './tabular.rb'
20
+ #require './testtodo'; todo = TestTodo::TodoApp.new; todo.run
21
+ end
22
+ blank
23
+ menulink :text => "&Messages", :width => w, :description => "View Tasks" do |s, *stuff|
24
+ message "Pressed #{s.text} "
25
+ load './tasks.rb'
26
+ end
27
+ blank
28
+ menulink :text => "&Database", :width => w, :description => "Database Demo" do |s, *stuff|
29
+ message "Pressed #{s.getvalue} "
30
+ load './dbdemo.rb'
31
+ end
32
+ blank
33
+ # somehow ? in mnemonic won't work
34
+ menulink :text => "&Setup", :width => w, :description => "Configure Alpine options" do |s, *stuff|
35
+ #message "Pressed #{s.text} "
36
+ alert "Not done!"
37
+ end
38
+ blank
39
+ menulink :text => "&Quit", :width => w, :description => "Quit this application" do |s, *stuff|
40
+ quit
41
+ end
42
+ @form.bind(:ENTER) do |w|
43
+ header.text_right = w.text
44
+ end
45
+ end # stack
46
+ end # app
@@ -0,0 +1,19 @@
1
+ require 'canis/core/util/app'
2
+ def help_text
3
+ <<-eos
4
+ Enter as much help text
5
+ here as you want
6
+ eos
7
+ end
8
+
9
+ App.new do
10
+ ## application code comes here
11
+ @form.help_manager.help_text = help_text()
12
+
13
+ @header = app_header "My App #{MyApp::VERSION}", :text_center => "Yet Another Email Client that sucks", :text_right =>"Some text", :color => :black, :bgcolor => :white
14
+
15
+ @status_line = status_line
16
+ @status_line.command {
17
+
18
+ }
19
+ end # app
@@ -0,0 +1,191 @@
1
+ require 'canis/core/util/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 "canis #{Canis::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 = listbox :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 Canis::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