rbhex-core 1.0.0
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 +20 -0
- data/CHANGELOG +2000 -0
- data/LICENSE +56 -0
- data/README.md +44 -0
- data/examples/abasiclist.rb +179 -0
- data/examples/alpmenu.rb +50 -0
- data/examples/app.sample +19 -0
- data/examples/atree.rb +100 -0
- data/examples/bline.rb +136 -0
- data/examples/common/file.rb +45 -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 +60 -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 +10 -0
- data/examples/data/todo.txt.bak +10 -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 +502 -0
- data/examples/dirtree.rb +94 -0
- data/examples/newtabbedwindow.rb +100 -0
- data/examples/newtesttabp.rb +92 -0
- data/examples/tabular.rb +146 -0
- data/examples/tasks.rb +178 -0
- data/examples/term2.rb +84 -0
- data/examples/testbuttons.rb +296 -0
- data/examples/testcombo.rb +102 -0
- data/examples/testfields.rb +195 -0
- data/examples/testkeypress.rb +72 -0
- data/examples/testlistbox.rb +170 -0
- data/examples/testmessagebox.rb +140 -0
- data/examples/testprogress.rb +116 -0
- data/examples/testree.rb +106 -0
- data/examples/testwsshortcuts.rb +66 -0
- data/examples/testwsshortcuts2.rb +128 -0
- data/lib/rbhex.rb +6 -0
- data/lib/rbhex/core/docs/index.txt +73 -0
- data/lib/rbhex/core/include/action.rb +80 -0
- data/lib/rbhex/core/include/actionmanager.rb +49 -0
- data/lib/rbhex/core/include/appmethods.rb +214 -0
- data/lib/rbhex/core/include/bordertitle.rb +48 -0
- data/lib/rbhex/core/include/chunk.rb +203 -0
- data/lib/rbhex/core/include/io.rb +553 -0
- data/lib/rbhex/core/include/listbindings.rb +74 -0
- data/lib/rbhex/core/include/listcellrenderer.rb +140 -0
- data/lib/rbhex/core/include/listeditable.rb +317 -0
- data/lib/rbhex/core/include/listscrollable.rb +663 -0
- data/lib/rbhex/core/include/listselectable.rb +271 -0
- data/lib/rbhex/core/include/multibuffer.rb +83 -0
- data/lib/rbhex/core/include/orderedhash.rb +77 -0
- data/lib/rbhex/core/include/ractionevent.rb +73 -0
- data/lib/rbhex/core/include/rchangeevent.rb +27 -0
- data/lib/rbhex/core/include/rhistory.rb +95 -0
- data/lib/rbhex/core/include/rinputdataevent.rb +47 -0
- data/lib/rbhex/core/include/vieditable.rb +172 -0
- data/lib/rbhex/core/include/widgetmenu.rb +66 -0
- data/lib/rbhex/core/system/colormap.rb +165 -0
- data/lib/rbhex/core/system/keyboard.rb +150 -0
- data/lib/rbhex/core/system/keydefs.rb +30 -0
- data/lib/rbhex/core/system/ncurses.rb +236 -0
- data/lib/rbhex/core/system/panel.rb +162 -0
- data/lib/rbhex/core/system/window.rb +913 -0
- data/lib/rbhex/core/util/ansiparser.rb +119 -0
- data/lib/rbhex/core/util/app.rb +1228 -0
- data/lib/rbhex/core/util/basestack.rb +410 -0
- data/lib/rbhex/core/util/bottomline.rb +1859 -0
- data/lib/rbhex/core/util/colorparser.rb +77 -0
- data/lib/rbhex/core/util/focusmanager.rb +31 -0
- data/lib/rbhex/core/util/padreader.rb +192 -0
- data/lib/rbhex/core/util/rcommandwindow.rb +604 -0
- data/lib/rbhex/core/util/rdialogs.rb +574 -0
- data/lib/rbhex/core/util/viewer.rb +149 -0
- data/lib/rbhex/core/util/widgetshortcuts.rb +506 -0
- data/lib/rbhex/core/version.rb +5 -0
- data/lib/rbhex/core/widgets/applicationheader.rb +103 -0
- data/lib/rbhex/core/widgets/box.rb +58 -0
- data/lib/rbhex/core/widgets/divider.rb +310 -0
- data/lib/rbhex/core/widgets/keylabelprinter.rb +194 -0
- data/lib/rbhex/core/widgets/rcombo.rb +253 -0
- data/lib/rbhex/core/widgets/rcontainer.rb +415 -0
- data/lib/rbhex/core/widgets/rlink.rb +30 -0
- data/lib/rbhex/core/widgets/rlist.rb +696 -0
- data/lib/rbhex/core/widgets/rmenu.rb +958 -0
- data/lib/rbhex/core/widgets/rmenulink.rb +22 -0
- data/lib/rbhex/core/widgets/rmessagebox.rb +387 -0
- data/lib/rbhex/core/widgets/rprogress.rb +118 -0
- data/lib/rbhex/core/widgets/rtabbedpane.rb +634 -0
- data/lib/rbhex/core/widgets/rtabbedwindow.rb +70 -0
- data/lib/rbhex/core/widgets/rtextarea.rb +960 -0
- data/lib/rbhex/core/widgets/rtextview.rb +739 -0
- data/lib/rbhex/core/widgets/rtree.rb +768 -0
- data/lib/rbhex/core/widgets/rwidget.rb +3277 -0
- data/lib/rbhex/core/widgets/scrollbar.rb +143 -0
- data/lib/rbhex/core/widgets/statusline.rb +113 -0
- data/lib/rbhex/core/widgets/tabular.rb +264 -0
- data/lib/rbhex/core/widgets/tabularwidget.rb +1142 -0
- data/lib/rbhex/core/widgets/textpad.rb +995 -0
- data/lib/rbhex/core/widgets/tree/treecellrenderer.rb +150 -0
- data/lib/rbhex/core/widgets/tree/treemodel.rb +428 -0
- data/rbhex-core.gemspec +32 -0
- metadata +172 -0
data/LICENSE
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
rbhex is a continuation of rbcurse, (c) rkumar, 2008-2013.
|
|
2
|
+
You may redistribute and/or modify this software under either the terms of the
|
|
3
|
+
2-clause BSDL or the conditions below:
|
|
4
|
+
|
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
|
6
|
+
software without restriction, provided that you duplicate all of the
|
|
7
|
+
original copyright notices and associated disclaimers.
|
|
8
|
+
|
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
|
10
|
+
you do at least ONE of the following:
|
|
11
|
+
|
|
12
|
+
a) place your modifications in the Public Domain or otherwise
|
|
13
|
+
make them Freely Available, such as by posting said
|
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
|
15
|
+
the author to include your modifications in the software.
|
|
16
|
+
|
|
17
|
+
b) use the modified software only within your corporation or
|
|
18
|
+
organization.
|
|
19
|
+
|
|
20
|
+
c) give non-standard binaries non-standard names, with
|
|
21
|
+
instructions on where to get the original software distribution.
|
|
22
|
+
|
|
23
|
+
d) make other distribution arrangements with the author.
|
|
24
|
+
|
|
25
|
+
3. You may distribute the software in object code or binary form,
|
|
26
|
+
provided that you do at least ONE of the following:
|
|
27
|
+
|
|
28
|
+
a) distribute the binaries and library files of the software,
|
|
29
|
+
together with instructions (in the manual page or equivalent)
|
|
30
|
+
on where to get the original distribution.
|
|
31
|
+
|
|
32
|
+
b) accompany the distribution with the machine-readable source of
|
|
33
|
+
the software.
|
|
34
|
+
|
|
35
|
+
c) give non-standard binaries non-standard names, with
|
|
36
|
+
instructions on where to get the original software distribution.
|
|
37
|
+
|
|
38
|
+
d) make other distribution arrangements with the author.
|
|
39
|
+
|
|
40
|
+
4. You may modify and include the part of the software into any other
|
|
41
|
+
software (possibly commercial). But some files in the distribution
|
|
42
|
+
are not written by the author, so that they are not under these terms.
|
|
43
|
+
|
|
44
|
+
For the list of those files and their copying conditions, see the
|
|
45
|
+
file LEGAL.
|
|
46
|
+
|
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
|
48
|
+
output from the software do not automatically fall under the
|
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
|
51
|
+
software.
|
|
52
|
+
|
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
56
|
+
PURPOSE.
|
data/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# rbhex-core
|
|
2
|
+
|
|
3
|
+
Contains core widgets and infrastructure of rbhex ncurses toolkit. rbhex helps to easily build
|
|
4
|
+
ncurses applications for text terminals.
|
|
5
|
+
|
|
6
|
+
rbhex-core contains basic widgets for constructing command line applications with ncurses. These include:
|
|
7
|
+
|
|
8
|
+
* field
|
|
9
|
+
|
|
10
|
+
* buttons - checkbox, radio, toggle
|
|
11
|
+
|
|
12
|
+
* list
|
|
13
|
+
|
|
14
|
+
* textview
|
|
15
|
+
|
|
16
|
+
* dialogs and popup
|
|
17
|
+
|
|
18
|
+
* table
|
|
19
|
+
|
|
20
|
+
* menu
|
|
21
|
+
|
|
22
|
+
* tabbedpane
|
|
23
|
+
|
|
24
|
+
* tree
|
|
25
|
+
|
|
26
|
+
* application header
|
|
27
|
+
|
|
28
|
+
* status line
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
`gem install rbhex-core`
|
|
33
|
+
|
|
34
|
+
## Documentation
|
|
35
|
+
|
|
36
|
+
In short, there isn't any - nor are there any plans to create any. The `/examples` directory
|
|
37
|
+
contains many examples and should provide a nice start for you. Otherwise, the [tutorial for
|
|
38
|
+
rbcurse](https://github.com/rkumar/rbcurse-tutorial) is still mostly valid for the majority of this
|
|
39
|
+
codebase.
|
|
40
|
+
|
|
41
|
+
## rbcurse
|
|
42
|
+
|
|
43
|
+
This project is a continuation/fork of [rkumar](https://github.com/rkumar)'s [rbcurse](https://github.com/rkumar/rbcurse-core).
|
|
44
|
+
rbcurse is no longer maintained as of March 2014.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
require 'rbhex/core/util/app'
|
|
2
|
+
require 'rbhex/core/include/appmethods'
|
|
3
|
+
require 'rbhex/core/widgets/rlist'
|
|
4
|
+
|
|
5
|
+
def my_help_text
|
|
6
|
+
<<-eos
|
|
7
|
+
abasiclist.rb
|
|
8
|
+
=========================================================================
|
|
9
|
+
Basic Usage
|
|
10
|
+
|
|
11
|
+
This simple example shows 2 lists inside a "flow". Each takes 50 percent
|
|
12
|
+
of the screen's width.
|
|
13
|
+
|
|
14
|
+
If you have brew installed, you can refresh the list to show actual
|
|
15
|
+
brew packages on your system, using ':r'. Then you can view info, edit,
|
|
16
|
+
or see the man page for that program.
|
|
17
|
+
|
|
18
|
+
In the second list, you can refresh the list with your gems using ":r".
|
|
19
|
+
Place cursor on any gem, and execute any of the ":" commands to see the
|
|
20
|
+
output. "edit" shells out to your EDITOR.
|
|
21
|
+
|
|
22
|
+
You can try multiple selection using <space> and <ctrl-space> for range
|
|
23
|
+
select. Check the general help screen for more _list_ commands. The selections
|
|
24
|
+
are not mapped to any command.
|
|
25
|
+
|
|
26
|
+
=========================================================================
|
|
27
|
+
:n or Alt-n for next buffer. 'q' to quit.
|
|
28
|
+
|
|
29
|
+
eos
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# just a simple test to ensure that rbasiclistbox is running inside a container.
|
|
35
|
+
App.new do
|
|
36
|
+
def disp_menu
|
|
37
|
+
# ideally this shuld get action_manager and add_action so these are added to widgets actions
|
|
38
|
+
f = @form.get_current_field
|
|
39
|
+
|
|
40
|
+
if f.name == "lb1"
|
|
41
|
+
menu = PromptMenu.new self do
|
|
42
|
+
item :r, :refresh
|
|
43
|
+
item :i, :info
|
|
44
|
+
item :m, :brew_man
|
|
45
|
+
item :e, :edit
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
menu = PromptMenu.new self do
|
|
49
|
+
item :r, :refresh
|
|
50
|
+
item :e, :edit
|
|
51
|
+
item :d, :dependency
|
|
52
|
+
item :s, :specification
|
|
53
|
+
item :w, :which
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
menu.display_new :title => "Menu"
|
|
57
|
+
end
|
|
58
|
+
# fill list with actual gems available on your system
|
|
59
|
+
def refresh
|
|
60
|
+
f = @form.get_current_field
|
|
61
|
+
if f.name == "lb2"
|
|
62
|
+
l = %x[gem list --local].split("\n")
|
|
63
|
+
w = @form.by_name['lb2']
|
|
64
|
+
w.list l
|
|
65
|
+
else
|
|
66
|
+
l = %x[brew list].split("\n")
|
|
67
|
+
w = @form.by_name['lb1']
|
|
68
|
+
w.list l
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
def specification
|
|
72
|
+
w = @form.by_name['lb2']
|
|
73
|
+
name = w.text.split()[0]
|
|
74
|
+
textdialog(%x[ gem specification #{name} ].split("\n") , :title => 'Specification')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# execute just man for the brew package
|
|
78
|
+
def brew_man
|
|
79
|
+
w = @form.by_name['lb1']
|
|
80
|
+
name = w.text.split()[0]
|
|
81
|
+
shell_out "man #{name}"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# using gem which to get path, and then shelling out to EDITOR
|
|
85
|
+
def edit
|
|
86
|
+
f = @form.get_current_field
|
|
87
|
+
if f.name == "lb2"
|
|
88
|
+
name = f.text.split()[0]
|
|
89
|
+
shell_out "gem edit #{name}"
|
|
90
|
+
else
|
|
91
|
+
name = f.text.split()[0]
|
|
92
|
+
shell_out "brew edit #{name}"
|
|
93
|
+
end
|
|
94
|
+
return
|
|
95
|
+
|
|
96
|
+
# this is our own home-cooked version which opens the actual file in your editor
|
|
97
|
+
res = %x[ gem which #{name} ].split("\n")
|
|
98
|
+
res = res[0]
|
|
99
|
+
if File.exists? res
|
|
100
|
+
require './common/file.rb'
|
|
101
|
+
file_edit res
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
#
|
|
105
|
+
# general purpose command to catch miscellaneous actions that can be
|
|
106
|
+
# executed in the same way. Or even take complex command lines
|
|
107
|
+
# such as what vim has.
|
|
108
|
+
def execute_this *cmd
|
|
109
|
+
f = @form.get_current_field
|
|
110
|
+
if f.name == "lb2"
|
|
111
|
+
m = "gem"
|
|
112
|
+
else
|
|
113
|
+
m = "brew"
|
|
114
|
+
end
|
|
115
|
+
w = f
|
|
116
|
+
name = w.text.split()[0]
|
|
117
|
+
cmd = cmd[0].to_s
|
|
118
|
+
res = %x[ #{m} #{cmd} #{name}].split("\n")
|
|
119
|
+
res ||= "Error in command [#{cmd}] [#{name}] "
|
|
120
|
+
textdialog( res, :title => cmd ) if res
|
|
121
|
+
end
|
|
122
|
+
# handle resizing, sadly I am not sure flow and stack can do a resize, i am sure the xperimental one can.
|
|
123
|
+
def resize
|
|
124
|
+
lb1 = @form.by_name["lb1"]
|
|
125
|
+
lb2 = @form.by_name["lb2"]
|
|
126
|
+
maxc = Ncurses.COLS
|
|
127
|
+
maxr = Ncurses.LINES
|
|
128
|
+
lb1.height = maxr-2
|
|
129
|
+
lb2.height = maxr-2
|
|
130
|
+
lb1.width = ((lb1.width_pc * maxc) / 100).floor
|
|
131
|
+
lb2.width = ((lb2.width_pc * maxc) / 100).floor
|
|
132
|
+
lb2.col = lb1.col + lb1.width
|
|
133
|
+
lab = @form.by_name["lab"]
|
|
134
|
+
lab.row = maxr-1
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
colors = Ncurses.COLORS
|
|
138
|
+
back = :blue
|
|
139
|
+
back = 234 if colors >= 256
|
|
140
|
+
header = app_header "rbhex #{Rbhex::Core::VERSION}", :text_center => "Basic List Demo", :text_right =>"New Improved!", :color => :white, :bgcolor => back #, :attr => :bold
|
|
141
|
+
message "Press F10 to escape from here"
|
|
142
|
+
#install_help_text my_help_text
|
|
143
|
+
@form.help_manager.help_text = my_help_text
|
|
144
|
+
|
|
145
|
+
@form.define_prefix_command :csmap, :scope => self
|
|
146
|
+
#@form.define_key(:csmap, "r", 'refresh') { refresh }
|
|
147
|
+
@form.define_key(:csmap, "r", 'refresh', :refresh )
|
|
148
|
+
@form.define_key(:csmap, "s", 'specification') { specification }
|
|
149
|
+
@form.bind_key ?\C-s, :csmap
|
|
150
|
+
#pm = PrefixCommand.new :csmap, self do |p|
|
|
151
|
+
#p.key("r", 'refresh', :refresh )
|
|
152
|
+
#p.key("s", 'specification'){ specification }
|
|
153
|
+
#end
|
|
154
|
+
#@form.bind_key(?\C-x){ pm.call }
|
|
155
|
+
|
|
156
|
+
alist = File.open(File.expand_path("../data/brew.txt", __FILE__), 'r').readlines
|
|
157
|
+
list2 = File.open(File.expand_path("../data/gemlist.txt", __FILE__), 'r').readlines
|
|
158
|
+
lb = nil
|
|
159
|
+
|
|
160
|
+
flow :margin_top => 1, :height => FFI::NCurses.LINES-2 do
|
|
161
|
+
lb = listbox :list => alist, :suppress_borders => false, :title => "[ brew packages ]",
|
|
162
|
+
:left_margin => 1, :width_pc => 50, :name => 'lb1'
|
|
163
|
+
lb.show_selector = false
|
|
164
|
+
|
|
165
|
+
lb2 = listbox :list => list2, :justify => :left, :title => "[ gems ]", :suppress_borders => false,
|
|
166
|
+
:left_margin => 1, :width_pc => 50, :name => 'lb2'
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
label({:text => "F1 Help, F10 Quit. : for menu. Press F4 and F5 to test popup, space or enter to select", :row => Ncurses.LINES-1, :col => 0, :name => 'lab'})
|
|
171
|
+
|
|
172
|
+
@form.bind(:RESIZE) { resize() }
|
|
173
|
+
@form.bind_key(FFI::NCurses::KEY_F4) { row = lb.current_index+lb.row; col=lb.col+lb.current_value.length+1; ret = popuplist(%w[ andy berlioz strauss tchaiko matz beethoven], :row => row, :col => col, :title => "Names", :bgcolor => :blue, :color => :white) ; alert "got #{ret} "}
|
|
174
|
+
|
|
175
|
+
@form.bind_key(FFI::NCurses::KEY_F5) { list = %x[ls].split("\n");ret = popuplist(list, :title => "Files"); alert "Got #{ret} #{list[ret]} " }
|
|
176
|
+
|
|
177
|
+
@form.bind_key(?:) { disp_menu;
|
|
178
|
+
}
|
|
179
|
+
end # app
|
data/examples/alpmenu.rb
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'rbhex/core/util/app'
|
|
2
|
+
|
|
3
|
+
def load_relative(path)
|
|
4
|
+
load File.expand_path("../#{path}", __FILE__)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
App.new do
|
|
8
|
+
#title "Demo of Menu - rbhex"
|
|
9
|
+
#subtitle "Hit F1 to quit, F2 for menubar toggle"
|
|
10
|
+
header = app_header "rbhex #{Rbhex::Core::VERSION}", :text_center => "Alpine Menu Demo", :text_right =>""
|
|
11
|
+
|
|
12
|
+
stack :margin_top => 10, :margin_left => 15 do
|
|
13
|
+
#w = "Messages".length + 1
|
|
14
|
+
w = 60
|
|
15
|
+
menulink :text => "&View Dirs", :width => w, :description => "View Dirs in tree" do |s, *stuff|
|
|
16
|
+
message "Pressed #{s.text} "
|
|
17
|
+
load_relative './dirtree.rb'
|
|
18
|
+
#require './viewtodo'; todo = ViewTodo::TodoApp.new; todo.run
|
|
19
|
+
end
|
|
20
|
+
blank
|
|
21
|
+
menulink :text => "&Tabular", :width => w, :description => "Tabula Rasa" do |s, *stuff|
|
|
22
|
+
message "Pressed #{s.text} "
|
|
23
|
+
load_relative './tabular.rb'
|
|
24
|
+
#require './testtodo'; todo = TestTodo::TodoApp.new; todo.run
|
|
25
|
+
end
|
|
26
|
+
blank
|
|
27
|
+
menulink :text => "&Messages", :width => w, :description => "View Tasks" do |s, *stuff|
|
|
28
|
+
message "Pressed #{s.text} "
|
|
29
|
+
load_relative './tasks.rb'
|
|
30
|
+
end
|
|
31
|
+
blank
|
|
32
|
+
menulink :text => "&Database", :width => w, :description => "Database Demo" do |s, *stuff|
|
|
33
|
+
message "Pressed #{s.getvalue} "
|
|
34
|
+
load_relative './dbdemo.rb'
|
|
35
|
+
end
|
|
36
|
+
blank
|
|
37
|
+
# somehow ? in mnemonic won't work
|
|
38
|
+
menulink :text => "&Setup", :width => w, :description => "Configure Alpine options" do |s, *stuff|
|
|
39
|
+
#message "Pressed #{s.text} "
|
|
40
|
+
alert "Not done!"
|
|
41
|
+
end
|
|
42
|
+
blank
|
|
43
|
+
menulink :text => "&Quit", :width => w, :description => "Quit this application" do |s, *stuff|
|
|
44
|
+
quit
|
|
45
|
+
end
|
|
46
|
+
@form.bind(:ENTER) do |w|
|
|
47
|
+
header.text_right = w.text
|
|
48
|
+
end
|
|
49
|
+
end # stack
|
|
50
|
+
end # app
|
data/examples/app.sample
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'rbhex/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", :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
|
data/examples/atree.rb
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'rbhex/core/util/app'
|
|
2
|
+
|
|
3
|
+
App.new do
|
|
4
|
+
var = Variable.new
|
|
5
|
+
header = app_header "rbhex #{Rbhex::Core::VERSION}", :text_center => "Tree Demo", :text_right =>"New Improved!", :color => :black, :bgcolor => :white, :attr => :bold
|
|
6
|
+
message "Press Enter to expand/collapse"
|
|
7
|
+
|
|
8
|
+
@form.bind_key(FFI::NCurses::KEY_F3) {
|
|
9
|
+
require 'rbhex/core/util/viewer'
|
|
10
|
+
RubyCurses::Viewer.view("rbc13.log", :close_key => KEY_ENTER, :title => "<Enter> to close")
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
ww = FFI::NCurses.COLS-0
|
|
14
|
+
flow :width => ww , :margin_top => 1, :height => FFI::NCurses.LINES-2 do
|
|
15
|
+
stack :margin_top => 0, :width_pc => "30" do
|
|
16
|
+
tm = nil
|
|
17
|
+
atree = tree :height => 10, :title => '[ ruby way ]' do
|
|
18
|
+
root "root" do
|
|
19
|
+
branch "hello" do
|
|
20
|
+
leaf "ruby"
|
|
21
|
+
end
|
|
22
|
+
branch "goodbye" do
|
|
23
|
+
leaf "java"
|
|
24
|
+
leaf "verbosity"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
found=atree.get_node_for_path "goodbye"
|
|
29
|
+
atree.set_expanded_state(atree.root, true)
|
|
30
|
+
atree.set_expanded_state(found,true)
|
|
31
|
+
|
|
32
|
+
# using a Hash
|
|
33
|
+
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 laden-swallow ] }
|
|
34
|
+
tree :data => model, :title => "[ Hash ]"
|
|
35
|
+
|
|
36
|
+
end # stack
|
|
37
|
+
stack :margin_top => 0, :width_pc => "30" do
|
|
38
|
+
|
|
39
|
+
# using an Array, these would be expanded on selection, using an event
|
|
40
|
+
tree :data => Dir.glob("*"), :title=> "[ Array ]" do
|
|
41
|
+
command do |node|
|
|
42
|
+
# insert dir entries unless done so already
|
|
43
|
+
if node.children && !node.children.empty?
|
|
44
|
+
else
|
|
45
|
+
f = node.user_object
|
|
46
|
+
if File.directory? f
|
|
47
|
+
l = Dir.glob(f + "/*")
|
|
48
|
+
node.add(l) if l
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
bind :ENTER_ROW do |t|
|
|
53
|
+
var.value = t.text.user_object
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# long way ISO 9001 certifed, SEI CMM 5 compliant
|
|
58
|
+
#
|
|
59
|
+
root = TreeNode.new "ROOT"
|
|
60
|
+
subroot = TreeNode.new "subroot"
|
|
61
|
+
leaf1 = TreeNode.new "leaf 1"
|
|
62
|
+
leaf2 = TreeNode.new "leaf 2"
|
|
63
|
+
model = DefaultTreeModel.new root
|
|
64
|
+
#model.insert_node_into(subroot, root, 0) # BLEAH JAVA !!
|
|
65
|
+
|
|
66
|
+
# slightly better, since we return self in ruby
|
|
67
|
+
root << subroot
|
|
68
|
+
subroot << leaf1 << leaf2
|
|
69
|
+
leaf1 << "leaf11"
|
|
70
|
+
leaf1 << "leaf12"
|
|
71
|
+
|
|
72
|
+
# more rubyish way
|
|
73
|
+
root.add "blocky", true do
|
|
74
|
+
add "block2"
|
|
75
|
+
add "block3" do
|
|
76
|
+
add "block31"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
tree :data => model, :title => "[ legacy way ]"
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
#stack :margin_top => 2 do
|
|
84
|
+
stack :margin_top => 0, :width_pc => "40", :height => :expand do
|
|
85
|
+
t = textview :suppress_borders => true, :height_pc => 100
|
|
86
|
+
var.command do |filename|
|
|
87
|
+
filename = filename.value
|
|
88
|
+
if File.directory? filename
|
|
89
|
+
lines = Dir.entries(filename )
|
|
90
|
+
t.set_content lines
|
|
91
|
+
elsif File.exist? filename
|
|
92
|
+
lines = File.open(filename,'r').readlines
|
|
93
|
+
t.set_content lines
|
|
94
|
+
else
|
|
95
|
+
alert " #{filename} does not appear to be a file "
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end # flow
|
|
100
|
+
end # app
|