canis 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +0 -9
- data/CHANGES +3 -0
- data/README.md +5 -3
- data/examples/alpmenu.rb +9 -5
- data/examples/app.sample +2 -2
- data/examples/appemail.rb +15 -15
- data/examples/atree.rb +7 -7
- data/examples/bline.rb +19 -19
- data/examples/common/devel.rb +3 -3
- data/examples/dbdemo.rb +53 -49
- data/examples/dirtree.rb +22 -19
- data/examples/newtabbedwindow.rb +5 -5
- data/examples/newtesttabp.rb +3 -3
- data/examples/tabular.rb +11 -11
- data/examples/tasks.rb +25 -25
- data/examples/term2.rb +8 -8
- data/examples/testbuttons.rb +24 -24
- data/examples/testcombo.rb +5 -5
- data/examples/testdb.rb +6 -6
- data/examples/testfields.rb +16 -16
- data/examples/testflowlayout.rb +3 -3
- data/examples/testkeypress.rb +5 -5
- data/examples/testlistbox.rb +18 -18
- data/examples/testlistbox1.rb +17 -17
- data/examples/testmessagebox.rb +5 -5
- data/examples/testprogress.rb +6 -6
- data/examples/testree.rb +3 -3
- data/examples/testsplitlayout.rb +4 -4
- data/examples/testsplitlayout1.rb +4 -4
- data/examples/teststacklayout.rb +4 -4
- data/examples/testwsshortcuts.rb +1 -1
- data/examples/testwsshortcuts2.rb +4 -4
- data/lib/canis/core/include/colorparser.rb +4 -4
- data/lib/canis/core/include/io.rb +3 -3
- data/lib/canis/core/include/layouts/abstractlayout.rb +3 -3
- data/lib/canis/core/include/layouts/flowlayout.rb +2 -2
- data/lib/canis/core/include/layouts/stacklayout.rb +3 -3
- data/lib/canis/core/system/colormap.rb +3 -3
- data/lib/canis/core/system/window.rb +7 -4
- data/lib/canis/core/util/extras/padreader.rb +2 -2
- data/lib/canis/core/util/rcommandwindow.rb +8 -4
- data/lib/canis/core/util/rdialogs.rb +1 -1
- data/lib/canis/core/util/widgetshortcuts.rb +9 -2
- data/lib/canis/core/widgets/applicationheader.rb +6 -2
- data/lib/canis/core/widgets/divider.rb +6 -2
- data/lib/canis/core/widgets/rmenu.rb +8 -4
- data/lib/canis/core/widgets/rmessagebox.rb +2 -2
- data/lib/canis/core/widgets/rwidget.rb +15 -15
- data/lib/canis/core/widgets/scrollbar.rb +5 -2
- data/lib/canis/core/widgets/table.rb +2 -2
- data/lib/canis/core/widgets/textpad.rb +8 -8
- data/lib/canis/core/widgets/tree.rb +57 -39
- data/lib/canis/core/widgets/tree/treecellrenderer.rb +3 -3
- data/lib/canis/version.rb +1 -1
- metadata +12 -13
- data/lib/canis/core/include/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2aedc552388d718a2fa0b3f1348cbf1b0abca82c
|
4
|
+
data.tar.gz: 4b979f79c31ce74c68493c171bf52c05edc4d6b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb9f4d74881cbab7ad7d321fc689ffaaf799e59faff2a9930288ec1362ff2acf06eb6ab342265c5c89dfafb64a7d887a008d133d0e771cd3b25e2e285a4d09b8
|
7
|
+
data.tar.gz: 37af1c730ea7023e12f011d068010929624fe0e0c89feea74b2d643f71e075c7b2bf2732f01d23785a572425d25e346043a6b970d98c41fedbfc2ebd72d2a73d
|
data/.gitignore
CHANGED
@@ -29,16 +29,7 @@ deprecated
|
|
29
29
|
.srclist
|
30
30
|
NOTES
|
31
31
|
bug
|
32
|
-
examples/common/rmail.rb
|
33
32
|
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
33
|
issues.txt
|
43
34
|
tags
|
44
35
|
test.yml
|
data/CHANGES
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Canis
|
2
2
|
|
3
|
+
## Last update on 2017-03-19 for ruby 2.4 (fixnum to Integer).
|
4
|
+
|
3
5
|
wrapper over ruby ffi-ncurses library with essential components/controls only.
|
4
6
|
|
5
7
|
Canis has taken over the codebase of rbcurse. Canis is _not_ backward compatible with rbcurse.
|
@@ -105,12 +107,12 @@ https://github.com/rkumar/rbcurse-tutorial
|
|
105
107
|
This tutorial needs to be updated for canis. Although, canis has diverged/forked from rbcurse, but the basic principles are still the same.
|
106
108
|
|
107
109
|
There is some on-line documentation of classes at:
|
108
|
-
http://rubydoc.info/gems/canis/0.0.
|
110
|
+
http://rubydoc.info/gems/canis/0.0.8/frames
|
109
111
|
|
110
112
|
## Contributing
|
111
113
|
|
112
|
-
|
113
|
-
|
114
|
+
- Please give suggestions on how to improve the documentation.
|
115
|
+
- Please give suggestions on how to improve canis.
|
114
116
|
|
115
117
|
1. Fork it ( https://github.com/[my-github-username]/canis/fork )
|
116
118
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/examples/alpmenu.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'canis/core/util/app'
|
2
2
|
|
3
|
-
|
3
|
+
def load_relative(path)
|
4
|
+
load File.expand_path("../#{path}", __FILE__)
|
5
|
+
end
|
6
|
+
|
7
|
+
App.new do
|
4
8
|
#title "Demo of Menu - canis"
|
5
9
|
#subtitle "Hit F1 to quit, F2 for menubar toggle"
|
6
10
|
header = app_header "canis #{Canis::VERSION}", :text_center => "Alpine Menu Demo", :text_right =>""
|
@@ -10,24 +14,24 @@ require 'canis/core/util/app'
|
|
10
14
|
w = 60
|
11
15
|
menulink :text => "&View Dirs", :width => w, :description => "View Dirs in tree" do |s, *stuff|
|
12
16
|
message "Pressed #{s.text} "
|
13
|
-
|
17
|
+
load_relative './dirtree.rb'
|
14
18
|
#require './viewtodo'; todo = ViewTodo::TodoApp.new; todo.run
|
15
19
|
end
|
16
20
|
blank
|
17
21
|
menulink :text => "&Tabular", :width => w, :description => "Tabula Rasa" do |s, *stuff|
|
18
22
|
message "Pressed #{s.text} "
|
19
|
-
|
23
|
+
load_relative './tabular.rb'
|
20
24
|
#require './testtodo'; todo = TestTodo::TodoApp.new; todo.run
|
21
25
|
end
|
22
26
|
blank
|
23
27
|
menulink :text => "&Messages", :width => w, :description => "View Tasks" do |s, *stuff|
|
24
28
|
message "Pressed #{s.text} "
|
25
|
-
|
29
|
+
load_relative './tasks.rb'
|
26
30
|
end
|
27
31
|
blank
|
28
32
|
menulink :text => "&Database", :width => w, :description => "Database Demo" do |s, *stuff|
|
29
33
|
message "Pressed #{s.getvalue} "
|
30
|
-
|
34
|
+
load_relative './dbdemo.rb'
|
31
35
|
end
|
32
36
|
blank
|
33
37
|
# somehow ? in mnemonic won't work
|
data/examples/app.sample
CHANGED
@@ -6,11 +6,11 @@ here as you want
|
|
6
6
|
eos
|
7
7
|
end
|
8
8
|
|
9
|
-
App.new do
|
9
|
+
App.new do
|
10
10
|
## application code comes here
|
11
11
|
@form.help_manager.help_text = help_text()
|
12
12
|
|
13
|
-
@header = app_header "My App #{
|
13
|
+
@header = app_header "My App #{App::VERSION}", :text_center => "Yet Another Email Client that sucks", :text_right =>"Some text", :color => :black, :bgcolor => :white
|
14
14
|
|
15
15
|
@status_line = status_line
|
16
16
|
@status_line.command {
|
data/examples/appemail.rb
CHANGED
@@ -8,11 +8,11 @@ require './common/rmail'
|
|
8
8
|
# this will go into top namespace so will conflict with other apps!
|
9
9
|
def testchoose
|
10
10
|
# list filters as you type
|
11
|
-
$log.debug "called CHOOSE " if $log.debug?
|
11
|
+
$log.debug "called CHOOSE " if $log.debug?
|
12
12
|
filter = "*"
|
13
13
|
filter = ENV['PWD']+"/*"
|
14
14
|
str = choose filter, :title => "Files", :prompt => "Choose a file: "
|
15
|
-
message "We got #{str} "
|
15
|
+
message "We got #{str} "
|
16
16
|
end
|
17
17
|
def testnumberedmenu
|
18
18
|
list1 = %w{ ruby perl python erlang rake java lisp scheme chicken }
|
@@ -33,7 +33,7 @@ def testdisplay_text
|
|
33
33
|
end
|
34
34
|
def testdir
|
35
35
|
# this behaves like vim's file selector, it fills in values
|
36
|
-
str = ask("File? ", Pathname) do |q|
|
36
|
+
str = ask("File? ", Pathname) do |q|
|
37
37
|
q.completion_proc = Proc.new {|str| Dir.glob(str +"*").collect { |f| File.directory?(f) ? f+"/" : f } }
|
38
38
|
q.helptext = "Enter start of filename and tab to get completion"
|
39
39
|
end
|
@@ -42,16 +42,16 @@ end
|
|
42
42
|
def test
|
43
43
|
end
|
44
44
|
def saveas1
|
45
|
-
@tv.saveas
|
45
|
+
@tv.saveas
|
46
46
|
end
|
47
47
|
|
48
|
-
# experimental.
|
48
|
+
# experimental.
|
49
49
|
# if components have some commands, can we find a way of passing the command to them
|
50
50
|
# method_missing gave a stack overflow.
|
51
51
|
def execute_this(meth, *args)
|
52
|
-
$log.debug "app email got #{meth} " if $log.debug?
|
52
|
+
$log.debug "app email got #{meth} " if $log.debug?
|
53
53
|
cc = @vim.current_component
|
54
|
-
[cc, @lb2, @tv].each do |c|
|
54
|
+
[cc, @lb2, @tv].each do |c|
|
55
55
|
if c.respond_to?(meth, true)
|
56
56
|
c.send(meth, *args)
|
57
57
|
return true
|
@@ -60,7 +60,7 @@ def execute_this(meth, *args)
|
|
60
60
|
false
|
61
61
|
end
|
62
62
|
|
63
|
-
App.new do
|
63
|
+
App.new do
|
64
64
|
ht = 24
|
65
65
|
@messages = nil
|
66
66
|
$unread_hash = {}
|
@@ -72,7 +72,7 @@ App.new do
|
|
72
72
|
|
73
73
|
stack :margin_top => 1, :margin => 0, :width => :EXPAND do
|
74
74
|
# NOTE: please fix the next 2 lines based on where your mbox files reside
|
75
|
-
model = ["~/mbox"]
|
75
|
+
model = ["~/mbox"]
|
76
76
|
others = "~/mail/"
|
77
77
|
boxes = Dir.new(File.expand_path(others)).entries
|
78
78
|
boxes.delete(".")
|
@@ -84,28 +84,28 @@ App.new do
|
|
84
84
|
@vim = master_detail :width => :EXPAND
|
85
85
|
@dirs = listbox :list => model, :height => ht, :border_attrib => borderattrib, :suppress_borders => true
|
86
86
|
@dirs.one_key_selection = false
|
87
|
-
|
87
|
+
|
88
88
|
# commands that can be mapped to or executed using M-x
|
89
89
|
# however, commands of components aren't yet accessible.
|
90
90
|
def get_commands
|
91
91
|
%w{ testchoose testnumberedmenu testdisplay_list testdisplay_text testdir saveas1 }
|
92
92
|
end
|
93
|
-
# we override/open instance so as to only print basename. Also, print unread count
|
93
|
+
# we override/open instance so as to only print basename. Also, print unread count
|
94
94
|
def @dirs.convert_value_to_text(text, crow)
|
95
95
|
str = File.basename(text)
|
96
96
|
if $unread_hash.has_key?(str)
|
97
97
|
str << " (#{$unread_hash[str]})"
|
98
98
|
else
|
99
|
-
str
|
99
|
+
str
|
100
100
|
end
|
101
101
|
end
|
102
102
|
def test1XX
|
103
|
-
$log.debug "called test1 " if $log.debug?
|
103
|
+
$log.debug "called test1 " if $log.debug?
|
104
104
|
str = choose "*.rb", :title => "Files", :prompt => "Choose a file: "
|
105
105
|
end
|
106
106
|
def help_text
|
107
107
|
<<-eos
|
108
|
-
APPEMAIL HELP
|
108
|
+
APPEMAIL HELP
|
109
109
|
|
110
110
|
This is some help text for appemail.
|
111
111
|
We are testing out this feature.
|
@@ -131,7 +131,7 @@ App.new do
|
|
131
131
|
end
|
132
132
|
@vim.set_left_component @dirs
|
133
133
|
|
134
|
-
|
134
|
+
|
135
135
|
@mails = []
|
136
136
|
headings = %w{ Stat # Date From Subject }
|
137
137
|
@lb2 = tabular_widget :suppress_borders => true
|
data/examples/atree.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'canis/core/util/app'
|
2
2
|
|
3
|
-
App.new do
|
3
|
+
App.new do
|
4
4
|
var = Variable.new
|
5
|
-
header = app_header "canis #{Canis::VERSION}", :text_center => "Tree Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
5
|
+
header = app_header "canis #{Canis::VERSION}", :text_center => "Tree Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
6
6
|
message "Press Enter to expand/collapse"
|
7
7
|
|
8
|
-
@form.bind_key(FFI::NCurses::KEY_F3) {
|
8
|
+
@form.bind_key(FFI::NCurses::KEY_F3) {
|
9
9
|
require 'canis/core/util/viewer'
|
10
10
|
Canis::Viewer.view("canis14.log", :close_key => KEY_ENTER, :title => "<Enter> to close")
|
11
11
|
}
|
@@ -37,7 +37,7 @@ App.new do
|
|
37
37
|
stack :margin_top => 0, :width_pc => "30" do
|
38
38
|
|
39
39
|
# using an Array, these would be expanded on selection, using an event
|
40
|
-
tree :data => Dir.glob("*"), :title=> "[ Array ]" do
|
40
|
+
tree :data => Dir.glob("*"), :title=> "[ Array ]" do
|
41
41
|
command do |node|
|
42
42
|
# insert dir entries unless done so already
|
43
43
|
if node.children && !node.children.empty?
|
@@ -71,7 +71,7 @@ App.new do
|
|
71
71
|
leaf1 << "leaf12"
|
72
72
|
|
73
73
|
# more rubyish way
|
74
|
-
root.add "blocky", true do
|
74
|
+
root.add "blocky", true do
|
75
75
|
add "block2"
|
76
76
|
add "block3" do
|
77
77
|
add "block31"
|
@@ -86,14 +86,14 @@ App.new do
|
|
86
86
|
# using height_pc as 100 was causing prefresh to fail if file lines went beyond 31
|
87
87
|
# tput lines gives 32 so only when file length exceeded was it actually writing beyond screen
|
88
88
|
t = textview :suppress_borders => true, :height_pc => 90, :color => :green, :bgcolor => :black
|
89
|
-
var.command do |filename|
|
89
|
+
var.command do |filename|
|
90
90
|
filename = filename.value
|
91
91
|
if File.directory? filename
|
92
92
|
lines = Dir.entries(filename )
|
93
93
|
t.set_content lines
|
94
94
|
elsif File.exist? filename
|
95
95
|
# next line bombs on "invalid byte sequence on UTF-8" on split.
|
96
|
-
lines = File.open(filename,'r').read.split("\n")
|
96
|
+
lines = File.open(filename,'r').read.split("\n")
|
97
97
|
# next line bombs on binary files. normally we would check file type using +file+ command
|
98
98
|
t.set_content lines
|
99
99
|
else
|
data/examples/bline.rb
CHANGED
@@ -3,7 +3,7 @@ require 'canis/core/util/rcommandwindow'
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'pathname'
|
5
5
|
require 'canis/core/include/defaultfilerenderer'
|
6
|
-
|
6
|
+
require_relative './common/devel.rb'
|
7
7
|
|
8
8
|
# this will go into top namespace so will conflict with other apps!
|
9
9
|
def testnumberedmenu
|
@@ -32,7 +32,7 @@ def testdisplay_text
|
|
32
32
|
end
|
33
33
|
def testdir
|
34
34
|
# this behaves like vim's file selector, it fills in values
|
35
|
-
str = rb_gets("File? ", Pathname) do |q|
|
35
|
+
str = rb_gets("File? ", Pathname) do |q|
|
36
36
|
#q.completion_proc = Proc.new {|str| Dir.glob(str +"*").collect { |f| File.directory?(f) ? f+"/" : f } }
|
37
37
|
q.help_text = "Enter start of filename and tab to get completion"
|
38
38
|
end
|
@@ -43,9 +43,9 @@ end
|
|
43
43
|
# method_missing gave a stack overflow.
|
44
44
|
def execute_this(meth, *args)
|
45
45
|
alert " #{meth} not found ! "
|
46
|
-
$log.debug "app email got #{meth} " if $log.debug?
|
46
|
+
$log.debug "app email got #{meth} " if $log.debug?
|
47
47
|
cc = @form.get_current_field
|
48
|
-
[cc].each do |c|
|
48
|
+
[cc].each do |c|
|
49
49
|
if c.respond_to?(meth, true)
|
50
50
|
c.send(meth, *args)
|
51
51
|
return true
|
@@ -54,7 +54,7 @@ def execute_this(meth, *args)
|
|
54
54
|
false
|
55
55
|
end
|
56
56
|
|
57
|
-
App.new do
|
57
|
+
App.new do
|
58
58
|
@startdir ||= File.expand_path("..")
|
59
59
|
def show file
|
60
60
|
w = @form.by_name["tv"]
|
@@ -63,43 +63,43 @@ App.new do
|
|
63
63
|
w.text lines
|
64
64
|
w.title "[ #{file} ]"
|
65
65
|
elsif File.exists? file
|
66
|
-
lines = File.open(file,'r').readlines
|
66
|
+
lines = File.open(file,'r').readlines
|
67
67
|
w.text lines
|
68
68
|
w.title "[ #{file} ]"
|
69
69
|
end
|
70
70
|
end
|
71
71
|
def testchoosedir
|
72
72
|
# list filters as you type
|
73
|
-
$log.debug "called CHOOSE " if $log.debug?
|
74
|
-
str = choose_file :title => "Select a file",
|
73
|
+
$log.debug "called CHOOSE " if $log.debug?
|
74
|
+
str = choose_file :title => "Select a file",
|
75
75
|
:recursive => true,
|
76
76
|
:dirs => true,
|
77
77
|
:directory => @startdir,
|
78
78
|
:help_text => "Enter pattern, use UP DOWN to traverse, Backspace to delete, ENTER to select. Esc-Esc to quit"
|
79
79
|
if str
|
80
|
-
message "We got #{str} "
|
80
|
+
message "We got #{str} "
|
81
81
|
show str
|
82
82
|
end
|
83
83
|
end
|
84
84
|
def testchoosefile
|
85
85
|
# list filters as you type a pattern
|
86
86
|
glob = "**/*.rb"
|
87
|
-
str = choose_file glob, :title => "Select a file",
|
87
|
+
str = choose_file glob, :title => "Select a file",
|
88
88
|
:directory => @startdir,
|
89
89
|
:help_text => "Enter pattern, use UP DOWN to traverse, Backspace to delete, ENTER to select. Esc-Esc to quit"
|
90
90
|
if str and str != ""
|
91
|
-
message "We got #{str} "
|
91
|
+
message "We got #{str} "
|
92
92
|
show str
|
93
93
|
end
|
94
94
|
end
|
95
95
|
ht = 24
|
96
96
|
borderattrib = :reverse
|
97
|
-
@header = app_header "canis #{Canis::VERSION}", :text_center => "rCommandline Test",
|
97
|
+
@header = app_header "canis #{Canis::VERSION}", :text_center => "rCommandline Test",
|
98
98
|
:text_right =>"Press :", :color => :white, :bgcolor => 236
|
99
99
|
message "Press F10 (or qq) to exit, F1 Help, : for Menu "
|
100
100
|
|
101
101
|
|
102
|
-
|
102
|
+
|
103
103
|
# commands that can be mapped to or executed using M-x
|
104
104
|
# however, commands of components aren't yet accessible.
|
105
105
|
def get_commands
|
@@ -107,7 +107,7 @@ App.new do
|
|
107
107
|
end
|
108
108
|
def help_text
|
109
109
|
<<-eos
|
110
|
-
rCommandLine HELP
|
110
|
+
rCommandLine HELP
|
111
111
|
|
112
112
|
These are some features for either getting filenames from user
|
113
113
|
at the bottom of the window like vim and others do, or filtering
|
@@ -130,7 +130,7 @@ App.new do
|
|
130
130
|
testdir - vim style, tabbing completes matching files
|
131
131
|
testnumberedmenu - use menu indexes to select options
|
132
132
|
testdisplaylist - display a list at bottom of screen
|
133
|
-
Press <ENTER> to select, arrow keys to traverse,
|
133
|
+
Press <ENTER> to select, arrow keys to traverse,
|
134
134
|
and characters to filter list.
|
135
135
|
testdisplaytext - display text at bottom (current file contents)
|
136
136
|
Press <ENTER> when done.
|
@@ -164,10 +164,10 @@ App.new do
|
|
164
164
|
menu.display_new :title => "Menu"
|
165
165
|
end
|
166
166
|
@form.bind_key(?:, "App Menu") { app_menu; }
|
167
|
-
@form.bind_key(?=, "Choose File") {
|
167
|
+
@form.bind_key(?=, "Choose File") {
|
168
168
|
@curdir ||= Dir.pwd
|
169
169
|
Dir.chdir(@curdir) if Dir.pwd != @curdir
|
170
|
-
#testdisplay_list;
|
170
|
+
#testdisplay_list;
|
171
171
|
testchoosefile;
|
172
172
|
}
|
173
173
|
|
@@ -175,7 +175,7 @@ App.new do
|
|
175
175
|
tv = textview :height_pc => 100, :width_pc => 100, :name => "tv", :suppress_borders => true
|
176
176
|
tv.renderer ruby_renderer
|
177
177
|
end # stack
|
178
|
-
|
178
|
+
|
179
179
|
sl = status_line :row => Ncurses.LINES-1
|
180
|
-
testdisplay_list
|
180
|
+
testdisplay_list
|
181
181
|
end # app
|
data/examples/common/devel.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# Author: j kepler http://github.com/mare-imbrium/canis/
|
5
5
|
# Date: 2014-06-02 - 20:26
|
6
6
|
# License: MIT
|
7
|
-
# Last update:
|
7
|
+
# Last update: 2017-03-09 23:13
|
8
8
|
# ----------------------------------------------------------------------------- #
|
9
9
|
# devel.rb Copyright (C) 2012-2014 j kepler
|
10
10
|
require 'canis/core/include/appmethods'
|
@@ -96,7 +96,7 @@ module Canis
|
|
96
96
|
val = val.keys
|
97
97
|
end
|
98
98
|
case val
|
99
|
-
when String,
|
99
|
+
when String, Integer, TrueClass, FalseClass, NilClass, Array, Hash, Symbol
|
100
100
|
;
|
101
101
|
else
|
102
102
|
val = "Not shown"
|
@@ -144,7 +144,7 @@ module Canis
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
case val
|
147
|
-
when String,
|
147
|
+
when String, Integer, TrueClass, FalseClass, NilClass, Array, Hash, Symbol
|
148
148
|
;
|
149
149
|
else
|
150
150
|
val = "Not shown"
|
data/examples/dbdemo.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
require 'canis/core/util/app'
|
2
|
-
|
2
|
+
begin
|
3
|
+
require 'sqlite3'
|
4
|
+
rescue LoadError
|
5
|
+
puts "LoadError: You need sqlite3 installed for this example"
|
6
|
+
end
|
3
7
|
|
4
8
|
def menu_bar hash, config={}, &block
|
5
9
|
if hash.is_a? Hash
|
@@ -27,9 +31,9 @@ def menu_bar hash, config={}, &block
|
|
27
31
|
width = config[:title].size + 4 if width < config[:title].size + 4
|
28
32
|
end
|
29
33
|
height = config[:height]
|
30
|
-
height ||= [max_visible_items || 10+2, list.length+2].min
|
31
|
-
#layout(1+height, width+4, row, col)
|
32
|
-
layout = { :height => 0+height, :width => 0+width, :top => row, :left => col }
|
34
|
+
height ||= [max_visible_items || 10+2, list.length+2].min
|
35
|
+
#layout(1+height, width+4, row, col)
|
36
|
+
layout = { :height => 0+height, :width => 0+width, :top => row, :left => col }
|
33
37
|
window = Canis::Window.new(layout)
|
34
38
|
window.name = "WINDOW:popuplist"
|
35
39
|
window.wbkgd(Ncurses.COLOR_PAIR($reversecolor));
|
@@ -44,17 +48,17 @@ def menu_bar hash, config={}, &block
|
|
44
48
|
listconfig[:height] = height
|
45
49
|
listconfig[:selection_mode] ||= :single
|
46
50
|
listconfig.merge!(config)
|
47
|
-
listconfig.delete(:row);
|
48
|
-
listconfig.delete(:col);
|
51
|
+
listconfig.delete(:row);
|
52
|
+
listconfig.delete(:col);
|
49
53
|
# trying to pass populists block to listbox
|
50
54
|
lb = Canis::Listbox.new form, listconfig, &block
|
51
55
|
#lb.should_show_focus = true
|
52
56
|
#$row_focussed_attr = REVERSE
|
53
57
|
|
54
|
-
|
55
|
-
# added next line so caller can configure listbox with
|
58
|
+
|
59
|
+
# added next line so caller can configure listbox with
|
56
60
|
# events such as ENTER_ROW, LEAVE_ROW or LIST_SELECTION_EVENT or PRESS
|
57
|
-
# 2011-11-11
|
61
|
+
# 2011-11-11
|
58
62
|
#yield lb if block_given? # No it won't work since this returns
|
59
63
|
window.wrefresh
|
60
64
|
Ncurses::Panel.update_panels
|
@@ -92,7 +96,7 @@ def menu_bar hash, config={}, &block
|
|
92
96
|
if val.is_a? Hash or val.is_a? Array
|
93
97
|
unentered_hash = val
|
94
98
|
choices << lb.current_value
|
95
|
-
unentered_window, _list = display_submenu val, :row => lb.current_index, :col => lb.width, :relative_to => lb,
|
99
|
+
unentered_window, _list = display_submenu val, :row => lb.current_index, :col => lb.width, :relative_to => lb,
|
96
100
|
:bgcolor => :cyan
|
97
101
|
end
|
98
102
|
else
|
@@ -106,7 +110,7 @@ def menu_bar hash, config={}, &block
|
|
106
110
|
if val
|
107
111
|
choices << lb.current_value
|
108
112
|
unentered_hash = val
|
109
|
-
unentered_window, _list = display_submenu val, :row => lb.current_index, :col => lb.width, :relative_to => lb,
|
113
|
+
unentered_window, _list = display_submenu val, :row => lb.current_index, :col => lb.width, :relative_to => lb,
|
110
114
|
:bgcolor => :cyan
|
111
115
|
end
|
112
116
|
|
@@ -190,9 +194,9 @@ def display_submenu hash, config={}, &block
|
|
190
194
|
width = config[:title].size + 4 if width < config[:title].size + 4
|
191
195
|
end
|
192
196
|
height = config[:height]
|
193
|
-
height ||= [max_visible_items || 10+2, list.length+2].min
|
194
|
-
#layout(1+height, width+4, row, col)
|
195
|
-
layout = { :height => 0+height, :width => 0+width, :top => row, :left => col }
|
197
|
+
height ||= [max_visible_items || 10+2, list.length+2].min
|
198
|
+
#layout(1+height, width+4, row, col)
|
199
|
+
layout = { :height => 0+height, :width => 0+width, :top => row, :left => col }
|
196
200
|
window = Canis::Window.new(layout)
|
197
201
|
window.name = "WINDOW:popuplist"
|
198
202
|
window.wbkgd(Ncurses.COLOR_PAIR($reversecolor));
|
@@ -205,15 +209,15 @@ def display_submenu hash, config={}, &block
|
|
205
209
|
listconfig[:height] = height
|
206
210
|
listconfig[:selection_mode] ||= :single
|
207
211
|
listconfig.merge!(config)
|
208
|
-
listconfig.delete(:row);
|
209
|
-
listconfig.delete(:col);
|
212
|
+
listconfig.delete(:row);
|
213
|
+
listconfig.delete(:col);
|
210
214
|
# trying to pass populists block to listbox
|
211
215
|
lb = Canis::Listbox.new form, listconfig, &block
|
212
216
|
|
213
|
-
|
214
|
-
# added next line so caller can configure listbox with
|
217
|
+
|
218
|
+
# added next line so caller can configure listbox with
|
215
219
|
# events such as ENTER_ROW, LEAVE_ROW or LIST_SELECTION_EVENT or PRESS
|
216
|
-
# 2011-11-11
|
220
|
+
# 2011-11-11
|
217
221
|
#yield lb if block_given? # No it won't work since this returns
|
218
222
|
window.wrefresh
|
219
223
|
Ncurses::Panel.update_panels
|
@@ -294,7 +298,7 @@ def create_menu
|
|
294
298
|
# menu should have array of hashes (or just a string)
|
295
299
|
#db = { :name => "Databases", :accelerator => "M-d", :enabled = true, :on_right => :get_databases }
|
296
300
|
#or = { :name => "Open Recent", :accelerator => "M-o", :enabled = true, :on_right => :get_recent }
|
297
|
-
#find_array = {"Find ..." => :find, "Find Next" => :find_next, "Find Previous" => :find_prev}
|
301
|
+
#find_array = {"Find ..." => :find, "Find Next" => :find_next, "Find Previous" => :find_prev}
|
298
302
|
items["File >"] = ["Open ... C-o" , "Open Recent", "Databases" , "Tables", "Exit"]
|
299
303
|
items["Window >"] = { "Tile" => nil, "Find >" => {"Find ..." => :find, "Find Next" => :find_next, "Find Previous" => :find_prev},
|
300
304
|
"Edit" => nil, "Whatever" => nil}
|
@@ -326,7 +330,7 @@ def create_menu
|
|
326
330
|
ix = popuplist( items[value] , :row => r + 2 + ix, :col => 10, :bgcolor => :cyan, :color => :white)
|
327
331
|
end
|
328
332
|
end
|
329
|
-
#
|
333
|
+
#
|
330
334
|
# changed order of name and fields, thanks hramrach
|
331
335
|
def view_data name, fields="*"
|
332
336
|
fields = "*" if fields == ""
|
@@ -355,7 +359,7 @@ def view_sql stmt
|
|
355
359
|
require 'canis/core/widgets/tabular'
|
356
360
|
t = Tabular.new do |t|
|
357
361
|
t.headings = $columns
|
358
|
-
t.data=content
|
362
|
+
t.data=content
|
359
363
|
end
|
360
364
|
view t.render
|
361
365
|
end
|
@@ -366,7 +370,7 @@ def view_sql stmt
|
|
366
370
|
end
|
367
371
|
end
|
368
372
|
|
369
|
-
App.new do
|
373
|
+
App.new do
|
370
374
|
$log = create_logger "canisdb.log"
|
371
375
|
#header = app_header "canis #{Canis::VERSION}", :text_center => "Database Demo", :text_right =>"enabled"
|
372
376
|
form = @form
|
@@ -384,7 +388,7 @@ App.new do
|
|
384
388
|
end
|
385
389
|
def help_text
|
386
390
|
<<-eos
|
387
|
-
DBDEMO HELP
|
391
|
+
DBDEMO HELP
|
388
392
|
|
389
393
|
This is some help text for dbdemo.
|
390
394
|
We are testing out this feature.
|
@@ -407,7 +411,7 @@ App.new do
|
|
407
411
|
Alt-x - Command mode (<tab> to see commands and select)
|
408
412
|
: - Command mode
|
409
413
|
Alt-z - Commands in TextArea
|
410
|
-
|
414
|
+
|
411
415
|
Sql Entry Area
|
412
416
|
C-x e Edit in $EDITOR or vi
|
413
417
|
M-? To see other key-bindings
|
@@ -442,13 +446,13 @@ App.new do
|
|
442
446
|
@form.by_name["clist"].clear_selection
|
443
447
|
@form.by_name["clist"].remove_all
|
444
448
|
end
|
445
|
-
|
449
|
+
|
446
450
|
else
|
447
451
|
alert "Can't find a .db or .sqlite file"
|
448
452
|
end
|
449
453
|
end
|
450
454
|
@form.help_manager.help_text = help_text()
|
451
|
-
# TODO accelerators and
|
455
|
+
# TODO accelerators and
|
452
456
|
# getting a handle for later use
|
453
457
|
mb = menubar do
|
454
458
|
keep_visible true
|
@@ -456,7 +460,7 @@ App.new do
|
|
456
460
|
menu "File" do
|
457
461
|
item "Open", "O" do
|
458
462
|
accelerator "Ctrl-O"
|
459
|
-
command do
|
463
|
+
command do
|
460
464
|
alert "HA!! you wanted to open a file?"
|
461
465
|
end
|
462
466
|
end
|
@@ -484,9 +488,9 @@ App.new do
|
|
484
488
|
create_popup(get_column_names(text), :multiple) { |value| view_data( text, value.join(",") ) }
|
485
489
|
end
|
486
490
|
end
|
487
|
-
item "New", "N"
|
491
|
+
item "New", "N"
|
488
492
|
separator
|
489
|
-
item "Exit", "x" do
|
493
|
+
item "Exit", "x" do
|
490
494
|
accelerator "F10"
|
491
495
|
command do
|
492
496
|
throw(:close)
|
@@ -523,7 +527,7 @@ App.new do
|
|
523
527
|
end
|
524
528
|
menu "Shell" do
|
525
529
|
require 'canis/core/include/appmethods.rb'
|
526
|
-
|
530
|
+
require_relative './common/devel.rb'
|
527
531
|
item "Shell Output ..." do
|
528
532
|
command { shell_output }
|
529
533
|
end
|
@@ -568,7 +572,7 @@ App.new do
|
|
568
572
|
# too much confusion between selected and focussed row
|
569
573
|
#$current_table = eve.text if $db
|
570
574
|
#end
|
571
|
-
clist = listbox :name => "clist", :list => ["No columns"], :title => "Columns", :height => 14,
|
575
|
+
clist = listbox :name => "clist", :list => ["No columns"], :title => "Columns", :height => 14,
|
572
576
|
:selection_mode => :multiple,
|
573
577
|
:selected_color => :cyan, :selected_bgcolor => :white , :selected_attr => Ncurses::A_REVERSE,
|
574
578
|
:help_text => "Enter to View selected fields, 'v' to select columns, w - where, o-order"
|
@@ -576,11 +580,11 @@ App.new do
|
|
576
580
|
|
577
581
|
# change selected color when user enters or exits
|
578
582
|
[clist , tlist].each do |o|
|
579
|
-
o.bind(:ENTER) do
|
583
|
+
o.bind(:ENTER) do
|
580
584
|
# reduce flicker by only modifying if necesssary
|
581
585
|
o.selected_color = :cyan if o.selected_color != :cyan
|
582
586
|
end
|
583
|
-
o.bind(:LEAVE) do
|
587
|
+
o.bind(:LEAVE) do
|
584
588
|
# reduce flicker by only modifying if necesssary
|
585
589
|
o.selected_color = :blue unless o.selected_indices.empty?
|
586
590
|
end
|
@@ -602,7 +606,7 @@ App.new do
|
|
602
606
|
end
|
603
607
|
view_data $selected_table, cols
|
604
608
|
else
|
605
|
-
alert "Select a table first ('v' selects)."
|
609
|
+
alert "Select a table first ('v' selects)."
|
606
610
|
end
|
607
611
|
end
|
608
612
|
clist.bind_key('w', 'add to where condition') {
|
@@ -629,41 +633,41 @@ App.new do
|
|
629
633
|
$log.debug "XXX: ORDER: #{$order_columns}. Press F4 when done"
|
630
634
|
}
|
631
635
|
@statusline = status_line :row => -3, :bgcolor => :magenta, :color => :black
|
632
|
-
@statusline.command {
|
636
|
+
@statusline.command {
|
633
637
|
# trying this out. If you want a persistent message that remains till the next on
|
634
638
|
# then send it in as $status_message
|
635
639
|
text = $status_message.value || ""
|
636
640
|
if !$current_db
|
637
641
|
"[%-s] %s" % [ "#[bg=red,fg=white,bold]Select a Database#[end]", text]
|
638
642
|
elsif !$current_table
|
639
|
-
"[DB: #[fg=white,bg=blue]%-s#[end] | %-s ] %s" % [ $current_db || "None", $current_table || "#[bg=red,fg=white]Select a table#[end]", text]
|
643
|
+
"[DB: #[fg=white,bg=blue]%-s#[end] | %-s ] %s" % [ $current_db || "None", $current_table || "#[bg=red,fg=white]Select a table#[end]", text]
|
640
644
|
else
|
641
|
-
"DB: #[fg=white,bg=green,bold]%-s#[end] | #[fg=white,bold]%-s#[end] ] %s" % [ $current_db || "None", $current_table || "----", text]
|
645
|
+
"DB: #[fg=white,bg=green,bold]%-s#[end] | #[fg=white,bold]%-s#[end] ] %s" % [ $current_db || "None", $current_table || "----", text]
|
642
646
|
end
|
643
647
|
}
|
644
648
|
@adock = nil
|
645
649
|
keyarray = [
|
646
|
-
["F1" , "Help"], ["F10" , "Exit"],
|
650
|
+
["F1" , "Help"], ["F10" , "Exit"],
|
647
651
|
["F2", "Menu"], ["F4", "View"],
|
648
652
|
["M-d", "Database"], ["M-t", "Table"],
|
649
653
|
["M-x", "Command"], nil
|
650
654
|
]
|
651
655
|
tlist_keyarray = keyarray + [ ["v", "Select"], nil, ["Enter","View"] ]
|
652
656
|
|
653
|
-
clist_keyarray = keyarray + [ ["v", "Select"], ["V", "Range Sel"],
|
657
|
+
clist_keyarray = keyarray + [ ["v", "Select"], ["V", "Range Sel"],
|
654
658
|
["Enter","View"], ['w', 'where'],
|
655
659
|
["o","order by"], ['O', 'order desc']
|
656
660
|
]
|
657
661
|
tarea_keyarray = keyarray + [ ["M-z", "Commands"], nil ]
|
658
|
-
#tarea_sub_keyarray = [ ["r", "Run"], ["c", "clear"], ["w","Save"], ["a", "Append next"],
|
662
|
+
#tarea_sub_keyarray = [ ["r", "Run"], ["c", "clear"], ["w","Save"], ["a", "Append next"],
|
659
663
|
#["y", "Yank"], ["Y", "yank pop"] ]
|
660
|
-
tarea_sub_keyarray = [ ["r", "Run"], ["c", "clear"], ["e", "Edit externally"], ["w","Kill Ring Save (M-w)"], ["a", "Append Next"],
|
664
|
+
tarea_sub_keyarray = [ ["r", "Run"], ["c", "clear"], ["e", "Edit externally"], ["w","Kill Ring Save (M-w)"], ["a", "Append Next"],
|
661
665
|
["y", "Yank (C-y)"], ["Y", "yank pop (M-y)"],
|
662
666
|
["u", "Undo (C-_)"], ["R", "Redo (C-r)"],
|
663
667
|
]
|
664
668
|
|
665
669
|
gw = get_color($reversecolor, 'green', 'black')
|
666
|
-
@adock = dock keyarray, { :row => Ncurses.LINES-2, :footer_color_pair => $datacolor,
|
670
|
+
@adock = dock keyarray, { :row => Ncurses.LINES-2, :footer_color_pair => $datacolor,
|
667
671
|
:footer_mnemonic_color_pair => gw }
|
668
672
|
@adock.set_key_labels tlist_keyarray, :tables
|
669
673
|
@adock.set_key_labels clist_keyarray, :columns
|
@@ -741,7 +745,7 @@ App.new do
|
|
741
745
|
end
|
742
746
|
view_data $current_table, cols
|
743
747
|
else
|
744
|
-
alert "Select a table first."
|
748
|
+
alert "Select a table first."
|
745
749
|
end
|
746
750
|
end
|
747
751
|
end # stack
|
@@ -777,7 +781,7 @@ App.new do
|
|
777
781
|
while((ch = @window.getchar()) != ?\C-c.getbyte(0) )
|
778
782
|
if ch < 33 || ch > 126
|
779
783
|
Ncurses.beep
|
780
|
-
elsif !keys.include?(ch.chr)
|
784
|
+
elsif !keys.include?(ch.chr)
|
781
785
|
Ncurses.beep
|
782
786
|
else
|
783
787
|
hash.fetch(ch.chr).call
|
@@ -795,7 +799,7 @@ App.new do
|
|
795
799
|
|
796
800
|
if filename
|
797
801
|
str = tarea.get_text
|
798
|
-
File.open(filename, 'a') {|f| f.write(str) }
|
802
|
+
File.open(filename, 'a') {|f| f.write(str) }
|
799
803
|
@oldfilename = filename
|
800
804
|
@cmd_history << filename unless @cmd_history.include? filename
|
801
805
|
|
@@ -809,18 +813,18 @@ App.new do
|
|
809
813
|
filter = "*"
|
810
814
|
#str = choose filter, :title => "Files", :prompt => "Choose a file: "
|
811
815
|
cproc = Proc.new { |str| Dir.glob(str + "*") }
|
812
|
-
str = rb_gets "Choose a file: ", :title => "Files", :tab_completion => cproc,
|
816
|
+
str = rb_gets "Choose a file: ", :title => "Files", :tab_completion => cproc,
|
813
817
|
:help_text => "Press <tab> to complete filenames. C-a, C-e, C-k. Alt-?"
|
814
818
|
if str && File.exists?(str)
|
815
819
|
begin
|
816
|
-
tarea.set_content(str)
|
820
|
+
tarea.set_content(str)
|
817
821
|
message "Read content from #{str} "
|
818
822
|
rescue => err
|
819
823
|
print_error_message "No file named: #{str}: #{err.to_s} "
|
820
824
|
end
|
821
825
|
end
|
822
826
|
end
|
823
|
-
#ok_button = button( [button_row,30], "OK", {:mnemonic => 'O'}) do
|
827
|
+
#ok_button = button( [button_row,30], "OK", {:mnemonic => 'O'}) do
|
824
828
|
#end
|
825
829
|
end
|
826
830
|
blank
|