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.
- checksums.yaml +7 -0
- data/.gitignore +45 -0
- data/CHANGES +52 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +24 -0
- data/Rakefile +2 -0
- data/canis.gemspec +25 -0
- data/examples/alpmenu.rb +46 -0
- data/examples/app.sample +19 -0
- data/examples/appemail.rb +191 -0
- data/examples/atree.rb +105 -0
- data/examples/bline.rb +181 -0
- data/examples/common/devel.rb +319 -0
- data/examples/common/file.rb +93 -0
- data/examples/data/README.markdown +9 -0
- data/examples/data/brew.txt +38 -0
- data/examples/data/color.2 +37 -0
- data/examples/data/gemlist.txt +59 -0
- data/examples/data/lotr.txt +12 -0
- data/examples/data/ports.txt +136 -0
- data/examples/data/table.txt +37 -0
- data/examples/data/tasks.csv +88 -0
- data/examples/data/tasks.txt +27 -0
- data/examples/data/todo.txt +16 -0
- data/examples/data/todocsv.csv +28 -0
- data/examples/data/unix1.txt +21 -0
- data/examples/data/unix2.txt +11 -0
- data/examples/dbdemo.rb +506 -0
- data/examples/dirtree.rb +177 -0
- data/examples/newtabbedwindow.rb +100 -0
- data/examples/newtesttabp.rb +92 -0
- data/examples/tabular.rb +212 -0
- data/examples/tasks.rb +179 -0
- data/examples/term2.rb +88 -0
- data/examples/testbuttons.rb +307 -0
- data/examples/testcombo.rb +102 -0
- data/examples/testdb.rb +182 -0
- data/examples/testfields.rb +208 -0
- data/examples/testflowlayout.rb +43 -0
- data/examples/testkeypress.rb +98 -0
- data/examples/testlistbox.rb +187 -0
- data/examples/testlistbox1.rb +199 -0
- data/examples/testmessagebox.rb +144 -0
- data/examples/testprogress.rb +116 -0
- data/examples/testree.rb +107 -0
- data/examples/testsplitlayout.rb +53 -0
- data/examples/testsplitlayout1.rb +49 -0
- data/examples/teststacklayout.rb +48 -0
- data/examples/testwsshortcuts.rb +68 -0
- data/examples/testwsshortcuts2.rb +129 -0
- data/lib/canis.rb +16 -0
- data/lib/canis/core/docs/index.txt +104 -0
- data/lib/canis/core/docs/list.txt +16 -0
- data/lib/canis/core/docs/style_help.yml +34 -0
- data/lib/canis/core/docs/tabbedpane.txt +15 -0
- data/lib/canis/core/docs/table.txt +31 -0
- data/lib/canis/core/docs/textpad.txt +48 -0
- data/lib/canis/core/docs/tree.txt +23 -0
- data/lib/canis/core/include/.DS_Store +0 -0
- data/lib/canis/core/include/action.rb +83 -0
- data/lib/canis/core/include/actionmanager.rb +49 -0
- data/lib/canis/core/include/appmethods.rb +179 -0
- data/lib/canis/core/include/bordertitle.rb +49 -0
- data/lib/canis/core/include/canisparser.rb +100 -0
- data/lib/canis/core/include/colorparser.rb +437 -0
- data/lib/canis/core/include/defaultfilerenderer.rb +64 -0
- data/lib/canis/core/include/io.rb +320 -0
- data/lib/canis/core/include/layouts/SplitLayout.rb +161 -0
- data/lib/canis/core/include/layouts/abstractlayout.rb +213 -0
- data/lib/canis/core/include/layouts/flowlayout.rb +104 -0
- data/lib/canis/core/include/layouts/stacklayout.rb +109 -0
- data/lib/canis/core/include/listbindings.rb +89 -0
- data/lib/canis/core/include/listeditable.rb +319 -0
- data/lib/canis/core/include/listoperations.rb +61 -0
- data/lib/canis/core/include/listselectionmodel.rb +388 -0
- data/lib/canis/core/include/multibuffer.rb +173 -0
- data/lib/canis/core/include/ractionevent.rb +73 -0
- data/lib/canis/core/include/rchangeevent.rb +27 -0
- data/lib/canis/core/include/rhistory.rb +95 -0
- data/lib/canis/core/include/rinputdataevent.rb +47 -0
- data/lib/canis/core/include/textdocument.rb +111 -0
- data/lib/canis/core/include/vieditable.rb +175 -0
- data/lib/canis/core/include/widgetmenu.rb +66 -0
- data/lib/canis/core/system/colormap.rb +165 -0
- data/lib/canis/core/system/keydefs.rb +32 -0
- data/lib/canis/core/system/ncurses.rb +237 -0
- data/lib/canis/core/system/panel.rb +129 -0
- data/lib/canis/core/system/window.rb +1081 -0
- data/lib/canis/core/util/ansiparser.rb +119 -0
- data/lib/canis/core/util/app.rb +696 -0
- data/lib/canis/core/util/basestack.rb +412 -0
- data/lib/canis/core/util/defaultcolorparser.rb +84 -0
- data/lib/canis/core/util/extras/README +5 -0
- data/lib/canis/core/util/extras/bottomline.rb +1815 -0
- data/lib/canis/core/util/extras/padreader.rb +192 -0
- data/lib/canis/core/util/focusmanager.rb +31 -0
- data/lib/canis/core/util/helpmanager.rb +160 -0
- data/lib/canis/core/util/oldwidgetshortcuts.rb +304 -0
- data/lib/canis/core/util/promptmenu.rb +235 -0
- data/lib/canis/core/util/rcommandwindow.rb +933 -0
- data/lib/canis/core/util/rdialogs.rb +520 -0
- data/lib/canis/core/util/textutils.rb +74 -0
- data/lib/canis/core/util/viewer.rb +238 -0
- data/lib/canis/core/util/widgetshortcuts.rb +508 -0
- data/lib/canis/core/widgets/applicationheader.rb +103 -0
- data/lib/canis/core/widgets/box.rb +58 -0
- data/lib/canis/core/widgets/divider.rb +310 -0
- data/lib/canis/core/widgets/extras/README.md +12 -0
- data/lib/canis/core/widgets/extras/rtextarea.rb +960 -0
- data/lib/canis/core/widgets/extras/stackflow.rb +474 -0
- data/lib/canis/core/widgets/keylabelprinter.rb +194 -0
- data/lib/canis/core/widgets/listbox.rb +326 -0
- data/lib/canis/core/widgets/listfooter.rb +86 -0
- data/lib/canis/core/widgets/rcombo.rb +210 -0
- data/lib/canis/core/widgets/rcontainer.rb +415 -0
- data/lib/canis/core/widgets/rlink.rb +30 -0
- data/lib/canis/core/widgets/rmenu.rb +970 -0
- data/lib/canis/core/widgets/rmenulink.rb +30 -0
- data/lib/canis/core/widgets/rmessagebox.rb +400 -0
- data/lib/canis/core/widgets/rprogress.rb +118 -0
- data/lib/canis/core/widgets/rtabbedpane.rb +631 -0
- data/lib/canis/core/widgets/rtabbedwindow.rb +70 -0
- data/lib/canis/core/widgets/rwidget.rb +3634 -0
- data/lib/canis/core/widgets/scrollbar.rb +147 -0
- data/lib/canis/core/widgets/statusline.rb +113 -0
- data/lib/canis/core/widgets/table.rb +1072 -0
- data/lib/canis/core/widgets/tabular.rb +264 -0
- data/lib/canis/core/widgets/textpad.rb +1674 -0
- data/lib/canis/core/widgets/tree.rb +690 -0
- data/lib/canis/core/widgets/tree/treecellrenderer.rb +150 -0
- data/lib/canis/core/widgets/tree/treemodel.rb +432 -0
- data/lib/canis/version.rb +3 -0
- metadata +229 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# To test out the new messagebox
|
|
2
|
+
# The old messagebox provided a lot of convenience methods that were complicated
|
|
3
|
+
# and confusing. This one is simpler.
|
|
4
|
+
# The examples here are based on the old test1.rb that will not work now
|
|
5
|
+
# since the interface has been changed and simplified
|
|
6
|
+
#
|
|
7
|
+
require 'logger'
|
|
8
|
+
require 'canis'
|
|
9
|
+
require 'canis/core/widgets/rmessagebox'
|
|
10
|
+
#require 'canis/deprecated/widgets/rmessagebox'
|
|
11
|
+
|
|
12
|
+
if $0 == __FILE__
|
|
13
|
+
# Initialize curses
|
|
14
|
+
begin
|
|
15
|
+
# XXX update with new color and kb
|
|
16
|
+
Canis::start_ncurses # this is initializing colors via ColorMap.setup
|
|
17
|
+
$log = Logger.new((File.join(ENV['LOGDIR'] || "./" ,"canis14.log")))
|
|
18
|
+
$log.level = Logger::DEBUG
|
|
19
|
+
|
|
20
|
+
# @window = Canis::Window.root_window
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
catch(:close) do
|
|
24
|
+
choice = ARGV[0] && ARGV[0].to_i || 3
|
|
25
|
+
$log.debug "START MESSAGE BOX TEST #{ARGV[0]}. choice==#{choice} ---------"
|
|
26
|
+
# need to pass a form, not window.
|
|
27
|
+
case choice
|
|
28
|
+
when 1
|
|
29
|
+
require 'canis/core/widgets/listbox'
|
|
30
|
+
nn = "mylist"
|
|
31
|
+
l = Listbox.new nil, :row => 2, :col => 5, :list => %w[john tim lee wong kepler edward why chad andy],
|
|
32
|
+
:selection_mode => :multiple, :height => 10, :width => 20 , :selected_color => :green, :selected_bgcolor => :white, :selected_indices => [2,6], :name => nn
|
|
33
|
+
#default_values %w[ lee why ]
|
|
34
|
+
|
|
35
|
+
l.unbind_key(KEY_ENTER)
|
|
36
|
+
@mb = MessageBox.new :width => 30, :height => 18 do
|
|
37
|
+
title "Select a name"
|
|
38
|
+
button_type :ok_cancel
|
|
39
|
+
item Label.new :row => 1, :col => 1, :text => "Enter your name:"
|
|
40
|
+
item l
|
|
41
|
+
end
|
|
42
|
+
@mb.run
|
|
43
|
+
$log.debug "XXX: #{l.selected_indices} "
|
|
44
|
+
n = @mb.widget(nn)
|
|
45
|
+
$log.debug "XXXX: #{n.selected_indices}, #{n.name} "
|
|
46
|
+
when 2
|
|
47
|
+
@mb = Canis::MessageBox.new do
|
|
48
|
+
title "Color selector"
|
|
49
|
+
message "Select a color"
|
|
50
|
+
#item Label.new :text => "Select a color", :row => 1 , :col => 2
|
|
51
|
+
|
|
52
|
+
r = 3
|
|
53
|
+
c = 2
|
|
54
|
+
%w[&red &green &blue &yellow].each_with_index { |b, i|
|
|
55
|
+
bu = Button.new :name => b, :text => b, :row => r, :col => c
|
|
56
|
+
bu.command { throw(:close, i) }
|
|
57
|
+
item bu
|
|
58
|
+
#bu.default_button(true) if i == 0
|
|
59
|
+
#r += 1
|
|
60
|
+
c += b.length + 5
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
index = @mb.run
|
|
64
|
+
$log.debug "XXX: messagebox 2 ret #{index} "
|
|
65
|
+
when 3
|
|
66
|
+
@mb = Canis::MessageBox.new do
|
|
67
|
+
title "Enter your name"
|
|
68
|
+
#message "Enter your first name. You are not permitted to enter x z or q and must enter a capital first"
|
|
69
|
+
message "Enter your first name. Initcaps "
|
|
70
|
+
add Field.new :chars_allowed => /[^0-9]/, :valid_regex => /^[A-Z][a-z]*/, :default => "Matz", :bgcolor => :cyan
|
|
71
|
+
button_type :ok_cancel
|
|
72
|
+
end
|
|
73
|
+
@mb.run
|
|
74
|
+
$log.debug "XXX: got #{@mb.widget(1).text} "
|
|
75
|
+
when 4
|
|
76
|
+
mb = MessageBox.new :title => "HTTP Configuration" , :width => 50 do
|
|
77
|
+
add LabeledField.new :label => 'User', :name => "user", :width => 30, :bgcolor => :cyan
|
|
78
|
+
add CheckBox.new :text => "No &frames", :onvalue => "Selected", :offvalue => "UNselected"
|
|
79
|
+
add CheckBox.new :text => "Use &HTTP/1.0", :value => true
|
|
80
|
+
add CheckBox.new :text => "Use &passive FTP"
|
|
81
|
+
add Label.new :text => " Language ", :attr => REVERSE
|
|
82
|
+
$radio = Canis::Variable.new
|
|
83
|
+
add RadioButton.new :text => "py&thon", :value => "python", :color => :blue, :variable => $radio
|
|
84
|
+
add RadioButton.new :text => "rub&y", :color => :red, :variable => $radio
|
|
85
|
+
button_type :ok
|
|
86
|
+
end
|
|
87
|
+
field = mb.widget("user")
|
|
88
|
+
field.bind(:ENTER) do |f|
|
|
89
|
+
listconfig = {:bgcolor => :blue, :color => :white,
|
|
90
|
+
:relative_to => field, :col => field.col + 6, :width => field.width}
|
|
91
|
+
users= %w[john tim lee wong kepler edward _why chad andy]
|
|
92
|
+
#index = popuplist(users, :relative_to => field, :col => field.col + 6, :width => field.width)
|
|
93
|
+
index = popuplist(users, listconfig)
|
|
94
|
+
field.text users[index] if index
|
|
95
|
+
end
|
|
96
|
+
mb.run
|
|
97
|
+
|
|
98
|
+
when 5
|
|
99
|
+
require 'canis/core/widgets/listbox'
|
|
100
|
+
label = Label.new 'text' => 'File', 'mnemonic'=>'F', :row => 3, :col => 5
|
|
101
|
+
field = Field.new :name => "file", :row => 3 , :col => 10, :width => 40, :set_label => label
|
|
102
|
+
#flist = Dir.glob(File.join( File.expand_path("~/"), "*"))
|
|
103
|
+
flist = Dir.glob("*")
|
|
104
|
+
listb = Listbox.new :name => "mylist", :row => 4, :col => 3, :width => 50, :height => 10,
|
|
105
|
+
:list => flist, :title => "File List", :selected_bgcolor => :white, :selected_color => :blue,
|
|
106
|
+
:selection_mode => :single, :border_attrib => REVERSE
|
|
107
|
+
#listb.bind(:ENTER_ROW) { field.text listb.selected_item }
|
|
108
|
+
# if you find that cursor goes into listbox while typing, then
|
|
109
|
+
# i've put set_form_row in listbox list_data_changed
|
|
110
|
+
field.bind(:CHANGE) do |f|
|
|
111
|
+
flist = Dir.glob("*"+f.getvalue+"*")
|
|
112
|
+
#l.insert( 0, *flist) if flist
|
|
113
|
+
listb.list flist
|
|
114
|
+
end
|
|
115
|
+
listb.unbind_key(KEY_ENTER)
|
|
116
|
+
mb = Canis::MessageBox.new :height => 20, :width => 60 do
|
|
117
|
+
title "Sample File Selector"
|
|
118
|
+
add label
|
|
119
|
+
add field
|
|
120
|
+
add listb
|
|
121
|
+
#height 20
|
|
122
|
+
#width 60
|
|
123
|
+
#top 5
|
|
124
|
+
#left 20
|
|
125
|
+
#default_button 0
|
|
126
|
+
button_type :ok_cancel
|
|
127
|
+
|
|
128
|
+
end
|
|
129
|
+
mb.run
|
|
130
|
+
$log.debug "MBOX :1selected #{listb}"
|
|
131
|
+
$log.debug "MBOX :selected #{listb.selected_value}"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
rescue => ex
|
|
136
|
+
ensure
|
|
137
|
+
@window.destroy unless @window.nil?
|
|
138
|
+
Canis::stop_ncurses
|
|
139
|
+
p ex if ex
|
|
140
|
+
p(ex.backtrace.join("\n")) if ex
|
|
141
|
+
$log.debug( ex) if ex
|
|
142
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------- #
|
|
2
|
+
# File: testprogress.rb
|
|
3
|
+
# Description: a test program for progress bar widget
|
|
4
|
+
# creates two progress bars, one old style and one new
|
|
5
|
+
# Keeps running till 'q' pressed.
|
|
6
|
+
# Author: jkepler http://github.com/mare-imbrium/canis/
|
|
7
|
+
# Date: 2014-03-27 - 23:31
|
|
8
|
+
# License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
|
|
9
|
+
# Last update: 2014-04-05 12:39
|
|
10
|
+
# ----------------------------------------------------------------------------- #
|
|
11
|
+
# testprogress.rb Copyright (C) 2012-2014 kepler kumar
|
|
12
|
+
require 'logger'
|
|
13
|
+
require 'canis'
|
|
14
|
+
require 'canis/core/widgets/rprogress'
|
|
15
|
+
if $0 == __FILE__
|
|
16
|
+
|
|
17
|
+
#include Canis
|
|
18
|
+
|
|
19
|
+
begin
|
|
20
|
+
# Initialize curses
|
|
21
|
+
Canis::start_ncurses # this is initializing colors via ColorMap.setup
|
|
22
|
+
path = File.join(ENV["LOGDIR"] || "./" ,"canis14.log")
|
|
23
|
+
file = File.open(path, File::WRONLY|File::TRUNC|File::CREAT)
|
|
24
|
+
$log = Logger.new(path)
|
|
25
|
+
$log.level = Logger::DEBUG
|
|
26
|
+
|
|
27
|
+
@window = Canis::Window.root_window
|
|
28
|
+
|
|
29
|
+
catch(:close) do
|
|
30
|
+
@form = Form.new @window
|
|
31
|
+
title = (" "*30) + "Demo of Progress Bar (q quits, s - slow down) " + Canis::VERSION
|
|
32
|
+
Label.new @form, {:text => title, :row => 1, :col => 0, :color => :green, :bgcolor => :black}
|
|
33
|
+
Label.new @form, {:text => "Press q to quit, s/f make slow or fast", :row => 10, :col => 10}
|
|
34
|
+
Label.new @form, {:text => "Old style and modern style progress bars", :row => 12, :col => 10}
|
|
35
|
+
r = 14; fc = 12;
|
|
36
|
+
|
|
37
|
+
pbar1 = Progress.new @form, {:width => 20, :row => r, :col => fc,
|
|
38
|
+
:name => "pbar1", :style => :old}
|
|
39
|
+
#:bgcolor => :white, :color => 'red', :name => "pbar1", :style => :old}
|
|
40
|
+
pbar = Progress.new @form, {:width => 20, :row => r+2, :col => fc,
|
|
41
|
+
:bgcolor => :white, :color => :red, :name => "pbar"}
|
|
42
|
+
|
|
43
|
+
pbar.visible false
|
|
44
|
+
pb = @form.by_name["pbar"]
|
|
45
|
+
pb.visible true
|
|
46
|
+
len = 1
|
|
47
|
+
ct = (100) * 1.00
|
|
48
|
+
pb.fraction(len/ct)
|
|
49
|
+
pbar1.fraction(len/ct)
|
|
50
|
+
i = ((len/ct)*100).to_i
|
|
51
|
+
i = 100 if i > 100
|
|
52
|
+
pb.text = "completed:#{i}"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@form.repaint
|
|
56
|
+
@window.wrefresh
|
|
57
|
+
Ncurses::Panel.update_panels
|
|
58
|
+
|
|
59
|
+
# the main loop
|
|
60
|
+
|
|
61
|
+
# this is so there's no wait for a key, i want demo to proceed without key press, but
|
|
62
|
+
# respond if there is one
|
|
63
|
+
Ncurses::nodelay(@window.get_window, bf = true)
|
|
64
|
+
|
|
65
|
+
# sleep seconds between refresh of progress
|
|
66
|
+
slp = 0.1
|
|
67
|
+
##while((ch = @window.getchar()) != FFI::NCurses::KEY_F10 )
|
|
68
|
+
#break if ch == ?\C-q.getbyte(0)
|
|
69
|
+
while((ch = @window.getch()) != 27)
|
|
70
|
+
break if ch == "q".ord
|
|
71
|
+
## slow down
|
|
72
|
+
if ch == "s".ord
|
|
73
|
+
slp *= 2
|
|
74
|
+
elsif ch == "f".ord
|
|
75
|
+
## make faster
|
|
76
|
+
slp /= 2.0
|
|
77
|
+
end
|
|
78
|
+
begin
|
|
79
|
+
|
|
80
|
+
sleep(slp)
|
|
81
|
+
len += 1
|
|
82
|
+
if len > 100
|
|
83
|
+
len = 1
|
|
84
|
+
sleep(1.0)
|
|
85
|
+
end
|
|
86
|
+
ct = (100) * 1.00
|
|
87
|
+
pb.fraction(len/ct)
|
|
88
|
+
pbar1.fraction(len/ct)
|
|
89
|
+
i = ((len/ct)*100).to_i
|
|
90
|
+
i = 100 if i > 100
|
|
91
|
+
pb.text = "completed:#{i}"
|
|
92
|
+
|
|
93
|
+
#@form.handle_key(ch)
|
|
94
|
+
@form.repaint
|
|
95
|
+
@window.wrefresh
|
|
96
|
+
Ncurses::Panel.update_panels
|
|
97
|
+
#end
|
|
98
|
+
|
|
99
|
+
rescue => err
|
|
100
|
+
break
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
@window.wrefresh
|
|
104
|
+
end # while loop
|
|
105
|
+
end # catch
|
|
106
|
+
rescue => ex
|
|
107
|
+
ensure
|
|
108
|
+
$log.debug " -==== EXCEPTION =====-"
|
|
109
|
+
$log.debug( ex) if ex
|
|
110
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
|
111
|
+
@window.destroy if !@window.nil?
|
|
112
|
+
Canis::stop_ncurses
|
|
113
|
+
puts ex if ex
|
|
114
|
+
puts(ex.backtrace.join("\n")) if ex
|
|
115
|
+
end
|
|
116
|
+
end
|
data/examples/testree.rb
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
require 'canis'
|
|
2
|
+
require 'canis/core/widgets/tree'
|
|
3
|
+
|
|
4
|
+
if $0 == __FILE__
|
|
5
|
+
$choice = ARGV[0].to_i || 1
|
|
6
|
+
class Tester
|
|
7
|
+
def initialize
|
|
8
|
+
acolor = $reversecolor
|
|
9
|
+
end
|
|
10
|
+
def run
|
|
11
|
+
@window = Canis::Window.root_window
|
|
12
|
+
@form = Form.new @window
|
|
13
|
+
|
|
14
|
+
h = 20; w = 75; t = 3; l = 4
|
|
15
|
+
#$choice = 1
|
|
16
|
+
case $choice
|
|
17
|
+
when 1
|
|
18
|
+
root = TreeNode.new "ROOT"
|
|
19
|
+
subroot = TreeNode.new "subroot"
|
|
20
|
+
leaf1 = TreeNode.new "leaf 1"
|
|
21
|
+
leaf2 = TreeNode.new "leaf 2"
|
|
22
|
+
|
|
23
|
+
model = DefaultTreeModel.new root
|
|
24
|
+
#model.insert_node_into(subroot, root, 0)
|
|
25
|
+
#model.insert_node_into(leaf1, subroot, 0)
|
|
26
|
+
#model.insert_node_into(leaf2, subroot, 1)
|
|
27
|
+
root << subroot
|
|
28
|
+
subroot << leaf1 << leaf2
|
|
29
|
+
leaf1 << "leaf11"
|
|
30
|
+
leaf1 << "leaf12"
|
|
31
|
+
|
|
32
|
+
root.add "blocky", true do
|
|
33
|
+
add "block2"
|
|
34
|
+
add "block3" do
|
|
35
|
+
add "block31"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
Tree.new @form, :data => model, :row =>2, :col=>2, :height => 20, :width => 30
|
|
39
|
+
|
|
40
|
+
when 2
|
|
41
|
+
|
|
42
|
+
# use an array to populate
|
|
43
|
+
# we need to do root_visible = false so you get just a list
|
|
44
|
+
model = %W[ ruby lua jruby smalltalk haskell scheme perl lisp ]
|
|
45
|
+
Tree.new @form, :data => model, :row =>2, :col=>2, :height => 20, :width => 30
|
|
46
|
+
|
|
47
|
+
when 3
|
|
48
|
+
|
|
49
|
+
# use an Has to populate
|
|
50
|
+
#model = { :ruby => %W[ "jruby", "mri", "yarv", "rubinius", "macruby" ], :python => %W[ cpython jython laden-swallow ] }
|
|
51
|
+
model = { :ruby => [ "jruby", {:mri => %W[ 1.8.6 1.8.7]}, {:yarv => %W[1.9.1 1.9.2]}, "rubinius", "macruby" ], :python => %W[ cpython jython pypy ] }
|
|
52
|
+
|
|
53
|
+
Tree.new @form, :data => model, :row =>2, :col=>2, :height => 20, :width => 30
|
|
54
|
+
#when 4
|
|
55
|
+
else
|
|
56
|
+
Tree.new @form, :row =>2, :col=>2, :height => 20, :width => 30 do
|
|
57
|
+
root "root" do
|
|
58
|
+
branch "vim" do
|
|
59
|
+
leaf "vimrc"
|
|
60
|
+
end
|
|
61
|
+
branch "ack" do
|
|
62
|
+
leaf "ackrc"
|
|
63
|
+
leaf "agrc"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
help = "C-q to quit. <ENTER> to expand nodes. j/k to navigate. Pass command-line argument 1,2,3,4 #{$0} "
|
|
72
|
+
Canis::Label.new @form, {:text => help, :row => 1, :col => 2, :color => :cyan}
|
|
73
|
+
@form.repaint
|
|
74
|
+
@window.wrefresh
|
|
75
|
+
Ncurses::Panel.update_panels
|
|
76
|
+
while((ch = @window.getchar()) != ?\C-q.getbyte(0))
|
|
77
|
+
ret = @form.handle_key(ch)
|
|
78
|
+
@window.wrefresh
|
|
79
|
+
if ret == :UNHANDLED
|
|
80
|
+
str = keycode_tos ch
|
|
81
|
+
$log.debug " UNHANDLED #{str} by Vim #{ret} "
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
@window.destroy
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
include Canis
|
|
90
|
+
include Canis::Utils
|
|
91
|
+
# Initialize curses
|
|
92
|
+
begin
|
|
93
|
+
# XXX update with new color and kb
|
|
94
|
+
Canis::start_ncurses # this is initializing colors via ColorMap.setup
|
|
95
|
+
$log = Logger.new("canis14.log")
|
|
96
|
+
$log.level = Logger::DEBUG
|
|
97
|
+
n = Tester.new
|
|
98
|
+
n.run
|
|
99
|
+
rescue => ex
|
|
100
|
+
ensure
|
|
101
|
+
Canis::stop_ncurses
|
|
102
|
+
p ex if ex
|
|
103
|
+
puts(ex.backtrace.join("\n")) if ex
|
|
104
|
+
$log.debug( ex) if ex
|
|
105
|
+
$log.debug(ex.backtrace.join("\n")) if ex
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------- #
|
|
2
|
+
# File: testsplitlayout.rb
|
|
3
|
+
# Description:
|
|
4
|
+
# Author: j kepler http://github.com/mare-imbrium/canis/
|
|
5
|
+
# Date: 2014-05-09 - 20:24
|
|
6
|
+
# License: MIT
|
|
7
|
+
# Last update: 2014-05-10 19:15
|
|
8
|
+
# ----------------------------------------------------------------------------- #
|
|
9
|
+
# testsplitlayout.rb Copyright (C) 2012-2014 j kepler
|
|
10
|
+
|
|
11
|
+
if __FILE__ == $PROGRAM_NAME
|
|
12
|
+
require 'canis/core/util/app'
|
|
13
|
+
require 'canis/core/widgets/listbox'
|
|
14
|
+
require 'canis/core/include/layouts/splitlayout'
|
|
15
|
+
App.new do
|
|
16
|
+
|
|
17
|
+
# if i add form here, it will repaint them first, and have no dimensions
|
|
18
|
+
lb = Listbox.new @form, :list => ["borodin","berlioz","bernstein","balakirev", "elgar"] , :name => "mylist"
|
|
19
|
+
lb1 = Listbox.new @form, :list => ["bach","beethoven","mozart","gorecki", "chopin","wagner","grieg","holst"] , :name => "mylist1"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
alist = %w[ ruby perl python java jruby macruby rubinius rails rack sinatra pylons django cakephp grails]
|
|
23
|
+
str = "Hello, people of Earth.\nI am HAL, a textbox.\nUse arrow keys, j/k/h/l/gg/G/C-a/C-e/C-n/C-p\n"
|
|
24
|
+
str << alist.join("\n")
|
|
25
|
+
tv = TextPad.new @form, :name => "text", :text => str.split("\n")
|
|
26
|
+
lb3 = Listbox.new @form, :list => alist , :name => "mylist3"
|
|
27
|
+
lb2 = Listbox.new @form, :list => `gem list --local`.split("\n") , :name => "mylist2"
|
|
28
|
+
|
|
29
|
+
w = Ncurses.COLS-1
|
|
30
|
+
h = Ncurses.LINES-3
|
|
31
|
+
#layout = StackLayout.new :height => -1, :top_margin => 1, :bottom_margin => 1, :left_margin => 1
|
|
32
|
+
|
|
33
|
+
layout = SplitLayout.new :height => -1, :top_margin => 1, :bottom_margin => 1, :left_margin => 1
|
|
34
|
+
@form.layout_manager = layout
|
|
35
|
+
x,y = layout.vsplit( 0.30, 0.70)
|
|
36
|
+
raise "X" unless x
|
|
37
|
+
raise "Y" unless y
|
|
38
|
+
##x = arr.first
|
|
39
|
+
#y = arr[1]
|
|
40
|
+
$log.debug "XY: #{x} , #{y} "
|
|
41
|
+
x.component = lb
|
|
42
|
+
y1, y2 = y.split( 0.40, 0.60 )
|
|
43
|
+
#y1.component = lb1
|
|
44
|
+
y2.component = lb2
|
|
45
|
+
y11,y12,y13 = y1.vsplit( 0.3, 0.3, 0.4)
|
|
46
|
+
#y11,y12 = y1.vsplit( 0.4, 0.6)
|
|
47
|
+
y11.component = lb1
|
|
48
|
+
y12.component = tv
|
|
49
|
+
y13.component = lb3
|
|
50
|
+
|
|
51
|
+
st = status_line :row => -1
|
|
52
|
+
end # app
|
|
53
|
+
end # if
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------- #
|
|
2
|
+
# File: testsplitlayout.rb
|
|
3
|
+
# Description:
|
|
4
|
+
# Author: j kepler http://github.com/mare-imbrium/canis/
|
|
5
|
+
# Date: 2014-05-09 - 20:24
|
|
6
|
+
# License: MIT
|
|
7
|
+
# Last update: 2014-05-10 20:16
|
|
8
|
+
# ----------------------------------------------------------------------------- #
|
|
9
|
+
# testsplitlayout.rb Copyright (C) 2012-2014 j kepler
|
|
10
|
+
|
|
11
|
+
if __FILE__ == $PROGRAM_NAME
|
|
12
|
+
require 'canis/core/util/app'
|
|
13
|
+
require 'canis/core/widgets/listbox'
|
|
14
|
+
require 'canis/core/include/layouts/splitlayout'
|
|
15
|
+
App.new do
|
|
16
|
+
|
|
17
|
+
# if i add form here, it will repaint them first, and have no dimensions
|
|
18
|
+
lb = Listbox.new @form, :list => ["borodin","berlioz","bernstein","balakirev", "elgar"] , :name => "mylist"
|
|
19
|
+
lb1 = Listbox.new @form, :list => ["bach","beethoven","mozart","gorecki", "chopin","wagner","grieg","holst"] , :name => "mylist1"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
alist = %w[ ruby perl python java jruby macruby rubinius rails rack sinatra pylons django cakephp grails]
|
|
23
|
+
str = "Hello, people of Earth.\nI am HAL, a textbox.\nUse arrow keys, j/k/h/l/gg/G/C-a/C-e/C-n/C-p\n"
|
|
24
|
+
str << alist.join("\n")
|
|
25
|
+
tv = TextPad.new @form, :name => "text", :text => str.split("\n")
|
|
26
|
+
lb3 = Listbox.new @form, :list => alist , :name => "mylist3"
|
|
27
|
+
lb2 = Listbox.new @form, :list => `gem list --local`.split("\n") , :name => "mylist2"
|
|
28
|
+
|
|
29
|
+
w = Ncurses.COLS-1
|
|
30
|
+
h = Ncurses.LINES-3
|
|
31
|
+
#layout = StackLayout.new :height => -1, :top_margin => 1, :bottom_margin => 1, :left_margin => 1
|
|
32
|
+
|
|
33
|
+
layout = SplitLayout.new :height => -1, :top_margin => 1, :bottom_margin => 1, :left_margin => 1
|
|
34
|
+
@form.layout_manager = layout
|
|
35
|
+
layout.vsplit(0.2, 0.8) do |x,y|
|
|
36
|
+
x.component = lb
|
|
37
|
+
y.split(0.4, 0.6) do |a,b|
|
|
38
|
+
b.component = lb2
|
|
39
|
+
a.vsplit( 0.3, 0.3, 0.4) do | p,q,r |
|
|
40
|
+
p << lb1
|
|
41
|
+
q << tv
|
|
42
|
+
r << lb3
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
st = status_line :row => -1
|
|
48
|
+
end # app
|
|
49
|
+
end # if
|