AspectAdaptor.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Sep 2013 17:23:55 +0200
changeset 3228 187a4158a51a
parent 2988 bc154fbdd68d
child 3300 c8cd574b5966
permissions -rw-r--r--
class: FlyByHelp changed: #initiateHelpFor:at:now: #showHelp:for: changed the flyBy suppression slightly: if the same text is to be shown again, do not show it except if the help is for another widget. (used to check for the text only previously)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
74
claus
parents: 71
diff changeset
     1
"
claus
parents: 71
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 71
diff changeset
     3
	      All Rights Reserved
claus
parents: 71
diff changeset
     4
claus
parents: 71
diff changeset
     5
 This software is furnished under a license and may be used
claus
parents: 71
diff changeset
     6
 only in accordance with the terms of that license and with the
claus
parents: 71
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
claus
parents: 71
diff changeset
     8
 be provided or otherwise made available to, or used by, any
claus
parents: 71
diff changeset
     9
 other person.  No title to or ownership of the software is
claus
parents: 71
diff changeset
    10
 hereby transferred.
claus
parents: 71
diff changeset
    11
"
2286
1c46b5e812bc Bug 580-STX fixed; check whether target is nil
ca
parents: 789
diff changeset
    12
"{ Package: 'stx:libview2' }"
74
claus
parents: 71
diff changeset
    13
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    14
ProtocolAdaptor subclass:#AspectAdaptor
217
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    15
	instanceVariableNames:'myAspect getMsg putMsg'
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    16
	classVariableNames:''
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    17
	poolDictionaries:''
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    18
	category:'Interface-Support-Models'
69
claus
parents:
diff changeset
    19
!
claus
parents:
diff changeset
    20
claus
parents:
diff changeset
    21
!AspectAdaptor class methodsFor:'documentation'!
claus
parents:
diff changeset
    22
claus
parents:
diff changeset
    23
copyright
claus
parents:
diff changeset
    24
"
claus
parents:
diff changeset
    25
 COPYRIGHT (c) 1995 by Claus Gittinger
71
claus
parents: 69
diff changeset
    26
	      All Rights Reserved
69
claus
parents:
diff changeset
    27
claus
parents:
diff changeset
    28
 This software is furnished under a license and may be used
claus
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
claus
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
claus
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
claus
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
claus
parents:
diff changeset
    33
 hereby transferred.
claus
parents:
diff changeset
    34
"
claus
parents:
diff changeset
    35
!
claus
parents:
diff changeset
    36
claus
parents:
diff changeset
    37
documentation
claus
parents:
diff changeset
    38
"
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
    39
    an AspectAdaptor forwards updates and change messages from/to a complex model.
69
claus
parents:
diff changeset
    40
claus
parents:
diff changeset
    41
    Consider the case where editFields are required for the
789
98a12d3c3bee Fix typo.
Stefan Vogel <sv@exept.de>
parents: 448
diff changeset
    42
    elements (instance variables) of a compound object:
238
a179b5d6152e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 231
diff changeset
    43
    - without an aspect adaptor, you needed to copy the individual
a179b5d6152e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 231
diff changeset
    44
      values out-of the object and move these into multiple valueHolders.
a179b5d6152e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 231
diff changeset
    45
      Then, let the editFields modify the valueHolders contents and
a179b5d6152e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 231
diff changeset
    46
      finally, fetch the values and put them back into the compound object.
a179b5d6152e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 231
diff changeset
    47
69
claus
parents:
diff changeset
    48
    An aspectAdaptor makes this easier, by playing model with
85
claus
parents: 83
diff changeset
    49
    value/value: symbols towards the editField, and forwarding changes and
789
98a12d3c3bee Fix typo.
Stefan Vogel <sv@exept.de>
parents: 448
diff changeset
    50
    updates to/from the compound object using different aspect symbols
238
a179b5d6152e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 231
diff changeset
    51
    and access messages.
69
claus
parents:
diff changeset
    52
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    53
    Notice: 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    54
        this class was implemented using protocol information
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    55
        from alpha testers - it may not be complete or compatible to
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    56
        the corresponding ST-80 class. 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    57
        If you encounter any incompatibilities, please forward a note 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    58
        describing the incompatibility verbal (i.e. no code) to the ST/X team.
217
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    59
223
b65dc250db8d documentation
Claus Gittinger <cg@exept.de>
parents: 217
diff changeset
    60
    [author:]
b65dc250db8d documentation
Claus Gittinger <cg@exept.de>
parents: 217
diff changeset
    61
        Claus Gittinger
b65dc250db8d documentation
Claus Gittinger <cg@exept.de>
parents: 217
diff changeset
    62
217
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    63
    [see also:]
08a8e312d0e4 commentary
Claus Gittinger <cg@exept.de>
parents: 129
diff changeset
    64
        ValueHolder Model
69
claus
parents:
diff changeset
    65
"
claus
parents:
diff changeset
    66
!
claus
parents:
diff changeset
    67
claus
parents:
diff changeset
    68
examples
claus
parents:
diff changeset
    69
"
claus
parents:
diff changeset
    70
    a dialog on a points x/y coordinates:
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    71
                                                                        [exBegin]
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    72
        |dialog data f|
69
claus
parents:
diff changeset
    73
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    74
        data := 0@0.
69
claus
parents:
diff changeset
    75
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    76
        dialog := DialogBox new.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    77
        dialog addTextLabel:'x:'.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    78
        f := dialog addInputFieldOn:(AspectAdaptor new
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    79
                                        subject:data; 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    80
                                        accessWith:#x 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    81
                                        assignWith:#x:).
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    82
        f converter:(PrintConverter new initForNumber).
69
claus
parents:
diff changeset
    83
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    84
        dialog addTextLabel:'y:'.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    85
        f := dialog addInputFieldOn:(AspectAdaptor new
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    86
                                        subject:data; 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    87
                                        forAspect:#y).
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    88
        f converter:(PrintConverter new initForNumber).
69
claus
parents:
diff changeset
    89
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    90
        dialog addOkButton.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    91
        data inspect.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    92
        dialog open.
69
claus
parents:
diff changeset
    93
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    94
        dialog accepted ifTrue:[
268
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 238
diff changeset
    95
            Transcript showCR:'data now: ' , data printString
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    96
        ]
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
    97
                                                                        [exEnd]
69
claus
parents:
diff changeset
    98
claus
parents:
diff changeset
    99
claus
parents:
diff changeset
   100
    a dialog on a four-field complex model:
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   101
                                                                        [exBegin]
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   102
        |dialog data dataModel|
69
claus
parents:
diff changeset
   103
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   104
        data := #('hello' 'one' 'two' 'three').
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   105
        dataModel := Plug new.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   106
        dataModel respondTo:#field1 with:[data at:1].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   107
        dataModel respondTo:#field2 with:[data at:2].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   108
        dataModel respondTo:#field3 with:[data at:3].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   109
        dataModel respondTo:#field4 with:[data at:4].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   110
        dataModel respondTo:#field1: with:[:arg | data at:1 put:arg].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   111
        dataModel respondTo:#field2: with:[:arg | data at:2 put:arg].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   112
        dataModel respondTo:#field3: with:[:arg | data at:3 put:arg].
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   113
        dataModel respondTo:#field4: with:[:arg | data at:4 put:arg].
69
claus
parents:
diff changeset
   114
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   115
        dialog := DialogBox new.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   116
        dialog addTextLabel:'1:'.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   117
        dialog addInputFieldOn:(AspectAdaptor new
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   118
                                        subject:dataModel; 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   119
                                        accessWith:#field1
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   120
                                        assignWith:#field1:). 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   121
        dialog addTextLabel:'2:'.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   122
        dialog addInputFieldOn:(AspectAdaptor new
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   123
                                        subject:dataModel; 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   124
                                        forAspect:#field2).
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   125
        dialog addTextLabel:'3:'.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   126
        dialog addInputFieldOn:(AspectAdaptor new
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   127
                                        subject:dataModel; 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   128
                                        accessWith:#field3
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   129
                                        assignWith:#field3:
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   130
                                        aspect:#field3). 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   131
        dialog addTextLabel:'4:'.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   132
        dialog addInputFieldOn:(AspectAdaptor new
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   133
                                        subject:dataModel; 
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   134
                                        forAspect:#field4).
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   135
        dialog addOkButton.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   136
        dataModel inspect.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   137
        dialog open.
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   138
        dialog accepted ifTrue:[
268
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 238
diff changeset
   139
            Transcript showCR:'data now: ' , data printString
231
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   140
        ]
2fec6188bd28 examples
Claus Gittinger <cg@exept.de>
parents: 223
diff changeset
   141
                                                                        [exEnd]
69
claus
parents:
diff changeset
   142
"
claus
parents:
diff changeset
   143
! !
claus
parents:
diff changeset
   144
claus
parents:
diff changeset
   145
!AspectAdaptor class methodsFor:'instance creation'!
claus
parents:
diff changeset
   146
claus
parents:
diff changeset
   147
accessWith:getSelector assignWith:putSelector 
83
claus
parents: 74
diff changeset
   148
    "create and return an adaptor which uses getSelector to fetch a value
claus
parents: 74
diff changeset
   149
     and setSelector to change it."
claus
parents: 74
diff changeset
   150
69
claus
parents:
diff changeset
   151
    ^ (self new) accessWith:getSelector assignWith:putSelector
85
claus
parents: 83
diff changeset
   152
!
claus
parents: 83
diff changeset
   153
439
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   154
forAspect:anAspect
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   155
    "create and return a new adaptor, which forwards requests
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   156
     to anObject, using anAspect as get-selector and anAspect-colon as putSelector
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   157
     for access. The returned object can be used in place of a ValueHolder"
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   158
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   159
    ^ self new forAspect:anAspect
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   160
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   161
    "Modified: 22.1.1997 / 12:00:42 / cg"
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   162
!
00d7fa5cf3f0 checkin from browser
ca
parents: 409
diff changeset
   163
85
claus
parents: 83
diff changeset
   164
subject:anObject sendsUpdates:aBoolean accessWith:getSel assignWith:putSel aspect:aspect
379
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   165
    "create and return a new adaptor, which forwards requests
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   166
     to anObject, using getSel/putSel for access.
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   167
     The returned object can be used in place of a ValueHolder"
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   168
85
claus
parents: 83
diff changeset
   169
    ^ (self subject:anObject sendsUpdates:aBoolean) 
379
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   170
                accessWith:getSel assignWith:putSel aspect:aspect
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   171
62b71a8294a3 comments
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
   172
    "Modified: 22.1.1997 / 12:00:42 / cg"
69
claus
parents:
diff changeset
   173
! !
claus
parents:
diff changeset
   174
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   175
!AspectAdaptor methodsFor:'accessing-spec'!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   176
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   177
accessWith:getSelector assignWith:putSelector
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   178
    "setup the recevier to use getSelector to fetch a value
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   179
     and putSelector to change it."
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   180
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   181
    getMsg := getSelector.
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   182
    putMsg := putSelector
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   183
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   184
    "Modified: 22.1.1997 / 18:28:46 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   185
!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   186
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   187
accessWith:getSelector assignWith:putSelector aspect:aspectSymbol
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   188
    "setup the recevier to use getSelector to fetch a value
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   189
     and putSelector to change it."
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   190
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   191
    getMsg := getSelector.
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   192
    putMsg := putSelector.
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   193
    myAspect := aspectSymbol
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   194
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   195
    "Modified: 22.1.1997 / 18:28:51 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   196
!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   197
409
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   198
aspect:aSelector
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   199
    "set the adapters change aspect - this is the aspect of the update message,
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   200
     on which the adaptor reacts"
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   201
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   202
    myAspect := aSelector.
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   203
!
391a714f95e4 added #aspect:
ca
parents: 381
diff changeset
   204
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   205
forAspect
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   206
    "get the adapters aspect - if none was defined, the getMsg is returned"
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   207
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   208
    myAspect isNil ifTrue:[
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   209
        ^ getMsg
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   210
    ].
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   211
    ^ myAspect
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   212
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   213
    "Modified: 22.1.1997 / 18:27:24 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   214
!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   215
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   216
forAspect:aSelector
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   217
    "set the adapters aspect - this sets both the get- and put-Messages
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   218
     (the putMessage is the aspect with a colon)"
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   219
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   220
    getMsg := myAspect := aSelector.
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   221
    putMsg := (aSelector , ':') asSymbol.
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   222
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   223
    "Modified: 22.1.1997 / 18:29:05 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   224
! !
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   225
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   226
!AspectAdaptor methodsFor:'accessing-value'!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   227
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   228
defaultValueIfNoSubject
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   229
    "if there is no subject (taget to provide the value),
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   230
     this value is returned."
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   231
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   232
    ^ nil
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   233
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   234
    "Created: / 01-03-2012 / 08:53:38 / cg"
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   235
!
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   236
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   237
setValue:newValue
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   238
    "set the value - this forwards a putMessage to the target"
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   239
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   240
    |target oldValue|
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   241
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   242
    target := super value.
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   243
    target notNil ifTrue:[
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   244
        oldValue := target perform:getMsg.
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   245
        oldValue ~~ newValue ifTrue:[
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   246
            target perform:putMsg with:newValue.
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   247
        ]
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   248
    ].
2286
1c46b5e812bc Bug 580-STX fixed; check whether target is nil
ca
parents: 789
diff changeset
   249
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   250
    "Modified: / 01-03-2012 / 08:54:10 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   251
!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   252
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   253
value
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   254
    "translate a query for my value from my user
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   255
     into an aspect access towards my subject"
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   256
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   257
    |target|
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   258
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   259
    target := super value.
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   260
    target isNil ifTrue:[^ self defaultValueIfNoSubject].
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   261
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   262
    ^ target perform:getMsg
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   263
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   264
    "Modified (format): / 01-03-2012 / 08:54:33 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   265
!
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   266
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   267
value:newValue
381
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   268
    "set the value - this forwards a putMessage to the target
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   269
     and sends out a changeNotification if the value did really change."
b8126729b7a4 commentary
Claus Gittinger <cg@exept.de>
parents: 379
diff changeset
   270
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   271
    |target oldValue|
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   272
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   273
    target := super value.
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   274
    target notNil ifTrue:[
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   275
        oldValue := target perform:getMsg.
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   276
        oldValue ~~ newValue ifTrue:[
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   277
            target perform:putMsg with:newValue.
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   278
            subjectSendsUpdates ifFalse:[
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   279
                self changed:#value
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   280
            ]
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   281
        ]
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   282
    ].
2286
1c46b5e812bc Bug 580-STX fixed; check whether target is nil
ca
parents: 789
diff changeset
   283
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   284
    "Modified: / 01-03-2012 / 08:54:27 / cg"
125
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   285
! !
fa5b5e4336bf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   286
69
claus
parents:
diff changeset
   287
!AspectAdaptor methodsFor:'change & update'!
claus
parents:
diff changeset
   288
claus
parents:
diff changeset
   289
update:something with:aParameter from:changedObject
claus
parents:
diff changeset
   290
    "translate an update from the model into a #value-change
claus
parents:
diff changeset
   291
     via my depenedents ..."
claus
parents:
diff changeset
   292
448
5a9fb44b4a3f *** empty log message ***
ca
parents: 439
diff changeset
   293
    ((changedObject == subject and:[something == self forAspect])
69
claus
parents:
diff changeset
   294
    or:[changedObject == subjectChannel]) ifTrue:[
448
5a9fb44b4a3f *** empty log message ***
ca
parents: 439
diff changeset
   295
        self changed:#value
69
claus
parents:
diff changeset
   296
    ].
claus
parents:
diff changeset
   297
! !
claus
parents:
diff changeset
   298
129
f890eaabc487 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 125
diff changeset
   299
!AspectAdaptor class methodsFor:'documentation'!
f890eaabc487 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 125
diff changeset
   300
f890eaabc487 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 125
diff changeset
   301
version
2988
bc154fbdd68d added: #defaultValueIfNoSubject
Claus Gittinger <cg@exept.de>
parents: 2742
diff changeset
   302
    ^ '$Header: /cvs/stx/stx/libview2/AspectAdaptor.st,v 1.23 2012-03-01 07:57:54 cg Exp $'
129
f890eaabc487 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 125
diff changeset
   303
! !