r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[!RebGUI] A lightweight alternative to VID

Graham
18-Dec-2007
[7068]
I think it's preferable to have some type of visual clue that the 
behaviour has changed.
btiffin
18-Dec-2007
[7069]
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
[7070x3]
Brian ~ do you have a snippet for me demonstrating how you do things?
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...
Oops - disregard that last one -just found it
Ashley
19-Dec-2007
[7073]
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
	]
]
Pekr
19-Dec-2007
[7074]
Ashley - any news on Robert's RebGUI enhancements integration?
Kai
19-Dec-2007
[7075x2]
Is there a spot where I can store values I want to restore later 
- like user-data in VID?
per widget that is...
Ashley
19-Dec-2007
[7077x2]
widget/init ... which is set to none! after the widget is displayed 
and is not referenced again.
grid integration ... perhaps over Xmas; all depends how easy it is.
Kai
19-Dec-2007
[7079]
Ashley - thanks for the snippet. What would I use for buttons? Setting 
on-focus and on-click does not give usable results...
Ashley
19-Dec-2007
[7080]
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
		]
	]
]
Kai
19-Dec-2007
[7081]
Thanks!
Ashley
19-Dec-2007
[7082x3]
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.
Used like this:

display "" [
	field
	f: field
	button [set-state f]
]
Only works with:

	area
	field
	edit-list
	button

widgets at this time.
Kai
19-Dec-2007
[7085]
awesome - any ideas when drop-lists & checks will be supported?
Ashley
20-Dec-2007
[7086]
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.
Pekr
20-Dec-2007
[7087]
is there also tree-view part of Robert's submissions? I could need 
one in few weeks :-)
Graham
20-Dec-2007
[7088]
There is already a working tree
Kai
20-Dec-2007
[7089x2]
probe btn/color
probe btn/size
probe btn/text
how come size & text return what i expect but color always returns 
none?
Ashley
20-Dec-2007
[7091]
btn/effect/draw
Kai
20-Dec-2007
[7092]
Asley ~ where do I read up on what is what in that block?
Ashley
21-Dec-2007
[7093x2]
http://www.rebol.com/docs/draw-ref.html
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.
Graham
21-Dec-2007
[7095]
Go Ashley ! :)
Ashley
22-Dec-2007
[7096]
Uploaded build#108.

1) Fixed UI quirks with tree widget

2) Renamed vid widget to style

3) Added a new scroll-panel widget

	USAGE:
		scroll-panel data [calendar]
		scroll-panel data [field field]

	DESCRIPTION:
		A panel used to group widgets within a scrollable container.

4) Added a new sheet widget

	USAGE:
		sheet
		sheet options [size 3x3 width 2]
		sheet data [A1 1 A2 2 A3 "=A1 + A2"]

	DESCRIPTION:

  Simple spreadsheet, based on rebocalc.r, with formulas calculated 
  left to right, top to bottom.

  A cell is either a scalar value, string, or a formula starting with 
  "=".

  Scalar values are automatically right-justified, series values left-justified.

  Remember to put spaces between each item in a formula and use () 
  where needed.

	OPTIONS:
		'size specifies number of columns and rows
		'width specifies cell width in relation to cell height


5) Updated %tour.r to incorporate examples of tree (List), scroll-panel 
(Grouping) and sheet (List) usage.

Enjoy!
Pekr
22-Dec-2007
[7097]
hehe, so cool. Will imediatelly find usage for tree-view. Now the 
grid and we have cool data manipulation capabilities .... :-)
Jean-François
22-Dec-2007
[7098]
Ashley, Is there a simple way to get this version, or do I have to 
download & install a SVN client?
Pekr
22-Dec-2007
[7099]
Probably via svn ... I just did it, rather easy - right click on 
the folder in filemanager, selecting update and it gets all downloaded 
...
Ashley
22-Dec-2007
[7100x2]
write %rebgui.r read http://trac.geekisp.com/rebgui/browser/rebgui.r
write %tour.r read http://trac.geekisp.com/rebgui/browser/tour.r
Graham
22-Dec-2007
[7102x4]
Print support - how about a button that will turn the face/parent-face 
into a PNG, save to drive and invoke the browser on it?
this is for rebgui screens .. or perhaps better still, a way to capture 
the shift-print scr on any rebgui window
Ashley, I read that request-dir uses the new tree-view, but when 
I tried it out on a few checkout, and clicked on the "Home" button, 
rebgui froze on me. Reproducibly.
new checkout
Ashley
23-Dec-2007
[7106x2]
Ah, I had to revert request-dir but forgot to revert read-dir in 
%rebgui-functions.r ... will fix this later tonight.


re: Print support ... I'll look at adding a handler that you can 
assign to an FKey of your choice.
Uploaded build#109 with above fix. Handler is as simple as:

ctx-rebgui/on-fkey/f3: make function! [face event] [
	save/png %screen.png to image! face
	browse %screen.png
]


Just click on the window you wish to print and press F3. I'll add 
this as a cookbook entry.
Graham
24-Dec-2007
[7108x4]
Just wondering if the tree might return more information than just 
the face text. Say you want to retrieve stuff from a database but 
only want to do so if it is a level below a node.  At present you 
don't know if you're at a node of a leaf.
or a leaf.
So, you have to traverse the data of the widget to find out where 
you are .. and if a node and leaf both have the same name ... then 
you're stuck.
Similar sorts of problems occur if you want users to be able to add 
to the tree.
Ashley
24-Dec-2007
[7112]
face/data has what you want.
Robert
24-Dec-2007
[7113]
Ahsley, did you took a look at my TREE widget? It's quite matured, 
so why reinvet the wheel?
Graham
24-Dec-2007
[7114]
Robert, can you post a screenshot of your tree widget.  Remember 
there's also the drop-tree widget too.
Ashley
24-Dec-2007
[7115]
Robert, yes. Your tree-view widget is a superset of what I need / 
want (and is 21Kb vs my 3Kb).


Ideally, I'd like every widget to be 5kb or under, with 10kb a max. 
After developing and merging over 40 widgets I've come to the following 
conclusions:

1) 90% of the basic usage cases can be coded in under 5kb
2) Double the code size to increase this to 95%
3) Quadruple this size to get it to 99%

4) Time required to maintain / fix and document a widget increases 
exponentially as code size increases

5) A widget that tries to do many things is no longer a widget ... 
it is an app (list-view and grid fall into this category)

6) While developing the sheet and tree widgets I came to the realization 
that the scroller logic could be externalized in another widget (scroll-panel) 
thus removing much of the duplicated scroller handing code found 
in a number of widgets


Where does this leave grid? Near as I can figure it's a combination 
of table and sheet, but supporting cell types other than plain old 
field. I can see how folks want to pull data from a DB and put it 
into a grid, so does that mean we have 'typed' columns or can every 
cell be different. If the later, then aren't we just talking about 
a sheet with support for more datatypes?


And now for the accessors. We obviously want functions to load and 
save data, put and get cells, and add / delete rows; but do we really 
need functions to move columns around? Or hide and reveal columns? 
It's very easy (and tempting) to over-engineer ... but keeping things 
as simple as possible (but no simpler) makes for a stable system 
that is easily fixed, extended, maintained and documented.
Robert
24-Dec-2007
[7116x2]
I see your point and I totally agree. On the other hand doing a real-life 
full-fledged application requires most of the time more than just 
a basic widget.


What I found out is, that most simple widgets are ok from a GUI POV 
but not in these areas:
- storing / saving widget state and user-data

- be programmatically controlable (like setting a tree to a specific 
state, hiding stuff, setting sort-oder etc.)

- implement always returning usage patterns in a more programmer 
convinient way

- using a common approach for specification (nested blocks, key/value 
pairs etc.)
And those things make widgets quite big. I would bet that for complex 
widgets 75% of the code is not GUI related.