Tools_HierarchicalClassList.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 05 Sep 2013 12:46:11 +0200
changeset 13498 b8d845e42988
parent 13094 3599cba929d5
child 13831 eb1a5f748a3d
permissions -rw-r--r--
Added `environment` instance variable to Tools__NewSystemBrowser and components it uses. The environment is by default initialized to Smalltalk. This allow for displaying limited subset of classes in the browser. The classes displayed does not even have to be classes and does not have to be installed in Smalltalk dictionary.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6179
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     1
"
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     2
 COPYRIGHT (c) 2004 by eXept Software AG
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     3
              All Rights Reserved
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     4
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     5
 This software is furnished under a license and may be used
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     6
 only in accordance with the terms of that license and with the
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     8
 be provided or otherwise made available to, or used by, any
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
     9
 other person.  No title to or ownership of the software is
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    10
 hereby transferred.
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    11
"
5592
d9730a8d7c52 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5591
diff changeset
    12
"{ Package: 'stx:libtool' }"
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ NameSpace: Tools }"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
ClassList subclass:#HierarchicalClassList
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:'topClassHolder'
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:'InheritedEntry'
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Interface-Browsers-New'
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!HierarchicalClassList class methodsFor:'documentation'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
6179
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    25
copyright
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    26
"
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    27
 COPYRIGHT (c) 2004 by eXept Software AG
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    28
              All Rights Reserved
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    29
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    30
 This software is furnished under a license and may be used
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    31
 only in accordance with the terms of that license and with the
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    33
 be provided or otherwise made available to, or used by, any
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    34
 other person.  No title to or ownership of the software is
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    35
 hereby transferred.
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    36
"
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    37
!
182d948dcf05 copyright
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
    38
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
documentation
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    Like a ClassList, but shows classes hierarchical.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    If topClassHolders value is non-nil, only that classes hierarchy
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    is shown.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    embeddable application displaying the classes as listed by
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    the inputGenerator.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    Provides an outputGenerator, which enumerates the classes and
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    their protocols (method-categories) in the selected classes.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    [author:]
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	Claus Gittinger (cg@exept.de)
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!HierarchicalClassList class methodsFor:'initialization'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
initialize
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    InheritedEntry := '* inheritance *'
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    "Created: / 24.2.2000 / 20:19:19 / cg"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
!HierarchicalClassList class methodsFor:'queries-plugin'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
aspectSelectors
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    ^ super aspectSelectors ,
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
       #(  
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	  topClassHolder
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	)
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
8597
0720c6c4ee48 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7885
diff changeset
    78
!HierarchicalClassList methodsFor:'accessing'!
7885
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    79
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    80
showMethodComplexity:aValueHolder
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    81
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    82
    "Created: / 05-11-2007 / 17:15:35 / cg"
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    83
!
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    84
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    85
showMethodInheritance:aValueHolder
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    86
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    87
    "Created: / 05-11-2007 / 17:15:23 / cg"
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    88
!
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    89
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    90
showMethodTypeIcon:aValueHolder
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    91
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    92
    "Created: / 05-11-2007 / 17:15:42 / cg"
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    93
! !
5e831197e83e dummy aspects (for class-doc-browser)
Claus Gittinger <cg@exept.de>
parents: 7742
diff changeset
    94
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!HierarchicalClassList methodsFor:'aspects'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
8597
0720c6c4ee48 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7885
diff changeset
    97
methodVisibilityHolder:aValueHolder
0720c6c4ee48 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7885
diff changeset
    98
0720c6c4ee48 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7885
diff changeset
    99
    "Created: / 05-11-2007 / 17:15:48 / cg"
0720c6c4ee48 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7885
diff changeset
   100
!
0720c6c4ee48 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7885
diff changeset
   101
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
topClassHolder
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    topClassHolder isNil ifTrue:[
6747
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   104
        topClassHolder := Object asValue.
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   105
        topClassHolder addDependent:self
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    ^ topClassHolder
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
6750
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   110
topClassHolder:aValueHolder
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   111
    |oldTopClass newTopClass|
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   112
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   113
    oldTopClass := topClassHolder value.
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   114
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    topClassHolder notNil ifTrue:[
6750
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   116
        topClassHolder removeDependent:self
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    ].
6750
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   118
    topClassHolder := aValueHolder.
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   119
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    topClassHolder notNil ifTrue:[
6750
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   121
        topClassHolder isBehavior ifTrue:[self halt:'should not happen'].
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   122
        topClassHolder addDependent:self.
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   123
    ].
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   124
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   125
    newTopClass := topClassHolder value.
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   126
    newTopClass ~~ oldTopClass ifTrue:[
1fddf38adb79 fixes for use in MetricViewer
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   127
        self enqueueDelayedUpdateList.
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
!HierarchicalClassList methodsFor:'change & update'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
classDefinitionChanged:aClass
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    |prevTop prevSelection newSelection selectedClassesHolder|
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    listValid ifFalse:[^ self].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    slaveMode value == true ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
	self invalidateList.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	^ self.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    selectedClassesHolder := self selectedClasses.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    prevSelection := selectedClassesHolder value copy.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    prevTop := self topClassHolder value.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    prevTop notNil ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
	(prevTop name = aClass name) ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	    "/ forced update
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	    topClassHolder value:aClass.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
	] ifFalse:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
	    (prevTop name = aClass class name) ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
		"/ forced update
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
		topClassHolder value:aClass class.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
	    ]   
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
	]
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    "/ must update the list (notice, that the hierarchy might have changed..)
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    self updateList.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    selectedClassesHolder value ~= prevSelection ifTrue:[
13498
b8d845e42988 Added `environment` instance variable to Tools__NewSystemBrowser and
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13094
diff changeset
   163
	newSelection := prevSelection collect:[:eachOldClass | environment classNamed:(eachOldClass name)].
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
	selectedClassesHolder value:newSelection.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    ]
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    "Modified: / 26.2.2000 / 01:17:01 / cg"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
classRemoved:aClass
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    |prevTop newTop prevSel nPrevSelected selectedClassesHolder newSelection wasMeta|
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    prevTop := self topClassHolder value.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    prevTop notNil ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
	wasMeta := prevTop isMeta.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
	newTop := prevTop theNonMetaclass.
13498
b8d845e42988 Added `environment` instance variable to Tools__NewSystemBrowser and
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13094
diff changeset
   178
	[newTop notNil and:[(environment at:newTop name) ~= newTop]] whileTrue:[
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
	    newTop := newTop superclass.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
	].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
	wasMeta ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
	    newTop := newTop theMetaclass
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
	].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
	newTop ~~ prevTop ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
	    self topClassHolder value:newTop.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
	].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    selectedClassesHolder := self selectedClasses.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
    "/ if there is a single selection,
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
    "/ which is the old top, replace it.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
    prevSel := selectedClassesHolder value.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    nPrevSelected := prevSel size.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    nPrevSelected > 0 ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
	nPrevSelected == 1 ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
	    prevSel first == aClass ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
		newTop notNil ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
		    newSelection := Array with:newTop.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
		] ifFalse:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
		    newSelection := #().
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
		]
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
	    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
	] ifFalse:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
	    nPrevSelected ~~ 0 ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
		"/ clear the selection
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
		newSelection := #().
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
	    ]
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
	].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
	newSelection notNil ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
	    selectedClassesHolder value:newSelection
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
	].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    super classRemoved:aClass.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
!HierarchicalClassList methodsFor:'private'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
addTo:aList whereSuperclassIs:aSuperclass
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    |theClasses|
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
    aSuperclass isNil ifTrue:[
13498
b8d845e42988 Added `environment` instance variable to Tools__NewSystemBrowser and
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13094
diff changeset
   224
	theClasses := environment allClasses select:[:cls | cls superclass isNil]
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    ] ifFalse:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
	theClasses := aSuperclass subclasses.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    (self hideUnloadedClasses value) ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
	theClasses := theClasses select:[:cls | cls isLoaded].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    theClasses := theClasses asOrderedCollection sort:[:a :b | (a name ? '??') < (b name ? '??')].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    theClasses do:[:aClass |
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
	aList add:aClass.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
	self addTo:aList whereSuperclassIs:aClass
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    ].        
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
defaultSlaveModeValue
6747
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   240
    |mode|
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   241
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   242
    mode := self topApplication perform:#initialOrganizerMode ifNotUnderstood:nil.
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   243
    mode == OrganizerCanvas organizerModeClassHierarchy ifTrue:[^ false].
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   244
    mode isNil ifTrue:[^ false].
2d635b83a6a5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6737
diff changeset
   245
6737
2a8e0031c83e magic constants (organizerMode) removed
Claus Gittinger <cg@exept.de>
parents: 6179
diff changeset
   246
    self organizerMode value == OrganizerCanvas organizerModeCategory ifTrue:[^ true].
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    ^ false
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
listOfClasses
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    |classes top|
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
    classes := OrderedCollection new.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    (top := self topClassHolder value) notNil ifTrue:[
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
	top := top theNonMetaclass.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
	classes addAll:(top withAllSuperclasses copy reverse).
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
    self addTo:classes whereSuperclassIs:top.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
    ^ classes
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
    "Modified: / 24.2.2000 / 13:27:43 / cg"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
nameListEntryFor:aClass withNameSpace:useFullName
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
    |indent superClass nm|
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    aClass == (self class nameListEntryForALL) ifTrue:[ ^ aClass ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
    aClass == InheritedEntry ifTrue:[ ^ aClass ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
12595
24886909e066 class: Tools::HierarchicalClassList
Claus Gittinger <cg@exept.de>
parents: 11953
diff changeset
   270
    nm := aClass nameInBrowser.
7742
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   271
    nm isNil ifTrue:[^ '???'].
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   272
11953
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   273
    aClass isLoaded ifFalse:[
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   274
        "/ nm := nm,(' (?) ' colorizeAllWith:Color grey).
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   275
    ] ifTrue:[
13094
3599cba929d5 class: Tools::HierarchicalClassList
Claus Gittinger <cg@exept.de>
parents: 12595
diff changeset
   276
        nm := (nm , ' ').
12595
24886909e066 class: Tools::HierarchicalClassList
Claus Gittinger <cg@exept.de>
parents: 11953
diff changeset
   277
        aClass isAbstract ifTrue:[ nm := nm allItalic ].
11953
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   278
        nm := nm,((' (%1+%2) ' bindWith:(aClass methodDictionary size) with:(aClass class methodDictionary size)) 
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   279
                                colorizeAllWith:self class pseudoEntryForegroundColor).
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   280
    ].
dcfba0cb68f2 changed: #nameListEntryFor:withNameSpace:
Claus Gittinger <cg@exept.de>
parents: 8597
diff changeset
   281
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
    indent := 0.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
    superClass := aClass superclass.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
    [superClass notNil] whileTrue:[
7742
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   285
        indent := indent + 1.
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   286
        superClass := superClass superclass.
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    indent == 0 ifTrue:[
7742
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   290
        ^ nm
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    indent <= 5 ifTrue:[
7742
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   294
        indent := #(
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   295
                     ''
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   296
                     '    '
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   297
                     '        '
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   298
                     '            '
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   299
                     '                '
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   300
                     '                    '
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   301
                   ) at:indent+1.
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
    ] ifFalse:[
7742
d29d7e878f29 dont crash with nil-named classes
Claus Gittinger <cg@exept.de>
parents: 6750
diff changeset
   303
        indent := String new:indent*4 withAll:Character space.
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    ].
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
    ^ indent , nm
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
    "Modified: / 24.2.2000 / 20:19:47 / cg"
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
release
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    super release.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    topClassHolder removeDependent:self.
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
!HierarchicalClassList class methodsFor:'documentation'!
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
version
13498
b8d845e42988 Added `environment` instance variable to Tools__NewSystemBrowser and
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13094
diff changeset
   319
    ^ '$Header: /cvs/stx/stx/libtool/Tools_HierarchicalClassList.st,v 1.13 2013-09-05 10:46:11 vrany Exp $'
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
! !
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
12595
24886909e066 class: Tools::HierarchicalClassList
Claus Gittinger <cg@exept.de>
parents: 11953
diff changeset
   322
5591
273637686948 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
HierarchicalClassList initialize!