World: r3wp
[View] discuss view related issues
older newer | first last |
Graham 15-Nov-2005 [3205] | perhaps we native to compress rebol code and return as a string value, and not binary |
Volker 15-Nov-2005 [3206] | you can convert a binary to a string in place, with 'as-string |
Graham 15-Nov-2005 [3207] | I wonder if that will save okay though >> t: as-string compress mold [ font bold32 pen yellow red line-pattern 5 5 line-width 2 ] == {xœ‹NËÏ+QHÊÏI16R(HÍS¨LÍÉÉ/W(JMQÈÉÌKÕ-H,)I-ÊS0^EB°@yfJI†‚Q,^@\Z^T^T:^@^@^@} |
Volker 15-Nov-2005 [3208] | with write/binary yes. dont know what the sql-protocol does. |
Graham 15-Nov-2005 [3209x3] | >> t == {xœ‹NËÏ+QHÊÏI16R(HÍS¨LÍÉÉ/W(JMQÈÉÌKÕ-H,)I-ÊS0^EB°@yfJI†‚Q,^@\Z^T^T:^@^@^@} >> insert db-port [{update results set draw = (?) where rid = 174} t ] >> insert db-port {select draw from results where rid = 174} >> r: pick db-port 1 == [{xœ‹NËÏ+QHÊÏI16R(HÍS¨LÍÉÉ/W(JMQÈÉÌKÕ-H,)I-ÊS0^EB°@yfJI†‚Q,^@\Z^T^T:^@^@^@}] >> decompress to-binary r/1 == {[font bold32 pen yellow red line-pattern 5 5 line-width 2]} >> |
seems to work ... | |
if you use the 'arrow command in Draw, everything else after that has an arrow on it. How to turn off arrows after that ? | |
Anton 15-Nov-2005 [3212x10] | Henrik, your advice is not exactly right: "robert, what happens in the above code is that you replace the original feel functions with one ENGAGE function. that's why you loose normal field functionality" Robert has, in fact, only replaced the ENGAGE function in the feel. The FEEL keyword in the layout dialect actually MAKEs from the original feel, with the spec block you give. eg. feel [ engage: func [...][...] ] actually causes something like: face/feel: make face/feel [ engage: func [...][...] ] So the other functions which were in the original face/feel are also copied in the new feel, unmodified, eg. (DETECT, OVER, REDRAW). Nevertheless, Robert does need to look at the original ENGAGE function. |
Henrik, your second example actually does "damage" to the system. You are modifying the default FEEL object that is MAKEd from every time FIELD styles are created by LAYOUT. It's basically like the following example. Here we set the ENGAGE function to NONE to disable user interaction to the field: view layout [ field with [feel/engage: none] field ] But the second field also does not respond to user activity, nor do fields created in new windows: view layout [field] ; <- this field also does not respond It can be confusing. You have to remember that the FEEL objects are shared by default, to save memory. These two examples may look the same but they are not: layout [field feel [engage: none]] ; this one clones and modifies the FEEL layout [field with [feel/engage: none]] ; this one modifies the original FEEL The LAYOUT dialect has a FEEL keyword, and that causes a MAKE of the feel (ie. it is cloned before being modified by your spec block). The LAYOUT dialect WITH keyword, however, gets you out of the LAYOUT dialect and back into "normal" rebol code, but also binding you inside the new face object (the field) that is being created by LAYOUT. So the "feel" inside the LAYOUT spec block and the "feel" inside the WITH block are not the same. | |
Robert, towards a solution, we need to look in SYSTEM/VIEW/VID/VID-STYLES/FIELD/FEEL, eg, by doing this: print mold svv/vid-styles/field/feel So the first attempt should look like this, just copying the code from the console: | |
view/new layout [ the-field: field feel [ ;;;; engage: func [face act event][ switch act [ down [ either equal? face focal-face [unlight-text] [focus/no-show face] caret: offset-to-caret face event/offset show face ] over [ if not-equal? caret offset-to-caret face event/offset [ if not highlight-start [highlight-start: caret] highlight-end: caret: offset-to-caret face event/offset show face ] ] key [ edit-text face event get in face 'action ] ] ] ;;;; ] new-field: field ] focus the-field do-events | |
Oh no! We get an error message! "edit-text has no value". Where is EDIT-TEXT ? It is not defined in the global context. If you go looking in the system you will eventually find it here: CTX-EDIT/EDIT-TEXT What happened ? The original EDIT-TEXT word, as found in the FIELD/FEEL, is bound to CTX-EDIT (it's not found in the global context, open a new console and try it), but we only bound our new EDIT-TEXT word to a new function context (ie. our ENGAGE). So how do we keep the original bindings of a function, when making a copy of it ? SECOND gives you the body of a function. second get in svv/vid-styles/field/feel 'engage We should COPY that, which keeps the bindings, then modify that copy. *Then* we can create the function: ; copy the engage function body body: copy/deep second get in svv/vid-styles/field/feel 'engage ; <-- modify the body here ; make the new function engage: func [face act event] body Let's test that to see which keys we want: | |
view/new layout [ the-field: field feel [ use [body at-key-block key-block][ ; copy the engage function body body: copy/deep second get in svv/vid-styles/field/feel 'engage ; modify the copy to move the block with the EDIT-TEXT word in it ; to a new IF then-block at-key-block: next find select body [switch act] [key] key-block: at-key-block/1 change/only at-key-block compose/only [probe event/key if true (key-block)] ; make the new function engage: func [face act event] body ] ] ] focus the-field do-events | |
Now filter for the desired keys: | |
view/new layout [ the-field: field feel [ use [body at-key-block key-block][ ; copy the engage function body body: copy/deep second get in svv/vid-styles/field/feel 'engage ; modify the copy to move the block with the EDIT-TEXT word in it ; to a new IF then-block at-key-block: next find select body [switch act] [key] key-block: at-key-block/1 change/only at-key-block compose/only [ if find "-0123456789.^H^-" event/key (key-block) ] ; make the new function engage: func [face act event] body ] ] new-field: field ] focus the-field do-events | |
Of course you can add more conditions to the filter, to only allow the minus sign at the beginning etc, but I leave that to you. :) | |
Graham, if you have trouble, maybe convert to base 64 using ENBASE ? | |
Graham 16-Nov-2005 [3222] | arrow 0x0 turns off arrows .. |
DideC 16-Nov-2005 [3223x2] | Anton: or you can double bind your code block to ctx-text and system/view |
view/new layout [ the-field: field feel [ engage: func [face act event] bind bind [ switch act [ down [ either equal? face focal-face [unlight-text] [focus/no-show face] caret: offset-to-caret face event/offset show face ] over [ if not-equal? caret offset-to-caret face event/offset [ if not highlight-start [highlight-start: caret] highlight-end: caret: offset-to-caret face event/offset show face ] ] key [ edit-text face event get in face 'action ] ] ] in ctx-text 'self in system/view 'self ] new-field: field ] focus the-field do-events | |
Volker 16-Nov-2005 [3225] | first question, is how can i get the first text field to accept mouse click events? Use the original feel can i update the position of the text curser in the number field cursor is in system/view/caret. points to the text in your face, use series-functions to move cursor recycling of feel: either dump and patch as shown here, or use traditional inheritance/super-call as shown in http://polly.rebol.it/test/test/extend-engage.r |
Henrik 16-Nov-2005 [3226] | is there a good way to do font substitution? I can see that under Windows, when I attempt to use the Tahoma font, OSX uses Lucida Grande and Linux turns to Courier for some reason. Is there a way to control that+ |
Rebolek 16-Nov-2005 [3227] | Henrik you can check for OS (something like 1.3.1.O.S) and then choose the right font |
Henrik 16-Nov-2005 [3228] | alrighty then... |
Graham 16-Nov-2005 [3229x5] | Regarding the security restrictions in draw dialect, the draw block is not reduced and so block evaluation is prevented. |
This means I can't do this ... [pen 0.0.0 line-width 2 fill-pen none font make object! [ name: "Sans Serif" style: [] size: 20 color: 0.0.0 offset: 14x0 space: 0x0 align: 'center valign: 'middle shadow: none colors: none ] text "testing" 79x63] | |
I have to supply the font as a word, and lookup the font outside the draw block. | |
I think this is too restrictive ( if I understand it correctly ) ! | |
If this is the case, I suggest that a font dialect be created to support fonts inside the draw dialect | |
Graham 17-Nov-2005 [3234x8] | This is my hack of Frank's paint.r program http://www.compkarori.com/reb/paintplus.r |
paint image [ image! none! ] data [block!] if given an image as first parameter, it loads it. If not, it creates a canvas of 300x300 if given a data block of draw commands, it applies it to the canvas | |
It adds freehand drawing, arrows, and text. **BUT** can't load back in text yet due to the restrictions on fonts above. | |
if data block is empty, it ignores it. | |
This is a simplistic tool is to be used to mark up images to point out areas of interest in medical images. | |
Feel free to fix it for me before uploading to the Rebol.org ( forgot my password ... ) | |
Frank had a very clever way of creating the draw block, but I found I couldn't do it the same way with all the combinations that were emerging. | |
Bizarre .. loading text works in this version ! | |
Volker 17-Nov-2005 [3242] | A syntax-trick: #[object![a: 123]] |
Graham 17-Nov-2005 [3243] | huh? |
Volker 17-Nov-2005 [3244] | try that for your font |
Graham 17-Nov-2005 [3245x2] | it's working anyway now! |
Ahh... I see. My other version used mold and not mold/all :( | |
Anton 17-Nov-2005 [3247] | Graham, I notice with arrow, undo/redo and circle, it's possible to get a circle with an arrow-head on it. |
Graham 17-Nov-2005 [3248x2] | yes ... :( |
that's what I was saying .. arrow is a state | |
Anton 17-Nov-2005 [3250x2] | DideC, yes, that is a simpler solution to this particular problem. I guess I wanted to show a more general way, keeping the original binding, instead of guessing what the binding should be. |
Graham, oh I see. Not really your fault then ? | |
Graham 17-Nov-2005 [3252x3] | and if you undo on an arrow draw, you lose the state setting, and so everything after that has arrows on it :( |
I can catch when you change from arrow to something else... but .. if I undo, I can't ... | |
probably needs some type of stack | |
older newer | first last |