Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: [View] dirty?

From: SunandaDH:aol at: 10-Oct-2003 11:56

Ingo:
> what's the easiest way to find out, if a layout contains any dirty fields? > (That is, fields that have been edited).
I don't know the *easiest* but what I do is set a global variable in each field I'm interested in. Something like: ; function to set global flag if field has changed global-dirty?: false set-dirty?: func [face [object!]] [ if strict-not-equal? face/data face/user-data [print "face value changed" face/user-data: copy face/data global-dirty?: true ] ] ;; sample layout using above function unview/all view layout [field [set-dirty? face] field [set-dirty? face] button "Exit" [If global-dirty? [print "need to save here" global-dirty?: false ] ] ] This method is precise it that you set global-dirty? only for the fields you care about. But it's annoying in that you need to add a [set-dirty? face] to all those fields. It works for me in the application I use it in because the layout is built from a template, so I don't have to insert the [set-dirty? face] by hand everywhere. You could play with making it more flexible by exploring using styles. This next example does that. It also defines its own 'last-user-value variable rather than using 'user-data. And it fixes the "false positive" when you tab out of a field for the first time: global-dirty?: false set-dirty?: func [face [object!]] [ if strict-not-equal? face/data face/last-user-value [print "face value changed" face/last-user-value: copy face/data global-dirty?: true ] ] unview/all view layout [style monitored-field field with [last-user-value: copy ""] [set-dirty? face] monitored-field [set-dirty? face] monitored-field [set-dirty? face] button "Exit" [If global-dirty? [print "need to save here" global-dirty?: false ] ] ] Sunanda.