SBrowser.st
author claus
Thu, 17 Nov 1994 15:47:59 +0100
changeset 52 7b48409ae088
parent 49 6fe62433cfa3
child 53 2fc78a0165e7
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     1
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
     3
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     4
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    10
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    11
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    12
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    13
'From Smalltalk/X, Version:2.10.4 on 7-nov-1994 at 14:56:27'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    14
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    15
StandardSystemView subclass:#SystemBrowser
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    16
	 instanceVariableNames:'classCategoryListView classListView methodCategoryListView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    17
		methodListView classMethodListView codeView classToggle
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    18
		instanceToggle currentClassCategory currentClassHierarchy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    19
		currentClass currentMethodCategory currentMethod currentSelector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    20
		showInstance actualClass fullClass lastMethodCategory aspect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    21
		variableListView fullProtocol lockUpdates autoSearch myLabel'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    22
	 classVariableNames:'CheckForInstancesWhenRemovingClasses'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    23
	 poolDictionaries:''
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    24
	 category:'Interface-Browsers'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    25
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    26
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    27
SystemBrowser comment:'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    28
COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    29
	     All Rights Reserved
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    30
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    31
$Header: /cvs/stx/stx/libtool/Attic/SBrowser.st,v 1.15 1994-11-17 14:47:02 claus Exp $
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    32
'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    33
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    34
!SystemBrowser class methodsFor:'documentation'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    35
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    36
copyright
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    37
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    38
 COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    39
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    40
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    41
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    42
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    44
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    45
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    46
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    47
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    48
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    49
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    50
version
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    51
"
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    52
$Header: /cvs/stx/stx/libtool/Attic/SBrowser.st,v 1.15 1994-11-17 14:47:02 claus Exp $
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    53
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    54
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    55
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    56
documentation
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    57
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    58
    this class implements all kinds of class browsers.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    59
    Typically, it is started with 'SystemBrowser open', but there are many other 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    60
    startup messages, to launch special browsers.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    61
    See the categories 'startup' and 'special search startup' in the classes
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    62
    protocol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    63
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    64
    Alse, see the extra document 'doc/misc/sbrowser.doc' or the HTML online doc
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    65
    for how to use the browser.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    66
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    67
    written winter 89 by claus
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    68
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    69
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    70
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    71
!SystemBrowser class methodsFor:'initialization'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    72
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    73
initialize
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    74
    "SystemBrowser configuration;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    75
     (values can be changed from your private startup file)"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    76
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    77
    "
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    78
     setting this to false, the removeClass function will remove
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    79
     classes WITHOUT checking for instances. Otherwise,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    80
     it will check and let you confirm in case there are instances.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    81
     Checking for instances may be a bit time consuming, though.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    82
     The default is true - therefore, it will check
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    83
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    84
    CheckForInstancesWhenRemovingClasses := true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    85
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    86
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    87
     CheckForInstancesWhenRemovingClasses := true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    88
     CheckForInstancesWhenRemovingClasses := false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    89
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    90
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    91
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    92
!SystemBrowser class methodsFor:'startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    93
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    94
browseMethods:aList title:aString
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    95
    "launch a browser for an explicit list of class/selectors.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    96
     Each entry in the list must consist of the classes name and the selector,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    97
     separated by spaces. For class methods, the string 'class' must be
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    98
     appended to the classname."
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    99
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   100
    (aList size == 0) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   101
	self showNoneFound:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   102
	^ nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   103
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   104
    aList sort.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   105
    ^ self newWithLabel:aString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   106
	     setupBlock:[:browser | browser setupForList:aList]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   107
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   108
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   109
     SystemBrowser browseMethods:#('Object printOn:' 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   110
				   'Collection add:')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   111
			   title:'some methods'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   112
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   113
    "
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   114
     SystemBrowser browseMethods:#('Behavior new:' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   115
				   'Setclass new:')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   116
			   title:'some new: methods'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   117
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   118
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   119
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   120
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   121
browseMethodsIn:aCollectionOfClasses inst:wantInst class:wantClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   122
    "launch a browser for all instance- (if wantInst is true) and/or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   123
     classmethods (if wantClass is true) from classes in aCollectionOfClasses,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   124
     where aBlock evaluates to true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   125
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   126
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   127
    |list|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   128
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   129
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   130
     since this may take a long time, lower my priority ...
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   131
    "
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   132
    Processor activeProcess withLowerPriorityDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   133
	|checkedClasses checkBlock|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   134
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   135
	checkedClasses := IdentitySet new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   136
	list := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   137
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   138
	checkBlock := [:cls |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   139
	    |methodArray selectorArray| 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   140
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   141
	    (checkedClasses includes:cls) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   142
		methodArray := cls methodArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   143
		selectorArray := cls selectorArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   144
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   145
		1 to:methodArray size do:[:index |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   146
		    |method sel|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   147
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   148
		    method := methodArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   149
		    sel := selectorArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   150
		    (aBlock value:cls value:method value:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   151
			list add:(cls name , ' ' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   152
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   153
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   154
		checkedClasses add:cls.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   155
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   156
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   157
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   158
	aCollectionOfClasses do:[:aClass |
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   159
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   160
	     output disabled - it slows down things too much (when searching for
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   161
	     implementors or senders)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   162
	    "
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   163
"/            Transcript show:'searching '; show:aClass name; showCr:' ...'; endEntry.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   164
	    wantInst ifTrue:[checkBlock value:aClass].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   165
	    wantClass ifTrue:[checkBlock value:(aClass class)].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   166
	    Processor yield
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   167
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   168
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   169
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   170
    ^ self browseMethods:list title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   171
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   172
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   173
browseMethodsIn:aCollectionOfClasses where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   174
    "launch a browser for all instance- and classmethods from 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   175
     all classes in aCollectionOfClasses where aBlock evaluates to true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   176
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   177
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   178
    ^ self browseMethodsIn:aCollectionOfClasses inst:true class:true where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   179
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   180
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   181
browseClassCategory:aClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   182
    "launch a browser for all classes under aCategory"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   183
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   184
    ^ self newWithLabel:aClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   185
	     setupBlock:[:browser | browser setupForClassCategory:aClassCategory]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   186
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   187
    "SystemBrowser browseClassCategory:'Kernel-Objects'"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   188
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   189
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   190
browseFullClasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   191
    "launch a browser showing all methods at once"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   192
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   193
    ^ self newWithLabel:'Full Class Browser'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   194
	     setupBlock:[:browser | browser setupForFullClass]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   195
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   196
    "SystemBrowser browseFullClasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   197
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   198
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   199
browseClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   200
    "launch a browser for aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   201
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   202
    ^ self newWithLabel:aClass name
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   203
	     setupBlock:[:browser | browser setupForClass:aClass]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   204
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   205
    "SystemBrowser browseClass:Object"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   206
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   207
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   208
browseClass:aClass selector:selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   209
    "launch a browser for the method at selector in aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   210
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   211
    ^ self 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   212
	newWithLabel:(aClass name , ' ' , selector , ' ' , selector)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   213
	setupBlock:[:browser | browser setupForClass:aClass selector:selector]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   214
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   215
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   216
     SystemBrowser browseClass:Object selector:#printString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   217
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   218
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   219
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   220
browseClassHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   221
    "launch a browser for aClass and all its superclasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   222
     this is different from the fullProtocol browser."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   223
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   224
    ^ self newWithLabel:(aClass name , '-' , 'hierarchy')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   225
	     setupBlock:[:browser | browser setupForClassHierarchy:aClass]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   226
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   227
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   228
     SystemBrowser browseClassHierarchy:Number
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   229
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   230
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   231
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   232
browseFullClassProtocol:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   233
    "launch a browser for aClasses full protocol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   234
     This is different from hierarchy browsing."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   235
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   236
    ^ self newWithLabel:(aClass name , '-' , 'full protocol')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   237
	     setupBlock:[:browser | browser setupForFullClassProtocol:aClass]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   238
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   239
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   240
     SystemBrowser browseFullClassProtocol:Number
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   241
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   242
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   243
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   244
browseClasses:aList title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   245
    "launch a browser for all classes in aList"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   246
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   247
    ^ self newWithLabel:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   248
	     setupBlock:[:browser | browser setupForClassList:aList]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   249
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   250
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   251
     SystemBrowser browseClasses:(Array with:Object
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   252
					with:Float)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   253
			   title:'two classes'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   254
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   255
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   256
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   257
browseClass:aClass methodCategory:aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   258
    "launch a browser for all methods under aCategory in aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   259
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   260
    ^ self newWithLabel:(aClass name , ' ' , aCategory)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   261
	  setupBlock:[:browser | browser setupForClass:aClass methodCategory:aCategory]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   262
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   263
    "SystemBrowser browseClass:String methodCategory:'copying'"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   264
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   265
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   266
browseMethodCategory:aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   267
    "launch a browser for all methods where category = aCategory"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   268
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   269
    |searchBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   270
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   271
    aCategory includesMatchCharacters ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   272
	searchBlock := [:c :m :s | aCategory match:m category].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   273
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   274
	searchBlock := [:c :m :s | m category = aCategory]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   275
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   276
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   277
    self browseMethodsWhere:searchBlock title:('all methods with category of ' , aCategory)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   278
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   279
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   280
     SystemBrowser browseMethodCategory:'printing & storing'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   281
     SystemBrowser browseMethodCategory:'print*'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   282
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   283
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   284
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   285
browseAllSelect:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   286
    "launch a browser for all methods where aBlock returns true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   287
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   288
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   289
    ^ self browseMethodsWhere:aBlock title:'selected messages'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   290
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   291
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   292
     SystemBrowser browseAllSelect:[:aClass :aMethod :selector | selector numArgs == 3]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   293
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   294
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   295
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   296
browseMethodsWhere:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   297
    "launch a browser for all methods where aBlock returns true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   298
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   299
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   300
    ^ self browseMethodsIn:(Smalltalk allClasses) where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   301
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   302
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   303
browseMethodsOf:aClass where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   304
    "launch a browser for all instance- and classmethods in aClass 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   305
     where aBlock evaluates to true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   306
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   307
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   308
    ^ self browseMethodsIn:(Array with:aClass) where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   309
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   310
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   311
browseMethodsFrom:aClass where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   312
    "launch a browser for all instance- and classmethods in aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   313
     and all its subclasses where aBlock evaluates to true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   314
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   315
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   316
    ^ self browseMethodsIn:(aClass withAllSubclasses) where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   317
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   318
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   319
browseInstMethodsOf:aClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   320
    "launch a browser for all instance methods in aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   321
     where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   322
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   323
    ^ self browseMethodsIn:(Array with:aClass) inst:true class:false where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   324
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   325
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   326
browseInstMethodsIn:aCollectionOfClasses where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   327
    "launch a browser for all instance methods of all classes in
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   328
     aCollectionOfClasses where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   329
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   330
    ^ self browseMethodsIn:aCollectionOfClasses inst:true class:false 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   331
		     where:aBlock title:title
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   332
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   333
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   334
browseInstMethodsFrom:aClass where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   335
    "launch a browser for all instance methods in aClass and all subclasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   336
     where aBlock evaluates to true"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   337
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   338
    ^ self browseMethodsIn:(aClass withAllSubclasses) inst:true class:false where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   339
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   340
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   341
browseFullClassHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   342
    "launch a browser for aClass and all its superclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   343
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   344
    ^ self newWithLabel:(aClass name , '-' , 'full protocol')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   345
	     setupBlock:[:browser | browser setupForFullClassHierarchy:aClass]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   346
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   347
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   348
     SystemBrowser browseFullClassHierarchy:Number
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   349
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   350
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   351
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   352
!SystemBrowser class methodsFor:'special search startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   353
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   354
browseAllCallsOn:aSelectorString in:aCollectionOfClasses title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   355
    "launch a browser for all senders of aSelector in aCollectionOfClasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   356
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   357
    |sel browser searchBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   358
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   359
    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   360
	"a matchString"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   361
	searchBlock := [:lits |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   362
			    |found|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   363
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   364
			    found := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   365
			    lits notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   366
				lits do:[:aLiteral |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   367
				    found ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   368
					(aLiteral isMemberOf:Symbol) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   369
					    found := (aSelectorString match:aLiteral)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   370
					]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   371
				    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   372
				]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   373
			    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   374
			    found
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   375
		       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   376
	browser := self browseMethodsIn:aCollectionOfClasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   377
				  where:[:class :method :s | searchBlock value:(method literals)]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   378
				  title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   379
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   380
	aSelectorString knownAsSymbol ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   381
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   382
	    Transcript showCr:'none found.'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   383
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   384
	    self showNoneFound:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   385
	    ^ nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   386
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   387
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   388
	sel := aSelectorString asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   389
	browser := self browseMethodsIn:aCollectionOfClasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   390
				  where:[:class :method :s | method sends:sel]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   391
				  title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   392
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   393
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   394
    browser notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   395
	|s|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   396
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   397
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   398
	 kludge for now, if its a multipart selector,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   399
	 no easy search is (as yet) possible
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   400
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   401
	s := aSelectorString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   402
	(s includes:$:) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   403
	    s := s copyTo:(s indexOf:$:)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   404
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   405
	browser autoSearch:s 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   406
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   407
    ^ browser
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   408
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   409
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   410
browseImplementorsOf:aSelectorString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   411
    "launch a browser for all implementors of aSelector"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   412
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   413
    ^ self browseImplementorsOf:aSelectorString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   414
			     in:(Smalltalk allClasses)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   415
			  title:('implementors of: ' , aSelectorString)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   416
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   417
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   418
     SystemBrowser browseImplementorsOf:#+
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   419
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   420
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   421
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   422
browseImplementorsOf:aSelectorString in:aCollectionOfClasses title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   423
    "launch a browser for all implementors of aSelector in
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   424
     the classes contained in aCollectionOfClasses and its metaclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   425
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   426
    |list sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   427
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   428
    list := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   429
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   430
    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   431
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   432
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   433
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   434
	    aClass selectorArray do:[:aSelector |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   435
		(aSelectorString match:aSelector) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   436
		    list add:(aClass name , ' ' , aSelector)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   437
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   438
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   439
	    aClass class selectorArray do:[:aSelector |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   440
		(aSelectorString match:aSelector) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   441
		    list add:(aClass name , 'class ' , aSelector)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   442
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   443
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   444
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   445
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   446
	"can do a faster search"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   447
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   448
	aSelectorString knownAsSymbol ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   449
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   450
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   451
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   452
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   453
	sel := aSelectorString asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   454
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   455
	    (aClass implements:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   456
		list add:(aClass name , ' ' , aSelectorString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   457
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   458
	    (aClass class implements:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   459
		list add:(aClass name , 'class ' , aSelectorString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   460
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   461
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   462
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   463
    ^ self browseMethods:list title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   464
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   465
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   466
     SystemBrowser browseImplementorsOf:#+
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   467
				     in:(Array with:Number
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   468
					       with:Float
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   469
					       with:SmallInteger)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   470
				  title:'some implementors of +'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   471
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   472
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   473
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   474
browseAllCallsOn:aSelectorString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   475
    "launch a browser for all senders of aSelector"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   476
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   477
    ^ self browseAllCallsOn:aSelectorString 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   478
			 in:(Smalltalk allClasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   479
		      title:('senders of ' , aSelectorString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   480
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   481
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   482
     SystemBrowser browseAllCallsOn:#+
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   483
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   484
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   485
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   486
browseCallsOn:aSelectorString under:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   487
    "launch a browser for all senders of aSelector in aClass and subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   488
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   489
    ^ self browseAllCallsOn:aSelectorString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   490
			 in:(aClass withAllSubclasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   491
		      title:('senders of: ' , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   492
			     aSelectorString , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   493
			     ' (in or below ' , aClass name , ')')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   494
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   495
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   496
     SystemBrowser browseAllCallsOn:#+ under:Number
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   497
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   498
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   499
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   500
browseImplementorsOf:aSelectorString under:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   501
    "launch a browser for all implementors of aSelector in aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   502
     and its subclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   503
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   504
    ^ self browseImplementorsOf:aSelectorString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   505
			     in:(aClass withAllSubclasses)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   506
			  title:('implementors of: ' , 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   507
				 aSelectorString , 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   508
				 ' (in or below ' , aClass name , ')')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   509
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   510
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   511
     SystemBrowser browseImplementorsOf:#+ under:Integer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   512
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   513
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   514
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   515
browseForSymbol:aSymbol title:title warnIfNone:doWarn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   516
    "launch a browser for all methods referencing aSymbol"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   517
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   518
    |browser searchBlock sym|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   519
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   520
    (aSymbol includesMatchCharacters) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   521
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   522
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   523
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   524
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   525
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   526
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   527
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   528
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   529
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   530
					    found := (aSymbol match:aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   531
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   532
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   533
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   534
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   535
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   536
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   537
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   538
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   539
	 can do a faster search
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   540
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   541
	aSymbol knownAsSymbol ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   542
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   543
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   544
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   545
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   546
	sym := aSymbol asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   547
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   548
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   549
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   550
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   551
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   552
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   553
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   554
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   555
					    found := (sym == aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   556
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   557
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   558
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   559
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   560
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   561
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   562
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   563
    browser := self browseMethodsWhere:[:c :m :s | searchBlock value:(m literals)] title:title.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   564
    browser notNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   565
	browser autoSearch:aSymbol
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   566
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   567
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   568
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   569
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   570
filterToSearchInstRefsTo:varName modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   571
    "return a block to search for instvar accesses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   572
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   573
    |searchBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   574
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   575
    searchBlock := [:c :m :s |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   576
	|src result parser instvars needMatch|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   577
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   578
	needMatch := varName includesMatchCharacters.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   579
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   580
	src := m source.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   581
	src isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   582
	    result := false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   583
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   584
	    needMatch ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   585
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   586
		 before doing a slow parse, quickly scan the
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   587
		 methods source for the variables name ...
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   588
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   589
		result := (src findString:varName) ~~ 0.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   590
	    ] ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   591
		result := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   592
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   593
	    result ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   594
		result := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   595
		parser := Parser parseMethod:src in:c.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   596
		parser notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   597
		    modsOnly ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   598
			instvars := parser modifiedInstVars
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   599
		    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   600
			instvars := parser usedInstVars
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   601
		    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   602
		    instvars notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   603
			needMatch ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   604
			    instvars do:[:iv |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   605
				(varName match:iv) ifTrue:[result := true]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   606
			    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   607
			] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   608
			    result := instvars includes:varName
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   609
			]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   610
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   611
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   612
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   613
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   614
	Processor yield.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   615
	result
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   616
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   617
    ^ searchBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   618
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   619
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   620
browseForSymbol:aSymbol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   621
    "launch a browser for all methods referencing aSymbol"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   622
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   623
    ^ self browseForSymbol:aSymbol title:('users of ' , aSymbol) warnIfNone:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   624
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   625
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   626
browseReferendsOf:aGlobalName warnIfNone:doWarn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   627
    "launch a browser for all methods referencing a global
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   628
     named aGlobalName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   629
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   630
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   631
    ^ self browseForSymbol:aGlobalName title:('users of: ' , aGlobalName) warnIfNone:doWarn 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   632
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   633
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   634
browseReferendsOf:aGlobalName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   635
    "launch a browser for all methods referencing a global
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   636
     named aGlobalName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   637
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   638
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   639
    ^ self browseReferendsOf:aGlobalName warnIfNone:true 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   640
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   641
   "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   642
    Browser browseReferendsOf:#Transcript
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   643
   "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   644
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   645
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   646
browseUsesOf:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   647
    |dict owners offsets
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   648
     sz  "{ Class: SmallInteger }"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   649
     n   "{ Class: SmallInteger }"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   650
     removeSet newDict|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   651
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   652
    owners := ObjectMemory whoReferencesInstancesOf:aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   653
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   654
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   655
     collect set of offsets in dict; key is class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   656
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   657
    dict := IdentityDictionary new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   658
    owners do:[:someObject |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   659
	|cls create|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   660
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   661
	someObject isContext ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   662
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   663
	     someObject refers to an instance of aClass;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   664
	     find out, which instVar(s)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   665
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   666
	    cls := someObject class.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   667
	    cls ~~ Array ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   668
		n := cls instSize.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   669
		create := [|s| s := Set new. dict at:cls put:s. s].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   670
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   671
		1 to:n do:[:i |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   672
		    |ref|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   673
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   674
		    ref := someObject instVarAt:i.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   675
		    (ref isMemberOf:aClass) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   676
			offsets := dict at:cls ifAbsent:create.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   677
			offsets add:i.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   678
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   679
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   680
		cls isVariable ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   681
		    cls isPointers ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   682
			| idx "{ Class: SmallInteger }" |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   683
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   684
			sz := someObject basicSize.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   685
			idx := 1.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   686
			[idx <= sz] whileTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   687
			    |ref|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   688
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   689
			    ref := someObject basicAt:idx.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   690
			    (ref isMemberOf:aClass) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   691
				offsets := dict at:cls ifAbsent:create.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   692
				offsets add:0.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   693
				idx := sz
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   694
			    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   695
			    idx := idx + 1
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   696
			]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   697
		    ]        
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   698
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   699
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   700
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   701
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   702
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   703
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   704
     merge with superclass refs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   705
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   706
    dict keysAndValuesDo:[:cls :set |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   707
	cls allSuperclasses do:[:aSuperclass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   708
	    |superSet|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   709
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   710
	    superSet := dict at:aSuperclass ifAbsent:[].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   711
	    superSet notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   712
		|removeSet|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   713
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   714
		superSet := dict at:aSuperclass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   715
		removeSet := Set new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   716
		set do:[:offset |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   717
		    (superSet includes:offset) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   718
			removeSet add:offset
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   719
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   720
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   721
		set removeAll:removeSet
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   722
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   723
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   724
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   725
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   726
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   727
     remove empty ones
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   728
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   729
    removeSet := Set new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   730
    dict keysAndValuesDo:[:cls :set |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   731
	set isEmpty ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   732
	    removeSet add:cls
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   733
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   734
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   735
    removeSet do:[:cls |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   736
	dict removeKey:cls
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   737
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   738
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   739
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   740
     replace the indices by real names
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   741
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   742
    newDict := IdentityDictionary new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   743
    dict keysAndValuesDo:[:cls :set |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   744
	|newSet names|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   745
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   746
	names := cls allInstVarNames.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   747
	newSet := set collect:[:index | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   748
		index == 0 ifTrue:['*indexed*'] ifFalse:[names at:index].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   749
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   750
	newDict at:cls put:newSet
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   751
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   752
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   753
    newDict inspect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   754
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   755
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   756
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   757
browseForString:aString in:aCollectionOfClasses
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   758
    "launch a browser for all methods in aCollectionOfClasses  
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   759
     containing a string-constant"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   760
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   761
    |browser searchBlock title|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   762
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   763
    title := 'methods containing: ' , aString displayString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   764
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   765
    (aString includesMatchCharacters) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   766
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   767
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   768
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   769
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   770
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   771
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   772
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   773
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   774
					(aLiteral isMemberOf:String) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   775
					    found := (aString match:aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   776
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   777
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   778
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   779
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   780
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   781
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   782
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   783
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   784
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   785
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   786
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   787
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   788
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   789
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   790
					(aLiteral isMemberOf:String) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   791
					    found := (aLiteral = aString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   792
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   793
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   794
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   795
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   796
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   797
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   798
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   799
    browser := self browseMethodsIn:aCollectionOfClasses 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   800
			      where:[:c :m :s | searchBlock value:(m literals)] 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   801
			      title:title.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   802
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   803
    browser notNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   804
	browser autoSearch:aString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   805
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   806
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   807
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   808
    "SystemBrowser browseForString:'*all*'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   809
    "SystemBrowser browseForString:'*should*'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   810
    "SystemBrowser browseForString:'*[eE]rror*'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   811
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   812
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   813
browseForString:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   814
    "launch a browser for all methods containing a string"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   815
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   816
    ^ self browseForString:aString in:(Smalltalk allClasses)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   817
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   818
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   819
browseInstRefsTo:varName in:aCollectionOfClasses modificationsOnly:modsOnly title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   820
    "launch a browser for all methods in aClass where the instVar named
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   821
     varName is referenced; if modsOnly is true, browse only methods where the
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   822
     instvar is modified"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   823
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   824
    |filter browser|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   825
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   826
    filter := self filterToSearchInstRefsTo:varName modificationsOnly:modsOnly.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   827
    browser := self browseInstMethodsIn:aCollectionOfClasses where:filter title:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   828
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   829
    browser notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   830
	browser autoSearch:varName 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   831
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   832
    ^ browser
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   833
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   834
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   835
aproposSearch:aString in:aCollectionOfClasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   836
    "browse all methods, which have aString in their selector or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   837
     in the methods comment.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   838
     This is relatively slow, since all source must be processed."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   839
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   840
    |matchString list|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   841
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   842
    matchString := '*' , aString , '*'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   843
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   844
    list := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   845
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   846
    ^ self browseMethodsIn:aCollectionOfClasses 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   847
		     where:[:class :method :sel |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   848
				(matchString match:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   849
				    list add:(class name , '>>' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   850
				] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   851
				    (matchString match:(method comment)) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   852
					list add:(class name , '>>' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   853
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   854
				].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   855
				Processor yield.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   856
			   ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   857
		     title:('apropos: ' , aString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   858
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   859
    "SystemBrowser aproposSearch:'append'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   860
    "SystemBrowser aproposSearch:'add'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   861
    "SystemBrowser aproposSearch:'sort'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   862
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   863
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   864
browseInstRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   865
    "launch a browser for all methods in aClass where the instVar named
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   866
     aString is referenced; if modsOnly is true, browse only methods where the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   867
     instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   868
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   869
    |title|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   870
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   871
    modsOnly ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   872
	title := 'modifications of '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   873
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   874
	title := 'references to '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   875
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   876
    ^ self browseInstRefsTo:aString 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   877
			 in:aCollectionOfClasses 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   878
	  modificationsOnly:modsOnly 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   879
		      title:(title , aString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   880
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   881
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   882
aproposSearch:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   883
    "browse all methods, which have aString in their selector or
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   884
     in the methods comment.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   885
     This is relatively slow, since all source must be processed."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   886
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   887
    ^ self aproposSearch:aString in:(Smalltalk allClasses)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   888
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   889
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   890
browseInstRefsTo:aString under:aClass modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   891
    "launch a browser for all methods in aClass and subclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   892
     where the instVar named aString is referenced; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   893
     if modsOnly is true, browse only methods where the instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   894
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   895
    ^ self browseInstRefsTo:aString in:(aClass withAllSubclasses) modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   896
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   897
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   898
browseClassRefsTo:varName in:aCollectionOfClasses modificationsOnly:modsOnly title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   899
    "launch a browser for all methods in aCollectionOfClasses,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   900
     where the classVar named aString is referenced; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   901
     if modsOnly is true, browse only methods where the classvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   902
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   903
    |searchBlock browser|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   904
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   905
    searchBlock := self filterToSearchClassRefsTo:varName modificationsOnly:modsOnly.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   906
    browser := self browseMethodsIn:aCollectionOfClasses where:searchBlock title:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   907
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   908
    browser notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   909
	browser autoSearch:varName
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   910
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   911
    ^ browser
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   912
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   913
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   914
browseClassRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   915
    "launch a browser for all methods in aClass where the classVar named
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   916
     aString is referenced; if modsOnly is true, browse only methods where the
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   917
     classvar is modified"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   918
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   919
    |title|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   920
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   921
    modsOnly ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   922
	title := 'modifications of '
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   923
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   924
	title := 'references to '
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   925
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   926
    ^ self browseClassRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly title:(title , aString)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   927
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   928
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   929
browseClassRefsTo:aString under:aClass modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   930
    "launch a browser for all methods in aClass and subclasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   931
     where the classVar named aString is referenced; 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   932
     if modsOnly is true, browse only methods where the classvar is modified"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   933
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   934
    ^ self browseClassRefsTo:aString in:(aClass withAllSubclasses) modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   935
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   936
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   937
filterToSearchClassRefsTo:varName modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   938
    "return a searchblock for class variable references"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   939
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   940
    |searchBlock|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   941
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   942
    searchBlock := [:c :m :s |
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   943
	|src result parser classvars needMatch|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   944
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   945
	needMatch := varName includesMatchCharacters.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   946
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   947
	src := m source.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   948
	src isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   949
	    result := false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   950
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   951
	    needMatch ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   952
		"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   953
		 before doing a slow parse, quickly scan the
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   954
		 methods source for the variables name ...
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   955
		"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   956
		result := (src findString:varName) ~~ 0.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   957
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   958
		result := true.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   959
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   960
	    result ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   961
		result := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   962
		parser := Parser parseMethod:src in:c.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   963
		parser notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   964
		    modsOnly ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   965
			classvars := parser modifiedClassVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   966
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   967
			classvars := parser usedClassVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   968
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   969
		    classvars notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   970
			needMatch ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   971
			    classvars do:[:cv |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   972
				(varName match:cv) ifTrue:[result := true]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   973
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   974
			] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   975
			    result := classvars includes:varName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   976
			]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   977
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   978
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   979
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   980
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   981
	Processor yield.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   982
	result
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   983
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   984
    ^ searchBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   985
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   986
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   987
!SystemBrowser class methodsFor:'private'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   988
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   989
newWithLabel:aString setupBlock:aBlock on:aWorkstation
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   990
    "common helper method for all creation methods"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   991
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   992
    |newBrowser|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   993
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   994
    newBrowser := self on:aWorkstation.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   995
    newBrowser title:aString.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   996
    aBlock value:newBrowser.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   997
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   998
    newBrowser open.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   999
    ^ newBrowser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1000
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1001
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1002
newWithLabel:aString setupBlock:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1003
    "common helper method for all creation methods"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1004
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1005
    ^ self newWithLabel:aString setupBlock:aBlock on:Display
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1006
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1007
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1008
showNoneFound:what
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1009
"/    DialogView warn:(self classResources string:('no ' , what , ' found')).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1010
    self showNoneFound
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1011
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1012
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1013
showNoneFound
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1014
    DialogView warn:(self classResources string:'None found').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1015
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1016
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1017
!SystemBrowser class methodsFor:'general startup'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1018
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1019
openOnDisplay:aDisplay
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1020
    "launch a standard browser on another display.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1021
     Does not work currently - still being developped."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1022
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1023
    ^ self newWithLabel:(self classResources string:'System Browser')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1024
	     setupBlock:[:browser | browser setupForAll]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1025
		     on:aDisplay
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1026
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1027
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1028
     SystemBrowser openOnDisplay:(XWorkstation new initializeFor:'porty:0')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1029
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1030
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1031
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1032
open
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1033
    "launch a standard browser"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1034
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1035
    ^ self openOnDisplay:Display
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1036
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1037
    "SystemBrowser open"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1038
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1039
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1040
!SystemBrowser methodsFor:'dependencies'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1041
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1042
update:something with:someArgument from:changedObject
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1043
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1044
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1045
     avoid update/warn after my own changes
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1046
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1047
    lockUpdates == true ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1048
"/         'ignored my change' printNL.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1049
	^ self
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1050
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1051
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1052
"/ changedObject print. ' ' print. someArgument print. ' ' print.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1053
"/ something printNL.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1054
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1055
    (changedObject == Smalltalk) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1056
	something == #newClass ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1057
	    ((someArgument category = currentClassCategory)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1058
	    or:[currentClassCategory notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1059
		and:[currentClassCategory startsWith:'*']]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1060
		self updateClassListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1061
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1062
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1063
	    someArgument category ~= currentClassCategory ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1064
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1065
		 category new ?
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1066
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1067
		(classCategoryListView notNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1068
		and:[classCategoryListView list notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1069
		and:[(classCategoryListView list includes:someArgument category) not]])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1070
		ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1071
		    self updateClassCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1072
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1073
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1074
	    ^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1075
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1076
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1077
	something == #classRemove ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1078
	    someArgument = currentClass ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1079
		self warnLabel:'the selected class was removed'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1080
		^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1081
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1082
	    " fall into general update "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1083
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1084
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1085
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1086
	 any other (unknown) change 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1087
	 with the Smalltalk dictionary ...
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1088
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1089
	self updateClassCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1090
	self updateClassListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1091
	^ self
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1092
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1093
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1094
    changedObject isBehavior ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1095
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1096
	 its a class, that has changed
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1097
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1098
	(currentClass notNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1099
	and:[changedObject name = currentClass name]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1100
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1101
	     its the current class that has changed
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1102
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1103
	    something == #methodDictionary ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1104
		(someArgument isSymbol) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1105
		    |changedMethod|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1106
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1107
		    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1108
		     the method with selector someArgument was changed or removed
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1109
		    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1110
		    self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1111
		    self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1112
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1113
		    someArgument == currentSelector ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1114
			"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1115
			 special care here: the currently shown method has been
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1116
			 changed somehow in another browser (or via fileIn)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1117
			"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1118
			changedMethod := currentClass compiledMethodAt:currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1119
			changedMethod isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1120
			    self warnLabel:'the method shown was removed'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1121
			    ^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1122
			].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1123
			"compare the source codes"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1124
			self warnLabel:'the code shown may not up to date'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1125
			^ self    
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1126
		    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1127
		    ^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1128
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1129
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1130
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1131
	    something == #comment ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1132
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1133
		 the class has changed its comment; we dont care, except if
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1134
		 currently showing the comment
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1135
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1136
		aspect == #comment ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1137
		    self warnLabel:'the comment shown may not up to date'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1138
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1139
		^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1140
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1141
	    something == #definition ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1142
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1143
		 the class has changed its definition.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1144
		 Warn, except if showing a method.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1145
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1146
		aspect notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1147
		    self warnLabel:'the classes definition has changed'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1148
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1149
		^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1150
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1151
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1152
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1153
	     get the class again - in case of a changed class definition,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1154
	     we are otherwise refering to the obsolete old class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1155
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1156
	    currentClass := Smalltalk at:(currentClass name asSymbol).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1157
	    showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1158
		actualClass := currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1159
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1160
		actualClass := currentClass class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1161
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1162
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1163
	    self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1164
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1165
	    "dont update codeView ...."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1166
	    "self update"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1167
	    ^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1168
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1169
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1170
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1171
	 any other class has changed (but not its organization, since
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1172
	 that is cought in the above case).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1173
	 We are not interrested in it - except, if showing fullProtocol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1174
	 or hierarchy ...
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1175
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1176
	currentClassHierarchy notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1177
	    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1178
		(currentClass isSubclassOf:changedObject) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1179
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1180
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1181
		((currentClass isSubclassOf:changedObject)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1182
		or:[changedObject isSubclassOf:currentClass]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1183
		]                
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1184
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1185
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1186
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1187
	^ self
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1188
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1189
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1190
    (changedObject isKindOf:Method) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1191
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1192
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1193
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1194
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1195
!SystemBrowser methodsFor:'private'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1196
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1197
normalLabel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1198
    "set the normal (inactive) window- and icon labels"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1199
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1200
    |l il sel|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1201
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1202
    myLabel notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1203
	l := il := myLabel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1204
    ] ifFalse:[    
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1205
	l := resources string:'System Browser'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1206
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1207
	currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1208
	    l := l, ': ', currentClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1209
	    classListView isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1210
		currentSelector notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1211
		    l := l , ' ' ,  currentSelector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1212
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1213
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1214
	    il := currentClass name
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1215
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1216
	    il := l.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1217
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1218
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1219
    self label:l.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1220
    self iconLabel:il.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1221
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1222
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1223
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1224
setAcceptAndExplainActionsForMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1225
    "tell the codeView what to do on accept and explain"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1226
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1227
    codeView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1228
	|cat|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1229
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1230
	codeView cursor:Cursor execute.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1231
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1232
	(cat := currentMethodCategory) = '* all *' ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1233
	    "must check from which category this code came from ...
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1234
	     ... thanks to Arno for pointing this out"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1235
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1236
	    cat := self askForMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1237
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1238
	(cat notNil and:[cat notEmpty]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1239
	    Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1240
		lockUpdates := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1241
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1242
		actualClass compiler 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1243
		    compile:theCode asString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1244
		    forClass:actualClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1245
		    inCategory:cat 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1246
		    notifying:codeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1247
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1248
		codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1249
		self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1250
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1251
	    lockUpdates := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1252
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1253
	codeView cursor:Cursor normal.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1254
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1255
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1256
    codeView explainAction:[:theCode :theSelection |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1257
	self showExplanation:(Explainer 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1258
				explain:theSelection 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1259
				in:theCode
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1260
				forClass:actualClass)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1261
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1262
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1263
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1264
checkSelectionChangeAllowed
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1265
    "return true, if selection change is ok;
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1266
     its not ok, if code has been changed.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1267
     in this case, return the result of a user query"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1268
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1269
    |box|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1270
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1271
    codeView modified ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1272
	^ true
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1273
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1274
"/    fullProtocol ifTrue:[^ true].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1275
    box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1276
	       title:(resources at:'contents in codeview has not been accepted.\\Modifications will be lost when continuing.') withCRs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1277
	       yesText:(resources at:'continue')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1278
	       noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1279
    ^ box confirm
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1280
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1281
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1282
selectorToSearchFor
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1283
    "look in codeView and methodListView for a search-string when searching for selectors"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1284
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1285
    |sel t|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1286
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1287
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1288
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1289
	sel := sel asString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1290
	t := Parser selectorInExpression:sel.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1291
	t notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1292
	    sel := t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1293
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1294
	sel := sel withoutSpaces.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1295
	sel == #>> ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1296
	    "oops - thats probably not what we want here ..."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1297
	    self extractClassAndSelectorFromSelectionInto:[:c :s :m |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1298
		sel := s
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1299
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1300
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1301
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1302
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1303
	    sel := methodListView selectionValue
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1304
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1305
	    classMethodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1306
		sel := classMethodListView selectionValue.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1307
		sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1308
		    sel := self selectorFromClassMethodString:sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1309
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1310
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1311
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1312
	sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1313
	    sel := sel withoutSpaces
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1314
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1315
	    sel := ''
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1316
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1317
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1318
    ^ sel
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1319
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1320
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1321
enterBoxTitle:title okText:okText
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1322
    "convenient method: setup enterBox"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1323
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1324
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1325
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1326
    box := EnterBox new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1327
    box title:(resources string:title) okText:(resources string:okText).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1328
    ^ box
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1329
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1330
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1331
askAndBrowseSelectorTitle:title action:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1332
    "convenient method: setup enterBox with text from codeView or selected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1333
     method for browsing based on a selector. Set action and launch box"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1334
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1335
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1336
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1337
    box := self enterBoxTitle:title okText:'browse'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1338
    box initialText:(self selectorToSearchFor).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1339
    box action:[:aString | self withCursor:(Cursor questionMark) do:[aBlock value:aString]].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1340
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1341
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1342
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1343
setSearchPattern:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1344
    codeView setSearchPattern:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1345
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1346
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1347
listBoxTitle:title okText:okText list:aList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1348
    "convenient method: setup a listBox & return it"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1349
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1350
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1351
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1352
    box := ListSelectionBox new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1353
    box okText:(resources string:okText).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1354
    box title:(resources string:title).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1355
    box list:aList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1356
    ^ box
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1357
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1358
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1359
showExplanation:someText
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1360
    "show explanation from Parser"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1361
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1362
    self notify:someText
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1363
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1364
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1365
stringToSearchFor
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1366
    "look in codeView and methodListView for a search-string when searching for classes/names"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1367
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1368
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1369
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1370
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1371
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1372
	sel := sel asString withoutSpaces
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1373
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1374
	sel isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1375
	    currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1376
		sel := currentClass name
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1377
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1378
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1379
	sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1380
	    sel := sel withoutSpaces
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1381
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1382
	    sel := ''
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1383
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1384
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1385
    ^ sel
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1386
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1387
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1388
findClassOfVariable:aVariableName accessWith:aSelector
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1389
    "this method returns the class, in which a variable
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1390
     is defined; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1391
     needs either #instVarNames or #classVarNames as aSelector."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1392
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1393
    |cls homeClass|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1394
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1395
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1396
     first, find the class, where the variable is declared
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1397
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1398
    cls := currentClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1399
    [cls notNil] whileTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1400
	((cls perform:aSelector) includes:aVariableName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1401
	    homeClass := cls.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1402
	    cls := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1403
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1404
	    cls := cls superclass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1405
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1406
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1407
    homeClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1408
	"nope, must be one below ... (could optimize a bit, by searching down
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1409
	 for the declaring class ...
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1410
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1411
	homeClass := currentClass
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1412
    ] ifFalse:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1413
"/        Transcript showCr:'starting search in ' , homeClass name.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1414
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1415
    ^ homeClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1416
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1417
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1418
enterBoxForSearchSelectorTitle:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1419
    "convenient method: setup enterBox with text from codeView or selected
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1420
     method for browsing based on a selector"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1421
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1422
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1423
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1424
    box := self enterBoxTitle:title okText:'search'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1425
    box initialText:(self selectorToSearchFor).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1426
    ^ box
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1427
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1428
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1429
enterBoxForCodeSelectionTitle:title okText:okText
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1430
    "convenient method: setup enterBox with text from codeview"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1431
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1432
    |sel box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1433
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1434
    box := self enterBoxTitle:(resources string:title) okText:(resources string:okText).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1435
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1436
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1437
	box initialText:(sel asString withoutSeparators)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1438
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1439
    ^ box
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1440
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1441
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1442
classesInFullProtocolHierarchy:aClass do:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1443
    "evaluate aBlock for all non-striked out classes in
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1444
     the hierarchy"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1445
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1446
    |index|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1447
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1448
    index := (classListView list size).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1449
    aClass withAllSuperclasses do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1450
	(classListView isInSelection:index) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1451
	    aBlock value:c
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1452
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1453
	index := index - 1
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1454
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1455
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1456
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1457
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1458
enterBoxForBrowseTitle:title action:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1459
    "convenient method: setup enterBox with text from codeView or selected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1460
     method for method browsing based on className/variable"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1461
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1462
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1463
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1464
    box := self enterBoxTitle:title okText:'browse'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1465
    box initialText:(self stringToSearchFor).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1466
    box action:[:aString | self withWaitCursorDo:[aBlock value:aString]].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1467
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1468
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1469
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1470
askBoxTitle:title okText:okText initialText:initialText action:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1471
    "convenient method: setup enterBox, and open it"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1472
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1473
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1474
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1475
    box := EnterBox new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1476
    box title:(resources string:title) okText:(resources string:okText).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1477
    box initialText:initialText.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1478
    box action:[:aString | self withWaitCursorDo:aBlock value:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1479
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1480
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1481
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1482
askAndBrowseMethodCategory:title action:aBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1483
    "convenient method: setup enterBox with initial being current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1484
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1485
    |sel box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1486
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1487
    box := self enterBoxTitle:title okText:'browse'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1488
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1489
    sel isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1490
	currentMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1491
	    sel := currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1492
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1493
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1494
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1495
	box initialText:(sel asString withoutSpaces)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1496
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1497
    box action:[:aString | self withWaitCursorDo:[aBlock value:aString]].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1498
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1499
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1500
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1501
classHierarchyDo:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1502
    "eavluate the 2-arg block for every class,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1503
     starting at Object; passing class and nesting level to the block."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1504
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1505
    |classes s classDict l|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1506
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1507
    classes := Smalltalk allClasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1508
    classDict := IdentityDictionary new:classes size.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1509
    classes do:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1510
	s := aClass superclass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1511
	s notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1512
	    l := classDict at:s ifAbsent:[nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1513
	    l isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1514
		l := OrderedCollection new:5.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1515
		classDict at:s put:l
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1516
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1517
	    l add:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1518
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1519
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1520
    self classHierarchyOf:Object level:0 do:aBlock using:classDict
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1521
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1522
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1523
classHierarchyOf:aClass level:level do:aBlock using:aDictionary
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1524
    "evaluate the 2-arg block for every subclass of aClass,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1525
     passing class and nesting level to the block."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1526
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1527
    |names subclasses|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1528
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1529
    aBlock value:aClass value:level.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1530
    subclasses := aDictionary at:aClass ifAbsent:[nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1531
    (subclasses size == 0) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1532
	names := subclasses collect:[:class | class name].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1533
	names sortWith:subclasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1534
	subclasses do:[:aSubClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1535
	    self classHierarchyOf:aSubClass level:(level + 1) do:aBlock using:aDictionary
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1536
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1537
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1538
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1539
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1540
compileCode:someCode
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1541
    (ReadStream on:someCode) fileIn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1542
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1543
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1544
extractClassAndSelectorFromSelectionInto:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1545
    "given a string which can be either 'class>>sel' or
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1546
     'class sel', extract className and selector, and call aBlock with
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1547
    the result."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1548
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1549
    |sel clsName isMeta sep s|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1550
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1551
    sel := codeView selection.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1552
    sel notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1553
	sel := sel asString withoutSeparators.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1554
	('*>>*' match:sel) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1555
	    sep := $>
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1556
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1557
	    ('* *' match:sel) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1558
		sep := Character space
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1559
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1560
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1561
	sep notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1562
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1563
	     extract class/sel from selection
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1564
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1565
	    s := ReadStream on:sel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1566
	    clsName := s upTo:sep.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1567
	    [s peek == sep] whileTrue:[s next].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1568
	    sel := s upToEnd.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1569
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1570
	    (clsName endsWith:'class') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1571
		isMeta := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1572
		clsName := clsName copyTo:(clsName size - 5)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1573
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1574
		isMeta := false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1575
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1576
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1577
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1578
    aBlock value:clsName value:sel value:isMeta
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1579
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1580
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1581
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1582
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1583
classesInHierarchy:aClass do:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1584
    |index|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1585
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1586
    index := (classListView list size).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1587
    aClass withAllSuperclasses do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1588
	(classListView isInSelection:index) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1589
	    aBlock value:c
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1590
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1591
	index := index - 1
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1592
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1593
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1594
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1595
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1596
askForMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1597
    |someCategories box txt|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1598
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1599
    someCategories := actualClass categories sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1600
    box := self listBoxTitle:'accept in which method category ?' okText:'accept' list:someCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1601
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1602
    lastMethodCategory isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1603
	txt := 'new methods'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1604
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1605
	txt := lastMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1606
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1607
    box initialText:txt.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1608
    box action:[:aString |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1609
		    ^ aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1610
	       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1611
    box showAtPointer.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1612
    ^ nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1613
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1614
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1615
warnLabel:what
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1616
    "set the title for some warning"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1617
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1618
    self label:('System Browser WARNING: ' , what)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1619
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1620
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1621
busyLabel:what with:someArgument
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1622
    "set the title for some warning"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1623
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1624
    self label:('System Browser:' , (resources string:what with:someArgument))
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1625
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1626
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1627
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1628
!SystemBrowser methodsFor:'method stuff'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1629
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1630
updateMethodListWithScroll:scroll
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1631
    |selectors scr first last|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1632
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1633
    methodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1634
	currentMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1635
	    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1636
		selectors := self listOfAllSelectorsInCategory:currentMethodCategory 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1637
					    inFullProtocolHierarchyOfClass:actualClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1638
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1639
		selectors := self listOfAllSelectorsInCategory:currentMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1640
						       ofClass:actualClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1641
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1642
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1643
	scr := scroll.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1644
	first := methodListView firstLineShown.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1645
	first ~~ 1 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1646
	    last := methodListView lastLineShown.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1647
	    selectors size <= (last - first + 1) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1648
		scr := true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1649
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1650
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1651
	methodListView list = selectors ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1652
	    scr ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1653
		methodListView contents:selectors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1654
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1655
		methodListView setContents:selectors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1656
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1657
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1658
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1659
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1660
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1661
methodSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1662
    "method selection has changed - update dependent views"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1663
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1664
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1665
	|index cls|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1666
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1667
	self updateCodeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1668
	self setAcceptAndExplainActionsForMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1669
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1670
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1671
	 if there is any autoSearch string, do the search
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1672
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1673
	autoSearch notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1674
	    codeView searchFwd:autoSearch ifAbsent:[]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1675
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1676
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1677
	fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1678
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1679
	     remove any bold attribute from classList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1680
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1681
	    1 to:classListView list size do:[:i |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1682
		classListView attributeAt:i remove:#bold.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1683
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1684
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1685
	     boldify the class where this method is implemented
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1686
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1687
	    currentMethod notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1688
		cls := currentMethod who at:1.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1689
		index := classListView list indexOf:(cls name).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1690
		index ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1691
		    classListView attributeAt:index add:#bold.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1692
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1693
		currentClass := cls.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1694
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1695
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1696
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1697
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1698
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1699
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1700
updateMethodList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1701
    self updateMethodListWithScroll:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1702
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1703
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1704
methodSelection:lineNr
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1705
    "user clicked on a method line - show code"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1706
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1707
    |selectorString selectorSymbol index|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1708
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1709
    (fullProtocol not and:[currentClass isNil]) ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1710
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1711
    selectorString := methodListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1712
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1713
     kludge: check if its a wrapped one
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1714
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1715
    (selectorString endsWith:' !!') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1716
	selectorString := selectorString copyTo:(selectorString size - 2)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1717
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1718
    selectorSymbol := selectorString asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1719
    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1720
	currentMethod := currentSelector := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1721
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1722
	 search which class implements the selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1723
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1724
	self classesInFullProtocolHierarchy:actualClass do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1725
	    (currentMethod isNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1726
	     and:[c implements:selectorSymbol]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1727
		currentSelector := selectorSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1728
		currentMethod := c compiledMethodAt:selectorSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1729
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1730
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1731
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1732
	currentSelector := selectorSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1733
	currentMethod := actualClass compiledMethodAt:selectorSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1734
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1735
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1736
    methodCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1737
	currentMethod notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1738
	    (currentMethodCategory = currentMethod category) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1739
		currentMethodCategory := currentMethod category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1740
		methodCategoryListView selectElement:currentMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1741
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1742
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1743
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1744
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1745
    self methodSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1746
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1747
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1748
listOfAllSelectorsInCategory:aCategory ofClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1749
    "answer a list of all selectors in a given method category 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1750
     of the argument, aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1751
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1752
    |newList searchCategory selector|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1753
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1754
    (aCategory = '* all *') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1755
	newList := aClass selectorArray asOrderedCollection
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1756
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1757
	(aCategory = '* no category *') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1758
	    searchCategory := nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1759
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1760
	    searchCategory := aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1761
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1762
	newList := OrderedCollection new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1763
	aClass methodArray with:aClass selectorArray do:[:aMethod :selector |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1764
	    |sel|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1765
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1766
	    (aMethod category = searchCategory) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1767
		aMethod isWrapped ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1768
		    sel := selector , ' !!'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1769
		] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1770
		    sel := selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1771
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1772
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1773
		"mhmh - can this happen ?"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1774
"/                (newList includes:sel) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1775
		    newList add:sel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1776
"/                ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1777
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1778
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1779
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1780
    (newList size == 0) ifTrue:[^ nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1781
    ^ newList sort
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1782
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1783
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1784
template
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1785
    "return a method definition template"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1786
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1787
    ^ 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1788
'message selector and argument names
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1789
    "comment stating purpose of message"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1790
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1791
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1792
    |temporaries|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1793
    statements
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1794
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1795
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1796
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1797
 change above template into real code.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1798
 Then ''accept'' either via the menu 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1799
 or via the keyboard (usually CMD-A).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1800
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1801
 You do not need this template; you can also
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1802
 select any existing methods code, change it,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1803
 and finally ''accept''.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1804
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1805
'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1806
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1807
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1808
listOfAllSelectorsInCategory:aCategory inFullProtocolHierarchyOfClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1809
    "answer a list of all selectors in a given method category 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1810
     of the argument, aClass and its superclasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1811
     Used with fullProtocol browsing."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1812
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1813
    |newList thisList searchCategory selector|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1814
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1815
    newList := Set new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1816
    self classesInFullProtocolHierarchy:aClass do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1817
	(aCategory = '* all *') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1818
	    newList addAll:(c selectorArray)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1819
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1820
	    (aCategory = '* no category *') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1821
		searchCategory := nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1822
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1823
		searchCategory := aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1824
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1825
	    c methodArray with:c selectorArray do:[:aMethod :selector |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1826
		(aMethod category = searchCategory) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1827
		    newList add:selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1828
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1829
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1830
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1831
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1832
    (newList size == 0) ifTrue:[^ nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1833
    ^ newList asOrderedCollection sort
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1834
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1835
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1836
checkMethodSelected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1837
    currentMethod isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1838
	self warn:'select a method first'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1839
	^ false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1840
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1841
    ^ true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1842
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1843
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1844
switchToMethodNamed:matchString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1845
    |aSelector method cat index classToSearch selectors|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1846
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1847
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1848
	showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1849
	    classToSearch := currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1850
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1851
	    classToSearch := currentClass class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1852
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1853
	selectors := classToSearch selectorArray.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1854
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1855
	((matchString ~= '*') and:[matchString includesMatchCharacters]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1856
	    index := selectors findFirst:[:element | matchString match:element]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1857
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1858
	    index := selectors indexOf:matchString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1859
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1860
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1861
	(index ~~ 0) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1862
	    aSelector := selectors at:index.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1863
	    method := classToSearch methodArray at:index.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1864
	    cat := method category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1865
	    cat isNil ifTrue:[cat := '* all *'].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1866
	    methodCategoryListView selectElement:cat.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1867
	    currentMethodCategory := cat.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1868
	    self methodCategorySelectionChanged.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1869
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1870
	    currentMethod := classToSearch compiledMethodAt:aSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1871
	    currentMethod notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1872
		currentSelector := aSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1873
		methodListView selectElement:aSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1874
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1875
	    self methodSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1876
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1877
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1878
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1879
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1880
switchToAnyMethodNamed:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1881
    |aSelector classToStartSearch aClass nm|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1882
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1883
    aSelector := aString asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1884
    currentClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1885
	currentClassHierarchy notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1886
	    classToStartSearch := currentClassHierarchy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1887
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1888
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1889
	classToStartSearch := currentClass 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1890
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1891
    classToStartSearch notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1892
	showInstance ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1893
	    classToStartSearch := classToStartSearch class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1894
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1895
	aClass := classToStartSearch whichClassImplements:aSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1896
	aClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1897
	    nm := aClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1898
	    showInstance ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1899
		((nm ~= 'Metaclass') and:[nm endsWith:'class']) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1900
		    nm := nm copyTo:(nm size - 5)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1901
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1902
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1903
	    self switchToClassNamed:nm.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1904
	    self switchToMethodNamed:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1905
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1906
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1907
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1908
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1909
!SystemBrowser methodsFor:'misc'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1910
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1911
updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1912
    |code aStream|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1913
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1914
    fullClass ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1915
	currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1916
	    code := currentClass source.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1917
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1918
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1919
	currentMethod notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1920
	    (codeView acceptAction isNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1921
	    and:[actualClass notNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1922
	    and:[currentMethodCategory notNil]]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1923
		self setAcceptAndExplainActionsForMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1924
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1925
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1926
	    code := currentMethod source.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1927
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1928
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1929
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1930
    codeView contents:code.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1931
    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1932
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1933
    self normalLabel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1934
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1935
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1936
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1937
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1938
instanceProtocol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1939
    "switch to instance protocol"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1940
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1941
    showInstance ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1942
	self checkSelectionChangeAllowed ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1943
	    classToggle turnOff.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1944
	    instanceToggle turnOn.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1945
	    showInstance := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1946
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1947
	    (variableListView notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1948
	    and:[variableListView hasSelection]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1949
		self unhilightMethodCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1950
		self unhilightMethods.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1951
		variableListView deselect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1952
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1953
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1954
	    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1955
		actualClass := currentClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1956
		self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1957
		self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1958
		self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1959
		self updateVariableList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1960
		^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1961
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1962
	    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1963
		self classSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1964
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1965
	    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1966
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1967
	    instanceToggle turnOff.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1968
	    classToggle turnOn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1969
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1970
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1971
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1972
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1973
classProtocol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1974
    "switch to class protocol"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1975
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1976
    showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1977
	self checkSelectionChangeAllowed ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1978
	    instanceToggle turnOff.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1979
	    classToggle turnOn.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1980
	    showInstance := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1981
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1982
	    (variableListView notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1983
	    and:[variableListView hasSelection]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1984
		self unhilightMethodCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1985
		self unhilightMethods.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1986
		variableListView deselect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1987
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1988
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1989
	    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1990
		actualClass := currentClass class.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1991
		self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1992
		self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1993
		self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1994
		self updateVariableList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1995
		^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1996
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1997
	    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1998
		self classSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1999
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2000
	    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2001
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2002
	    instanceToggle turnOn.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2003
	    classToggle turnOff
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2004
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2005
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2006
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2007
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2008
!SystemBrowser methodsFor:'method category stuff'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2009
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2010
updateMethodCategoryListWithScroll:scroll
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2011
    |categories|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2012
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2013
    methodCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2014
	fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2015
	    currentClassHierarchy notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2016
		categories := self listOfAllMethodCategoriesInFullProtocolHierarchy:currentClassHierarchy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2017
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2018
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2019
	    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2020
		categories := self listOfAllMethodCategoriesInClass:actualClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2021
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2022
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2023
	methodCategoryListView list = categories ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2024
	    scroll ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2025
		methodCategoryListView contents:categories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2026
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2027
		methodCategoryListView setContents:categories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2028
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2029
	    currentMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2030
		methodCategoryListView selectElement:currentMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2031
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2032
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2033
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2034
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2035
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2036
listOfAllMethodCategoriesInClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2037
    "answer a list of all method categories of the argument, aClass"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2038
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2039
    |newList cat|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2040
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2041
    newList := Text new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2042
    aClass methodArray do:[:aMethod |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2043
	cat := aMethod category.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2044
	cat isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2045
	    cat := '* no category *'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2046
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2047
	(newList includes:cat) ifFalse:[newList add:cat]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2048
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2049
    (newList size == 0) ifTrue:[^ nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2050
    newList add:'* all *'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2051
    ^ newList sort
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2052
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2053
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2054
methodCategorySelection:lineNr
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2055
    "user clicked on a method category line - show selectors"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2056
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2057
    |oldSelector|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2058
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2059
    oldSelector := currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2060
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2061
    (fullProtocol not and:[currentClass isNil]) ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2062
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2063
    currentMethodCategory := methodCategoryListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2064
    self methodCategorySelectionChanged.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2065
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2066
    "if there is only one method, show it right away"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2067
    methodListView list size == 1 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2068
	methodListView selection:1.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2069
	self methodSelection:1
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2070
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2071
	oldSelector notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2072
	    methodListView selectElement:oldSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2073
	    methodListView selection notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2074
		self methodSelection:methodListView selection.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2075
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2076
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2077
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2078
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2079
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2080
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2081
updateMethodCategoryList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2082
    self updateMethodCategoryListWithScroll:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2083
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2084
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2085
methodCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2086
    "method category selection has changed - update dependant views"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2087
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2088
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2089
	currentMethod := currentSelector := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2090
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2091
	self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2092
	self updateCodeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2093
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2094
	currentMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2095
	    methodCategoryListView selectElement:currentMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2096
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2097
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2098
	self setAcceptAndExplainActionsForMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2099
	self hilightMethodsInMethodCategoryList:false inMethodList:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2100
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2101
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2102
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2103
listOfAllMethodCategoriesInFullProtocolHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2104
    "answer a list of all method categories of the argument, aClass,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2105
     and all of its superclasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2106
     Used with fullProtocol browsing."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2107
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2108
    |newList cat|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2109
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2110
    newList := Text new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2111
    self classesInFullProtocolHierarchy:aClass do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2112
	c methodArray do:[:aMethod |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2113
	    cat := aMethod category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2114
	    cat isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2115
		cat := '* no category *'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2116
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2117
	    (newList includes:cat) ifFalse:[newList add:cat]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2118
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2119
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2120
    (newList size == 0) ifTrue:[^ nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2121
    newList add:'* all *'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2122
    ^ newList sort
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2123
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2124
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2125
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2126
checkMethodCategorySelected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2127
    currentMethodCategory isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2128
	self warn:'select a method category first'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2129
	^ false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2130
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2131
    ^ true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2132
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2133
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2134
whenMethodCategorySelected:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2135
    self checkMethodCategorySelected ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2136
	self withWaitCursorDo:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2137
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2138
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2139
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2140
copyMethodsFromClass:aClassName
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2141
    |class box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2142
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2143
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2144
	Symbol hasInterned:aClassName ifTrue:[:sym |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2145
	    (Smalltalk includesKey:sym) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2146
		class := Smalltalk at:sym
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2147
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2148
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2149
	class isBehavior ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2150
	    self warn:'no class named %1' with:aClassName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2151
	    ^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2152
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2153
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2154
	showInstance ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2155
	    class := class class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2156
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2157
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2158
	"show enterbox for category to copy from"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2159
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2160
	box := self enterBoxTitle:'name of category to copy from (matchpattern allowed, * for all):'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2161
			   okText:'copy'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2162
	box action:[:aString | self copyMethodsFromClass:class category:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2163
	box showAtPointer.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2164
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2165
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2166
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2167
copyMethodsFromClass:class category:category
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2168
    |source|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2169
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2170
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2171
"/        codeView abortAction:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2172
	Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2173
	    class methodArray do:[:aMethod |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2174
		(category match:aMethod category) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2175
		    source := aMethod source.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2176
		    codeView contents:source.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2177
		    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2178
		    actualClass compiler compile:source 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2179
					forClass:actualClass 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2180
				      inCategory:aMethod category
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2181
				       notifying:codeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2182
		    self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2183
		    self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2184
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2185
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2186
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2187
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2188
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2189
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2190
newMethodCategory:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2191
    |categories|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2192
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2193
    currentClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2194
	^ self warn:'select/create a class first'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2195
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2196
    categories := methodCategoryListView list.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2197
    categories isNil ifTrue:[categories := Text new].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2198
    (categories includes:aString) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2199
	categories add:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2200
	categories sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2201
	methodCategoryListView contents:categories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2202
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2203
    currentMethodCategory := aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2204
    self methodCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2205
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2206
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2207
!SystemBrowser methodsFor:'initialize / release'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2208
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2209
initialize
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2210
    super initialize.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2211
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2212
    self icon:(Form fromFile:(resources at:'ICON_FILE' default:'SBrowser.xbm')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2213
		  resolution:100).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2214
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2215
    showInstance := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2216
    fullClass := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2217
    fullProtocol := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2218
    aspect := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2219
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2220
    "inform me, when Smalltalk changes"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2221
    Smalltalk addDependent:self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2222
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2223
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2224
realize
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2225
    |v checkBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2226
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2227
    super realize.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2228
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2229
    checkBlock := [:lineNr | self checkSelectionChangeAllowed].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2230
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2231
    v := classCategoryListView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2232
    v notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2233
	v action:[:lineNr | self classCategorySelection:lineNr].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2234
	v selectConditionBlock:checkBlock.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2235
	v ignoreReselect:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2236
	v contents:(self listOfAllClassCategories).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2237
	self initializeClassCategoryMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2238
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2239
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2240
    v := classListView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2241
    v notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2242
	v action:[:lineNr | self classSelection:lineNr].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2243
	v selectConditionBlock:checkBlock.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2244
	v ignoreReselect:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2245
	self initializeClassMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2246
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2247
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2248
    v := methodCategoryListView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2249
    v notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2250
	v action:[:lineNr | self methodCategorySelection:lineNr].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2251
	v selectConditionBlock:checkBlock.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2252
	v ignoreReselect:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2253
	self initializeMethodCategoryMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2254
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2255
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2256
    v := methodListView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2257
    v notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2258
	v action:[:lineNr | self methodSelection:lineNr].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2259
	v selectConditionBlock:checkBlock.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2260
	v ignoreReselect:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2261
	self initializeMethodMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2262
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2263
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2264
    v := classMethodListView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2265
    v notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2266
	v action:[:lineNr | self classMethodSelection:lineNr].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2267
	v selectConditionBlock:checkBlock.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2268
	v ignoreReselect:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2269
	self initializeClassMethodMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2270
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2271
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2272
    v := variableListView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2273
    v notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2274
	v action:[:lineNr | self variableSelection:lineNr].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2275
	v ignoreReselect:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2276
	v toggleSelect:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2277
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2278
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2279
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2280
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2281
terminate
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2282
    (self checkSelectionChangeAllowed) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2283
	super terminate
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2284
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2285
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2286
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2287
destroy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2288
    "relese dependant - destroy popups"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2289
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2290
    Smalltalk removeDependent:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2291
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2292
	currentClass removeDependent:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2293
	currentClass := nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2294
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2295
    super destroy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2296
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2297
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2298
autoSearch:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2299
    "used with class-method list browsing. If true,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2300
     selecting an entry from the list will automatically
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2301
     search for the searchstring in the codeView"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2302
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2303
    self setSearchPattern:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2304
    autoSearch := aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2305
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2306
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2307
title:someString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2308
    myLabel := someString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2309
    self label:someString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2310
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2311
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2312
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2313
!SystemBrowser methodsFor:'initialize subviews'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2314
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2315
createClassListViewIn:frame
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2316
    "setup the classlist subview, with its toggles"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2317
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2318
    |v panel oldStyle|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2319
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2320
    self createTogglesIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2321
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2322
"/ oldStyle := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2323
oldStyle := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2324
    oldStyle ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2325
	v := ScrollableView for:SelectionInListView in:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2326
	v origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2327
	  extent:[frame width
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2328
		  @
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2329
		 (frame height
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2330
		  - (ViewSpacing // 2)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2331
		  - instanceToggle height
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2332
		  - instanceToggle borderWidth
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2333
		  + v borderWidth)].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2334
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2335
	classListView := v scrolledView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2336
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2337
	panel := VariableVerticalPanel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2338
		    origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2339
		    corner:[frame width
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2340
			    @
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2341
			    (frame height
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2342
			      - (ViewSpacing // 2)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2343
			      - instanceToggle height
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2344
			      - instanceToggle borderWidth
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2345
			      + v borderWidth)]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2346
			in:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2347
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2348
	v := ScrollableView for:SelectionInListView in:panel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2349
	v origin:(0.0 @ 0.0) corner:(1.0 @ 0.7).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2350
	classListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2351
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2352
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2353
	v := ScrollableView for:SelectionInListView in:panel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2354
	v origin:(0.0 @ 0.7)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2355
	  corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2356
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2357
	variableListView := v scrolledView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2358
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2359
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2360
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2361
createCodeViewIn:aView at:relY
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2362
    "setup the code view"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2363
    |v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2364
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2365
    v := HVScrollableView for:CodeView miniScrollerH:true miniScrollerV:false in:aView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2366
    v origin:(0.0 @ relY) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2367
    codeView := v scrolledView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2368
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2369
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2370
createTogglesIn:aFrame
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2371
    "create and setup the class/instance toggles"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2372
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2373
    |halfSpacing h classAction instanceAction|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2374
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2375
    classAction := [self classProtocol].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2376
    instanceAction := [self instanceProtocol].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2377
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2378
    instanceToggle := Toggle label:(resources at:'instance') in:aFrame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2379
    h := instanceToggle height.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2380
    instanceToggle origin:(0.0 @ 1.0) corner:(0.5 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2381
    instanceToggle topInset:(h negated).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2382
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2383
    instanceToggle turnOn.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2384
    instanceToggle pressAction:instanceAction.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2385
    instanceToggle releaseAction:classAction.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2386
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2387
    classToggle := Toggle label:(resources at:'class') in:aFrame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2388
    h := classToggle height.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2389
    classToggle origin:(0.5 @ 1.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2390
    classToggle topInset:(h negated).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2391
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2392
    classToggle turnOff.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2393
    classToggle pressAction:classAction.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2394
    classToggle releaseAction:instanceAction.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2395
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2396
     StyleSheet is3D ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2397
	instanceToggle leftInset:(ViewSpacing // 2).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2398
	classToggle leftInset:(ViewSpacing // 2).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2399
	instanceToggle rightInset:ViewSpacing - (ViewSpacing // 2).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2400
	classToggle rightInset:ViewSpacing - (ViewSpacing // 2).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2401
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2402
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2403
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2404
createCodeViewIn:aView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2405
    "setup the code view"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2406
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2407
    ^ self createCodeViewIn:aView at:0.25
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2408
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2409
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2410
setupForList:aList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2411
    "setup subviews to browse methods from a list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2412
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2413
    |vpanel v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2414
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2415
    vpanel := VariableVerticalPanel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2416
			origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2417
			corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2418
			    in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2419
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2420
    v := ScrollableView for:SelectionInListView in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2421
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2422
    classMethodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2423
    classMethodListView contents:aList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2424
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2425
    self createCodeViewIn:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2426
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2427
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2428
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2429
setupForAll
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2430
    "create subviews for a full browser"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2431
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2432
    |vpanel hpanel frame v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2433
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2434
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2435
		  in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2436
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2437
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2438
    v := HVScrollableView for:SelectionInListView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2439
			  miniScrollerH:true miniScrollerV:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2440
			  in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2441
    v origin:(0.0 @ 0.0) corner:(0.25 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2442
    classCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2443
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2444
    frame := View origin:(0.25 @ 0.0) corner:(0.5 @ 1.0) in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2445
    self createClassListViewIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2446
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2447
    v := HVScrollableView for:SelectionInListView miniScrollerH:true miniScrollerV:false in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2448
    v origin:(0.5 @ 0.0) corner:(0.75 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2449
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2450
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2451
    v := HVScrollableView for:SelectionInListView miniScrollerH:true miniScrollerV:false in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2452
    v origin:(0.75 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2453
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2454
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2455
    self createCodeViewIn:vpanel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2456
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2457
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2458
setupForClassHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2459
    "setup subviews to browse a class hierarchy"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2460
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2461
    |vpanel hpanel frame v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2462
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2463
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2464
				    corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2465
					in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2466
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2467
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2468
     notice: we use a different ratio here
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2469
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2470
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.4) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2471
    frame := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2472
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2473
    self createClassListViewIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2474
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2475
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2476
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2477
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2478
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2479
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2480
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2481
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2482
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2483
    self createCodeViewIn:vpanel at:0.4.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2484
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2485
    currentClassHierarchy := aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2486
    self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2487
    self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2488
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2489
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2490
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2491
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2492
setupForFullClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2493
    "setup subviews to browse a class as full text"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2494
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2495
    |vpanel hpanel v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2496
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2497
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2498
				    corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2499
					in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2500
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2501
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2502
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2503
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2504
    v origin:(0.0 @ 0.0) corner:(0.5 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2505
    classCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2506
    classCategoryListView contents:(self listOfAllClassCategories).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2507
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2508
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2509
    v origin:(0.5 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2510
    classListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2511
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2512
    self createCodeViewIn:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2513
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2514
    fullClass := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2515
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2516
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2517
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2518
setupForClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2519
    "create subviews for browsing a single class"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2520
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2521
    |vpanel hpanel frame v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2522
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2523
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0) 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2524
				    corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2525
					in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2526
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2527
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2528
    frame := View origin:(0.0 @ 0.0) corner:(0.5 @ 1.0)in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2529
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2530
    self createTogglesIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2531
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2532
    v := ScrollableView for:SelectionInListView in:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2533
    v origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2534
      extent:[frame width
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2535
	      @
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2536
	      (frame height 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2537
	       - (ViewSpacing // 2)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2538
	       - instanceToggle height
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2539
	       - instanceToggle borderWidth
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2540
	       + v borderWidth)].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2541
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2542
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2543
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2544
    v origin:(0.5 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2545
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2546
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2547
    self createCodeViewIn:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2548
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2549
    self switchToClass:aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2550
    actualClass := aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2551
    self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2552
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2553
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2554
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2555
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2556
setupForClassCategory:aClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2557
    "setup subviews to browse a class category"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2558
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2559
    |vpanel hpanel frame v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2560
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2561
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0) 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2562
				    corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2563
					in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2564
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2565
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2566
    frame  := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2567
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2568
    self createClassListViewIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2569
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2570
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2571
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2572
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2573
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2574
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2575
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2576
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2577
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2578
    self createCodeViewIn:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2579
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2580
    currentClassCategory := aClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2581
    self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2582
    self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2583
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2584
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2585
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2586
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2587
setupForClass:aClass selector:selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2588
    "setup subviews to browse a single method"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2589
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2590
    |v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2591
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2592
    v := ScrollableView for:CodeView in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2593
    v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2594
    codeView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2595
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2596
    currentClassCategory := aClass category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2597
    self switchToClass:aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2598
    actualClass := aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2599
    currentSelector := selector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2600
    currentMethod := currentClass compiledMethodAt:selector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2601
    currentMethodCategory := currentMethod category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2602
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2603
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2604
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2605
setupForClassList:aList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2606
    "setup subviews to browse classes from a list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2607
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2608
    |vpanel hpanel frame l v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2609
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2610
    vpanel := VariableVerticalPanel 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2611
		 origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2612
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2613
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2614
    frame := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2615
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2616
    self createClassListViewIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2617
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2618
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2619
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2620
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2621
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2622
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2623
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2624
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2625
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2626
    self createCodeViewIn:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2627
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2628
    l := aList collect:[:entry | entry name].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2629
    classListView list:(l sort).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2630
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2631
    self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2632
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2633
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2634
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2635
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2636
setupForClass:aClass methodCategory:aMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2637
    "setup subviews to browse a method category"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2638
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2639
    |vpanel v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2640
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2641
    vpanel := VariableVerticalPanel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2642
			origin:(0.0 @ 0.0) corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2643
			    in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2644
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2645
    v := ScrollableView for:SelectionInListView in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2646
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2647
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2648
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2649
    self createCodeViewIn:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2650
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2651
    currentClassCategory := aClass category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2652
    self switchToClass:aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2653
    actualClass := aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2654
    currentMethodCategory := aMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2655
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2656
    self updateCodeView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2657
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2658
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2659
setupForFullClassProtocol:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2660
    "setup subviews to browse a classes full protocol"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2661
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2662
    |vpanel hpanel frame v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2663
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2664
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2665
				    corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2666
					in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2667
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2668
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2669
     notice: we use a different ratio here
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2670
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2671
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.4) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2672
    frame := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2673
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2674
    self createClassListViewIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2675
    classListView multipleSelectOk:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2676
    classListView toggleSelect:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2677
    classListView strikeOut:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2678
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2679
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2680
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2681
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2682
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2683
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2684
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2685
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2686
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2687
    self createCodeViewIn:vpanel at:0.4.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2688
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2689
    currentClassHierarchy := actualClass := currentClass := aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2690
    fullProtocol := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2691
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2692
    self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2693
    self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2694
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2695
    self updateCodeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2696
    self updateVariableList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2697
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2698
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2699
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2700
setupForFullClassHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2701
    "setup subviews to browse a class hierarchy"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2702
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2703
    |vpanel hpanel frame v|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2704
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2705
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2706
				    corner:(1.0 @ 1.0)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2707
					in:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2708
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2709
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.4) in:vpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2710
    frame := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2711
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2712
    self createClassListViewIn:frame.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2713
    classListView multipleSelectOk:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2714
    classListView toggleSelect:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2715
    classListView strikeOut:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2716
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2717
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2718
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2719
    methodCategoryListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2720
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2721
    v := ScrollableView for:SelectionInListView in:hpanel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2722
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2723
    methodListView := v scrolledView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2724
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2725
"/    self setupActions.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2726
    self createCodeViewIn:vpanel at:0.4.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2727
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2728
    currentClassHierarchy := actualClass := aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2729
    fullProtocol := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2730
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2731
    self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2732
    self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2733
    self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2734
    self updateCodeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2735
    self updateVariableList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2736
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2737
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2738
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2739
!SystemBrowser methodsFor:'unused'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2740
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2741
listOfAllSelectorsInCategory:aCategory inHierarchyOfClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2742
    "answer a list of all selectors in a given method category 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2743
     of the argument, aClass and its superclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2744
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2745
    |newList thisList searchCategory selector|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2746
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2747
    newList := Set new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2748
    self classesInHierarchy:aClass do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2749
	(aCategory = '* all *') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2750
	    newList addAll:(c selectorArray)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2751
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2752
	    (aCategory = '* no category *') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2753
		searchCategory := nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2754
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2755
		searchCategory := aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2756
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2757
	    c methodArray with:c selectorArray do:[:aMethod :selector |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2758
		(aMethod category = searchCategory) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2759
		    newList add:selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2760
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2761
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2762
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2763
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2764
    (newList size == 0) ifTrue:[^ nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2765
    ^ newList asOrderedCollection sort
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2766
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2767
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2768
listOfAllMethodCategoriesInHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2769
    "answer a list of all method categories of the argument, aClass,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2770
     and all of its superclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2771
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2772
    |newList cat|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2773
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2774
    newList := Text new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2775
    self classesInHierarchy:aClass do:[:c |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2776
	c methodArray do:[:aMethod |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2777
	    cat := aMethod category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2778
	    cat isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2779
		cat := '* no category *'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2780
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2781
	    (newList includes:cat) ifFalse:[newList add:cat]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2782
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2783
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2784
    (newList size == 0) ifTrue:[^ nil].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2785
    newList add:'* all *'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2786
    ^ newList sort
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2787
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2788
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2789
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2790
!SystemBrowser methodsFor:'class stuff'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2791
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2792
switchToClass:newClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2793
    fullProtocol ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2794
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2795
	currentClass removeDependent:self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2796
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2797
    currentClass := newClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2798
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2799
	currentClass addDependent:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2800
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2801
    self normalLabel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2802
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2803
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2804
classSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2805
    |oldMethodCategory oldMethod oldSelector|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2806
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2807
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2808
	oldMethodCategory := currentMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2809
	oldMethod := currentMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2810
	oldSelector := currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2811
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2812
	showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2813
	    actualClass := currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2814
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2815
	    actualClass := currentClass class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2816
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2817
	currentMethodCategory := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2818
	currentMethod := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2819
	currentSelector := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2820
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2821
	self updateVariableList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2822
	self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2823
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2824
	oldMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2825
	    methodCategoryListView selectElement:oldMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2826
	    methodCategoryListView selection notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2827
		currentMethodCategory := oldMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2828
		self methodCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2829
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2830
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2831
	self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2832
	self updateCodeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2833
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2834
	fullClass ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2835
	    codeView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2836
		codeView cursor:Cursor execute.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2837
		Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2838
		    self compileCode:theCode asString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2839
		    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2840
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2841
		codeView cursor:Cursor normal.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2842
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2843
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2844
	    self classDefinition.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2845
	    codeView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2846
		codeView cursor:Cursor execute.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2847
		Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2848
		    (Compiler evaluate:theCode asString notifying:codeView)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2849
		    isBehavior ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2850
			self classCategoryUpdate.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2851
			self updateClassListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2852
			codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2853
		    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2854
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2855
		codeView cursor:Cursor normal.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2856
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2857
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2858
	codeView explainAction:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2859
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2860
	classCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2861
	    (currentClassCategory = currentClass category) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2862
		currentClassCategory := currentClass category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2863
		classCategoryListView selectElement:currentClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2864
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2865
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2866
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2867
	"set self for doits. This allows accessing the current class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2868
	 as self, and access to the class variables by name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2869
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2870
	codeView doItAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2871
	    |compiler|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2872
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2873
	    currentClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2874
		compiler := Compiler
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2875
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2876
		compiler := currentClass compiler
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2877
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2878
	    compiler 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2879
		evaluate:theCode 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2880
		in:nil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2881
		receiver:currentClass 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2882
		notifying:codeView 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2883
		logged:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2884
		ifFail:nil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2885
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2886
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2887
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2888
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2889
updateClassListWithScroll:scroll
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2890
    |classes oldClassName|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2891
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2892
    classListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2893
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2894
	 refetch in case we are not up to date
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2895
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2896
	(currentClass notNil and:[fullProtocol not]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2897
	    oldClassName := currentClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2898
	    currentClass := Smalltalk at:(oldClassName asSymbol).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2899
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2900
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2901
	currentClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2902
	    classes := self listOfAllClassesInCategory:currentClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2903
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2904
	    currentClassHierarchy notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2905
		classes := self listOfClassHierarchyOf:currentClassHierarchy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2906
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2907
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2908
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2909
	classListView list = classes ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2910
	    scroll ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2911
		classListView contents:classes
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2912
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2913
		classListView setContents:classes
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2914
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2915
	    oldClassName notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2916
		classListView setContents:classes.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2917
		classListView selectElement:oldClassName
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2918
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2919
		variableListView notNil ifTrue:[variableListView contents:nil]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2920
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2921
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2922
	scroll ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2923
	    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2924
		classListView scrollToBottom
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2925
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2926
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2927
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2928
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2929
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2930
classSelection:lineNr
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2931
    "user clicked on a class line - show method categories"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2932
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2933
    |classSymbol cls oldSelector|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2934
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2935
    (currentClassHierarchy notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2936
     and:[fullProtocol]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2937
	oldSelector := currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2938
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2939
	self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2940
	self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2941
	self updateVariableList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2942
	^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2943
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2944
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2945
    cls := Smalltalk classNamed:classListView selectionValue withoutSpaces.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2946
"
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2947
    classSymbol := classListView selectionValue withoutSpaces asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2948
    (Smalltalk includesKey:classSymbol) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2949
	cls := Smalltalk at:classSymbol
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2950
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2951
"
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2952
    cls notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2953
	self switchToClass:cls.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2954
	self classSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  2955
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2956
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2957
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2958
listOfAllClassesInCategory:aCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2959
    "return a list of all classes in a given category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2960
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2961
    |newList classList searchCategory string|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2962
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2963
    newList := Text new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2964
    (aCategory = '* all *') ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2965
	Smalltalk allBehaviorsDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2966
	    string := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2967
	    newList indexOf:string ifAbsent:[newList add:string]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2968
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2969
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2970
	(aCategory = '* hierarchy *') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2971
	    classList := Text new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2972
	    self classHierarchyDo:[:aClass :lvl|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2973
		string := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2974
		classList indexOf:string ifAbsent:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2975
		    classList add:string.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2976
		    newList add:(String new:lvl) , string
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2977
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2978
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2979
	    ^ newList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2980
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2981
	    (aCategory = '* no category *') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2982
		searchCategory := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2983
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2984
		searchCategory := aCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2985
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2986
	    Smalltalk allBehaviorsDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2987
		aClass isMeta ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2988
		    (aClass category = searchCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2989
			string := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2990
			newList indexOf:string ifAbsent:[newList add:string]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2991
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2992
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2993
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2994
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2995
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2996
    (newList size == 0) ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2997
    ^ newList sort
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2998
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2999
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3000
doClassMenu:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3001
    "a helper - check if class is selected and evaluate aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3002
     while showing waitCursor"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3003
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3004
    self checkClassSelected ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3005
	self withWaitCursorDo:aBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3006
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3007
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3008
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3009
checkClassSelected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3010
    "warn and return false, if no class is selected"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3011
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3012
    currentClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3013
	self warn:'select a class first'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3014
	^ false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3015
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3016
    ^ true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3017
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3018
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3019
updateClassList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3020
    self updateClassListWithScroll:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3021
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3022
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3023
listOfClassHierarchyOf:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3024
    "return a hierarchy class-list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3025
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3026
    |classes|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3027
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3028
    classes := aClass allSuperclasses reverse , (Array with:aClass).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3029
    fullProtocol ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3030
	classes := classes , aClass allSubclassesInOrder
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3031
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3032
    ^ classes collect:[:c | c name]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3033
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3034
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3035
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3036
templateFor:className in:cat
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3037
    "return a class definition template - be smart in what is offered initially"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3038
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3039
    |aString name i|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3040
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3041
    name := 'NewClass'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3042
    i := 1.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3043
    [name knownAsSymbol and:[Smalltalk includesKey:name asSymbol]] whileTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3044
	i := i + 1.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3045
	name := 'NewClass' , i printString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3046
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3047
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3048
    aString := className , ' subclass:#' , name , '
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3049
	instanceVariableNames: '''' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3050
	classVariableNames: ''''    
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3051
	poolDictionaries: ''''
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3052
	category: '''.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3053
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3054
    cat notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3055
	aString := aString , cat
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3056
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3057
    aString := aString , '''
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3058
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3059
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3060
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3061
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3062
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3063
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3064
 Replace ''' , className , ''', ''', name , ''' and
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3065
 the empty string arguments by true values.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3066
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3067
 Install (or change) the class by ''accepting'',
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3068
 either via the menu or the keyboard (usually CMD-A).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3069
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3070
 To be nice to others (and yourself later), do not forget to
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3071
 add some documentation; either under the classes documentation
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3072
 protocol, or as a class comment.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3073
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3074
'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3075
    ^ aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3076
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3077
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3078
classClassDefinitionTemplateFor:name in:cat
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3079
    "common helper for newClass and newSubclass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3080
     - show a template to define class name in category cat.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3081
     Also, set acceptaction to install the class."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3082
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3083
    currentMethodCategory := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3084
    currentMethod := currentSelector := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3085
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3086
    classListView deselect.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3087
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3088
    fullClass ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3089
	methodCategoryListView contents:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3090
	methodListView contents:nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3091
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3092
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3093
    codeView contents:(self templateFor:name in:cat).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3094
    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3095
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3096
    codeView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3097
	codeView cursor:Cursor execute.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3098
	Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3099
	    |cls|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3100
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3101
	    cls := (Compiler evaluate:theCode asString notifying:codeView).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3102
	    cls isBehavior ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3103
		codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3104
		self classCategoryUpdate.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3105
		self updateClassListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3106
		self switchToClassNamed:(cls name).
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3107
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3108
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3109
	codeView cursor:(Cursor normal).
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3110
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3111
    codeView explainAction:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3112
    self switchToClass:nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3113
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3114
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3115
renameCurrentClassTo:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3116
    "helper - do the rename"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3117
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3118
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3119
	|oldName oldSym newSym|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3120
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3121
	oldName := currentClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3122
	oldSym := oldName asSymbol.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3123
"
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3124
	currentClass setName:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3125
	newSym := aString asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3126
	Smalltalk at:oldSym put:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3127
	Smalltalk removeKey:oldSym.            
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3128
	Smalltalk at:newSym put:currentClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3129
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3130
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3131
	currentClass renameTo:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3132
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3133
	Smalltalk renameClass:currentClass to:aString.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3134
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3135
	self updateClassList.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3136
	self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3137
	self updateMethodListWithScroll:false.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3138
	self withWaitCursorDo:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3139
	    Transcript showCr:('searching for users of ' , oldSym); endEntry.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3140
	    self class browseReferendsOf:oldSym warnIfNone:false
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3141
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3142
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3143
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3144
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3145
switchToClassNamed:aString
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3146
    |classSymbol theClass newCat|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3147
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3148
    aString knownAsSymbol ifFalse:[^ self].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3149
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3150
    classSymbol := aString asSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3151
    theClass := Smalltalk at:classSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3152
    theClass isBehavior ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3153
	classCategoryListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3154
	    currentClassHierarchy isNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3155
		((newCat := theClass category) ~= currentClassCategory) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3156
		    currentClassCategory := newCat.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3157
		    newCat isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3158
			classCategoryListView selectElement:'* no category *'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3159
		    ] ifFalse:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3160
			classCategoryListView selectElement:newCat.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3161
		    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3162
		    "/ classCategoryListView makeSelectionVisible.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3163
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3164
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3165
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3166
	self updateClassList.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3167
	self switchToClass:theClass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3168
	classListView selectElement:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3169
	self classSelectionChanged
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3170
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3171
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3172
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3173
switchToClassNameMatching:aMatchString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3174
    |classNames thisName box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3175
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3176
    classNames := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3177
    Smalltalk allBehaviorsDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3178
	thisName := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3179
	(aMatchString match:thisName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3180
	    classNames add:thisName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3181
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3182
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3183
    (classNames size == 0) ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3184
    (classNames size == 1) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3185
	^ self switchToClassNamed:(classNames at:1)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3186
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3187
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3188
    box := self listBoxTitle:'select class to switch to:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3189
		      okText:'ok'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3190
			list:classNames sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3191
    box action:[:aString | self switchToClassNamed:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3192
    box showAtPointer
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3193
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3194
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3195
!SystemBrowser methodsFor:'variable stuff'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3196
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3197
updateVariableList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3198
    |l subList flags last nameAccessSelector class oldSelection|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3199
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3200
    variableListView isNil ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3201
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3202
    oldSelection := variableListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3203
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3204
    l := OrderedCollection new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3205
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3206
     show classVars, if classProtocol is shown (instead of classInstance vars)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3207
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3208
    showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3209
	nameAccessSelector := #instVarNames
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3210
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3211
	nameAccessSelector := #classVarNames
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3212
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3213
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3214
    class := currentClass notNil ifTrue:[currentClass] ifFalse:[actualClass].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3215
    class isNil ifTrue:[class := currentClassHierarchy].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3216
    class withAllSuperclasses do:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3217
	|ignore|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3218
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3219
	ignore := fullProtocol 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3220
		  and:[classListView valueIsInSelection:(aClass name asString)].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3221
	ignore ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3222
	    subList := aClass perform:nameAccessSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3223
	    subList size ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3224
		l := l , (subList asOrderedCollection reverse).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3225
		l := l , (OrderedCollection with:'---- ' , aClass name , ' ---------').
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3226
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3227
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3228
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3229
    l reverse.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3230
    variableListView setAttributes:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3231
    variableListView list:l.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3232
    l keysAndValuesDo:[:index :entry |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3233
	(entry startsWith:'---') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3234
	    variableListView attributeAt:index put:#disabled.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3235
	    last := index
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3236
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3237
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3238
    last notNil ifTrue:[variableListView scrollToLine:last].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3239
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3240
    oldSelection notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3241
	variableListView selectElement:oldSelection
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3242
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3243
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3244
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3245
unhilightMethods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3246
    "unhighlight items in method list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3247
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3248
    variableListView isNil ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3249
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3250
    methodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3251
	1 to:methodListView list size do:[:entry |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3252
	     methodListView attributeAt:entry put:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3253
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3254
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3255
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3256
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3257
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3258
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3259
hilightMethodsInMethodCategoryList:inCat inMethodList:inMethods 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3260
    "search for methods  which access the selected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3261
     variable, and highlight them"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3262
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3263
    |name idx redefinedSelectors|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3264
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3265
    variableListView isNil ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3266
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3267
    inCat ifTrue:[self unhilightMethodCategories].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3268
    inMethods ifTrue:[self unhilightMethods].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3269
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3270
    actualClass isNil ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3271
    (methodCategoryListView isNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3272
    and:[methodListView isNil]) ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3273
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3274
    name := variableListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3275
    name isNil ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3276
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3277
    self withCursor:(Cursor questionMark) do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3278
	|classes filter any|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3279
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3280
	classes := Array with:currentClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3281
	currentClassHierarchy notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3282
	    fullProtocol ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3283
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3284
	    classes := classes , currentClass allSuperclasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3285
	    redefinedSelectors := IdentitySet new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3286
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3287
	showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3288
	    filter := self class filterToSearchInstRefsTo:name modificationsOnly:false 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3289
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3290
	    filter := self class filterToSearchClassRefsTo:name modificationsOnly:false 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3291
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3292
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3293
	any := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3294
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3295
	 highlight the method that ref this variable
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3296
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3297
	classes do:[:someClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3298
	    someClass methodArray with:someClass selectorArray 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3299
	    do:[:method :selector |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3300
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3301
		(inCat
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3302
		or:[methodListView list notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3303
		    and:[methodListView list includes:selector]])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3304
		ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3305
		    (redefinedSelectors isNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3306
		    or:[(redefinedSelectors includes:selector) not])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3307
		   ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3308
		       (filter value:someClass value:method value:selector) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3309
			   |idx cat|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3310
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3311
			   (inCat
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3312
			   and:[methodCategoryListView notNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3313
			   and:[methodCategoryListView list notNil]]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3314
			       cat := method category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3315
			       "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3316
				highlight the methodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3317
			       "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3318
			       idx := methodCategoryListView list indexOf:cat.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3319
			       idx ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3320
				   methodCategoryListView attributeAt:idx put:#bold.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3321
			       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3322
			   ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3323
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3324
			   (inMethods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3325
			   and:[methodListView notNil 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3326
			   and:[methodListView list notNil]]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3327
			       "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3328
				highlight the method
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3329
			       "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3330
			       idx := methodListView list indexOf:selector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3331
			       idx ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3332
				   methodListView attributeAt:idx put:#bold.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3333
			       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3334
			       any := true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3335
			   ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3336
		       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3337
		       redefinedSelectors notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3338
			   redefinedSelectors add:selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3339
		       ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3340
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3341
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3342
	    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3343
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3344
	any ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3345
	    self setSearchPattern:name
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3346
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3347
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3348
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3349
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3350
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3351
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3352
hilightMethodsInMethodCategoryList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3353
    "search for methods  which access the selected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3354
     variable, and highlight them"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3355
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3356
    self hilightMethodsInMethodCategoryList:true inMethodList:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3357
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3358
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3359
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3360
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3361
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3362
unhilightMethodCategories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3363
    "unhighlight items in method list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3364
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3365
    variableListView isNil ifTrue:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3366
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3367
    methodCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3368
	1 to:methodCategoryListView list size do:[:entry |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3369
	    methodCategoryListView attributeAt:entry put:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3370
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3371
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3372
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3373
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3374
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3375
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3376
hilightMethodsInMethodList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3377
    "search for methods  which access the selected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3378
     variable, and highlight them"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3379
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3380
    self hilightMethodsInMethodCategoryList:false inMethodList:true 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3381
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3382
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3383
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3384
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3385
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3386
!SystemBrowser methodsFor:'class list menu'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3387
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3388
classDefinition
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3389
    "show class definition in codeView and setup accept-action for
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3390
     a class-definition change.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3391
     Extract documentation either from a documentation method or
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3392
     from the comment - not a biggy, but beginners will like
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3393
     it when exploring the system."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3394
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3395
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3396
	|m s aStream isComment|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3397
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3398
	aStream := WriteStream on:(String new:200).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3399
	currentClass fileOutDefinitionOn:aStream.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3400
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3401
	currentClass isLoaded ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3402
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3403
	     add documentation as a comment, if there is any
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3404
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3405
	    m := currentClass class compiledMethodAt:#documentation.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3406
	    m notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3407
		s := m comment.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3408
		isComment := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3409
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3410
		"try comment"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3411
		s := currentClass comment.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3412
		s notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3413
		    isComment := true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3414
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3415
	    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3416
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3417
	s notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3418
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3419
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3420
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3421
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3422
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3423
	    aStream nextPut:$" ; cr; nextPutAll:' Documentation:'; cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3424
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3425
	    aStream nextPutAll:s.    
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3426
	    aStream cr; cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3427
	    aStream nextPutAll:' Notice: '; cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3428
	    aStream nextPutAll:'   the above string has been extracted from the classes '.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3429
	    aStream nextPutAll:(isComment ifTrue:['comment.'] ifFalse:['documentation method.']).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3430
	    aStream cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3431
	    aStream nextPutAll:'   It will not preserved when accepting a new class definition.'; cr.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3432
	    aStream nextPut:$".
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3433
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3434
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3435
	codeView contents:(aStream contents).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3436
	codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3437
	codeView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3438
	    codeView cursor:Cursor execute.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3439
	    Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3440
		(Compiler evaluate:theCode asString notifying:codeView)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3441
		isBehavior ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3442
		    codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3443
		    self classCategoryUpdate.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3444
		    self updateClassListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3445
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3446
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3447
	    codeView cursor:Cursor normal.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3448
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3449
	codeView explainAction:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3450
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3451
	methodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3452
	    methodListView deselect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3453
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3454
	aspect := #definition.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3455
	self normalLabel
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3456
    ]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3457
!
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3458
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3459
initializeClassMenu
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3460
    |labels menu|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3461
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3462
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3463
					'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3464
					'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3465
					'printOut protocol'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3466
				      " 'printOut full protocol' "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3467
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3468
					'SPAWN_CLASS' 
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3469
					'spawn full protocol' 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3470
					'spawn hierarchy' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3471
					'spawn subclasses' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3472
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3473
					'hierarchy' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3474
					'definition' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3475
					'comment' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3476
					'class instvars' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3477
				      " 'protocols' "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3478
					'-'
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3479
"/                                        'variable search'
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3480
					'class refs'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3481
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3482
					'new class'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3483
					'new subclass'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3484
					'rename ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3485
					'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3486
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3487
    menu := PopUpMenu labels:labels
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3488
		   selectors:#(classFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3489
			       classPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3490
			       classPrintOutProtocol
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3491
			     " classPrintOutFullProtocol "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3492
			       nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3493
			       classSpawn
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3494
			       classSpawnFullProtocol
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3495
			       classSpawnHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3496
			       classSpawnSubclasses
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3497
			       nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3498
			       classHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3499
			       classDefinition
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3500
			       classComment
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3501
			       classClassInstVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3502
			     "  classProtocols "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3503
			       nil
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3504
"/                               variables
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3505
			       classRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3506
			       nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3507
			       classNewClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3508
			       classNewSubclass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3509
			       classRename
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3510
			       classRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3511
		    receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3512
			 for:classListView.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3513
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3514
    fullProtocol ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3515
	classListView middleButtonMenu:menu. 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3516
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3517
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3518
    self initializeVariableListMenu.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3519
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3520
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3521
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3522
classFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3523
    "fileOut the current class.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3524
     Catch errors (sure, you like to know if it failed) and
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3525
     warn if any)"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3526
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3527
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3528
	self busyLabel:'saving %1' with:currentClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3529
	Class fileOutErrorSignal handle:[:ex |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3530
	    self warn:'cannot create: %1' with:ex parameter.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3531
	    ex return.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3532
	] do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3533
	    currentClass fileOut.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3534
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3535
	self normalLabel.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3536
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3537
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3538
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3539
doClassMenuWithSelection:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3540
    "a helper - if there is a selection, which represents a classes name,
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3541
     evaluate aBlock, passing that class and optional selector as arguments.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3542
     Otherwise, check if a class is selected and evaluate aBlock with the
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3543
     current class."
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3544
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3545
    |string words clsName cls sel isMeta w|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3546
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3547
    string := codeView selection.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3548
    string notNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3549
	self extractClassAndSelectorFromSelectionInto:[:c :s :m |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3550
	    clsName := c.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3551
	    sel := s.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3552
	    isMeta := m.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3553
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3554
	clsName isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3555
	    string := string asString withoutSeparators.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3556
	    words := string asCollectionOfWords.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3557
	    words notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3558
		clsName := words first.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3559
		(clsName endsWith:'class') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3560
		    isMeta := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3561
		    clsName := clsName copyTo:(clsName size - 5)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3562
		] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3563
		    isMeta := false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3564
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3565
		sel := Parser selectorInExpression:string.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3566
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3567
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3568
	clsName notNil ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3569
	    (cls := Smalltalk classNamed:clsName) notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3570
		isMeta ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3571
		    cls := cls class
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3572
		].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3573
		self withWaitCursorDo:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3574
		    aBlock value:cls value:sel.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3575
		].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3576
		^ self
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3577
	    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3578
		self warn:'no class named: %1 - spawning current' with:clsName
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3579
	    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3580
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3581
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3582
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3583
    classMethodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3584
	sel := classMethodListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3585
	sel notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3586
	    sel := self selectorFromClassMethodString:sel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3587
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3588
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3589
    self doClassMenu:[aBlock value:currentClass value:sel]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3590
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3591
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3592
classSpawn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3593
    "create a new SystemBrowser browsing current class,
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3594
     or if there is a selection, spawn a browser on the selected class
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3595
     even a class/selector pair can be specified."
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3596
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3597
    |browser|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3598
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3599
    self doClassMenuWithSelection:[:cls :sel |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3600
	cls isMeta ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3601
	    Smalltalk allBehaviorsDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3602
		aClass class == cls ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3603
		    browser := self class browseClass:aClass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3604
		    browser classProtocol.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3605
		    sel notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3606
			browser switchToMethodNamed:sel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3607
		    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3608
		    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3609
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3610
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3611
	    self warn:'oops, no class for this metaclass'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3612
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3613
	].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3614
	browser := self class browseClass:cls. 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3615
	cls hasMethods ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3616
	    browser classProtocol.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3617
	].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3618
	sel notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3619
	    browser switchToMethodNamed:sel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3620
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3621
    ]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3622
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3623
    "
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3624
     select 'Smalltalk allClassesDo:' and use spawn from the class menu
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3625
     select 'Smalltalk'               and use spawn from the class menu
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3626
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3627
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3628
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3629
classSpawnHierarchy
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3630
    "create a new HierarchyBrowser browsing current class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3631
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3632
    self doClassMenuWithSelection:[:cls :sel |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3633
	self class browseClassHierarchy:cls 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3634
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3635
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3636
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3637
classSpawnSubclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3638
    "create a new browser browsing current class's subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3639
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3640
    |subs|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3641
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3642
    self doClassMenuWithSelection:[:cls :sel |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3643
	subs := cls allSubclasses.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3644
	(subs notNil and:[subs size ~~ 0]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3645
	    self class browseClasses:subs title:('subclasses of ' , cls name)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3646
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3647
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3648
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3649
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3650
classPrintOutFullProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3651
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3652
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3653
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3654
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3655
	currentClass printOutFullProtocolOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3656
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3657
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3658
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3659
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3660
classPrintOutProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3661
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3662
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3663
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3664
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3665
	currentClass printOutProtocolOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3666
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3667
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3668
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3669
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3670
classPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3671
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3672
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3673
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3674
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3675
	currentClass printOutOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3676
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3677
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3678
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3679
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3680
classHierarchy
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3681
    "show current classes hierarchy in codeView"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3682
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3683
    |aStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3684
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3685
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3686
	aStream := WriteStream on:(String new:200).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3687
	actualClass printHierarchyOn:aStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3688
	codeView contents:(aStream contents).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3689
	codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3690
	codeView acceptAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3691
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3692
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3693
	    methodListView deselect
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3694
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3695
	aspect := #hierarchy. 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3696
	self normalLabel
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3697
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3698
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3699
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3700
classNewClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3701
    "create a class-definition prototype in codeview"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3702
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3703
    |nm|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3704
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3705
    currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3706
	nm := currentClass superclass name 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3707
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3708
	nm := 'Object'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3709
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3710
    self classClassDefinitionTemplateFor:nm in:currentClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3711
    aspect := nil.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3712
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3713
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3714
classClassInstVars
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3715
    "show class instance variables in codeView and setup accept-action
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3716
     for a class-instvar-definition change"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3717
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3718
    |s|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3719
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3720
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3721
	s := WriteStream on:(String new).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3722
	currentClass fileOutClassInstVarDefinitionOn:s.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3723
	codeView contents:(s contents).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3724
	codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3725
	codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3726
	    codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3727
	    Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3728
		Compiler evaluate:theCode asString notifying:codeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3729
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3730
		self updateClassList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3731
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3732
	    codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3733
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3734
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3735
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3736
	    methodListView deselect
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3737
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3738
	aspect := #classInstVars.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3739
	self normalLabel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3740
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3741
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3742
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3743
classSpawnFullProtocol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3744
    "create a new browser, browsing current classes full protocol"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3745
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3746
    self doClassMenuWithSelection:[:cls :sel |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3747
	self class browseFullClassProtocol:cls 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3748
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3749
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3750
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3751
classProtocols
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3752
     ^ self
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3753
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3754
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3755
classRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3756
    "user requested remove of current class and all subclasses -
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3757
     count subclasses and let user confirm removal."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3758
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3759
    |count t box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3760
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3761
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3762
	count := currentClass allSubclasses size.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3763
	t := 'remove ' , currentClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3764
	count ~~ 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3765
	   t := t , '\(with ' , count printString , ' subclass'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3766
	   count ~~ 1 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3767
		t := t , 'es'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3768
	   ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3769
	   t := (t , ')') withCRs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3770
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3771
	box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3772
		   title:t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3773
		   yesText:(resources at:'remove')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3774
		   noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3775
	box confirm ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3776
	    "after querying user - do really remove current class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3777
	     and all subclasses
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3778
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3779
	    self doClassMenu:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3780
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3781
		 query ?
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3782
		"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3783
		currentClass allSubclassesDo:[:aSubClass |
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3784
		    (CheckForInstancesWhenRemovingClasses not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3785
		    or:[aSubClass hasInstances not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3786
		    or:[self confirm:(aSubClass name , ' has instances - remove anyway ?')]])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3787
			ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3788
			    Smalltalk removeClass:aSubClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3789
		    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3790
		].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3791
		(CheckForInstancesWhenRemovingClasses not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3792
		or:[currentClass hasInstances not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3793
		or:[self confirm:(currentClass name , ' has instances - remove anyway ?')]])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3794
		    ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3795
			Smalltalk removeClass:currentClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3796
		].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3797
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3798
		self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3799
		Smalltalk changed.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3800
		self updateClassList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3801
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3802
		"if it was the last in its category, update class category list"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3803
"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3804
		classListView numberOfLines == 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3805
		    self updateClassCategoryListWithScroll:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3806
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3807
"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3808
		methodCategoryListView notNil ifTrue:[methodCategoryListView contents:nil].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3809
		methodListView notNil ifTrue:[methodListView contents:nil].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3810
		codeView contents:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3811
		codeView modified:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3812
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3813
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3814
    ]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3815
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3816
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3817
classComment
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3818
    "show the classes comment in the codeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3819
     Also, set acceptaction to change the comment."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3820
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3821
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3822
	codeView contents:(currentClass comment).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3823
	codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3824
	codeView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3825
	    Object abortSignal catch:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3826
		lockUpdates := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3827
		currentClass comment:theCode asString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3828
		codeView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3829
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3830
	    lockUpdates := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3831
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3832
	codeView explainAction:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3833
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3834
	methodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3835
	    methodListView deselect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3836
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3837
	aspect := #comment.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3838
	self normalLabel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3839
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3840
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3841
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3842
classRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3843
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3844
	self withCursor:(Cursor questionMark) do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3845
	    self class browseReferendsOf:currentClass name asSymbol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3846
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3847
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3848
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3849
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3850
classNewSubclass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3851
    "create a subclass-definition prototype in codeview"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3852
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3853
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3854
	self classClassDefinitionTemplateFor:(currentClass name) 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3855
					  in:(currentClass category).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3856
	aspect := nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3857
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3858
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3859
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3860
classUses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3861
    "a powerful tool, when trying to learn more about where
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3862
     a class is used. This one searches all uses of a class,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3863
     and shows a list of uses - try it and like it"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3864
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3865
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3866
	self withCursor:(Cursor questionMark) do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3867
	    self class browseUsesOf:currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3868
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3869
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3870
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3871
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3872
classRename
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3873
    "launch an enterBox for new name and query user"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3874
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3875
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3876
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3877
    self checkClassSelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3878
    box := self enterBoxTitle:(resources string:'rename %1 to:' with:currentClass name) okText:'rename'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3879
    box initialText:(currentClass name).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3880
    box action:[:aString | self renameCurrentClassTo:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3881
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3882
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3883
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3884
classSpawnFullHierarchy
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3885
    "create a new HierarchyBrowser browsing current class"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3886
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3887
    self doClassMenuWithSelection:[:cls :sel |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3888
	self class browseFullClassHierarchy:cls 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3889
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3890
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3891
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3892
!SystemBrowser methodsFor:'class category stuff'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3893
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3894
checkClassCategorySelected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3895
    currentClassCategory isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3896
	self warn:'select a class category first'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3897
	^ false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3898
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3899
    ^ true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3900
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3901
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3902
listOfAllClassCategories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3903
    "return a list of all class categories"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3904
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3905
    |newList cat|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3906
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3907
    newList := Text with:'* all *' with:'* hierarchy *'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3908
    Smalltalk allBehaviorsDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3909
	cat := aClass category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3910
	cat isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3911
	    cat := '* no category *'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3912
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3913
	newList indexOf:cat ifAbsent:[newList add:cat]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3914
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3915
    newList sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3916
    ^ newList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3917
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3918
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3919
classCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3920
    "class category has changed - update dependent views"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3921
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3922
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3923
	self switchToClass:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3924
	actualClass := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3925
	currentMethodCategory := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3926
	currentMethod := currentSelector := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3927
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3928
	self updateClassList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3929
	self updateMethodCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3930
	self updateMethodList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3931
	self updateCodeView.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3932
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3933
	codeView explainAction:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3934
	codeView acceptAction:nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3935
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3936
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3937
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3938
classCategorySelection:lineNr
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3939
    "user clicked on a class category line - show classes.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3940
     If switching to hierarchy or all, keep current selections"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3941
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3942
    |newCategory oldClass classIndex index|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3943
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3944
    newCategory := classCategoryListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3945
    (newCategory startsWith:'*') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3946
	"etiher all or hierarchy;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3947
	 remember current selections and switch after showing class list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3948
	oldClass := currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3949
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3950
    currentClassCategory := newCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3951
    oldClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3952
	self classCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3953
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3954
	self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3955
	    self updateClassList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3956
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3957
	"stupid - search for class name in (indented) list"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3958
	index := 1.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3959
	classListView list do:[:elem |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3960
	    (elem endsWith:(oldClass name)) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3961
		classIndex := index
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3962
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3963
	    index := index + 1
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3964
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3965
	classIndex notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3966
	    classListView selection:classIndex.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3967
	    self switchToClass:(Smalltalk at:(oldClass name asSymbol))
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3968
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3969
	    self normalLabel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3970
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3971
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3972
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3973
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3974
updateClassCategoryListWithScroll:scroll
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3975
    |oldClassCategory oldClass oldMethodCategory oldMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3976
     oldSelector newCategoryList|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3977
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3978
    classMethodListView notNil ifTrue:[ ^ self ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3979
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3980
    oldClassCategory := currentClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3981
    oldClass := currentClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3982
    oldMethodCategory := currentMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3983
    oldMethod := currentMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3984
    oldMethod notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3985
	oldSelector := currentSelector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3986
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3987
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3988
    classCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3989
	newCategoryList := self listOfAllClassCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3990
	newCategoryList = classCategoryListView list ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3991
	    scroll ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3992
		classCategoryListView contents:newCategoryList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3993
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3994
		classCategoryListView setContents:newCategoryList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3995
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3996
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3997
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3998
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  3999
    oldClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4000
	classCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4001
	    classCategoryListView selectElement:oldClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4002
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4003
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4004
    classListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4005
	oldClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4006
	    classListView selectElement:(oldClass name)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4007
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4008
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4009
    oldMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4010
	methodCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4011
	    methodCategoryListView selectElement:oldMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4012
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4013
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4014
    oldSelector notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4015
	methodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4016
	    methodListView selectElement:oldSelector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4017
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4018
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4019
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4020
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4021
updateClassCategoryList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4022
    self updateClassCategoryListWithScroll:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4023
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4024
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4025
allClassesInCurrentCategoryInOrderDo:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4026
    "evaluate aBlock for all classes in the current class category;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4027
     superclasses come first - then subclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4028
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4029
    |classes|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4030
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4031
    currentClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4032
	classes := OrderedCollection new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4033
	Smalltalk allBehaviorsDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4034
	    aClass isMeta ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4035
		(aClass category = currentClassCategory) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4036
		    classes add:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4037
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4038
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4039
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4040
	classes topologicalSort:[:a :b | b isSubclassOf:a].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4041
	classes do:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4042
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4043
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4044
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4045
allClassesInCurrentCategoryDo:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4046
    "evaluate aBlock for all classes in the current class category;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4047
     superclasses come first - then subclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4048
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4049
    currentClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4050
	Smalltalk allBehaviorsDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4051
	    aClass isMeta ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4052
		(aClass category = currentClassCategory) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4053
		    aBlock value:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4054
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4055
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4056
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4057
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4058
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4059
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4060
renameCurrentClassCategoryTo:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4061
    "helper - do the rename"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4062
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4063
    |any categories|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4064
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4065
    currentClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4066
	any := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4067
	Smalltalk allBehaviorsDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4068
	    aClass category = currentClassCategory ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4069
		aClass category:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4070
		any := true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4071
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4072
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4073
	any ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4074
	    categories := classCategoryListView list.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4075
	    categories remove:currentClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4076
	    categories add:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4077
	    categories sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4078
	    classCategoryListView setContents:categories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4079
	    currentClassCategory := aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4080
	    classCategoryListView selectElement:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4081
	] ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4082
	    currentClassCategory := aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4083
	    self updateClassCategoryList.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4084
	    self updateClassListWithScroll:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4085
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4086
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4087
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4088
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4089
!SystemBrowser methodsFor:'class-method stuff'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4090
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4091
classFromClassMethodString:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4092
    "helper for classMethod-list - extract class name from the string"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4093
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4094
    |pos|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4095
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4096
    pos := aString indexOf:(Character space).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4097
    ^ aString copyTo:(pos - 1)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4098
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4099
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4100
selectorFromClassMethodString:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4101
    "helper for classMethod-list - extract selector from the string"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4102
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4103
    |pos|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4104
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4105
    pos := aString indexOf:(Character space).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4106
    ^ aString copyFrom:(pos + 1)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4107
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4108
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4109
classMethodSelection:lineNr
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4110
    "user clicked on a class/method line - show code"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4111
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4112
    |string classString selectorString|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4113
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4114
    string := classMethodListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4115
    classString := self classFromClassMethodString:string.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4116
    selectorString := self selectorFromClassMethodString:string.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4117
    ((classString ~= 'Metaclass') and:[classString endsWith:'class']) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4118
	classString := classString copyTo:(classString size - 5).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4119
	self switchToClass:(Smalltalk at:classString asSymbol).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4120
	actualClass := currentClass class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4121
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4122
	self switchToClass:(Smalltalk at:classString asSymbol).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4123
	actualClass := currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4124
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4125
    currentClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4126
	self warn:'oops class is gone'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4127
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4128
	currentClassCategory := currentClass category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4129
	currentSelector := selectorString asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4130
	currentMethod := actualClass compiledMethodAt:currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4131
	currentMethodCategory := currentMethod category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4132
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4133
	self methodSelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4134
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4135
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4136
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4137
!SystemBrowser methodsFor:'class category list menu'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4138
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4139
initializeClassCategoryMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4140
    |labels|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4141
    
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4142
    labels := resources array:#(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4143
						'fileOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4144
						'fileOut each'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4145
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4146
						'fileOut binary'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4147
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4148
						'printOut' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4149
						'printOut protocol'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4150
						'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4151
						'SPAWN_CATEGORY'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4152
						'spawn full class'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4153
						'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4154
						'update'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4155
						'find class ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4156
						'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4157
						'new class category ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4158
						'rename ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4159
						'remove').
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4160
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4161
    classCategoryListView 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4162
	middleButtonMenu:(PopUpMenu 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4163
				labels:labels
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4164
			     selectors:#(classCategoryFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4165
					 classCategoryFileOutEach
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4166
					 classCategoryPrintOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4167
					 classCategoryPrintOutProtocol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4168
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4169
					 classCategorySpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4170
					 classCategorySpawnFullClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4171
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4172
					 classCategoryUpdate
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4173
					 classCategoryFindClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4174
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4175
					 classCategoryNewCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4176
					 classCategoryRename
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4177
					 classCategoryRemove)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4178
			      receiver:self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4179
				   for:classCategoryListView)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4180
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4181
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4182
classCategoryUpdate
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4183
    "update class category list and dependants"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4184
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4185
    |oldClassName oldMethodCategory|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4186
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4187
    classCategoryListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4188
	currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4189
	    oldClassName := currentClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4190
	    (oldClassName endsWith:'-old') ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4191
		oldClassName := oldClassName copyTo:(oldClassName size - 4)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4192
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4193
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4194
	oldMethodCategory := currentMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4195
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4196
	classCategoryListView setContents:(self listOfAllClassCategories).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4197
	currentClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4198
	    classCategoryListView selectElement:currentClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4199
	    self classCategorySelectionChanged.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4200
	    oldClassName notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4201
		classListView selectElement:oldClassName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4202
		self switchToClass:(Smalltalk at:oldClassName asSymbol).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4203
		self classSelectionChanged.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4204
		oldMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4205
		    methodCategoryListView selectElement:oldMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4206
		    currentMethodCategory := oldMethodCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4207
		    self methodCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4208
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4209
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4210
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4211
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4212
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4213
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4214
classCategoryPrintOutProtocol
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4215
    |printStream|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4216
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4217
    self allClassesInCurrentCategoryInOrderDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4218
	printStream := Printer new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4219
	aClass printOutProtocolOn:printStream.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4220
	printStream close
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4221
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4222
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4223
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4224
classCategoryPrintOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4225
    |printStream|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4226
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4227
    self allClassesInCurrentCategoryDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4228
	printStream := Printer new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4229
	aClass printOutOn:printStream.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4230
	printStream close
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4231
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4232
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4233
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4234
classCategorySpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4235
    "create a new SystemBrowser browsing current classCategory"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4236
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4237
    currentClassCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4238
	self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4239
	    self class browseClassCategory:currentClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4240
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4241
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4242
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4243
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4244
classCategoryFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4245
    "create a file 'categoryName' consisting of all classes in current category"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4246
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4247
    |aStream fileName|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4248
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4249
    self checkClassCategorySelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4250
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4251
    fileName := currentClassCategory asString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4252
    fileName replaceAll:Character space by:$_.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4253
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4254
     this test allows a smalltalk to be built without Projects/ChangeSets
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4255
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4256
    Project notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4257
	fileName := Project currentProjectDirectory , fileName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4258
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4259
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4260
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4261
     if file exists, save original in a .sav file
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4262
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4263
    fileName asFilename exists ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4264
	fileName asFilename copyTo:(fileName , '.sav')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4265
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4266
    aStream := FileStream newFileNamed:fileName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4267
    aStream isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4268
	^ self warn:'cannot create: %1' with:fileName
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4269
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4270
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4271
	self busyLabel:'writing: %1' with:fileName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4272
	self allClassesInCurrentCategoryInOrderDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4273
	    aClass fileOutOn:aStream.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4274
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4275
	aStream close.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4276
	self normalLabel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4277
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4278
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4279
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4280
classCategorySpawnFullClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4281
    "create a new SystemBrowser browsing full class"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4282
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4283
    |newBrowser|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4284
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4285
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4286
	newBrowser := self class browseFullClasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4287
" "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4288
	.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4289
	currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4290
	    newBrowser switchToClassNamed:(currentClass name)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4291
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4292
" "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4293
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4294
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4295
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4296
classCategoryFileOutEach
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4297
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4298
	self allClassesInCurrentCategoryDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4299
	    self busyLabel:'saving: ' with:aClass name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4300
	    Class fileOutErrorSignal handle:[:ex |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4301
		self warn:'cannot create: %1' with:ex parameter.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4302
		ex return.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4303
	    ] do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4304
		aClass fileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4305
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4306
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4307
	self normalLabel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4308
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4309
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4310
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4311
classCategoryNewCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4312
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4313
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4314
    box := self enterBoxTitle:'name of new class category:' okText:'create'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4315
    box action:[:aString |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4316
	|categories|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4317
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4318
	currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4319
	    categories := OrderedCollection new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4320
	    currentClass withAllSuperclasses do:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4321
		aClass methodArray do:[:aMethod |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4322
		    (categories includes:aMethod category) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4323
			categories add:aMethod category
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4324
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4325
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4326
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4327
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4328
	categories isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4329
	    categories := classCategoryListView list.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4330
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4331
	(categories includes:aString) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4332
	    categories add:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4333
	    categories sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4334
	    classCategoryListView setContents:categories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4335
	    currentClassCategory := aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4336
	    classCategoryListView selectElement:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4337
	    self switchToClass:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4338
	    actualClass := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4339
	    self classCategorySelectionChanged
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4340
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4341
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4342
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4343
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4344
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4345
classCategoryFindClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4346
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4347
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4348
    box := self enterBoxForCodeSelectionTitle:'class to find:' okText:'find'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4349
    box action:[:aString | self switchToClassNameMatching:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4350
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4351
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4352
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4353
classCategoryRename
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4354
    "launch an enterBox to rename current class category"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4355
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4356
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4357
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4358
    self checkClassCategorySelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4359
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4360
    box := self enterBoxTitle:'rename class category to:' okText:'rename'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4361
    box initialText:currentClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4362
    box action:[:aString | self renameCurrentClassCategoryTo:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4363
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4364
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4365
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4366
classCategoryRemove
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4367
    "remove all classes in current category"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4368
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4369
    |count t classesToRemove subclassesRemoved box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4370
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4371
    self checkClassCategorySelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4372
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4373
    classesToRemove := OrderedCollection new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4374
    Smalltalk allBehaviorsDo:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4375
	aClass category = currentClassCategory ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4376
	    classesToRemove add:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4377
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4378
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4379
    subclassesRemoved := OrderedCollection new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4380
    classesToRemove do:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4381
	aClass allSubclassesDo:[:aSubclass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4382
	    (classesToRemove includes:aSubclass) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4383
		(subclassesRemoved includes:aSubclass) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4384
		    subclassesRemoved add:aSubclass
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4385
		]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4386
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4387
	]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4388
    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4389
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4390
    count := classesToRemove size.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4391
    t := resources string:'remove %1 ?' with:currentClassCategory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4392
    count ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4393
       t := t , (resources at:'\(with ') , count printString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4394
       count == 1 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4395
	    t := t , (resources at:' class')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4396
       ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4397
	    t := t , (resources at:' classes')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4398
       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4399
       t := (t , ')') withCRs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4400
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4401
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4402
    count := subclassesRemoved size.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4403
    count ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4404
       t := t , (resources at:'\(and ') , count printString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4405
       count == 1 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4406
	    t := t , (resources at:' subclass ')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4407
       ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4408
	    t := t , (resources at:' subclasses ')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4409
       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4410
       t := (t , ')') withCRs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4411
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4412
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4413
    t := t withCRs.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4414
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4415
    box := YesNoBox 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4416
	       title:t
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4417
	       yesText:(resources at:'remove')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4418
	       noText:(resources at:'abort').
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4419
    box confirm ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4420
	"after querying user - do really remove classes in list1 and list2"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4421
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4422
	subclassesRemoved do:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4423
	    (CheckForInstancesWhenRemovingClasses not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4424
	    or:[aClass hasInstances not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4425
	    or:[self confirm:(aClass name , ' has instances - remove anyway ?')]])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4426
		ifTrue:[   
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4427
		    Smalltalk removeClass:aClass
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4428
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4429
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4430
	classesToRemove do:[:aClass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4431
	    (CheckForInstancesWhenRemovingClasses not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4432
	    or:[aClass hasInstances not
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4433
	    or:[self confirm:(aClass name , ' has instances - remove anyway ?')]])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4434
		ifTrue:[   
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4435
		    Smalltalk removeClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4436
	    ].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4437
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4438
	currentClassCategory := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4439
	self switchToClass:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4440
	Smalltalk changed
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4441
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4442
! !
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4443
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4444
!SystemBrowser methodsFor:'method category list menu'!
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4445
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4446
initializeMethodCategoryMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4447
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4448
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4449
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4450
					'fileOut' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4451
					'fileOut all' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4452
					'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4453
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4454
					'SPAWN_METHODCATEGORY'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4455
					'spawn category'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4456
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4457
					'find method here ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4458
					'find method ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4459
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4460
					'new category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4461
					'copy category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4462
					'create access methods' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4463
					'rename ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4464
					'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4465
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4466
    methodCategoryListView 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4467
	middleButtonMenu:(PopUpMenu 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4468
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4469
			     selectors:#(
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4470
					 methodCategoryFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4471
					 methodCategoryFileOutAll
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4472
					 methodCategoryPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4473
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4474
					 methodCategorySpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4475
					 methodCategorySpawnCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4476
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4477
					 methodCategoryFindMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4478
					 methodCategoryFindAnyMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4479
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4480
					 methodCategoryNewCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4481
					 methodCategoryCopyCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4482
					 methodCategoryCreateAccessMethods
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4483
					 methodCategoryRename
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4484
					 methodCategoryRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4485
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4486
				   for:methodCategoryListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4487
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4488
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4489
methodCategoryFindAnyMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4490
    |box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4491
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4492
    box := self enterBoxForSearchSelectorTitle:'method selector to search for:'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4493
    box action:[:aString | self switchToAnyMethodNamed:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4494
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4495
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4496
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4497
methodCategoryFindMethod
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4498
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4499
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4500
    box := self enterBoxForSearchSelectorTitle:'method selector to search for:'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4501
    box action:[:aString | self switchToMethodNamed:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4502
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4503
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4504
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4505
methodCategoryPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4506
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4507
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4508
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4509
    self whenMethodCategorySelected:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4510
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4511
	actualClass printOutCategory:currentMethodCategory on:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4512
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4513
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4514
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4515
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4516
methodCategoryFileOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4517
    "fileOut all methods in the selected methodcategory of
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4518
     the current class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4519
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4520
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4521
    self whenMethodCategorySelected:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4522
	self busyLabel:'saving: %1' with:currentClass name , '-' , currentMethodCategory.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4523
	Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4524
	    self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4525
	    ex return.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4526
	] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4527
	    actualClass fileOutCategory:currentMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4528
	].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4529
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4530
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4531
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4532
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4533
methodCategorySpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4534
    "create a new SystemBrowser browsing current method category"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4535
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4536
    currentMethodCategory notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4537
	self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4538
	    self class browseClass:actualClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4539
		    methodCategory:currentMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4540
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4541
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4542
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4543
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4544
methodCategoryFileOutAll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4545
    "fileOut all methods in the selected methodcategory of
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4546
     the current class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4547
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4548
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4549
    self whenMethodCategorySelected:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4550
	|fileName outStream|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4551
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4552
	fileName := currentMethodCategory , '.st'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4553
	fileName replaceAll:Character space by:$_.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4554
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4555
	 this test allows a smalltalk to be built without Projects/ChangeSets
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4556
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4557
	Project notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4558
	    fileName := Project currentProjectDirectory , fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4559
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4560
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4561
	 if file exists, save original in a .sav file
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4562
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4563
	fileName asFilename exists ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4564
	    fileName asFilename copyTo:(fileName , '.sav')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4565
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4566
	outStream := FileStream newFileNamed:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4567
	outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4568
	    ^ self warn:'cannot create: %1' with:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4569
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4570
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4571
	self busyLabel:'saving: ' with:currentMethodCategory.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4572
	Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4573
	    self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4574
	    ex return
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4575
	] do:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4576
	    Smalltalk allBehaviorsDo:[:class |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4577
		|hasMethodsInThisCategory|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4578
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4579
		hasMethodsInThisCategory := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4580
		class methodArray do:[:method |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4581
		    method category = currentMethodCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4582
			hasMethodsInThisCategory := true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4583
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4584
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4585
		hasMethodsInThisCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4586
		    class fileOutCategory:currentMethodCategory on:outStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4587
		    outStream cr
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4588
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4589
		hasMethodsInThisCategory := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4590
		class class methodArray do:[:method |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4591
		    method category = currentMethodCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4592
			hasMethodsInThisCategory := true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4593
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4594
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4595
		hasMethodsInThisCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4596
		    class class fileOutCategory:currentMethodCategory on:outStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4597
		    outStream cr
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4598
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4599
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4600
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4601
	outStream close.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4602
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4603
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4604
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4605
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4606
methodCategoryNewCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4607
    "show the enter box to add a new method category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4608
     Offer existing superclass categories in box to help avoiding
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4609
     useless typing."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4610
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4611
    |someCategories existingCategories box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4612
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4613
    actualClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4614
	someCategories := actualClass allCategories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4615
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4616
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4617
	 mhmh - offer some typical categories ...
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4618
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4619
	showInstance ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4620
	    someCategories := #('accessing' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4621
				'initialization'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4622
				'private' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4623
				'printing & storing'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4624
				'queries'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4625
				'testing'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4626
			       )
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4627
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4628
	    someCategories := #(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4629
				'documentation'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4630
				'initialization'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4631
				'instance creation'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4632
			       ).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4633
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4634
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4635
    someCategories sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4636
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4637
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4638
     remove existing categories
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4639
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4640
    existingCategories := methodCategoryListView list.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4641
    existingCategories notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4642
	someCategories := someCategories select:[:cat | (existingCategories includes:cat) not].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4643
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4644
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4645
    box := self listBoxTitle:'name of new method category:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4646
		      okText:'create'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4647
			list:someCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4648
    box action:[:aString | self newMethodCategory:aString].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4649
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4650
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4651
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4652
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4653
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4654
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4655
methodCategorySpawnCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4656
    "create a new SystemBrowser browsing all methods from all
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4657
     classes with same category as current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4658
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4659
    self askAndBrowseMethodCategory:'category to browse methods:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4660
			     action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4661
					self class browseMethodCategory:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4662
				    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4663
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4664
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4665
methodCategoryCreateAccessMethods
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4666
    "create access methods for all instvars"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4667
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4668
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4669
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4670
    showInstance ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4671
	self warn:'select instance - and try again'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4672
	^ self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4673
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4674
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4675
    self withWaitCursorDo:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4676
	|nm names source|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4677
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4678
	(variableListView notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4679
	and:[(nm := variableListView selectionValue) notNil]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4680
	    names := Array with:nm
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4681
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4682
	    names := currentClass instVarNames 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4683
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4684
	names do:[:name |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4685
	    "check, if method is not already present"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4686
	    (currentClass implements:(name asSymbol)) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4687
		source := (name , '\    "return ' , name , '"\\    ^ ' , name) withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4688
		Compiler compile:source forClass:currentClass inCategory:'accessing'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4689
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4690
		Transcript showCr:'method ''', name , ''' already present'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4691
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4692
	    (currentClass implements:((name , ':') asSymbol)) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4693
		source := (name , ':something\    "set ' , name , '"\\    ' , name , ' := something.') withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4694
		Compiler compile:source forClass:currentClass inCategory:'accessing'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4695
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4696
		Transcript showCr:'method ''', name , ':'' already present'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4697
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4698
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4699
	self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4700
	self updateMethodListWithScroll:false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4701
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4702
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4703
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4704
methodCategoryCopyCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4705
    "show the enter box to copy from an existing method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4706
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4707
    |title box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4708
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4709
    showInstance ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4710
	title := 'class to copy instance method category from:'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4711
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4712
	title := 'class to copy class method category from:'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4713
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4714
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4715
    box := self listBoxTitle:title 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4716
		      okText:'ok' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4717
			list:(Smalltalk allClasses collect:[:cls | cls name]) asArray sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4718
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4719
    box action:[:aString | self copyMethodsFromClass:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4720
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4721
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4722
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4723
methodCategoryRename
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4724
    "launch an enterBox to rename current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4725
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4726
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4727
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4728
    self checkMethodCategorySelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4729
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4730
    box := self enterBoxTitle:(resources string:'rename method category %1 to:' with:currentMethodCategory)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4731
		okText:(resources at:'rename').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4732
    box initialText:currentMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4733
    box action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4734
	actualClass renameCategory:currentMethodCategory to:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4735
	currentMethodCategory := aString.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4736
	currentMethod := currentSelector := nil.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4737
	self updateMethodCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4738
	self updateMethodListWithScroll:false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4739
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4740
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4741
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4742
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4743
methodCategoryRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4744
    "show number of methods to remove and query user"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4745
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4746
    |count t box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4747
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4748
    currentMethodCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4749
	count := 0.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4750
	actualClass methodArray do:[:aMethod |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4751
	    (aMethod category = currentMethodCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4752
		count := count + 1
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4753
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4754
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4755
	(count == 0) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4756
	    currentMethodCategory := nil.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4757
	    currentMethod := currentSelector := nil.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4758
	    self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4759
	    self updateMethodList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4760
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4761
	    (count == 1) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4762
		t := resources string:'remove %1 ?\(with 1 method)' with:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4763
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4764
		t := resources string:'remove %1 ?\(with %2 methods)' with:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4765
								      with:count printString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4766
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4767
	    t := t withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4768
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4769
	    box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4770
		       title:t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4771
		       yesText:(resources at:'remove')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4772
		       noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4773
	    box confirm ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4774
		actualClass methodArray do:[:aMethod |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4775
		    (aMethod category = currentMethodCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4776
			actualClass 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4777
			    removeSelector:(actualClass selectorForMethod:aMethod)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4778
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4779
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4780
		currentMethodCategory := nil.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4781
		currentMethod := currentSelector := nil.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4782
		self updateMethodCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4783
		self updateMethodList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4784
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4785
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4786
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4787
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4788
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4789
!SystemBrowser methodsFor:'method list menu'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4790
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4791
methodMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4792
    "return a popupmenu as appropriate for the methodList"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4793
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4794
    |labels selectors|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4795
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4796
    (currentMethod notNil and:[currentMethod isWrapped]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4797
	labels := #(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4798
			'fileOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4799
			'printOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4800
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4801
			'SPAWN_METHOD'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4802
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4803
			'senders ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4804
			'implementors ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4805
			'globals ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4806
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4807
			'strings ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4808
			'apropos ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4809
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4810
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4811
			'local senders ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4812
			'local implementors ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4813
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4814
			'local strings ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4815
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4816
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4817
			'remove break/trace' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4818
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4819
			'new method' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4820
			'change category ...' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4821
			'remove'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4822
		    ).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4823
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4824
	selectors := #(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4825
			methodFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4826
			methodPrintOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4827
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4828
			methodSpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4829
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4830
			methodSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4831
			methodImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4832
			methodGlobalReferends
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4833
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4834
			methodStringSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4835
			methodAproposSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4836
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4837
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4838
			methodLocalSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4839
			methodLocalImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4840
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4841
			methodLocalStringSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4842
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4843
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4844
			methodRemoveBreakOrTrace
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4845
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4846
			methodNewMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4847
			methodChangeCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4848
			methodRemove
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4849
		      )
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4850
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4851
	labels := #(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4852
			'fileOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4853
			'printOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4854
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4855
			'SPAWN_METHOD'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4856
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4857
			'senders ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4858
			'implementors ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4859
			'globals ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4860
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4861
			'strings ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4862
			'apropos ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4863
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4864
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4865
			'local senders ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4866
			'local implementors ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4867
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4868
			'local strings ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4869
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4870
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4871
			'breakpoint' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4872
			'trace' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4873
			'trace sender' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4874
			'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4875
			'new method' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4876
			'change category ...' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4877
			'remove'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4878
		    ).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4879
	selectors := #(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4880
			methodFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4881
			methodPrintOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4882
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4883
			methodSpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4884
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4885
			methodSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4886
			methodImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4887
			methodGlobalReferends
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4888
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4889
			methodStringSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4890
			methodAproposSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4891
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4892
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4893
			methodLocalSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4894
			methodLocalImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4895
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4896
			methodLocalStringSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4897
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4898
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4899
			methodBreakPoint
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4900
			methodTrace
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4901
			methodTraceSender
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4902
			nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4903
			methodNewMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4904
			methodChangeCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4905
			methodRemove
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4906
		      )
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4907
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4908
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4909
    ^ PopUpMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4910
	 labels:(resources array:labels)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4911
	 selectors:selectors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4912
	 receiver:self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4913
	 for:methodListView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4914
!
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4915
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4916
initializeMethodMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4917
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4918
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4919
methodListView model:self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4920
methodListView menu:#methodMenu.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4921
^ self.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4922
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4923
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4924
					 'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4925
					 'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4926
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4927
					 'SPAWN_METHOD'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4928
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4929
					 'senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4930
					 'implementors ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4931
					 'globals ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4932
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4933
					 'strings ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4934
					 'apropos ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4935
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4936
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4937
					 'local senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4938
					 'local implementors ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4939
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4940
					 'local strings ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4941
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4942
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4943
					 'breakpoint' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4944
					 'trace' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4945
					 'trace sender' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4946
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4947
					 'new method' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4948
					 'change category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4949
					 'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4950
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4951
    methodListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4952
	middleButtonMenu:(PopUpMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4953
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4954
			     selectors:#(methodFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4955
					 methodPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4956
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4957
					 methodSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4958
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4959
					 methodSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4960
					 methodImplementors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4961
					 methodGlobalReferends
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4962
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4963
					 methodStringSearch
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4964
					 methodAproposSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4965
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4966
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4967
					 methodLocalSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4968
					 methodLocalImplementors
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4969
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4970
					 methodLocalStringSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4971
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4972
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4973
					 methodBreakPoint
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4974
					 methodTrace
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4975
					 methodTraceSender
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4976
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4977
					 methodNewMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4978
					 methodChangeCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4979
					 methodRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4980
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4981
				   for:methodListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4982
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4983
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4984
methodImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4985
    "launch an enterBox for selector to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4986
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4987
    self askAndBrowseSelectorTitle:'selector to browse implementors of:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4988
			    action:[:aString | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4989
				       self class browseImplementorsOf:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4990
				   ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4991
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4992
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4993
methodSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4994
    "launch an enterBox for selector to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4995
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4996
    self askAndBrowseSelectorTitle:'selector to browse senders of:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4997
			    action:[:aString | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4998
				       self class browseAllCallsOn:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  4999
				   ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5000
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5001
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5002
methodRemove
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5003
    "remove the current method"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5004
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5005
    self checkMethodSelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5006
    actualClass removeSelector:(actualClass selectorForMethod:currentMethod).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5007
    currentMethod := currentSelector := nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5008
    self updateMethodListWithScroll:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5009
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5010
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5011
initializeMethodMenu2
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5012
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5013
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5014
    methodListView isNil ifTrue:[^ self].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5015
^self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5016
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5017
					 'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5018
					 'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5019
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5020
					 'SPAWN_METHOD'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5021
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5022
					 'senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5023
					 'implementors ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5024
					 'globals ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5025
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5026
					 'strings ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5027
					 'apropos ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5028
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5029
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5030
					 'local senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5031
					 'local implementors ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5032
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5033
					 'local strings ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5034
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5035
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5036
					 'remove break/trace' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5037
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5038
					 'new method' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5039
					 'change category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5040
					 'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5041
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5042
    methodListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5043
	middleButtonMenu:(PopUpMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5044
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5045
			     selectors:#(methodFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5046
					 methodPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5047
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5048
					 methodSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5049
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5050
					 methodSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5051
					 methodImplementors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5052
					 methodGlobalReferends
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5053
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5054
					 methodStringSearch
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5055
					 methodAproposSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5056
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5057
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5058
					 methodLocalSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5059
					 methodLocalImplementors
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5060
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5061
					 methodLocalStringSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5062
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5063
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5064
					 methodRemoveBreakOrTrace
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5065
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5066
					 methodNewMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5067
					 methodChangeCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5068
					 methodRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5069
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5070
				   for:methodListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5071
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5072
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5073
methodLocalSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5074
    "launch an enterBox for selector to search for in current class & subclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5075
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5076
    self checkClassSelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5077
    self askAndBrowseSelectorTitle:'selector to browse local senderss of:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5078
			    action:[:aString | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5079
				       self class browseCallsOn:aString under:currentClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5080
				   ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5081
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5082
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5083
methodPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5084
    "print out the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5085
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5086
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5087
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5088
    self checkMethodSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5089
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5090
    printStream := Printer new.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5091
    actualClass printOutSource:(currentMethod source) on:printStream.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5092
    printStream close
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5093
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5094
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5095
methodLocalImplementors
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5096
    "launch an enterBox for selector to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5097
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5098
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5099
    self askAndBrowseSelectorTitle:'selector to browse local implementors of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5100
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5101
				       self class browseImplementorsOf:aString under:currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5102
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5103
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5104
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5105
methodGlobalReferends
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5106
    "launch an enterBox for global symbol to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5107
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5108
    self enterBoxForBrowseTitle:'global variable to browse users of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5109
			 action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5110
				    self class browseReferendsOf:aString asSymbol
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5111
				]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5112
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5113
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5114
methodSpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5115
    "create a new SystemBrowser browsing current method,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5116
     or if the current selection is of the form 'class>>selector', spawan
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5117
     a browser on that method."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5118
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5119
    |s sel selSymbol clsName clsSymbol cls meta isMeta w sep|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5120
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5121
    classMethodListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5122
	s := classMethodListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5123
	clsName := self classFromClassMethodString:s.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5124
	sel := self selectorFromClassMethodString:s.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5125
	isMeta := false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5126
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5127
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5128
    self extractClassAndSelectorFromSelectionInto:[:c :s :m |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5129
	clsName := c.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5130
	sel := s.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5131
	isMeta := m
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5132
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5133
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5134
    (sel notNil and:[clsName notNil]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5135
	(clsName knownAsSymbol and:[sel knownAsSymbol]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5136
	    clsSymbol := clsName asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5137
	    (Smalltalk includesKey:clsSymbol) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5138
		cls := Smalltalk at:clsSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5139
		isMeta ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5140
		    cls := cls class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5141
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5142
		cls isBehavior ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5143
		    cls := cls class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5144
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5145
		cls isBehavior ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5146
		    selSymbol := sel asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5147
		    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5148
			(cls implements:selSymbol) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5149
			    cls := cls class.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5150
			].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5151
			(cls implements:selSymbol) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5152
			    self class browseClass:cls selector:selSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5153
			    ^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5154
			].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5155
			w := ' does not implement #' , sel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5156
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5157
		] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5158
		    w := ' is not a class'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5159
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5160
	    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5161
		w := ' is unknown'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5162
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5163
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5164
	    w := ' and/or ' , sel , ' are unknown'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5165
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5166
	self warn:(clsName , w).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5167
	^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5168
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5169
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5170
    self checkMethodSelected ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5171
	self warn:'select a method first'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5172
	^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5173
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5174
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5175
    self withWaitCursorDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5176
	w := currentMethod who.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5177
	self class browseClass:(w at:1) selector:(w at:2)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5178
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5179
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5180
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5181
methodFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5182
    "file out the current method"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5183
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5184
    self checkMethodSelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5185
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5186
    self busyLabel:'saving:' with:currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5187
    Class fileOutErrorSignal handle:[:ex |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5188
	self warn:'cannot create: %1' with:ex parameter.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5189
	ex return
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5190
    ] do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5191
	actualClass fileOutMethod:currentMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5192
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5193
    self normalLabel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5194
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5195
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5196
methodChangeCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5197
    "move the current method into another category -
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5198
     nothing done here, but a query for the new category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5199
     Remember the last category, to allow faster category change of a group of methods."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5200
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5201
    |box txt|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5202
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5203
    self checkMethodSelected ifFalse:[^ self].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5204
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5205
    actualClass isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5206
	box := self enterBoxTitle:'' okText:'change'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5207
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5208
	|someCategories|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5209
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5210
	someCategories := actualClass categories sort.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5211
	box := self listBoxTitle:'' okText:'change' list:someCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5212
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5213
    box title:('change category from ''' , currentMethod category , ''' to:').
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5214
    lastMethodCategory isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5215
	txt := currentMethod category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5216
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5217
	txt := lastMethodCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5218
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5219
    box initialText:txt.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5220
    box action:[:aString |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5221
		    lastMethodCategory := aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5222
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5223
		    currentMethod category:aString asSymbol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5224
		    currentClass changed.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5225
		    currentMethod changed:#category.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5226
		    currentClass addChangeRecordForMethodCategory:currentMethod category:aString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5227
		    self updateMethodCategoryListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5228
		    self updateMethodListWithScroll:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5229
	       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5230
    box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5231
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5232
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5233
methodStringSearch
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5234
    "launch an enterBox for (sub)-string to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5235
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5236
    self askAndBrowseSelectorTitle:'string / matchString to search for:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5237
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5238
				       self class browseForString:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5239
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5240
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5241
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5242
methodLocalStringSearch
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5243
    "launch an enterBox for (sub)-string to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5244
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5245
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5246
    self askAndBrowseSelectorTitle:'string / matchString to search for locally:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5247
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5248
				       self class browseForString:aString in:(currentClass withAllSubclasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5249
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5250
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5251
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5252
methodAproposSearch
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5253
    "launch an enterBox for a keyword search"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5254
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5255
    self askAndBrowseSelectorTitle:'keyword to search for:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5256
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5257
				       self class aproposSearch:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5258
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5259
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5260
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5261
methodNewMethod
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5262
    "prepare for definition of a new method - put a template into
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5263
     code view and define accept-action to compile it"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5264
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5265
    currentClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5266
	^ self warn:'select/create a class first'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5267
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5268
    currentMethodCategory isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5269
	^ self warn:'select/create a method category first'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5270
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5271
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5272
    currentMethod := currentSelector := nil.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5273
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5274
    methodListView deselect.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5275
    codeView contents:(self template).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5276
    codeView modified:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5277
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5278
    self setAcceptAndExplainActionsForMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5279
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5280
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5281
methodTrace
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5282
    "turn on tracing of the current method"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5283
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5284
    |sel|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5285
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5286
currentClass notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5287
   currentSelector notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5288
      currentMethod := actualClass compiledMethodAt:currentSelector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5289
   ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5290
].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5291
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5292
    (currentMethod notNil and:[currentMethod isWrapped not])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5293
    ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5294
	currentMethod := MessageTracer traceMethod:currentMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5295
	sel := methodListView selection.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5296
	self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5297
	methodListView selection:sel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5298
	currentClass changed:#methodDictionary with:currentSelector.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5299
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5300
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5301
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5302
methodRemoveBreakOrTrace
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5303
    "turn off tracing of the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5304
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5305
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5306
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5307
    (currentMethod notNil and:[currentMethod isWrapped])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5308
    ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5309
	currentMethod := MessageTracer unwrapMethod:currentMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5310
	sel := methodListView selection.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5311
	self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5312
	methodListView selection:sel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5313
	currentClass changed:#methodDictionary with:currentSelector.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5314
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5315
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5316
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5317
methodBreakPoint
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5318
    "set a breakpoint on the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5319
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5320
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5321
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5322
    currentMethod notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5323
	currentMethod isWrapped ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5324
	    currentMethod := MessageTracer trapMethod:currentMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5325
	    self initializeMethodMenu2.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5326
	    sel := methodListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5327
	    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5328
	    methodListView selection:sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5329
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5330
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5331
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5332
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5333
methodTraceSender
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5334
    "turn on tracing of the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5335
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5336
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5337
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5338
    (currentMethod notNil and:[currentMethod isWrapped not])
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5339
    ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5340
	currentMethod := MessageTracer traceMethodSender:currentMethod.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5341
	sel := methodListView selection.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5342
	self updateMethodListWithScroll:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5343
	methodListView selection:sel.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5344
	currentClass changed:#methodDictionary with:currentSelector.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5345
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5346
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5347
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5348
methodMenuForWrappedMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5349
    |labels|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5350
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5351
    labels := resources array:#(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5352
					 'fileOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5353
					 'printOut'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5354
					 '-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5355
					 'SPAWN_METHOD'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5356
					 '-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5357
					 'senders ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5358
					 'implementors ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5359
					 'globals ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5360
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5361
					 'strings ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5362
					 'apropos ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5363
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5364
					 '-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5365
					 'local senders ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5366
					 'local implementors ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5367
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5368
					 'local strings ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5369
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5370
					 '-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5371
					 'remove break/trace' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5372
					 '-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5373
					 'new method' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5374
					 'change category ...' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5375
					 'remove').
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5376
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5377
    ^ PopUpMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5378
				labels:labels
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5379
			     selectors:#(methodFileOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5380
					 methodPrintOut
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5381
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5382
					 methodSpawn
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5383
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5384
					 methodSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5385
					 methodImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5386
					 methodGlobalReferends
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5387
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5388
					 methodStringSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5389
					 methodAproposSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5390
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5391
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5392
					 methodLocalSenders
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5393
					 methodLocalImplementors
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5394
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5395
					 methodLocalStringSearch
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5396
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5397
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5398
					 methodRemoveBreakOrTrace
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5399
					 nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5400
					 methodNewMethod
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5401
					 methodChangeCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5402
					 methodRemove)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5403
			      receiver:self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5404
				   for:methodListView
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5405
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5406
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5407
!SystemBrowser methodsFor:'variable list menu'!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5408
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5409
initializeVariableListMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5410
    |varMenu|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5411
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5412
    varMenu := (PopUpMenu labels:(resources array:#(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5413
					'instvar refs ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5414
					'classvar refs ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5415
					'all instvar refs ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5416
					'all classvar refs ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5417
					'-'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5418
					'instvar mods ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5419
					'classvar mods ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5420
					'all instvar mods ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5421
					'all classvar mods ...'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5422
				     ))
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5423
			   selectors:#(
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5424
					instVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5425
					classVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5426
					allInstVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5427
					allClassVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5428
					nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5429
					instVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5430
					classVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5431
					allInstVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5432
					allClassVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5433
				     )
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5434
			   receiver:self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5435
				for:self).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5436
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5437
    variableListView isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5438
	classListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5439
	    |menu|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5440
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5441
	    menu := classListView middleButtonMenu.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5442
	    menu addLabel:(resources string:'variable search')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5443
		 selector:#variables
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5444
		 before:#classRefs.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5445
	    menu subMenuAt:#variables put:varMenu.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5446
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5447
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5448
	variableListView middleButtonMenu:varMenu
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5449
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5450
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5451
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5452
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5453
variableSelection:lineNr
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5454
    "variable selection changed"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5455
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5456
    |name idx|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5457
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5458
    name := variableListView selectionValue.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5459
    name isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5460
	self unhilightMethodCategories.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5461
	self unhilightMethods.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5462
	self autoSearch:nil.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5463
	^ self
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5464
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5465
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5466
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5467
     first, check if the selected variable is really the one 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5468
     we get - reselect if its hidden (for example, a class variable
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5469
     with the same name could be defined in a subclass)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5470
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5471
    idx := variableListView list findLast:[:entry | entry = name].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5472
    idx ~~ lineNr ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5473
	"select it - user will see whats going on"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5474
	variableListView selection:idx
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5475
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5476
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5477
    "search for methods in the current category, which access the selected
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5478
     variable, and highlight them"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5479
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5480
    self hilightMethodsInMethodCategoryList:true inMethodList:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5481
    self autoSearch:name.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5482
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5483
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5484
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5485
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5486
enterBoxForVariableSearch:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5487
    |box sel|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5488
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5489
    box := self enterBoxForCodeSelectionTitle:title okText:'browse'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5490
    variableListView notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5491
	codeView hasSelection ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5492
	    (sel := variableListView selectionValue) notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5493
		(sel startsWith:'---') ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5494
		    box initialText:sel
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5495
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5496
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5497
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5498
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5499
    ^ box
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5500
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5501
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5502
allClassOrInstVarRefsTitle:title access:access mods:modifications
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5503
    "show an enterbox for instVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5504
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5505
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5506
	|box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5507
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5508
	box := self enterBoxForVariableSearch:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5509
	box action:[:aVariableName | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5510
	    self withCursor:(Cursor questionMark) do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5511
		|homeClass|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5512
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5513
		homeClass := self findClassOfVariable:aVariableName 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5514
					   accessWith:access.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5515
		(self class) browseInstRefsTo:aVariableName 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5516
					under:homeClass 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5517
			    modificationsOnly:modifications
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5518
	    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5519
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5520
	box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5521
    ]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5522
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5523
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5524
instVarRefsOrModsTitle:title mods:mods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5525
    "show an enterbox for instvar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5526
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5527
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5528
	|box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5529
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5530
	box := self enterBoxForVariableSearch:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5531
	box action:[:aString | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5532
	    self withCursor:(Cursor questionMark) do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5533
		self class browseInstRefsTo:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5534
					 in:(Array with:currentClass)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5535
			  modificationsOnly:mods 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5536
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5537
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5538
	box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5539
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5540
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5541
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5542
allClassVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5543
    "show an enterbox for classVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5544
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5545
    self allClassOrInstVarRefsTitle:'class variable to browse modifications of:' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5546
				  access:#classVarNames
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5547
				  mods:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5548
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5549
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5550
instVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5551
    "show an enterbox for instVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5552
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5553
    self instVarRefsOrModsTitle:'instance variable to browse modifications of:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5554
				mods:true 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5555
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5556
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5557
instVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5558
    "show an enterbox for instVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5559
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5560
    self instVarRefsOrModsTitle:'instance variable to browse references to:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5561
			   mods:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5562
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5563
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5564
classVarRefsOrModsTitle:title mods:mods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5565
    "show an enterbox for classVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5566
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5567
    self doClassMenu:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5568
	|box|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5569
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5570
	box := self enterBoxForVariableSearch:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5571
	box action:[:aString | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5572
	    self withCursor:(Cursor questionMark) do:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5573
		self class browseClassRefsTo:aString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5574
					  in:(Array with:currentClass)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5575
			   modificationsOnly:mods 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5576
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5577
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5578
	box showAtPointer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5579
    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5580
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5581
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5582
allInstVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5583
    "show an enterbox for instVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5584
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5585
    self allClassOrInstVarRefsTitle:'instance variable to browse references to:' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5586
				  access:#instVarNames
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5587
				  mods:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5588
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5589
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5590
classVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5591
    "show an enterbox for classVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5592
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5593
    self classVarRefsOrModsTitle:'class variable to browse references to:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5594
				 mods:false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5595
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5596
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5597
classVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5598
    "show an enterbox for classVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5599
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5600
    self classVarRefsOrModsTitle:'class variable to browse modifications of:'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5601
				 mods:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5602
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5603
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5604
allInstVarMods
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5605
    "show an enterbox for instVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5606
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5607
    self allClassOrInstVarRefsTitle:'instance variable to browse modifications of:' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5608
				  access:#instVarNames
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5609
				  mods:true
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5610
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5611
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5612
allClassVarRefs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5613
    "show an enterbox for classVar to search for"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5614
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5615
    self allClassOrInstVarRefsTitle:'class variable to browse references to:' 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5616
				  access:#classVarNames
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5617
				  mods:false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5618
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5619
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5620
!SystemBrowser methodsFor:'class-method list menu'!
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5621
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5622
initializeClassMethodMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5623
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5624
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5625
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5626
			      'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5627
			      'fileOut all'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5628
			      'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5629
			      '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5630
			      'spawn'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5631
			      'spawn class'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5632
			      '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5633
			      'sender ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5634
			      'implementors ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5635
			      'globals ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5636
"/                              '-'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5637
"/                              'breakpoint' 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5638
"/                              'trace' 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5639
"/                              'trace sender' 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5640
			     ).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5641
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5642
    classMethodListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5643
	middleButtonMenu:(PopUpMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5644
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5645
			     selectors:#(methodFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5646
					 classMethodFileOutAll
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5647
					 methodPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5648
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5649
					 methodSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5650
					 classSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5651
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5652
					 methodSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5653
					 methodImplementors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5654
					 methodGlobalReferends
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5655
"/                                         nil
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5656
"/                                         methodBreakPoint 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5657
"/                                         methodTrace
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5658
"/                                         methodTraceSender
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5659
					)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5660
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5661
				   for:classMethodListView)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5662
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5663
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5664
classMethodFileOutAll
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5665
    "fileout all methods into one source file"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5666
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5667
    |list classString selectorString cls mth outStream fileName append
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  5668
     fileBox|
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5669
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5670
    append := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5671
    fileBox := FileSaveBox
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5672
			title:(resources string:'save methodss in:')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5673
			okText:(resources string:'save')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5674
			abortText:(resources string:'cancel')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5675
			action:[:fName | fileName := fName].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5676
    fileBox appendAction:[:fName | fileName := fName. append := true].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5677
    fileBox initialText:'some_methods.st'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5678
    Project notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5679
	fileBox directory:Project currentProjectDirectory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5680
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5681
    fileBox showAtPointer.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5682
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5683
    fileName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5684
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5685
	 if file exists, save original in a .sav file
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5686
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5687
	fileName asFilename exists ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5688
	    fileName asFilename copyTo:(fileName , '.sav')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5689
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5690
	append ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5691
	    outStream := FileStream appendingOldFileNamed:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5692
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5693
	    outStream := FileStream newFileNamed:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5694
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5695
	outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5696
	    ^ self warn:'cannot create: %1' with:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5697
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5698
	self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5699
	    list := classMethodListView list.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5700
	    list do:[:line |
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5701
		self busyLabel:'writing: ' with:line.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5702
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5703
		classString := self classFromClassMethodString:line.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5704
		selectorString := self selectorFromClassMethodString:line.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5705
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5706
		((classString ~= 'Metaclass') and:[classString endsWith:'class']) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5707
		    classString := classString copyTo:(classString size - 5).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5708
		    cls := (Smalltalk at:classString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5709
		    cls := cls class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5710
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5711
		    cls := (Smalltalk at:classString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5712
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5713
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5714
		cls isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5715
		    self warn:'oops class %1 is gone' with:classString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5716
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5717
		    mth := cls compiledMethodAt:(selectorString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5718
		    Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5719
			|box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5720
			box := YesNoBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5721
			box yesText:'continue' noText:'abort'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5722
			(box confirm:('fileOut error: ' , ex errorString ,
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5723
					       '\\continue anyway ?') withCRs) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5724
			    ex proceed
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5725
			].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5726
			self normalLabel.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5727
			^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5728
		    ] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5729
			cls fileOutMethod:mth on:outStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5730
		    ]    
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5731
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5732
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5733
	    outStream close.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  5734
	    self normalLabel.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5735
	]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  5736
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5737
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  5738
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  5739
SystemBrowser initialize!