REBOL [ Title: "Set Style Data" Purpose: "An attempt at a general function to set VID styles with data." Date: 24-Jan-2002 Version: 0.1.0 Comment: { Use this at your own risk - it is a very early experiment. If you improve it - please send me the changes so I can benefit too. } ] set-style-data: function ["Set the data of a VID element." face [object!] value /action "performs the associated action" /alt-action "performs the associated alt-action" ] [text-common single-text single-non-text multi-text related] [ multi-text: [ ; print [face/style "multi-text"] face/text: :value face/data: find face/texts face/text] single-text: [ ; print [face/style "single-text"] face/text: :value face/data: :face/text] single-non-text: [ ; print [face/style "single-non-text"] face/data: :value] related: [ ; print [face/style "related"] ; code based on the definition of radio foreach item face/parent-face/pane [ if all [flag-face? item radio item/related = face/related item/data] [ item/data: not value show item ] ] face/data: value ] picker: [ ; print [face/style "related"] face/picked: alter clear head face/picked first find face/data :value ] toggle: [ ; print [face/style "toggle"] if face/related [ foreach item face/parent-face/pane [ if all [flag-face? item toggle item/related item/related = face/related item/data] [ item/data: item/state: not value show item ] ] ] face/data: face/state: value ] list: [throw make error! "Can't handle lists with the player."] do any [ all [in face 'style if find [radio check] face/style [related]] all [in face 'style if equal? 'text-list face/style [picker]] all [in face 'style if equal? 'toggle face/style [toggle]] all [in face 'style if equal? 'list face/style [list]] if found? face/texts [multi-text] if found? face/text [single-text] single-non-text ] if action [do-face face none] if alt-action [do-face-alt face none] show face ]