eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'BufferedValueHolder':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: BufferedValueHolder


Inheritance:

   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

Description:


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.


Related information:

    CodingExamples_GUI::BufferedValueHolderDemo

Class protocol:

initialization
o  intialize

instance creation
o  subject: someModel triggerChannel: aTrigger
return a new BufferedValueHolder offering a buffered copy of someModels
value - only updating this value, when aTrigger changes to true.


Instance protocol:

accessing
o  setValue: anObject
set my value without notification.

o  subject: someModel

o  value
return my value

accessing-channels
o  triggerChannel: aTrigger

change & update
o  update: something with: aParameter from: changedObject
now, store the buffered value into the subject

initialization
o  initialize

queries
o  isBuffering
return true, if the receiver is currently buffering something
(i.e. its value has been assigned)


Examples:


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


ST/X 7.1.0.0; WebServer 1.663 at exept.de:8081; Thu, 19 Jul 2018 06:05:25 GMT