IndirectValue.st
author Claus Gittinger <cg@exept.de>
Tue, 03 Sep 2013 17:23:55 +0200
changeset 3228 187a4158a51a
parent 2883 0449a63f204f
child 3319 2b9a15e04435
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:
1797
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     1
"
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     2
 COPYRIGHT (c) 2003 by eXept Software AG
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     3
              All Rights Reserved
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     4
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     5
 This software is furnished under a license and may be used
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     6
 only in accordance with the terms of that license and with the
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     8
 be provided or otherwise made available to, or used by, any
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
     9
 other person.  No title to or ownership of the software is
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    10
 hereby transferred.
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    11
"
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libview2' }"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
ValueModel subclass:#IndirectValue
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'valueHolder'
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'Interface-Support-Models'
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!IndirectValue class methodsFor:'documentation'!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
1797
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    23
copyright
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    24
"
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    25
 COPYRIGHT (c) 2003 by eXept Software AG
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    26
              All Rights Reserved
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    27
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    28
 This software is furnished under a license and may be used
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    29
 only in accordance with the terms of that license and with the
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    31
 be provided or otherwise made available to, or used by, any
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    32
 other person.  No title to or ownership of the software is
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    33
 hereby transferred.
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    34
"
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    35
!
88aea9574f9d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1796
diff changeset
    36
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
documentation
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
2883
0449a63f204f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 2817
diff changeset
    39
    IndirectValue referes to another valueHolder and presents that holder's value
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    as my own value.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    However, the holder can be changed, which results in a change message from myself.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    Can be used if a valueHolder is needed which represents different values over
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    time, for example, a line/column holder for a notebook-like multi-codeView 
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    application, where the line/col holder is switched whenever the tab is switched.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    (use an IndirectValue as holder of the line/col labels).
2817
f8b08ad94d28 changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 2816
diff changeset
    46
    Another possible use is to synchronize two notebools via a common valueHolder,
f8b08ad94d28 changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 2816
diff changeset
    47
    which is used as indirect-value for the two individual indirect-selection-valueholders.
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    [author:]
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
        Claus Gittinger
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
examples
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    a label alternatively showing the value of 2 other valueHolders:
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
                                                                        [exBegin]
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        |holder1 holder2 indirVal lbl|
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
        holder1 := '1' asValue.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
        holder2 := '2' asValue.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
        indirVal := IndirectValue for:holder1.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
        lbl := Label new.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        lbl labelChannel:indirVal.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
        lbl open.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
        lbl waitUntilVisible.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
        
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        Delay waitForSeconds:2.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
        indirVal valueHolder:holder2.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
        Delay waitForSeconds:2.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
        indirVal valueHolder:holder1.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
                                                                        [exEnd]
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
! !
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
!IndirectValue class methodsFor:'instance creation'!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
for:aValueHolder
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    "return a new IndirectValue presenting aValueHolder"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    ^ self new setValueHolder:aValueHolder
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
! !
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!IndirectValue methodsFor:'accessing'!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
setValue:newValue 
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    "physically set my value, without change notifications"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
2816
a178bb3500fb changed: #setValue:
Claus Gittinger <cg@exept.de>
parents: 2029
diff changeset
    91
    valueHolder 
a178bb3500fb changed: #setValue:
Claus Gittinger <cg@exept.de>
parents: 2029
diff changeset
    92
        value:newValue
a178bb3500fb changed: #setValue:
Claus Gittinger <cg@exept.de>
parents: 2029
diff changeset
    93
        withoutNotifying:self
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
setValueHolder:aValueHolder
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
    "change my holder"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    valueHolder notNil ifTrue:[
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
        valueHolder removeDependent:self.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    ].
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    valueHolder := aValueHolder.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    valueHolder notNil ifTrue:[
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
        valueHolder addDependent:self.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    ].
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
value 
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    "return my value"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    ^ valueHolder value
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
1984
43a42772be56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1921
diff changeset
   114
valueHolder 
43a42772be56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1921
diff changeset
   115
    "return my valueHolder"
43a42772be56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1921
diff changeset
   116
43a42772be56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1921
diff changeset
   117
    ^ valueHolder
43a42772be56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1921
diff changeset
   118
!
43a42772be56 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1921
diff changeset
   119
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
valueHolder:aValueHolder
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    "change my holder"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    |oldValue|
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    oldValue := valueHolder value.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    self setValueHolder:aValueHolder.
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    oldValue ~~ valueHolder value ifTrue:[
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
        self changed:#value
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    ].
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
! !
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
1921
e0f806f572f2 category change
Claus Gittinger <cg@exept.de>
parents: 1797
diff changeset
   132
!IndirectValue methodsFor:'change & update'!
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
update:something with:aParameter from:someone
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    "the holder I depend on has changed - send a change notification to my dependents"
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
2029
136dd7e8228a pass change information from update
Claus Gittinger <cg@exept.de>
parents: 1984
diff changeset
   137
    self changed:something with:aParameter
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
! !
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
!IndirectValue class methodsFor:'documentation'!
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
version
2883
0449a63f204f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 2817
diff changeset
   143
    ^ '$Header: /cvs/stx/stx/libview2/IndirectValue.st,v 1.8 2011-01-22 10:40:01 cg Exp $'
2816
a178bb3500fb changed: #setValue:
Claus Gittinger <cg@exept.de>
parents: 2029
diff changeset
   144
!
a178bb3500fb changed: #setValue:
Claus Gittinger <cg@exept.de>
parents: 2029
diff changeset
   145
a178bb3500fb changed: #setValue:
Claus Gittinger <cg@exept.de>
parents: 2029
diff changeset
   146
version_CVS
2883
0449a63f204f changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 2817
diff changeset
   147
    ^ '$Header: /cvs/stx/stx/libview2/IndirectValue.st,v 1.8 2011-01-22 10:40:01 cg Exp $'
1796
26780a84bcad initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
! !