HierarchicalClassRevisionList.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 28 Aug 2013 12:52:38 +0100
branchjv
changeset 13465 1f1e8b6710c8
parent 12650 e0f607754b9a
child 15950 23be8cf85415
permissions -rw-r--r--
Bugfix Tools::CodeView2::GutterView - do not redraw gutter if its not shown. This actually fixes DNU when CodeView2 is used in diff view. Then the second gutter is not shown and #yOfTextViewLine: returns nil (bad) which leads to DNU.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2626
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     1
"
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     2
 COPYRIGHT (c) 2000 by eXept Software AG
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     3
              All Rights Reserved
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     4
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     5
 This software is furnished under a license and may be used
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     6
 only in accordance with the terms of that license and with the
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     8
 be provided or otherwise made available to, or used by, any
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
     9
 other person.  No title to or ownership of the software is
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    10
 hereby transferred.
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    11
"
12650
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
    12
"{ Package: 'stx:libtool' }"
2626
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    13
2613
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    14
HierarchicalList subclass:#HierarchicalClassRevisionList
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    15
	instanceVariableNames:'itemComputationList semaphoreCritical itemTask currentItemInTask
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    16
		dataColl'
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    17
	classVariableNames:'Lobby'
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    18
	poolDictionaries:''
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    19
	category:'Interface-Browsers-Support'
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    20
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    21
2625
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    22
!HierarchicalClassRevisionList class methodsFor:'documentation'!
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    23
2626
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    24
copyright
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    25
"
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    26
 COPYRIGHT (c) 2000 by eXept Software AG
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    27
              All Rights Reserved
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    28
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    29
 This software is furnished under a license and may be used
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    30
 only in accordance with the terms of that license and with the
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    32
 be provided or otherwise made available to, or used by, any
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    33
 other person.  No title to or ownership of the software is
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    34
 hereby transferred.
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    35
"
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    36
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    37
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    38
!
Claus Gittinger <cg@exept.de>
parents: 2625
diff changeset
    39
2625
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    40
documentation
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    41
"
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    42
    This is not yet finished (work in progress) - do not use.
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    43
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    44
    [author:]
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    45
        Pierre Schwarz (ps@exept.de)
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    46
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    47
    [see also:]
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    48
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    49
    [instance variables:]
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    50
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    51
    [class variables:]
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    52
"
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    53
d70f0361a027 doc; halts removed
Claus Gittinger <cg@exept.de>
parents: 2613
diff changeset
    54
! !
2613
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    55
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    56
!HierarchicalClassRevisionList class methodsFor:'instance creation'!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    57
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    58
new
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    59
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    60
    ^ super new initialize
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    61
! !
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    62
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    63
!HierarchicalClassRevisionList methodsFor:'accessing'!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    64
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    65
dataColl
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    66
    "return the value of the instance variable 'classRevisionColl' (automatically generated)"
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    67
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    68
    ^ dataColl
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    69
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    70
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    71
dataColl:something
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    72
    "set the value of the instance variable 'classRevisionColl' (automatically generated)"
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    73
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    74
    dataColl := something.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    75
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    76
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    77
icons
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    78
"
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    79
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    80
<return: Dictionary of: Symbol->Image>
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    81
"
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    82
    |icons|
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    83
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    84
    icons := Dictionary new.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    85
    icons at:#loadedRevision put:(Smalltalk imageFromFileNamed:'red_ball.xpm' forClass:self class).
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    86
    icons at:#unloadedRevision put:(Smalltalk imageFromFileNamed:'green_ball.xpm' forClass:self class).
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    87
    icons at:#unloadedClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow_grey1.xpm' forClass:self class).
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    88
    icons at:#loadingClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow_search.xpm' forClass:self class).
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    89
    icons at:#loadedClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow.xpm' forClass:self class).
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    90
    ^icons
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    91
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    92
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    93
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    94
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    95
itemComputationList
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    96
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    97
    ^ itemComputationList ifNil:[itemComputationList := IdentitySet new]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    98
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
    99
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   100
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   101
semaphoreCritical
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   102
    "return the value of the instance variable 'semaphoreCritical' (automatically generated)"
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   103
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   104
    ^ semaphoreCritical ifNil:[semaphoreCritical := RecursionLock new]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   105
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   106
! !
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   107
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   108
!HierarchicalClassRevisionList methodsFor:'finalization'!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   109
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   110
disposed
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   111
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   112
    self stopItemTask.    
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   113
    Lobby unregister:self.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   114
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   115
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   116
! !
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   117
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   118
!HierarchicalClassRevisionList methodsFor:'initialization'!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   119
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   120
initialize
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   121
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   122
    self showRoot:false.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   123
    dataColl := OrderedCollection new.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   124
    self root:ClassItemRootForRevision new.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   125
    Lobby ifNil:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   126
        Lobby := Registry new.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   127
    ].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   128
    Lobby register:self.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   129
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   130
! !
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   131
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   132
!HierarchicalClassRevisionList methodsFor:'protocol'!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   133
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   134
getDataForItem: anItem
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   135
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   136
    self semaphoreCritical critical:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   137
        |theList|
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   138
        currentItemInTask == anItem ifTrue:[^self].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   139
        (theList := self itemComputationList) removeIdentical:anItem ifAbsent:[nil].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   140
        theList add:anItem.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   141
        self startItemTask]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   142
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   143
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   144
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   145
itemTaskCycle
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   146
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   147
    |theItem|
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   148
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   149
    [
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   150
        theItem := nil.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   151
        self semaphoreCritical critical:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   152
            self itemComputationList notEmpty
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   153
                ifTrue:[theItem := self itemComputationList remove:(self itemComputationList last) ifAbsent:[nil]]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   154
        ].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   155
        (theItem notNil and:[theItem needsChildren])ifTrue:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   156
            currentItemInTask:=theItem.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   157
            theItem computeRevisions.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   158
            currentItemInTask:=nil
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   159
        ].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   160
        theItem notNil
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   161
    ] whileTrue.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   162
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   163
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   164
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   165
newData: aClassRevisionColl
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   166
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   167
    dataColl := aClassRevisionColl.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   168
    self root:ClassItemRootForRevision new.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   169
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   170
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   171
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   172
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   173
startItemTask
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   174
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   175
    self semaphoreCritical critical:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   176
        itemTask ifNil:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   177
            itemTask := Process for:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   178
                                            self itemTaskCycle
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   179
                                        ]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   180
                               priority:(Processor userBackgroundPriority).
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   181
            itemTask addExitAction:[itemTask := nil].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   182
            itemTask resume.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   183
        ].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   184
    ].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   185
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   186
!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   187
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   188
stopItemTask
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   189
    |task|
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   190
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   191
    self semaphoreCritical critical:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   192
        (task := itemTask) notNil ifTrue:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   193
            itemTask := nil.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   194
            Exception handle:[:ex|] do:[
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   195
                task terminateWithAllSubprocesses.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   196
                task waitUntilTerminated.
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   197
            ]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   198
        ]
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   199
    ].
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   200
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   201
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   202
! !
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   203
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   204
!HierarchicalClassRevisionList class methodsFor:'documentation'!
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   205
4dd07aefaf20 initial checkin
ps
parents:
diff changeset
   206
version
12125
0c49a3b13e43 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12123
diff changeset
   207
    ^ '$Header: /cvs/stx/stx/libtool/HierarchicalClassRevisionList.st,v 1.3 2000/02/18 14:08:26 cg Exp $'
12650
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   208
!
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   209
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   210
version_HG
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   211
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   212
    ^ '$Changeset: <not expanded> $'
12125
0c49a3b13e43 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12123
diff changeset
   213
! !
12650
e0f607754b9a Merged 18d06283743d and ff31bac2fd1b (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   214