DictionaryAdaptor.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Sep 2013 17:23:55 +0200
changeset 3228 187a4158a51a
parent 2745 c46c41c89a78
child 3855 1db7742d33ad
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:
2415
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libview2' }"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
ProtocolAdaptor subclass:#DictionaryAdaptor
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'myAspect'
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
	category:'Interface-Support-Models'
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
!DictionaryAdaptor class methodsFor:'documentation'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
documentation
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
    Similar to AspectAdaptor, but accesses a Dictionary instead of
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
    a classes instance variables.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
    [author:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
        Stefan Vogel (stefan@zwerg)
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
    [instance variables:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
    [class variables:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
    [see also:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
examples
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
                                                                        [exBegin]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
        |dialog dict dataModel|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
        dict := Dictionary new.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
        dict
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
            at:#field1 put:'hello';
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
            at:#field2 put:'one';
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
            at:#field3 put:'two';
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
            at:#field4 put:'three'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
        dialog := DialogBox new.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
        dialog addTextLabel:'1:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
                                        aspect:#field1). 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
        dialog addTextLabel:'2:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
                                        forAspect:#field2).
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
        dialog addTextLabel:'3:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
                                        aspect:#field3). 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
        dialog addTextLabel:'4:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
                                        forAspect:#field4).
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
        dialog addOkButton.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
        dict inspect.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
        dialog open.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
        dialog accepted ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
            Transcript showCR:'data now: ' , dict printString
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
        ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
                                                                        [exEnd]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
!DictionaryAdaptor class methodsFor:'instance creation'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
forAspect:anAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
    "create and return a new adaptor, which forwards requests
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
     to anObject, using anAspect to access a Dictionary. 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
     The returned object can be used in place of a ValueHolder"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
    ^ self new forAspect:anAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
subject:anObject sendsUpdates:aBoolean aspect:aspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
    "create and return a new adaptor, which forwards requests
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
     to anObject, using #at:aspect and #at:aspect put: for access.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
     The returned object can be used in place of a ValueHolder"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    ^ (self subject:anObject sendsUpdates:aBoolean) aspect:aspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
!DictionaryAdaptor methodsFor:'accessing-spec'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
aspect:aSelector
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    "set the adapters change aspect - this is the aspect of the update message,
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
     on which the adaptor reacts"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
    myAspect := aSelector.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
forAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
    "get the adapters aspect"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
    ^ myAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
forAspect:aSelector
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
    "set the adapters aspect"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
    myAspect := aSelector.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
!DictionaryAdaptor methodsFor:'accessing-value'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
setValue:newValue
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
    "set the value - this forwards a putMessage to the target"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
    |target oldValue|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
    target := self subjectValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
    target isNil ifTrue:[^ nil].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
    oldValue := target at:myAspect.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
    oldValue ~~ newValue ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
        target at:myAspect put:newValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
    ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
value
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
    "translate a query for my value from my user
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
     into an aspect access towards my subject"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
    |target|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
    target := self subjectValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
    target isNil ifTrue:[^ nil].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
    ^ target at:myAspect ifAbsent:[].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
value:newValue
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
    "set the value - this changes the target with #at:put:
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
     and sends out a changeNotification if the value did really change."
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
    |target oldValue|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
    target := self subjectValue.
2745
c46c41c89a78 without target, should return self - not nil
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   141
    target isNil ifTrue:[^ self].
2415
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
    oldValue := target at:myAspect ifAbsent:[].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
    oldValue ~~ newValue ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
        target at:myAspect put:newValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
        subjectSendsUpdates ifFalse:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
            self changed:#value
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
        ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
    ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
!DictionaryAdaptor methodsFor:'change & update'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
update:something with:aParameter from:changedObject
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
    "translate an update from the model into a #value-change
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
     via my depenedents ..."
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
    ((changedObject == subject and:[something == myAspect])
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
    or:[changedObject == subjectChannel]) ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
        self changed:#value
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
    ].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
!DictionaryAdaptor class methodsFor:'documentation'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
version
2745
c46c41c89a78 without target, should return self - not nil
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   167
    ^ '$Header: /cvs/stx/stx/libview2/DictionaryAdaptor.st,v 1.2 2009-09-18 16:14:09 cg Exp $'
2415
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
! !