• Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

AltME groups: search

Help · search scripts · search articles · search mailing list

results summary

worldhits
r4wp5907
r3wp58701
total:64608

results window for this page: [start: 44401 end: 44500]

world-name: r3wp

Group: !RebGUI ... A lightweight alternative to VID [web-public]
btiffin:
24-Sep-2007
Code at http://peoplecards.ca/rebol/ld2-rebgui.rUse it just like 
a tab-panel.  I use the text that would go  on a tab for a comment. 
 Use show widget/select-tab n  to switch between overlays.  The code 
 conditionally loads rebgui and the widget; so if you are modifiying 
anything, you'll have to unset ctx-rebgui for each test load.
Graham:
24-Sep-2007
I'll give it a go .. thanks.
Graham:
24-Sep-2007
Brian, the advantage for a true tab panel style is that the currently 
selected panel keeps the button highlighted.
Graham:
24-Sep-2007
So, this is more of a button panel style :)
btiffin:
25-Sep-2007
I use it to emulate the overlays in the Desktop Library, but I thought 
you might use it like 

overlay data [ "1" [tab-panel  data [ ]] "2" [tab-panel data [ ]] 
 with a couple of arrows, or buttons :) or menu options to determine 
what bank of tabs are shown.  As with many things, I may not be getting 
what you are really looking for, but I've grown fond of having overlays 
in RebGUI.
Ashley:
25-Sep-2007
Build#97 uploaded with a 'no-tabs option for tab-panel. Works exactly 
as per Brian's overlay widget as described above.
Ashley:
25-Sep-2007
re: dbl-click problem. I can't reproduce this one. I assume this 
occurs on Windows? What is the dbl-click speed set to? (Control Panel|Mouse 
Properties|Buttons) Is it a mouse or pen (i.e. TabletPC) that generates 
the dbl-click in question?
btiffin:
25-Sep-2007
Re: build 97...Very nice.  I get to dump a hack.  Thanks Ashley.
Graham:
25-Sep-2007
Yes, windows ... and a mouse.  Speed is set to just to the right 
of middle.
Graham:
26-Sep-2007
ok, I'll give that a go
Graham:
30-Sep-2007
How does one reset a radio-group to it's unselected state?  I tried 
rg/init, and rg/select 0 ( which crashes )
Ashley:
30-Sep-2007
No, the value of face/picked contains the current selection and is 
set by clicking a radio button or using the select-item function 
which simulates a click. By default it is not possible to simulate 
a null click.
Graham:
6-Oct-2007
Do we need a 'set-action function that triggers an action associated 
with a widget?
Ashley:
6-Oct-2007
That's not a trivial thing to do with the current design ... and 
then add the complexity of action types (single, double or alt-clicks; 
combined with various on-* triggers ... it gets messy very quickly).
Ashley:
6-Oct-2007
It should just work, I'll take a look at it later today.
Graham:
6-Oct-2007
table/set-row does a trigger on the action
Ashley:
6-Oct-2007
The action in that case is a by-product of the primary purpose ... 
select a row. select-item (radio-group) does tha same. I can't recall 
whether there's a select-state for check though.
Ashley:
6-Oct-2007
Depends, you can call action functions directly, as in:

	s: button "Save" [...]
	button "Do A then save" [... s/action/on-click s]
	button "Do B then save" [... s/action/on-click s]
Graham:
7-Oct-2007
rebol []

do %rebgui.r

pu: does [ display/parent "" [

 table 20x20 options [ multi "item" left .9 ] data [ "a" "b" "c" ] 
 return
	button "close" [ unview/only face/parent-face ] 
]]

display "test" [
	text "Try multi selecting with control" return
	button "test" [ pu ]
]

do-events
Graham:
8-Oct-2007
Is there a way to program a drop/edit-list to drop the list without 
having to click on it?
Ashley:
11-Oct-2007
Hmm, I'm sure it never used to do that ... I think a bug has been 
introduced along the way. Need to fix that one.
Graham:
11-Oct-2007
Is there a way to tell a table to sort on a particular column?
Ashley:
11-Oct-2007
Sure.

display "" [

 t: table 60x40 #HW options ["ID" right .3 "Number" left .4 "Char" 
 center .3] data [
		1 "One"		a
		2 "Two"		b
		3 "Three"	c
		4 "Four"	d
		5 "Five"	e
		6 "Six"		f
		7 "Seven"	g
		8 "Eight"	h
		9 "Nine"	i
		10 "Ten"	j
	]
	button "ID" [t/pane/2/feel/engage t/pane/2 'down none]
	button "Number" [t/pane/4/feel/engage t/pane/4 'down none]
]

Not pretty, but it works.
Ashley:
11-Oct-2007
Build#101 uploaded with fix to caret problem. All widgets defined 
in behaviors/caret now focus on event/offset and only default to 
tail if focus change was not caused by a mouse click (i.e. tab or 
a manual set-focus).
Graham:
18-Oct-2007
Can area widgets take a background image?
Louis:
22-Oct-2007
In the following script I would like to be able to click on a row 
of the table to populate the data entry fields, so that I can edit 
the data for the record displayed in that row. How do I do that? 
 

rebol []
do %sqlite.r
do %rebgui.r
unless value? 'ctx-rebgui [

    either exists? %rebgui-ctx.r [do %rebgui-ctx.r] [do %rebgui.r]
]
set-colors
tab-size: 120x55

fonts: reduce [font-sans-serif font-fixed font-serif "Courier New"]
if not exists? %id.txt [write %id.txt 1]
either not exists? %indodex.db [
    CONNECT/create %indodex.db

    SQL "create table base (ID, Title, Nama, Alamat, Kota, Propinsi, 
    Telefon, Handfon, Fax, Email, URL, Tgl_Nikah, Nota)"

    SQL "create table birthdays (ID, Nama, Jenis, Hubungan, Tgl_Lahir, 
    Agama, Nota)"
][
    CONNECT/flat %indodex.db
]

do show-cc: make function! [] [
set-colors
(i: to-integer read %id.txt)
label-width: 19
f-width: 59
display "IndoDex Ver. 1.0.1" compose/only [
            button-size 16x8
            margin 1x1
            space 1x1
            ;image %roladex.jpg 
            ;return
            label 7 "ID:" id: text (to-string i) 7
            pad 17
            ;label 13 "Nama:" 

            title: drop-list 30 #W "Pak" data ["Pak" "Ibu" "Sdr." "Sdri." "Drs." 
            "Dr." "Tuan" "Nyonya" "Nona" "Pdt."] 17x5
            nama: field f-width
            label label-width "Telefon:" 
            telefon: field f-width
            label label-width "Handfon:" 
            handfon: field f-width
            return
            pad 31
            label label-width "Fax:" 
            fax: fax: field f-width
            label label-width "E-Mail:" 
            email: field f-width
            label label-width "URL:" 
            url: field f-width
            return
            pad 31
            label label-width "Alamat:" 
            alamat: field f-width
            label label-width "Kota:"
            kota: field f-width
            label label-width "Propinsi:"
            propinsi: field f-width
            return
            pad 31
            label label-width "TglNikah:" 
            tgl_nikah: field f-width
            label label-width "Nota:" 
            nota: field 139
            return
            return

            t: table options ["ID" left .03 "Title" left .04 "Nama" left .2 "Telefon" 
            left .16 "Handfon" left .14 "Fax" left .14 "E-mail" left .15 "URL" 
            left .15] data (sql "select id, title, nama, telefon, handfon, fax, 
            email, url from base") 270x150 
            return
            button "Add" [
                either all [nama/text <> "" nama/text <> none][

                    SQL reduce ["insert into base values (?, ?, ?, ?, ?, ?, ?, ?, ?, 
                    ?, ?, ?, ?)" id/text title/text nama/text alamat/text kota/text propinsi/text 
                    telefon/text handfon/text fax/text email/text URL/text tgl_nikah/text 
                    nota/text]

                    insert t/data SQL "select id title nama alamat kota propinsi telefon 
                    handfon fax email URL tgl_nikah nota from base"

                    ;a: sql/flat "select id/text title/text nama/text alamat/text kota/text 
                    propinsi/text telefon/text handfon/text fax/text email/text URL/text 
                    tgl_nikah/text nota/text from base"
                    ;sql reduce [insert table/data a]
                    id/text: form i: i + 1
                    save %id.txt i
                    clear-text nama
                    clear-text alamat
                    clear-text kota
                    clear-text propinsi
                    clear-text telefon
                    clear-text handfon
                    clear-text fax
                    clear-text email
                    clear-text url
                    clear-text tgl_nikah
                    clear-text nota
                    ;show id
                    t/redraw
                    return
                ][
                    alert {Cannot save if "Nama" field is empty.}
                ]
            ]
            button "Update" []
            button "GUI Info" [

                print [id/text " " title/text " " nama/text " " alamat/text newline]
            ]
            button "DB Info" [
                print [TABLES newline]
                SQLite/col-info?: true
                newline
                print [SQL "select * from base" newline]
                print [SQLite/columns newline]
                print [ROWS "base" newline]
            ]
            button "Halt" [
                halt
            ]
            button "Quit" [
                quit
            ]
]
]
do-events
Graham:
25-Oct-2007
I'm putting in some background text as an image as a prompt to users, 
but it would be nice to clear the background image as soon as the 
user click types anything like those search fields in browsers
Graham:
25-Oct-2007
I'm sure there's a native rebgui way of doing this rather than using 
'layout !
Graham:
25-Oct-2007
Looks logical - I'll give it a go.
Graham:
26-Oct-2007
It's getting a bit awkward now .. I have to set the image at startup, 
restore it on an unfocus event, and then restore it again if I clear 
the field.

I think I need to store the image in the field itself .. perhaps 
as a new type of field widget
btiffin:
30-Oct-2007
Johan;  RebGUI doesn't use pixels (well it does, but ...)  It uses 
a unit-size that can be set with the request-ui function.

See http://www.dobeash.com/RebGUI/user-guide.html#section-3.3for 
some details.
JohanAR:
30-Oct-2007
Sounds reasonable :) Is there any way to circumvent this for items 
that need a specific pixel size, in my case a picture?
JohanAR:
30-Oct-2007
And a related question.. Is it possible to resize the window when 
my picture is changed, so that the new picture doesn't get resized 
to the previous one's size?
btiffin:
30-Oct-2007
Well, RebGUI allows for widget design but that can seem complicated 
at first.  Another method is judicious use of the span attributes 
and surrounding widgets with box elements set up like elastic widgets 
that will take/give all the space during a resize.


Or wait till Ashley reads this and responds as he always has the 
best and simplest advice.  :)
Graham:
30-Oct-2007
Is there a way for 'display to just return the layout without viewing 
?
Graham:
30-Oct-2007
Is there a way to set a backdrop to a display?
Ashley:
31-Oct-2007
Is there a way for 'display to just return the layout without viewing?
 a: ctx-rebgui/layout/only [button 10x10]
Ashley:
31-Oct-2007
 Is there any way to circumvent this for items that need a specific 
 pixel size, in my case a picture?

 image defaults to size -1x-1 which means *not* specifying a size 
 will default it to the image size.


 Is it possible to resize the window when my picture is changed, so 
 that the new picture doesn't get resized to the previous one's size?
 This should get you going:

	display "" [
		button [face/parent-face/size: 320x240 show face/parent-face]
	]


Note that in this case the size *is* in pixels as you are modifying 
a face object directly (as opposed to specifying a wudget's *unit* 
size). Hope that helps.
Graham:
31-Oct-2007
Isn't there a dirty? flag in Vid to check to see if an area widget 
has been altered?
Graham:
5-Nov-2007
Ashley, we talked about this before.  I  am looking for a way to 
spell check in a popup or static window attached to the area that 
is being checked, and to double click on the choice, have it replace 
the highlighted text, and then move on to the next text which is 
then highlighted.  I got it working except for the part of highlighting 
the next word that is suspect.  It highlights and then immediately 
loses the highlight .. perhaps something to do with the double click 
and focus system?
Ashley:
5-Nov-2007
I remember looking at this and concluding that ctx-edit.r would have 
to be changed rather dramatically to allow this ... it has to do 
with the order in which set-focus and show are called. Several minor 
hacks I experimented with (mainly in set-focus) just didn't cut it. 
I put it in the "too hard" basket but may revisit this now that the 
long-running (for me at least) pick-list bug has been fixed; and 
I also have a few users asking about this as well.
btiffin:
5-Nov-2007
I'd 'here here' on that one.  I've been mucking with a RebGUI based 
editor and getting a Find/Replace dialog working has been an excercise 
in hackery that I'm not a huge fan of.  (Much chasing of tail and 
subverting of code that I have too much respect for to allow the 
hackery.)
JohanAR:
6-Nov-2007
Any easy and good looking way to get a return key press (in a text 
field) to trigger an ok-button?
Graham:
9-Nov-2007
you culd try using a panel
Robert:
10-Nov-2007
Micha, a "show panel" is missing after setting /image
JohanAR:
13-Nov-2007
rebgui ver 93 seems to crash when a drop-list is double clicked
DanielSz:
13-Nov-2007
My rebgui UI gets unresponsive while some code is running. Since 
rebol doesn't have threads, I wonder what solution you'd recommend. 
Does the trick of assigning a rate of 0 to a GUI element work in 
RebGUI? Or would you perhaps separate the offending code and use 
"launch" to run a separate rebol process? Or maybe you know some 
other magic that I don't?
DanielSz:
13-Nov-2007
The code that blocks the UI is a ftp file upload, which to the best 
of my knowledge is done synchronously, hence the blocking.
DanielSz:
13-Nov-2007
For the moment I'm using a progress bar incrementing with each file 
upload.
Ashley:
13-Nov-2007
ver 93 seems to crash when a drop-list is double clicked
 ... fixed in later builds.
Graham:
13-Nov-2007
Ashley is there a simple input requestor?
Graham:
13-Nov-2007
I know we have a request-password ...
btiffin:
13-Nov-2007
I always use display/dialog for requestors. Works well; not a whole 
bunch of code to write.  If you do %rebgui.r (and don't encap an 
app) you still have access to view's request-text.
Ashley:
13-Nov-2007
is there a simple input requestor?
 ... no, and define "simple" ;)
btiffin:
13-Nov-2007
Ashley;  How hard would it be to add a 'bistate or 'no-none option 
to check?  I've had to explain the right-click to get the red X a 
few times (and the whole "but it's ok...empty tests the same as the 
red X in the application I wrote for you" discussion).  It would 
be nice to have none/false as one state, true as the other, never 
an empty check box and simple left-click to toggle.  Keyword nice. 
 Not critical.
Graham:
14-Nov-2007
it was a working implementation, but then Ashley changed RebGUI and 
broke it.  At that point the funding for Cyphre had already been 
completed as he had delivered a working grid.  Not sure if anyone 
is able to take it up again and get it working with the latest RebGUI.
Ashley:
16-Nov-2007
Robert, what build# did you fork on? From memory Cyphre had to make 
a lot of grid-specific changes to rebgui-edit.r
Robert:
17-Nov-2007
Ashley, I must say I don't remember. I will pack all files together 
and send them over to you. Ok?


Overall our RebGUI branch is very stable now. I'm using it in a quite 
complex application (1 MB of source code) and it's really nice.
amacleod:
17-Nov-2007
Robert, I've been playing with grid a bit and I really like it. If 
it is possible I would not mind checking out your version...
Ashley:
17-Nov-2007
Uploaded build#103 with new request-value function.

USAGE:

    REQUEST-VALUE prompt /title text /default value /type datatype

DESCRIPTION:
     Requests a value.
     REQUEST-VALUE is a function value.

ARGUMENTS:
     prompt -- Prompt text (Type: string)

REFINEMENTS:
     /title
         text -- Title text (Type: string)
     /default
         value -- Default value (Type: any-type)
     /type
         datatype -- Return type (Type: datatype)
DanielSz:
18-Nov-2007
Ashley, this is to express my thanks for rebgui. It is wonderful, 
and a *huge* relief from VID. I spent the week developing a GUI for 
a pet project of mine. Great documentation. Great demo. Great syntax. 
Pure enjoyment!!!
Robert:
19-Nov-2007
Yes, we have a tree-view as well.
Luis:
19-Nov-2007
I want write a chat system. 

 RebGui provide me the client gui. Somebody knows a chat server with 
 history?
(synapse-chat server source code is not available)
Luis:
27-Nov-2007
A nice feature in altme is hyperlinks in chat. ( http://www.google.com
) 
Any way to get this feature en rebGui ?
Graham:
29-Nov-2007
There is a grid but that needs work
JohanAR:
4-Dec-2007
I'm getting a really weird display error from an area where I try 
to set the face/text manually.. I'll try to paste the code to reproduce 
(RebGUI #101)
Kai:
7-Dec-2007
in your RebGui tour under Configure UI, Behavior you have a tabbable 
field - among the widgets in there is drop-list. The Grouping tab 
cintains drop-lists among other widgets, yet I cannot tab to them... 
What am I missing?
Ashley:
9-Dec-2007
It's a problem as tabbable and focus usually go hand-in-hand. Button 
had the same issue, and required quite a bit of hacking to get it 
working. Other non-focusable widgets have the same issue (e.g. check 
and radio-group). Keyboard navigation has been an issue for RebGUI 
(and VID) for quite some time ... just ask Pekr ;)
Kai:
10-Dec-2007
How can I change a button's click action?
Ashley:
10-Dec-2007
display "Test" [
	b: button [print "A"]
	button [
		b/action/on-click: make function! [face] [print "B"]
	]
]
Kai:
10-Dec-2007
How does attribute eval work for the data blocks of widgets like 
drop-list? Tried a few variations but none worked for me...
Ashley:
10-Dec-2007
v: "Initial"
d: [a b c]

display "Test" [
	drop-list v data d
	return
	area
]
Robert:
11-Dec-2007
Ashley, what's this free-form BUTTON keyword inside a display block? 
Never saw this.
Ashley:
11-Dec-2007
Huh? button is a widget, it's been around for a long time ;)
Ashley:
11-Dec-2007
Oh, that. Assigning a new function to an action is also no big deal. 
I might turn some of these into cookbook entries though as what's 
obvious to me might not be to others ;)
GiuseppeC:
13-Dec-2007
I have taken a deep look at the GUI System available for Rebol I 
and my choice has gone to RebGUI. I have taken a look to to list 
VIEW project too and I have a request/proposal: why don't you merge 
the list view into RebGUI. It is really very powerful, much more 
the standrd lists available in RebolGUI. It woul be an huge improvement 
and we will have a GUI system on steroids for DB projects.
Ashley:
13-Dec-2007
why don't you merge the list view into RebGUI

RebGUI is 127Kb of source (just over 4,700 lines of code)
LIST-VIEW is 93Kb of source (almost 3,500 lines of code)


The largest RebGUI widget is currently TABLE with 10Kb of source 
weighing in at 329 lines. That's about the limit of simple that I'm 
prepared to deal with. The effort required to merge LIST-VIEW is 
huge (GRID less so as it's already a [albiet earlier] RebGUI widget).


I've had a few people say (via email) that it would be easy. OK, 
here are the source code links:

	http://trac.geekisp.com/rebgui/browser
	http://www.hmkdesign.dk/rebol/list-view/list-view.r

I'd like it merged and fully tested by Monday thanks. ;)
GiuseppeC:
13-Dec-2007
Ashley, my question is probably from a primer but someone told me 
that I can't use RebGUI and LIST-VIEW in the same project in 2 different 
windows. Would it be easier to make the two projects compatible instead 
of merging them ?
Ashley:
13-Dec-2007
someone told me that I can't use RebGUI and LIST-VIEW in the same 
project in 2 different windows.
 They were wrong:

do %rebgui.r
do %list-view.r

display "" [
	text-list data [a b c]
	button [
		view/new layout [
			list-view with [
				data: [a b c]
			]
		]
	]
]

do-events
BrianH:
13-Dec-2007
RebGUI redefines many words that are used by VID, afaik. They don't 
play well together - RebGUI is more of a replacement.
Ashley:
13-Dec-2007
The only words that RebGUI redefines are some of the request- functions; 
and the 3rd last line of %rebgui-ctx.r does the following:

	system/view/screen-face/feel: none


which disables the global events system (used by insert-event-func) 
... so yes, RebGUI and VID can run side-by-side; which for scripts 
run from the console is OK, but for encap stuff is a bit redundant 
(having to encap VID and RebGUI source). RebGUI was designed as a 
replacement for VID *in encapped apps*.
Luis:
13-Dec-2007
list-view in rebgui:

rebol []
do %rebgui.r
do %list-view.r
				
display "" [
	text-list data [a b c]
						b: box 50x50 sky
						button []
		]

view/new layout [
			lv: list-view with [
				data: [a b c]]]
unview

b/pane: lv	
b/pane/offset: 0x0 
show b
do-events
GiuseppeC:
14-Dec-2007
Ashley, please confirm what I am understandig: when I will release 
a commercial application I will have to include VID, RebGUI, LIST-VIEW 
source (and SQL-Lite one) inside the application but everything will 
work flawlessy.
Ashley:
14-Dec-2007
Uploaded build#105 with new vid widget which supports in-line VID 
styles:

USAGE:
	vid 20x20 data [btn]
	vid data [btn 20x20] options [size]

DESCRIPTION:
	A container for a VID style.

OPTIONS:
	'size use VID style size.
Ashley:
14-Dec-2007
So, to use list-view as an example, you can now write:

do %list-view.r

display "" [
	area 60x40
	vid 60x40 data [list-view with [data: [a b c]]]
]

Magic, huh?
Steeve:
14-Dec-2007
just a question
Ashley:
14-Dec-2007
vid is shorter, also layout is a verb and could cause confusion. 
The other word I was thinking of using was 'style ... which has the 
side benefit of suggesting "insert a single VID style here" (i.e. 
'vid and 'layout encorage you to think in terms of a block of styles). 
Still open to opinion/suggestions on this one
Henrik:
15-Dec-2007
LIST-VIEW uses the LAYOUT keyword to generate row faces at least 
for edit fields, possibly other places (don't have the source right 
here). Try adding:

vid 60x40 data [list-view with [data: [a b c] editable?: true]]

and double click to edit
Graham:
18-Dec-2007
I just put widgets I need to disable into a sep panel and just hide 
the whole panel
Graham:
18-Dec-2007
or, just hide a set of widgets as needed
btiffin:
18-Dec-2007
The code that determines true/false focus could also change the color 
perhaps.  But on-focus does not write-protect the contents from code 
re the "content manipulation' part, so you'd need to write a modifier 
layer (and promise yourself to not use direct  access ... ever) that 
also honoured the focus flag.


Being me, I probably didn't think up and down the affect chain, but 
I use the on-focus for user entered key fields.  Once set and verified 
ok you can't enter the field anymore (with the background color change). 
 I played with on-unfocus locking but found the behaviour of getting 
stuck in a field as too irritating so that logic had to move to become 
an extra step in another func.


Umm, not a dis or anything Ashley;  on-unfocus is just one of those 
features I'd need a strong reason to include in a user interface 
- nice that it is there and all.  :)
Kai:
19-Dec-2007
Brian ~ do you have a snippet for me demonstrating how you do things?
Kai:
19-Dec-2007
How can I determine the type of a widget (i.e. field vs button) in 
code? I don't see a 'kind or 'type attribute...
Ashley:
19-Dec-2007
This code shows how to implement dynamic 'info for 'field and 'area:

display "" [
	a: field
	b: field
	button [
		alter b/options 'info
		b/color: either find b/options 'info [
			b/action: make b/action [
				on-focus: make function! [face] [false]
			]
			ctx-rebgui/colors/widget
		][
			b/action: make b/action [
				on-focus: make function! [face] [true]
			]
			ctx-rebgui/colors/edit
		]
		show b
	]
]
Kai:
19-Dec-2007
Is there a spot where I can store values I want to restore later 
- like user-data in VID?
Ashley:
19-Dec-2007
display "" [
	a: button [print "a"]
	b: button [print "b"]
	button [
		alter b/options 'info
		either find b/options 'info [
			show b
		][
			b/feel/over b false 0x0
		]
	]
]
Ashley:
19-Dec-2007
Uploaded build#106 with new set-state function:

USAGE:
    SET-STATE face /info /edit

DESCRIPTION:
     Toggle and show widget state.
     SET-STATE is a function value.

ARGUMENTS:
     face -- (Type: object)

REFINEMENTS:
     /info -- Exit if already info.
     /edit -- Exit if already edit.
Ashley:
20-Dec-2007
Not soon. This is a hack to support common editable widgets, whereas 
a proper solution should support every widget that is editable *and* 
selectable (e.g. tab-panel, table, drop-list, check, radio-group, 
etc). It means adding 'info support to a lot of widgets that currently 
do not have it.
Graham:
20-Dec-2007
There is already a working tree
Ashley:
21-Dec-2007
Uploaded build#107 with new tree widget:

USAGE:
	tree data ["Pets" ["Cat" "Dog"] "Numbers" [1 2 3]]

DESCRIPTION:
	Values arranged in a collapsible hierarchy.

OPTIONS:
	'expand starts with all nodes expanded


It's very basic, can only handle a couple hundred entries, and still 
has some UI quirks ... but it works and is only 3Kb.
44401 / 6460812345...443444[445] 446447...643644645646647