World: r3wp
[!REBOL3 GUI]
older newer | first last |
Henrik 6-Mar-2010 [1121x3] | Steeve, the purpose is allowing different scoping per field. According to Robert, he sometimes needs to use a field from a different table. Of course it would have to be possible to cover what you need with the outmost panel and then having fields inside it be covered by what the parent record specification gives. |
Chris, in principle, each field could be tied to separate data sources. | |
group 1 [ value1: field record [table1] ; would use value 1 in table 1 value2: field record [table2] ; would use value 2 in table 2 value3: field ; would use value 3 in table 3 ] record [table3] | |
Steeve 6-Mar-2010 [1124x2] | Henrik i see, but there should be the less possible specifications of the DB inside the styles themself. Each panel should only (see) a flat VIEW of its tied tables (more easy to manage). Then each VIEW (like in SQL) could have a shema specification (somewhere else in the code) which desrcibes all the referential constraints between tables of the DB. |
Just an idea. | |
Henrik 6-Mar-2010 [1126x2] | A bare-bones version would be something like: group 1 [ value1: field value2: field value3: field ] record [table1] which could serve most needs. Wouldn't that be the same as tying fields directly to a flat table? |
Chris, the storage would require a "save to table" action. It wouldn't save as soon as you tab out of the field, so validation is fully possible. | |
Gregg 6-Mar-2010 [1128] | On WAIT: loop 1000000 [wait 0.01] Should not consume 100% should it? It does here, on Windows. |
Henrik 6-Mar-2010 [1129x2] | Something more to consider... dynamic: group 1 [field field field] record [table1] For when you want to set up fields where you know the order, and really want to minimize the layout code. The outer panel would be set up with an ON-EMIT actor that traverses the inner faces. We already have this in the prototype, so maybe we can map the traverse order to the table columns. |
It may not be a great idea. There are some possiblitiies for screwing the emit process up. | |
Steeve 6-Mar-2010 [1131] | Do you Guys use REDUCE/ONLY ? |
Henrik 7-Mar-2010 [1132x3] | Gregg, time to curecode it, I suppose. I get the same here. |
About the earlier mention of GET-FACE and SET-FACE, these are considered basic accessors to manipulate the fields and gather data from them. These aren't going away. The use of ON-EMIT specifies directly to use GET-FACE to obtain data from the face, so it's not some kind of "special accessor" that somehow replaces GET-FACE. The job of ON-EMIT is to copy the data, formally obtained from the field to the database record cell. | |
We'll be building another prototype. The current one works against SQLite, but the next one should be built so that we can demonstrate that the layout shouldn't care about which db it's connected to, so we'll also make a flat file database version. | |
Pekr 7-Mar-2010 [1135x2] | are you trying to suggest, that get-face/set-face are getting only one parameter? I thought it changed in comparison to VID2? |
It hought the syntax now is - get-face 'face 'attribute | |
Henrik 7-Mar-2010 [1137] | that's get-facet, not get-face. |
Pekr 7-Mar-2010 [1138x3] | ah, sorry ... |
isn't it too early to think about higher abstraction layers? You are talking forms, DB connections, etc. But maybe not, dunno ... | |
dunno how others do it, but here's one maybe interesting product - http://sqlrelay.sourceforge.net/ | |
Henrik 7-Mar-2010 [1141] | no, the point is that this will be part of the main layout dialect, so it's important to consider now. |
Pekr 7-Mar-2010 [1142x2] | And one note of unexperienced coder (me) :-) - when I tried to look into that RoR db system, it reminded me of DOS app generator tools I used for Clipper language. While it was cool, it was also kind of limited. I mean - it always end like - if you need something more fancy, you have to use raw aproach. And it introduced unnecessary layer, which you had to learn, and which was not able to provide you with general enough functionality for 100% cases. This is just a note to keep it in mind, nothing more - simply to not introduce another layer, if we are not sure, it will be usable for 90% of cases and has some benefits ... |
so - it is supposed to be part of VID dialect? | |
Henrik 7-Mar-2010 [1144] | design is not finalized, but yes, the extension is a single actor, ON-EMIT (there might be more), a single reactor, RECORD and that's it. |
Pekr 7-Mar-2010 [1145x2] | well, the concept is not clean anyway, just dunno. We have get-face, set-face. For me, panel is a face too, it just contain subfaces. I really don't know, why panels are treated in specific way - we already got get-panel, set-panel, clear-panel. |
In DOS era, when I coded in Clipper, MS Fox Pro introduced so called "scatter", "gather". Every language (Clipper, Visual Objects, Delphi) then copied naming and the principle ... to get and set values from form ... | |
Henrik 7-Mar-2010 [1147] | this doesn't have anything to do with those functions. :-) if you didn't have an actor to handle things like EMIT, you would have to write special db handling code up against GET-FACE and do a lot of silly wiring, like is necessary with VID. |
Pekr 7-Mar-2010 [1148] | I just don't understand the purpose. Can you give me short VID level code idea? |
Henrik 7-Mar-2010 [1149] | just posted it above. see the "bare bones" example. |
Pekr 7-Mar-2010 [1150x3] | hmm, I am not sure I like it. I might agree with Chris, that those things might turn into being so variable, that you might not easily find the correct implementation. |
Once again - app generator I used, allowed to specify on-insert (new record), on-edit, on-update actors .... | |
dunno how to get it into dialect, but you need all of those. And I forgot ... validate | |
Henrik 7-Mar-2010 [1153x2] | this really is about as minimal as it can get with the layout dialect. validation would be another reactor. |
I think it will improve with the next prototype. then it will be clearer what's going on inside ON-EMIT. | |
Pekr 7-Mar-2010 [1155] | for e.g. on-update was usefull ... when user updated the field ... it could cause setting/updating another field. The method was so advanced, that if you deleted the record via the API, it caused DB updates, so e.g. if you accepted something on-stock, then deleted it, it was withdrawen automatically. |
Henrik 7-Mar-2010 [1156] | on-update is a different concept, which would be done using an ATTACH reactor. We still have to decide how this is going to be done. Carl did not like the first suggestion of adding a flow engine. |
Pekr 7-Mar-2010 [1157] | Henrik - is there any progress on more important GUI parts, like keyboard navigation, etc.? :-) |
Henrik 7-Mar-2010 [1158x2] | keyboard navigation is already there. we just lack a GOB to display which face is tabbed. |
next will be to return to ATTACH and see how we can do this as simply as possible without getting a "no" from Carl. | |
Pekr 7-Mar-2010 [1160] | Do we count for so called "accelerator" keys? I mean - in Windows, you can see underscorred letters, which you can use as a keyboard accelerator keys. But I can also imagine other aproach, e.g. that pressing Alt will display small boxes displaying accelerator keys. E.g. Lotus Notes does so. If there will be layers introduced, it could be rather easy to have such visual markers (ditto for mouse-over help) |
Henrik 7-Mar-2010 [1161x2] | I noticed this under Experimental in face-reactors.r3: signal: ["Send a signal to another face." id [word! integer!] who [word! none!]] [ unless who [face: parent-face? face] do-style face 'on-signal id ] |
Pekr, that might be possible to do. An interesting issue is how to write up accelerator keys in a simple way. I'm considering a small dialect: [alt ctrl d] or something. | |
Chris 7-Mar-2010 [1163] | I guess my bias is that the burden of what input goes where is on the data/application model. To give the UI that responsibility would seem unnecessarily complex (that's not to say it wouldn't be favourable to some applications, but this is core design, right?). I'd find it more useful to have the UI have an independent data model where I could extract some data to send one (or more) place, extract other data to save another, and so on. I find that's what I miss when working with R2 VID, not so much that it doesn't bind to data sources... |
Steeve 7-Mar-2010 [1164] | Off the topic. One off the things I added to my events handler is the propagation of the events (from the inner to the outer face). Like in R2 It's so much handy when styles have sub-faces (allowing generic actors). Henrik, don't you have the same need ? |
Henrik 7-Mar-2010 [1165] | I'm not sure what's meant by generic actors? I haven't investigated whether we can do that now or how it would be used. |
Steeve 7-Mar-2010 [1166] | ok, an example. You make a button style with subfaces. But the click event must be throwed to the container independantly of which sub-faces received it at first |
Henrik 7-Mar-2010 [1167x2] | I'm not sure why I would want the subfaces to be receiving the event, if the container face is supposed to act as the button? I would perform the action on the container face. |
But I think this is fully possible, if you need it. | |
Steeve 7-Mar-2010 [1169x2] | But actually, the event will not be sent to the container if you move your pointer over a sub-face |
if you don't povide it in the event-handler, I meant | |
older newer | first last |