[REBOL] Re: Altering the feel of fields.
From: carl:cybercraft at: 8-Jun-2002 10:53
On 06-Jun-02, Cyphre wrote:
> Hi Carl,
> I'm not sure if this little hack will meet your needs:
> view layout [field [print "x"] with [feel/detect: func [f e][if all
> [e/type = 'down not-equal? f system/view/focal-face] [do-face f
> none] e]]]
> regards,
> Cyphre
Thanks Cyphre, that put me on the right track.
There were a couple of problems with it though. Firstly, 'with
affected all fields, not just the one where it's used. Well, at
least with how you used it. Is there any way to prevent this? I
couldn'd find any decent description of how to use 'with amongst the
docs I looked at.
I solved this though by creating a field style with stylize and then
adding your feel/detect function outside of the stylize block.
But there was still a problem in that while it detected fields
becoming active when you clicked on them it didn't notice when you
entered from another field when pressing Return.
But as I said, you put me on the right track and I've got it to
behave to my liking by using a modified version of field's default
feel/redraw, instead of using detect. The default redraw looks like
this...
redraw: func [face act pos][
if all [in face 'colors block? face/colors] [
face/color: pick face/colors face <> view*/focal-face
]
]
and here's my modified version used in an example...
---8<---
rebol []
new-styles: stylize [
new-field: field
]
new-styles/new-field/feel: make new-styles/new-field/feel [
redraw: func [face act pos][
if all [in face 'colors block? face/colors] [
face/color: pick face/colors either
face <> system/view/focal-face [
true
][
if face/color = face/colors/1 [do-face face none]
false
]
]
]
]
view layout [
styles new-styles
across
field "Normal Field 1" [print "Normal 1"]
field "Normal Field 2" [print "Normal 2"]
return
new-field "New Field 1" [print "New-field 1"]
new-field "New Field 2" [print "New-field 2"]
]
---8<---
Could be of use to others, as obviously the "do-face face none" could
be changed to anything you want to happen when a field becomes
active.
Thanks again,
Carl.
>> Hi all,
>> How would you get a field to evaluate its block when the field is
>> activated as well as when you press Enter? ie, so "x" here...
>> view layout [field [print "x"]]
>> is printed when you first click on the field. I've spent a lot of
>> time playing with feel in an attempt to get this working but
>> without
>> any luck...
>> --
>> Carl Read
--
Carl Read