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

World: r3wp

[!REBOL3 GUI]

Anton
5-Aug-2010
[2305x2]
Ok thanks.
I think I would reword the doc string a bit for grammatical consistency.

It looks like it should be either "Set" and "perform", or "Sets" 
and "performs".
Henrik
5-Aug-2010
[2307]
yes, sure
Anton
5-Aug-2010
[2308]
Does it actually set the "state" of a face, or is it really the "value" 
of a face ?
Henrik
5-Aug-2010
[2309]
I changed the text, as that was inaccurate:


Set a field of a face to a field of this face and perform its main 
function.
Anton
5-Aug-2010
[2310x2]
Perhaps, to eliminate some ambiguity, it should be:

Set a field of a named face to a field of this face, then perform 
the named face's main function.
(Is "main function" really how it is described elsewhere ? I'm still 
stuck in R2 terminology, but I was expecting something like "action".)
Henrik
5-Aug-2010
[2312x3]
there is no longer a single "action". what you do is state a reactor 
or a set of reactors and it's this set of reactors that would be 
equivalent to R2's action, in that DO-FACE performs that set of reactors 
in sequence.
and by main function, the idea is that faces can be accessed on multiple 
levels, i.e. you can also just run a single reactor in the face.
that is most useful, when working inside actors.
Anton
5-Aug-2010
[2315]
Ok, that makes sense then.
Pekr
5-Aug-2010
[2316x2]
as I said and once again - I doubt that any such solution will be 
sufficient for all ppl, hence I am not sure it belongs to the base 
of theGUI framework ...
for cross-linking GUI elements, it might be sufficient, but for overall 
app logic? There would have to be list of possible update actions 
for each element possible change. The system I used in DOS ere had 
it exactly like that. And it worked even with grid for e.g. You deleted 
an item, and the update action was able to update your stock DB item 
related amount. The mechanism would have to be universal enough, 
because if it will not cover enough cases, it will not be used by 
developers, and will bloat the GUI code, as everybody will replace 
it with own version ..
Henrik
5-Aug-2010
[2318]
 There would have to be list of possible update actions for each element 
 possible change.
 Could you give an example? Thanks.
Maxim
5-Aug-2010
[2319]
Although I've implement 5 complete GUI frameworks, so far I've stayed 
relatively silent on the R3 GUI front cause I'm building my own framework 
and I don't want to interfere with the R3 system.


but I will pitch in here and say that what Henrik proposes is a good 
idea (I use the same name for a relatively similar feature), though 
it needs one thing if it is to be usable by newbies.


a way for do-face NOT to call attach.  the reason is that if you 
want several cooperating controls, they must not create feedback.
Henrik
5-Aug-2010
[2320]
you mean circular references?
Maxim
5-Aug-2010
[2321x2]
for an imperatively driven system like the R3 system, you might want 
to look at how Amiga OS's BOOPSI system managed this.  its relatively 
easy to code and allows for a much more robust data interchange between 
controls.
yes amongst other things.
Henrik
5-Aug-2010
[2323]
yes, we could use that. this is one reason Carl didn't like it in 
the first round.
Maxim
5-Aug-2010
[2324]
BOOPSI used an intermediate structure which acted as a controler 
to which you connect everything that has dependencies. then you call 
do on IT.
Pekr
5-Aug-2010
[2325]
Henrik - one field change might cause change in multiple other places, 
not necessarily GUI related.
Maxim
5-Aug-2010
[2326]
my old VALVE liquid system was similar to this and I could easily 
have 30 interconnected controls in realtime, all refreshing, some 
even generating data which where used in other parts of the gui (like 
backgrounds).  so you'd have a control control and the whole "stylesheet" 
would updated interactively.
Henrik
5-Aug-2010
[2327]
Pekr, arranging reactors properly should solve that problem.
Maxim
5-Aug-2010
[2328x2]
an other simpler way, is to have a refinement on do-face,  /REACT 
 which indicates that its being driven from another control.  so 
then, you make sure that this face's do-face doesn't follow up on 
its own.
though this doesn't allow all of the tricks, it does solve circular 
references.
Henrik
5-Aug-2010
[2330]
yes, I was just thinking that.
Maxim
5-Aug-2010
[2331x3]
valve worked like that, pretty much.
the new GLASS engine, using dataflow for every aspects of itself, 
doesn't have these circular reference issues... its plugable at the 
data level.
so you can plug the graphics directly to the data, and/or any sizing 
or intermediate processed data together.
Robert
5-Aug-2010
[2334x3]
Henrik, let's discuss this idea with Carl and than Lad because it's 
all about graph-theory how to solve / detect circles, loops etc.
Petr, the app logic shoudl just get a trigger from the GUI (subscriber 
pattern) and than do what ever makes sense.
We have a VFSM (virtaul finite state machine) imeplementation for 
this.
Henrik
5-Aug-2010
[2337x3]
Robert, I'm not sure how much theory there is in it. It seems more 
to be a feature that needs to be added to the reactor evaluation 
part.
I.E. 2-5 lines of code in the right spots. Of course preferrably 
with minimum performance loss.
but Carl may have some ideas on where to do it. I'm not sure we need 
to delve into adding whole engines and state machines to do this. 
75% of what is needed is already implemented.
Gregg
5-Aug-2010
[2340]
State machines are good.
Maxim
5-Aug-2010
[2341x2]
I also think that this is the kind of thing which should be kept 
simple to a minimum.  this above simple procedure covers the majority 
of cases.
if users need something much more complex, then they are fully able 
to implement their own within the reactors.


IMHO, this is a generalized "helper" for those little things which 
aren't fun to code manually and for which a simple API does the job.
Henrik
5-Aug-2010
[2343]
Maxim, DO-FACE doesn't directly chain into other DO-FACEs. I'm therefore 
assuming that we need to somehow store the caller face?
Maxim
5-Aug-2010
[2344]
if DO-FACE cannot end-up triggering an ATTACH created function, then 
you are ok.
Henrik
5-Aug-2010
[2345]
DO-FACE runs only reactors, so it unavoidably can.
Gregg
5-Aug-2010
[2346]
I don't want the engine any more complex than necessary, but I also 
don't want to put the onus on the app developer (that is, me :-) 
to implement logic that is needed 95% of the time.
Maxim
5-Aug-2010
[2347]
thing is, remembering who's been visited, doesn't help you if the 
engine allows cycles.  since who was visited first will (potentially) 
change outcome
Gregg
5-Aug-2010
[2348x2]
Which is why the dataflow model is good, right? ;-)
I won't push for that, as I don't think Carl will go for it.
Henrik
5-Aug-2010
[2350]
Carl likely won't allow any engines or state machines to be added 
now, so it has to be grafted onto what's already there. If it can 
be done in 5-10 lines of code.
Maxim
5-Aug-2010
[2351x2]
its best to make the actuall API non cyclic directly.   


so if the various event/data handling systems can identify that they 
are being only required to RECEIVE data, then they know that they 
shouldn't cause any reactions of their own.


if your reactors are all basically derived from a single or few functions, 
then its not a big deal to implement.


but if each field has its own implementation then it can be quite 
a tedious effort, since you must revise all of them so they are non 
propagating.
and this has to be well documented to people writing reactors/actors 
always handle this.
Henrik
5-Aug-2010
[2353]
The ATTACH and DO reactors are the only one that is able to run other 
reactors. You can of course freely design your own reactors, but 
we are basically relying on the content of the reactors to help avoiding 
screwing things up.
Robert
5-Aug-2010
[2354]
State machine: Not to be meant to be part of the GUI. The reactor 
code would just trigger the state machine than.