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