|
Class: BufferedValueHolder
Object
|
+--Model
|
+--ValueModel
|
+--ValueHolder
|
+--BufferedValueHolder
- Package:
- stx:libview2
- Category:
- Interface-Support-Models
- Version:
- rev:
1.16
date: 2018/05/15 16:09:37
- user: cg
- file: BufferedValueHolder.st directory: libview2
- module: stx stc-classLibrary: libview2
- Author:
- Claus Gittinger
a bufferedValueHolder keeps a temporary copy of the realHolders value,
and only does a real store of the value when triggered.
Triggering is done by depending on a trigger object's value, which is
typically a ValueHolder on a boolean, which is set by an ok-button.
Notice:
this class was implemented using protocol information
from alpha testers - it may not be complete or compatible to
the corresponding ST-80 class.
If you encounter any incompatibilities, please forward a note
describing the incompatibility verbal (i.e. no code) to the ST/X team.
CodingExamples_GUI::BufferedValueHolderDemo
initialization
-
intialize
-
instance creation
-
subject: someModel triggerChannel: aTrigger
-
return a new BufferedValueHolder offering a buffered copy of someModels
value - only updating this value, when aTrigger changes to true.
accessing
-
setValue: anObject
-
set my value without notification.
-
subject: someModel
-
-
value
-
return my value
accessing-channels
-
triggerChannel: aTrigger
-
change & update
-
update: something with: aParameter from: changedObject
-
now, store the buffered value into the subject
initialization
-
initialize
-
queries
-
isBuffering
-
return true, if the receiver is currently buffering something
(i.e. its value has been assigned)
unbuffered (values are changed, even if not accepted,
iff a field is left with Return or accept is done in a field):
|firstName lastName dialog|
firstName := 'foo' asValue.
lastName := 'bar' asValue.
dialog := Dialog new.
(dialog addTextLabel:'Name:') layout:#left.
dialog addInputFieldOn:firstName.
dialog addVerticalSpace.
(dialog addTextLabel:'Address:') layout:#left.
dialog addInputFieldOn:lastName.
dialog addAbortButton; addOkButton.
dialog open.
Transcript show:firstName value; show:' '; showCR:lastName value
|
buffered (values are only stored when accepted; undo reloads old values)
(use an instance of TriggerValue. If a ValueHolder was used, we had
to temporarily set its value back to nil, to have the change really be
forwarded to its dependends)
|firstName lastName trigger dialog|
firstName := 'foo' asValue.
lastName := 'bar' asValue.
trigger := TriggerValue new.
dialog := Dialog new.
(dialog addTextLabel:'Name:') layout:#left.
dialog addInputFieldOn:(BufferedValueHolder
subject:firstName
triggerChannel:trigger).
dialog addVerticalSpace.
(dialog addTextLabel:'Address:') layout:#left.
dialog addInputFieldOn:(BufferedValueHolder
subject:lastName
triggerChannel:trigger).
dialog addAbortButton;
addButton:(Button new
label:'undo';
action:[trigger value:false]);
addOkButton.
dialog open.
dialog accepted ifTrue:[
trigger value:true
].
Transcript show:firstName value; show:' '; showCR:lastName value
|
|