[REBOL] steel... update... of the week (for more advanced rebolers)
From: maximo::meteorstudios::com at: 23-Jun-2003 13:30
hello fellow rebolers...
I hope I'm not bothering anyone... but I just wanted to drop a line saying that steel
is proceeding as planned (in fact, maybe even ahead of schedule ;-).
I have just put the finishing touches on the v1.0 liquid engine... one of the bulding
block of the steel application and one of the basic modules you'll have free with steel.
Its basically a notification engine which is not signal-centric, but rather data-centric.
It now has integrated (and a little bit more flexible than stock) datatype conversion
to-from individual nodes and the data master... I have been using liquid's ancestor
for a month now and I'm having so much fun...
as an example of how it changes the workflow, instead of defining an action function
for your text fields, you connect them to a master, and then add an action function to
a data handler, if you need it. Integrated to a ui, you can connect labels, menu items,
buttons, all linked to that same master. Just by changing the data in the master (actually
its more like peer-to-peer), all of the ui updates without you even having to know what
is currently displayed on screen... the master keeps a tab of everyone linked to him
and signals them to update.
my code size has shrinked by half. Moreover, I can build such dynamic setups that its
scary, cause its practically free. Anyone who has used BOOPSI before (like I've said
in the past, I've used many obscure systems )will understand a little of how it works.
BUT liquid is a zillion times more fun to use and is extremelly friendly (a natural
reflection of rebol).
here is a short code snippet:
------------------------------------------------------
------------------------------------------------------
rebol []
liquid: open-library 'liquid 1.0.0
;----
; create a liquid pipe network (the master)
pipe: liquify liquid/pipe [] ;liquify replaces make
;----
; create a vid layout
vidblk: layout [
stylize liquid-steel
below
sheet-metal ; the default steel backdrop
tmp: text
do [ tmp/attach pipe]
tmp: field 200
do [
tmp/attach pipe
tmp/fill "START NAME:"
]
tmp: button [view/new layout [tmp: button [unview] do [tmp/attach pipe]]]
do [ tmp/attach pipe ]
]
recipient: liquify liquid/recipient [
--valve--: pipe ; liquify has an init function which checks if --valve-- was set.
fill-action: function [data user-data][
write %./save.txt data
]
]
view vidblk
------------------------------------------------------
------------------------------------------------------
Pressing the first window's button would open new windows which have a button labeled
to the string set in the pipe.
The tmp/fill call, fills the pipe with data (a.k.a. liquid) ("START NAME:" string!).
Also note that the tmp/fill call occurs before the button's attach and it's label will
still be set to "START NAME:".
Changing the value in the text field will change the label of ALL text displayed in all
windows. and we only had to allocate two variables in our code (tmp and pipe). We don't
even have to create any action functions to update the ui.
the recipient is an object which will get called each time the pipe's liquid will change
(by any means). So, that when you fill-in the pipe with new data, you will also automatically
save the setup!
there's more, but I wanted to keep the mail short... (well, sort of ;-)
some of you have had a taste of the glass-ui others know that I am obsessed with dynamicity
this was just a short mail elaborating on the kind of tool that you all should expect
in STEEL.
If you have comments, concerns or requests about steel, it is the right time to do so,
I've got my hands dirty... I'll be glad to add or integrate any tool in steel. (who knows,
maybe its already planned ;-) I'm even thinking of integrated CVS and stuff like that...
so no feature should seem far fetched.
that's all folks.
-max
-----------
meteor Studios, T.D.
-----------
Strong enough for a man, but made for a woman