SystemBrowser.st
author claus
Fri, 28 Oct 1994 04:31:16 +0100
changeset 49 6fe62433cfa3
parent 45 950b84ba89e6
child 52 7b48409ae088
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
"{ Package: 'Programming Tools' }"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     2
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     3
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
     5
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     6
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    12
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    13
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    14
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    15
StandardSystemView subclass:#SystemBrowser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    16
       instanceVariableNames:'classCategoryListView classListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    17
			      methodCategoryListView methodListView
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    18
			      classMethodListView
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    19
			      codeView classToggle instanceToggle
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    20
			      currentClassCategory currentClassHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    21
			      currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    22
			      currentMethodCategory currentMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    23
			      showInstance actualClass fullClass
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
    24
			      lastMethodCategory aspect variableListView'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    25
       classVariableNames:''
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    26
       poolDictionaries:''
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    27
       category:'Interface-Browsers'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    28
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    29
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    30
SystemBrowser comment:'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    31
COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    32
	     All Rights Reserved
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    33
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
    34
$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.14 1994-10-28 03:29:32 claus Exp $
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    35
'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    37
!SystemBrowser class methodsFor:'documentation'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    38
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    39
copyright
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    40
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    41
 COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    42
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    43
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    44
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    45
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    46
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    47
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    48
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    49
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    50
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    51
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    52
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    53
version
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    54
"
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
    55
$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.14 1994-10-28 03:29:32 claus Exp $
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    56
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    57
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    58
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    59
documentation
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    60
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    61
    this class implements all kinds of class browsers.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    62
    Stypically, it is started with SystemBrowser open, but there are many other startup
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    63
    messages, to launch special browsers.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    64
    See the extra document 'doc/misc/sbrowser.doc' for how to use this browser.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    65
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    66
    written winter 89 by claus
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    67
"
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
!SystemBrowser class methodsFor:'general startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    71
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    72
open
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    73
    "launch a standard browser"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    74
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    75
    ^ self openOnDisplay:Display
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    76
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    77
    "SystemBrowser open"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    78
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    79
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    80
openOnDisplay:aDisplay
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    81
    "launch a standard browser on another display.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    82
     Does not work currently - still being developped."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    83
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    84
    ^ self newWithLabel:(self classResources string:'System Browser')
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    85
	     setupBlock:[:browser | browser setupForAll]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    86
		     on:aDisplay
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    87
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    88
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    89
     SystemBrowser openOnDisplay:(XWorkstation new initializeFor:'porty:0')
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
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    93
!SystemBrowser class methodsFor:'startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    94
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    95
browseFullClasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    96
    "launch a browser showing all methods at once"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    97
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    98
    ^ self newWithLabel:'Full Class Browser'
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    99
	     setupBlock:[:browser | browser setupForFullClass]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   100
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   101
    "SystemBrowser browseFullClasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   102
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   103
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   104
browseClassCategory:aClassCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   105
    "launch a browser for all classes under aCategory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   106
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   107
    ^ self newWithLabel:aClassCategory
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   108
	     setupBlock:[:browser | browser setupForClassCategory:aClassCategory]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   109
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   110
    "SystemBrowser browseClassCategory:'Kernel-Objects'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   111
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   112
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   113
browseClass:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   114
    "launch a browser for aClass"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   115
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   116
    ^ self newWithLabel:aClass name
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   117
	     setupBlock:[:browser | browser setupForClass:aClass]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   118
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   119
    "SystemBrowser browseClass:Object"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   120
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   121
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   122
browseClassHierarchy:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   123
    "launch a browser for aClass and all its superclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   124
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   125
    ^ self newWithLabel:(aClass name , '-' , 'hierarchy')
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   126
	     setupBlock:[:browser | browser setupForClassHierarchy:aClass]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   127
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   128
    "SystemBrowser browseClassHierarchy:Number"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   129
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   130
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   131
browseClasses:aList title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   132
    "launch a browser for all classes in aList"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   133
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   134
    ^ self newWithLabel:title
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   135
	     setupBlock:[:browser | browser setupForClassList:aList]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   136
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   137
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   138
     SystemBrowser browseClasses:(Array with:Object
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   139
					with:Float)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   140
			   title:'two classes'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   141
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   142
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   143
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   144
browseClass:aClass methodCategory:aCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   145
    "launch a browser for all methods under aCategory in aClass"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   146
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   147
    ^ self newWithLabel:(aClass name , ' ' , aCategory)
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   148
	  setupBlock:[:browser | browser setupForClass:aClass methodCategory:aCategory]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   149
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   150
    "SystemBrowser browseClass:String methodCategory:'copying'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   151
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   152
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   153
browseClass:aClass selector:selector
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   154
    "launch a browser for the method at selector in aClass"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   155
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   156
    ^ self newWithLabel:(aClass name , ' ' , selector)
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   157
	  setupBlock:[:browser | browser setupForClass:aClass selector:selector]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   158
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   159
    "SystemBrowser browseClass:Object selector:#printString"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   160
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   161
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   162
browseMethods:aList title:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   163
    "launch a browser for an explicit list of class/selectors"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   164
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   165
    (aList size == 0) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   166
	self showNoneFound:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   167
	^ nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   168
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   169
    aList sort.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   170
    ^ self newWithLabel:aString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   171
	     setupBlock:[:browser | browser setupForList:aList]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   172
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   173
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   174
     SystemBrowser browseMethods:#('Object printOn:' 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   175
				   'Collection add:')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   176
			   title:'some methods'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   177
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   178
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   179
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   180
browseMethodCategory:aCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   181
    "launch a browser for all methods where category = aCategory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   182
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   183
    |searchBlock|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   184
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   185
    aCategory includesMatchCharacters ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   186
	searchBlock := [:c :m :s | aCategory match:m category].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   187
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   188
	searchBlock := [:c :m :s | m category = aCategory]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   189
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   190
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   191
    self browseMethodsWhere:searchBlock title:('all methods with category of ' , aCategory)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   192
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   193
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   194
     SystemBrowser browseMethodCategory:'printing & storing'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   195
     SystemBrowser browseMethodCategory:'print*'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   196
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   197
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   198
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   199
browseAllSelect:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   200
    "launch a browser for all methods where aBlock returns true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   201
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   202
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   203
    ^ self browseMethodsWhere:aBlock title:'selected messages'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   204
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   205
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   206
browseMethodsWhere:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   207
    "launch a browser for all methods where aBlock returns true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   208
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   209
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   210
    ^ self browseMethodsIn:(Smalltalk allClasses) where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   211
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   212
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   213
browseMethodsOf:aClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   214
    "launch a browser for all instance- and classmethods in aClass 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   215
     where aBlock evaluates to true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   216
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   217
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   218
    ^ self browseMethodsIn:(Array with:aClass) where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   219
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   220
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   221
browseMethodsFrom:aClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   222
    "launch a browser for all instance- and classmethods in aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   223
     and all its subclasses where aBlock evaluates to true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   224
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   225
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   226
    ^ self browseMethodsIn:(aClass withAllSubclasses) where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   227
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   228
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   229
browseMethodsIn:aCollectionOfClasses where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   230
    "launch a browser for all instance- and classmethods from 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   231
     all classes in aCollectionOfClasses where aBlock evaluates to true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   232
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   233
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   234
    ^ self browseMethodsIn:aCollectionOfClasses inst:true class:true where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   235
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   236
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   237
browseMethodsIn:aCollectionOfClasses inst:wantInst class:wantClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   238
    "launch a browser for all instance- (if wantInst is true) and/or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   239
     classmethods (if wantClass is true) from classes in aCollectionOfClasses,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   240
     where aBlock evaluates to true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   241
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   242
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   243
    |list|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   244
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   245
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   246
     since this may take a long time, lower my priority ...
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   247
    "
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   248
    Processor activeProcess withLowerPriorityDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   249
	|checkedClasses checkBlock|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   250
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   251
	checkedClasses := IdentitySet new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   252
	list := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   253
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   254
	checkBlock := [:cls |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   255
	    |methodArray selectorArray| 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   256
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   257
	    (checkedClasses includes:cls) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   258
		methodArray := cls methodArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   259
		selectorArray := cls selectorArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   260
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   261
		1 to:methodArray size do:[:index |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   262
		    |method sel|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   263
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   264
		    method := methodArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   265
		    sel := selectorArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   266
		    (aBlock value:cls value:method value:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   267
			list add:(cls name , ' ' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   268
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   269
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   270
		checkedClasses add:cls.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   271
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   272
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   273
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   274
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   275
"/            Transcript show:'searching '; show:aClass name; showCr:' ...'; endEntry.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   276
	    wantInst ifTrue:[checkBlock value:aClass].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   277
	    wantClass ifTrue:[checkBlock value:(aClass class)].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   278
	    Processor yield
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   279
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   280
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   281
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   282
    ^ self browseMethods:list title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   283
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   284
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   285
browseInstMethodsOf:aClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   286
    "launch a browser for all instance methods in aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   287
     where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   288
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   289
    ^ self browseMethodsIn:(Array with:aClass) inst:true class:false where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   290
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   291
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   292
browseInstMethodsFrom:aClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   293
    "launch a browser for all instance methods in aClass and all subclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   294
     where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   295
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   296
    ^ self browseMethodsIn:(aClass withAllSubclasses) inst:true class:false where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   297
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   298
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   299
browseInstMethodsIn:aCollectionOfClasses where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   300
    "launch a browser for all instance methods of all classes in
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   301
     aCollectionOfClasses where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   302
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   303
    ^ self browseMethodsIn:aCollectionOfClasses inst:true class:false 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   304
		     where:aBlock title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   305
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   306
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   307
!SystemBrowser class methodsFor:'special search startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   308
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   309
browseImplementorsOf:aSelectorString in:aCollectionOfClasses title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   310
    "launch a browser for all implementors of aSelector in
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   311
     the classes contained in aCollectionOfClasses and its metaclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   312
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   313
    |list sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   314
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   315
    list := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   316
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   317
    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   318
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   319
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   320
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   321
	    aClass selectorArray do:[:aSelector |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   322
		(aSelectorString match:aSelector) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   323
		    list add:(aClass name , ' ' , aSelector)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   324
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   325
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   326
	    aClass class selectorArray do:[:aSelector |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   327
		(aSelectorString match:aSelector) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   328
		    list add:(aClass name , 'class ' , aSelector)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   329
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   330
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   331
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   332
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   333
	"can do a faster search"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   334
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   335
	aSelectorString knownAsSymbol ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   336
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   337
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   338
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   339
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   340
	sel := aSelectorString asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   341
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   342
	    (aClass implements:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   343
		list add:(aClass name , ' ' , aSelectorString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   344
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   345
	    (aClass class implements:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   346
		list add:(aClass name , 'class ' , aSelectorString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   347
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   348
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   349
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   350
    ^ self browseMethods:list title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   351
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   352
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   353
     SystemBrowser browseImplementorsOf:#+
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   354
				     in:(Array with:Number
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   355
					       with:Float
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   356
					       with:SmallInteger)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   357
				  title:'some implementors of +'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   358
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   359
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   360
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   361
browseImplementorsOf:aSelectorString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   362
    "launch a browser for all implementors of aSelector"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   363
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   364
    ^ self browseImplementorsOf:aSelectorString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   365
			     in:(Smalltalk allClasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   366
			  title:('implementors of: ' , aSelectorString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   367
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   368
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   369
     SystemBrowser browseImplementorsOf:#+
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   370
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   371
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   372
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   373
browseImplementorsOf:aSelectorString under:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   374
    "launch a browser for all implementors of aSelector in aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   375
     and its subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   376
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   377
    ^ self browseImplementorsOf:aSelectorString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   378
			     in:(aClass withAllSubclasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   379
			  title:('implementors of: ' , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   380
				 aSelectorString , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   381
				 ' (in or below ' , aClass name , ')')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   382
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   383
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   384
     SystemBrowser browseImplementorsOf:#+ under:Integer
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   385
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   386
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   387
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   388
browseAllCallsOn:aSelectorString in:aCollectionOfClasses title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   389
    "launch a browser for all senders of aSelector in aCollectionOfClasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   390
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   391
    |sel browser searchBlock|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   392
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   393
    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   394
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   395
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   396
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   397
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   398
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   399
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   400
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   401
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   402
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   403
					    found := (aSelectorString match:aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   404
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   405
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   406
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   407
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   408
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   409
		       ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   410
	browser := self browseMethodsIn:aCollectionOfClasses
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   411
				  where:[:class :method :s | searchBlock value:(method literals)]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   412
				  title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   413
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   414
	aSelectorString knownAsSymbol ifFalse:[
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   415
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   416
	    Transcript showCr:'none found.'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   417
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   418
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   419
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   420
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   421
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   422
	sel := aSelectorString asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   423
	browser := self browseMethodsIn:aCollectionOfClasses
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   424
				  where:[:class :method :s | method sends:sel]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   425
				  title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   426
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   427
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   428
    browser notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   429
	browser setSearchPattern:aSelectorString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   430
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   431
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   432
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   433
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   434
browseAllCallsOn:aSelectorString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   435
    "launch a browser for all senders of aSelector"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   436
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   437
    ^ self browseAllCallsOn:aSelectorString 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   438
			 in:(Smalltalk allClasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   439
		      title:('senders of ' , aSelectorString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   440
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   441
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   442
     SystemBrowser browseAllCallsOn:#+
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   443
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   444
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   445
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   446
browseCallsOn:aSelectorString under:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   447
    "launch a browser for all senders of aSelector in aClass and subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   448
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   449
    ^ self browseAllCallsOn:aSelectorString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   450
			 in:(aClass withAllSubclasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   451
		      title:('senders of: ' , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   452
			     aSelectorString , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   453
			     ' (in or below ' , aClass name , ')')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   454
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   455
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   456
     SystemBrowser browseAllCallsOn:#+ under:Number
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   457
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   458
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   459
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   460
browseForSymbol:aSymbol title:title warnIfNone:doWarn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   461
    "launch a browser for all methods referencing aSymbol"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   462
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   463
    |browser searchBlock sym|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   464
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   465
    (aSymbol includesMatchCharacters) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   466
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   467
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   468
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   469
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   470
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   471
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   472
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   473
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   474
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   475
					    found := (aSymbol match:aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   476
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   477
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   478
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   479
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   480
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   481
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   482
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   483
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   484
	 can do a faster search
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   485
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   486
	aSymbol knownAsSymbol ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   487
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   488
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   489
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   490
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   491
	sym := aSymbol asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   492
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   493
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   494
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   495
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   496
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   497
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   498
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   499
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   500
					    found := (sym == aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   501
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   502
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   503
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   504
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   505
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   506
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   507
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   508
    browser := self browseMethodsWhere:[:c :m :s | searchBlock value:(m literals)] title:title.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   509
    browser notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   510
	browser setSearchPattern:aSymbol
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   511
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   512
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   513
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   514
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   515
browseForSymbol:aSymbol
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
    ^ self browseForSymbol:aSymbol title:('users of ' , aSymbol) warnIfNone:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   519
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   520
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   521
browseReferendsOf:aGlobalName warnIfNone:doWarn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   522
    "launch a browser for all methods referencing a global
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   523
     named aGlobalName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   524
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   525
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   526
    ^ self browseForSymbol:aGlobalName title:('users of: ' , aGlobalName) warnIfNone:doWarn 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   527
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   528
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   529
browseReferendsOf:aGlobalName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   530
    "launch a browser for all methods referencing a global
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   531
     named aGlobalName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   532
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   533
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   534
    ^ self browseReferendsOf:aGlobalName warnIfNone:true 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   535
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   536
   "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   537
    Browser browseReferendsOf:#Transcript
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   538
   "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   539
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   540
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   541
browseForString:aString in:aCollectionOfClasses
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   542
    "launch a browser for all methods in aCollectionOfClasses  
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   543
     containing a string-constant"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   544
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   545
    |browser searchBlock title|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   546
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   547
    title := 'methods containing: ' , aString displayString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   548
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   549
    (aString includesMatchCharacters) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   550
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   551
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   552
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   553
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   554
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   555
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   556
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   557
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   558
					(aLiteral isMemberOf:String) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   559
					    found := (aString match:aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   560
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   561
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   562
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   563
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   564
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   565
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   566
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   567
	searchBlock := [:lits |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   568
			    |found|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   569
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   570
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   571
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   572
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   573
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   574
					(aLiteral isMemberOf:String) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   575
					    found := (aLiteral = aString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   576
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   577
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   578
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   579
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   580
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   581
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   582
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   583
    browser := self browseMethodsIn:aCollectionOfClasses 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   584
			      where:[:c :m :s | searchBlock value:(m literals)] 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   585
			      title:title.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   586
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   587
    browser notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   588
	browser setSearchPattern:aString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   589
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   590
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   591
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   592
    "SystemBrowser browseForString:'*all*'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   593
    "SystemBrowser browseForString:'*should*'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   594
    "SystemBrowser browseForString:'*[eE]rror*'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   595
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   596
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   597
browseForString:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   598
    "launch a browser for all methods containing a string"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   599
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   600
    ^ self browseForString:aString in:(Smalltalk allClasses)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   601
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   602
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   603
aproposSearch:aString in:aCollectionOfClasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   604
    "browse all methods, which have aString in their selector or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   605
     in the methods comment.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   606
     This is relatively slow, since all source must be processed."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   607
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   608
    |matchString list|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   609
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   610
    matchString := '*' , aString , '*'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   611
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   612
    list := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   613
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   614
    ^ self browseMethodsIn:aCollectionOfClasses 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   615
		     where:[:class :method :sel |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   616
				(matchString match:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   617
				    list add:(class name , '>>' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   618
				] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   619
				    (matchString match:(method comment)) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   620
					list add:(class name , '>>' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   621
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   622
				].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   623
				Processor yield.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   624
			   ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   625
		     title:('apropos: ' , aString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   626
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   627
    "SystemBrowser aproposSearch:'append'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   628
    "SystemBrowser aproposSearch:'add'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   629
    "SystemBrowser aproposSearch:'sort'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   630
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   631
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   632
aproposSearch:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   633
    "browse all methods, which have aString in their selector or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   634
     in the methods comment.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   635
     This is relatively slow, since all source must be processed."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   636
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   637
    ^ self aproposSearch:aString in:(Smalltalk allClasses)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   638
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   639
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   640
browseInstRefsTo:varName in:aCollectionOfClasses modificationsOnly:modsOnly title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   641
    "launch a browser for all methods in aClass where the instVar named
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   642
     varName is referenced; if modsOnly is true, browse only methods where the
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   643
     instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   644
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   645
    |searchBlock browser needMatch|
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   646
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   647
    needMatch := varName includesMatchCharacters.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   648
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   649
    searchBlock := [:c :m :s |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   650
	|src result parser instvars|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   651
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   652
	src := m source.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   653
	src isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   654
	    result := false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   655
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   656
	    needMatch ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   657
		"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   658
		 before doing a slow parse, quickly scan the
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   659
		 methods source for the variables name ...
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   660
		"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   661
		result := (src findString:varName) ~~ 0.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   662
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   663
		result := true.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   664
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   665
	    result ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   666
		result := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   667
		parser := Parser parseMethod:src in:c.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   668
		parser notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   669
		    modsOnly ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   670
			instvars := parser modifiedInstVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   671
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   672
			instvars := parser usedInstVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   673
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   674
		    instvars notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   675
			needMatch ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   676
			    instvars do:[:iv |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   677
				(varName match:iv) ifTrue:[result := true]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   678
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   679
			] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   680
			    result := instvars includes:varName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   681
			]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   682
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   683
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   684
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   685
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   686
	Processor yield.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   687
	result
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   688
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   689
    browser := self browseInstMethodsIn:aCollectionOfClasses where:searchBlock title:title.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   690
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   691
    browser notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   692
	browser setSearchPattern:varName
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   693
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   694
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   695
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   696
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   697
browseInstRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   698
    "launch a browser for all methods in aClass where the instVar named
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   699
     aString is referenced; if modsOnly is true, browse only methods where the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   700
     instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   701
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   702
    |title|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   703
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   704
    modsOnly ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   705
	title := 'modifications of '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   706
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   707
	title := 'references to '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   708
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   709
    ^ self browseInstRefsTo:aString 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   710
			 in:aCollectionOfClasses 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   711
	  modificationsOnly:modsOnly 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   712
		      title:(title , aString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   713
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   714
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   715
browseInstRefsTo:aString under:aClass modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   716
    "launch a browser for all methods in aClass and subclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   717
     where the instVar named aString is referenced; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   718
     if modsOnly is true, browse only methods where the instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   719
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   720
    ^ self browseInstRefsTo:aString in:(aClass withAllSubclasses) modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   721
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   722
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   723
browseClassRefsTo:varName in:aCollectionOfClasses modificationsOnly:modsOnly title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   724
    "launch a browser for all methods in aCollectionOfClasses,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   725
     where the classVar named aString is referenced; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   726
     if modsOnly is true, browse only methods where the classvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   727
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   728
    |needMatch searchBlock browser|
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   729
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   730
    needMatch := varName includesMatchCharacters.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   731
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   732
    searchBlock := [:c :m :s |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   733
	|src result parser classvars|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   734
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   735
	src := m source.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   736
	src isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   737
	    result := false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   738
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   739
	    needMatch ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   740
		"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   741
		 before doing a slow parse, quickly scan the
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   742
		 methods source for the variables name ...
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   743
		"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   744
		result := (src findString:varName) ~~ 0.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   745
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   746
		result := true.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   747
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   748
	    result ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   749
		result := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   750
		parser := Parser parseMethod:src in:c.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   751
		parser notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   752
		    modsOnly ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   753
			classvars := parser modifiedClassVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   754
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   755
			classvars := parser usedClassVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   756
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   757
		    classvars notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   758
			needMatch ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   759
			    classvars do:[:cv |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   760
				(varName match:cv) ifTrue:[result := true]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   761
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   762
			] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   763
			    result := classvars includes:varName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   764
			]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   765
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   766
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   767
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   768
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   769
	Processor yield.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   770
	result
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   771
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   772
    browser := self browseMethodsIn:aCollectionOfClasses where:searchBlock title:title.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   773
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   774
    browser notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   775
	browser setSearchPattern:varName
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   776
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   777
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   778
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   779
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   780
browseClassRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   781
    "launch a browser for all methods in aClass where the classVar named
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   782
     aString is referenced; if modsOnly is true, browse only methods where the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   783
     classvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   784
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   785
    |title|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   786
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   787
    modsOnly ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   788
	title := 'modifications of '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   789
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   790
	title := 'references to '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   791
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   792
    ^ self browseClassRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly title:(title , aString)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   793
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   794
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   795
browseClassRefsTo:aString under:aClass modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   796
    "launch a browser for all methods in aClass and subclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   797
     where the classVar named aString is referenced; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   798
     if modsOnly is true, browse only methods where the classvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   799
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   800
    ^ self browseClassRefsTo:aString in:(aClass withAllSubclasses) modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   801
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   802
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   803
!SystemBrowser class methodsFor:'private'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   804
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   805
showNoneFound:what
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   806
"/    DialogView warn:(self classResources string:('no ' , what , ' found')).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   807
    self showNoneFound
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   808
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   809
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   810
showNoneFound
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   811
    DialogView warn:(self classResources string:'None found').
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   812
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   813
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   814
newWithLabel:aString setupBlock:aBlock on:aWorkstation
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   815
    "common helper method for all creation methods"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   816
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   817
    |newBrowser|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   818
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   819
    newBrowser := self on:aWorkstation.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   820
    newBrowser label:aString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   821
    aBlock value:newBrowser.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   822
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   823
    newBrowser open.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   824
    ^ newBrowser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   825
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   826
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   827
newWithLabel:aString setupBlock:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   828
    "common helper method for all creation methods"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   829
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   830
    ^ self newWithLabel:aString setupBlock:aBlock on:Display
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   831
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   832
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   833
!SystemBrowser methodsFor:'initialize / release'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   834
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   835
initialize
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   836
    super initialize.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   837
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   838
    self icon:(Form fromFile:(resources at:'ICON_FILE' default:'SBrowser.xbm')
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   839
		  resolution:100).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   840
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   841
    showInstance := true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   842
    fullClass := false.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   843
    aspect := nil.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   844
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   845
    "inform me, when Smalltalk changes"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   846
    Smalltalk addDependent:self
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   847
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   848
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   849
destroy
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   850
    "relese dependant - destroy popups"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   851
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   852
    Smalltalk removeDependent:self.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   853
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   854
	currentClass removeDependent:self.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   855
	currentClass := nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   856
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   857
    super destroy
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   858
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   859
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   860
terminate
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   861
    (self checkSelectionChangeAllowed) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   862
	super terminate
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   863
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   864
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   865
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   866
createTogglesIn:aFrame
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   867
    "create and setup the class/instance toggles"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   868
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   869
    |halfSpacing h|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   870
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   871
    instanceToggle := Toggle label:(resources at:'instance') in:aFrame.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   872
    h := instanceToggle height.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   873
    instanceToggle origin:(0.0 @ 1.0) corner:(0.5 @ 1.0).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   874
    instanceToggle topInset:(h negated).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   875
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   876
    instanceToggle turnOn.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   877
    instanceToggle pressAction:[self instanceProtocol].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   878
    instanceToggle releaseAction:[self classProtocol].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   879
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   880
    classToggle := Toggle label:(resources at:'class') in:aFrame.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   881
    h := classToggle height.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   882
    classToggle origin:(0.5 @ 1.0) corner:(1.0 @ 1.0).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   883
    classToggle topInset:(h negated).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   884
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   885
    classToggle turnOff.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   886
    classToggle pressAction:[self classProtocol].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   887
    classToggle releaseAction:[self instanceProtocol].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   888
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   889
     StyleSheet is3D ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   890
	instanceToggle leftInset:(ViewSpacing // 2).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   891
	classToggle leftInset:(ViewSpacing // 2).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   892
	instanceToggle rightInset:ViewSpacing - (ViewSpacing // 2).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   893
	classToggle rightInset:ViewSpacing - (ViewSpacing // 2).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   894
    ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   895
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   896
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   897
createClassListViewIn:frame
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   898
    "setup the classlist subview, with its toggles"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   899
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   900
    |v panel oldStyle|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   901
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   902
    self createTogglesIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   903
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   904
"/ oldStyle := true.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   905
oldStyle := false.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   906
    oldStyle ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   907
	v := ScrollableView for:SelectionInListView in:frame.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   908
	v origin:(0.0 @ 0.0)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   909
	  extent:[frame width
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   910
		  @
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   911
		 (frame height
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   912
		  - (ViewSpacing // 2)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   913
		  - instanceToggle height
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   914
		  - instanceToggle borderWidth
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   915
		  + v borderWidth)].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   916
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   917
	classListView := v scrolledView
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   918
    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   919
	panel := VariableVerticalPanel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   920
		    origin:(0.0 @ 0.0)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   921
		    corner:[frame width
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   922
			    @
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   923
			    (frame height
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   924
			      - (ViewSpacing // 2)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   925
			      - instanceToggle height
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   926
			      - instanceToggle borderWidth
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   927
			      + v borderWidth)]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   928
			in:frame.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   929
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   930
	v := ScrollableView for:SelectionInListView in:panel.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   931
	v origin:(0.0 @ 0.0) corner:(1.0 @ 0.5).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   932
	classListView := v scrolledView.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   933
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   934
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   935
	v := ScrollableView for:SelectionInListView in:panel.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   936
	v origin:(0.0 @ 0.5)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   937
	  corner:(1.0 @ 1.0).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   938
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   939
	variableListView := v scrolledView
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   940
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   941
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   942
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   943
createCodeViewIn:aView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   944
    "setup the code view"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   945
    |v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   946
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   947
    v := HVScrollableView for:CodeView miniScrollerH:true miniScrollerV:false in:aView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   948
    v origin:(0.0 @ 0.25) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   949
    codeView := v scrolledView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   950
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   951
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   952
setupActions
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   953
"/    |v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   954
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   955
"/    v := classCategoryListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   956
"/    v notNil ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   957
"/        v action:[:lineNr | self classCategorySelection:lineNr].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   958
"/        v selectConditionBlock:[self checkSelectionChangeAllowed].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   959
"/        v ignoreReselect:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   960
"/    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   961
"/    v := classListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   962
"/    v notNil ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   963
"/        v action:[:lineNr | self classSelection:lineNr].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   964
"/        v selectConditionBlock:[self checkSelectionChangeAllowed].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   965
"/        v ignoreReselect:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   966
"/    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   967
"/    v := methodCategoryListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   968
"/    v notNil ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   969
"/        v action:[:lineNr | self methodCategorySelection:lineNr].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   970
"/        v selectConditionBlock:[self checkSelectionChangeAllowed].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   971
"/        v ignoreReselect:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   972
"/    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   973
"/    v := methodListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   974
"/    v notNil ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   975
"/        v action:[:lineNr | self methodSelection:lineNr].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   976
"/        v selectConditionBlock:[self checkSelectionChangeAllowed].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   977
"/        v ignoreReselect:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   978
"/    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   979
"/    v := classMethodListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   980
"/    v notNil ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   981
"/        v action:[:lineNr | self listSelection:lineNr].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   982
"/        v selectConditionBlock:[self checkSelectionChangeAllowed].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   983
"/        v ignoreReselect:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   984
"/    ]
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
setupForAll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   988
    "create subviews for a full browser"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   989
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   990
    |vpanel hpanel frame v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   991
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   992
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   993
		  in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   994
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   995
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   996
    v := HVScrollableView for:SelectionInListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   997
			  miniScrollerH:true miniScrollerV:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   998
			  in:hpanel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   999
    v origin:(0.0 @ 0.0) corner:(0.25 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1000
    classCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1001
"/    classCategoryListView contents:(self listOfAllClassCategories).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1002
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1003
    frame := View origin:(0.25 @ 0.0) corner:(0.5 @ 1.0) in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1004
    self createClassListViewIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1005
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1006
    v := HVScrollableView for:SelectionInListView miniScrollerH:true miniScrollerV:false in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1007
    v origin:(0.5 @ 0.0) corner:(0.75 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1008
    methodCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1009
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1010
    v := HVScrollableView for:SelectionInListView miniScrollerH:true miniScrollerV:false in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1011
    v origin:(0.75 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1012
    methodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1013
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1014
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1015
    self createCodeViewIn:vpanel
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1016
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1017
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1018
setupForFullClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1019
    "setup subviews to browse a class as full text"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1020
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1021
    |vpanel hpanel v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1022
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1023
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0)
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1024
				    corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1025
					in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1026
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1027
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1028
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1029
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1030
    v origin:(0.0 @ 0.0) corner:(0.5 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1031
    classCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1032
    classCategoryListView contents:(self listOfAllClassCategories).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1033
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1034
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1035
    v origin:(0.5 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1036
    classListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1037
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1038
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1039
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1040
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1041
    fullClass := true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1042
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1043
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1044
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1045
setupForClassCategory:aClassCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1046
    "setup subviews to browse a class category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1047
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1048
    |vpanel hpanel frame v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1049
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1050
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0) 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1051
				    corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1052
					in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1053
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1054
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1055
    frame  := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1056
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1057
    self createClassListViewIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1058
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1059
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1060
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1061
    methodCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1062
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1063
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1064
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1065
    methodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1066
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1067
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1068
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1069
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1070
    currentClassCategory := aClassCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1071
    self updateClassList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1072
    self updateMethodCategoryList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1073
    self updateMethodList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1074
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1075
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1076
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1077
setupForClassList:aList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1078
    "setup subviews to browse classes from a list"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1079
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1080
    |vpanel hpanel frame l v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1081
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1082
    vpanel := VariableVerticalPanel 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1083
		 origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1084
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1085
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1086
    frame := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1087
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1088
    self createClassListViewIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1089
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1090
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1091
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1092
    methodCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1093
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1094
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1095
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1096
    methodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1097
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1098
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1099
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1100
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1101
    l := aList collect:[:entry | entry name].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1102
    classListView list:(l sort).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1103
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1104
    self updateMethodCategoryList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1105
    self updateMethodList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1106
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1107
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1108
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1109
setupForClassHierarchy:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1110
    "setup subviews to browse a class hierarchy"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1111
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1112
    |vpanel hpanel frame v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1113
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1114
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0)
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1115
				    corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1116
					in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1117
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1118
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1119
    frame := View origin:(0.0 @ 0.0) corner:(0.33 @ 1.0) in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1120
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1121
    self createClassListViewIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1122
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1123
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1124
    v origin:(0.33 @ 0.0) corner:(0.66 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1125
    methodCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1126
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1127
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1128
    v origin:(0.66 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1129
    methodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1130
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1131
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1132
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1133
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1134
    currentClassHierarchy := aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1135
    self updateClassList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1136
    self updateMethodCategoryList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1137
    self updateMethodList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1138
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1139
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1140
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1141
setupForClass:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1142
    "create subviews for browsing a single class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1143
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1144
    |vpanel hpanel frame v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1145
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1146
    vpanel := VariableVerticalPanel origin:(0.0 @ 0.0) 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1147
				    corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1148
					in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1149
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1150
    hpanel := View origin:(0.0 @ 0.0) corner:(1.0 @ 0.25) in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1151
    frame := View origin:(0.0 @ 0.0) corner:(0.5 @ 1.0)in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1152
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1153
    self createTogglesIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1154
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1155
    v := ScrollableView for:SelectionInListView in:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1156
    v origin:(0.0 @ 0.0)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1157
      extent:[frame width
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1158
	      @
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1159
	      (frame height 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1160
	       - (ViewSpacing // 2)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1161
	       - instanceToggle height
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1162
	       - instanceToggle borderWidth
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1163
	       + v borderWidth)].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1164
    methodCategoryListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1165
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1166
    v := ScrollableView for:SelectionInListView in:hpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1167
    v origin:(0.5 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1168
    methodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1169
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1170
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1171
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1172
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1173
    self switchToClass:aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1174
    actualClass := aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1175
    self updateMethodCategoryList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1176
    self updateMethodList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1177
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1178
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1179
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1180
setupForClass:aClass methodCategory:aMethodCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1181
    "setup subviews to browse a method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1182
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1183
    |vpanel v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1184
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1185
    vpanel := VariableVerticalPanel
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1186
			origin:(0.0 @ 0.0) corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1187
			    in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1188
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1189
    v := ScrollableView for:SelectionInListView in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1190
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1191
    methodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1192
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1193
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1194
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1195
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1196
    currentClassCategory := aClass category.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1197
    self switchToClass:aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1198
    actualClass := aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1199
    currentMethodCategory := aMethodCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1200
    self updateMethodList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1201
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1202
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1203
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1204
setupForClass:aClass selector:selector
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1205
    "setup subviews to browse a single method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1206
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1207
    |v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1208
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1209
    v := ScrollableView for:CodeView in:self.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1210
    v origin:(0.0 @ 0.0) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1211
    codeView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1212
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1213
    currentClassCategory := aClass category.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1214
    self switchToClass:aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1215
    actualClass := aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1216
    currentMethod := currentClass compiledMethodAt:selector.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1217
    currentMethodCategory := currentMethod category.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1218
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1219
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1220
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1221
setupForList:aList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1222
    "setup subviews to browse methods from a list"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1223
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1224
    |vpanel v|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1225
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1226
    vpanel := VariableVerticalPanel
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1227
			origin:(0.0 @ 0.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1228
			corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1229
			    in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1230
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1231
    v := ScrollableView for:SelectionInListView in:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1232
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1233
    classMethodListView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1234
    classMethodListView contents:aList.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1235
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1236
"/    self setupActions.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1237
    self createCodeViewIn:vpanel.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1238
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1239
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1240
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1241
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1242
!SystemBrowser methodsFor:'realization'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1243
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1244
realize
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1245
    |v checkBlock|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1246
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1247
    super realize.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1248
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1249
    checkBlock := [:lineNr | self checkSelectionChangeAllowed].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1250
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1251
    v := classCategoryListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1252
    v notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1253
	v action:[:lineNr | self classCategorySelection:lineNr].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1254
	v selectConditionBlock:checkBlock.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1255
	v ignoreReselect:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1256
	v contents:(self listOfAllClassCategories).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1257
	self initializeClassCategoryMenu
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1258
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1259
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1260
    v := classListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1261
    v notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1262
	v action:[:lineNr | self classSelection:lineNr].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1263
	v selectConditionBlock:checkBlock.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1264
	v ignoreReselect:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1265
	self initializeClassMenu
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1266
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1267
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1268
    v := methodCategoryListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1269
    v notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1270
	v action:[:lineNr | self methodCategorySelection:lineNr].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1271
	v selectConditionBlock:checkBlock.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1272
	v ignoreReselect:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1273
	self initializeMethodCategoryMenu
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1274
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1275
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1276
    v := methodListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1277
    v notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1278
	v action:[:lineNr | self methodSelection:lineNr].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1279
	v selectConditionBlock:checkBlock.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1280
	v ignoreReselect:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1281
	self initializeMethodMenu
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1282
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1283
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1284
    v := classMethodListView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1285
    v notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1286
	v action:[:lineNr | self listSelection:lineNr].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1287
	v selectConditionBlock:checkBlock.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1288
	v ignoreReselect:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1289
	self initializeClassMethodMenu
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1290
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1291
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1292
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1293
!SystemBrowser methodsFor:'private'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1294
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1295
checkSelectionChangeAllowed
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1296
    "return true, if selection change is ok;
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1297
     its not ok, if code has been changed.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1298
     in this case, return the result of a user query"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1299
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1300
    |box|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1301
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1302
    codeView modified ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1303
	^ true
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1304
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1305
    box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1306
	       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
  1307
	       yesText:(resources at:'continue')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1308
	       noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1309
    ^ box confirm
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1310
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1311
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1312
switchToClass:newClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1313
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1314
	currentClass removeDependent:self
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1315
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1316
    currentClass := newClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1317
    currentClass notNil ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1318
	currentClass addDependent:self.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1319
    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1320
    self normalLabel
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1321
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1322
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1323
showExplanation:someText
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1324
    "show explanation from Parser"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1325
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1326
    self notify:someText
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1327
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1328
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1329
normalLabel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1330
    "set the normal (inactive) window- and icon labels"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1331
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1332
    currentClass notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1333
	self label:'System Browser: ', currentClass name.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1334
	self iconLabel:currentClass name
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1335
    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1336
	self label:'System Browser'.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1337
	self iconLabel:'System Browser'.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1338
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1339
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1340
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1341
setSearchPattern:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1342
    codeView setSearchPattern:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1343
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1344
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1345
selectorToSearchFor
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1346
    "look in codeView and methodListView for a search-string when searching for selectors"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1347
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1348
    |sel t|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1349
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1350
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1351
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1352
	sel := sel asString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1353
	t := Parser selectorInExpression:sel.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1354
	t notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1355
	    sel := t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1356
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1357
	sel := sel withoutSpaces
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1358
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1359
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1360
	    sel := methodListView selectionValue
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1361
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1362
	    classMethodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1363
		sel := classMethodListView selectionValue.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1364
		sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1365
		    sel := self selectorFromClassMethodString:sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1366
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1367
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1368
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1369
	sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1370
	    sel := sel withoutSpaces
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1371
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1372
	    sel := ''
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1373
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1374
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1375
    ^ sel
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1376
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1377
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1378
stringToSearchFor
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1379
    "look in codeView and methodListView for a search-string when searching for classes/names"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1380
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1381
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1382
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1383
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1384
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1385
	sel := sel asString withoutSpaces
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1386
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1387
	sel isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1388
	    currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1389
		sel := currentClass name
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1390
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1391
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1392
	sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1393
	    sel := sel withoutSpaces
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1394
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1395
	    sel := ''
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1396
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1397
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1398
    ^ sel
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1399
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1400
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1401
findClassOfVariable:aVariableName accessWith:aSelector
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1402
    "this method returns the class, in which a variable
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1403
     is defined; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1404
     needs either #instVarNames or #classVarNames as aSelector."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1405
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1406
    |cls homeClass|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1407
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1408
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1409
     first, find the class, where the variable is declared
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1410
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1411
    cls := currentClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1412
    [cls notNil] whileTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1413
	((cls perform:aSelector) includes:aVariableName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1414
	    homeClass := cls.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1415
	    cls := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1416
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1417
	    cls := cls superclass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1418
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1419
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1420
    homeClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1421
	"nope, must be one below ... (could optimize a bit, by searching down
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1422
	 for the declaring class ...
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1423
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1424
	homeClass := currentClass
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1425
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1426
	Transcript showCr:'starting search in ' , homeClass name.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1427
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1428
    ^ homeClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1429
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1430
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1431
listBoxTitle:title okText:okText list:aList
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1432
    "convenient method: setup a listBox & return it"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1433
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1434
    |box|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1435
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1436
    box := ListSelectionBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1437
    box okText:(resources string:okText).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1438
    box title:(resources string:title).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1439
    box list:aList.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1440
    ^ box
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1441
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1442
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1443
enterBoxTitle:title okText:okText
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1444
    "convenient method: setup enterBox"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1445
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1446
    |box|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1447
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1448
    box := EnterBox new.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1449
    box title:(resources string:title) okText:(resources string:okText).
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1450
    ^ box
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1451
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1452
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1453
askBoxTitle:title okText:okText initialText:initialText action:aBlock
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1454
    "convenient method: setup enterBox, and open it"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1455
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1456
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1457
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1458
    box := EnterBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1459
    box title:(resources string:title) okText:(resources string:okText).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1460
    box initialText:initialText.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1461
    box action:[:aString | self withWaitCursorDo:aBlock value:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1462
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1463
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1464
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1465
enterBoxForSearchSelectorTitle:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1466
    "convenient method: setup enterBox with text from codeView or selected
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1467
     method for browsing based on a selector"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1468
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1469
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1470
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1471
    box := self enterBoxTitle:title okText:'search'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1472
    box initialText:(self selectorToSearchFor).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1473
    ^ box
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1474
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1475
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1476
askAndBrowseSelectorTitle:title action:aBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1477
    "convenient method: setup enterBox with text from codeView or selected
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1478
     method for browsing based on a selector. Set action and launch box"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1479
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1480
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1481
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1482
    box := self enterBoxTitle:title okText:'browse'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1483
    box initialText:(self selectorToSearchFor).
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1484
    box action:[:aString | self withCursor:(Cursor questionMark) do:[aBlock value:aString]].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1485
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1486
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1487
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1488
enterBoxForBrowseTitle:title action:aBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1489
    "convenient method: setup enterBox with text from codeView or selected
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1490
     method for method browsing based on className/variable"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1491
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1492
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1493
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1494
    box := self enterBoxTitle:title okText:'browse'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1495
    box initialText:(self stringToSearchFor).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1496
    box action:[:aString | self withWaitCursorDo:[aBlock value:aString]].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1497
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1498
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1499
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1500
enterBoxForCodeSelectionTitle:title okText:okText
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1501
    "convenient method: setup enterBox with text from codeview"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1502
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1503
    |sel box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1504
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1505
    box := self enterBoxTitle:(resources string:title) okText:(resources string:okText).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1506
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1507
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1508
	box initialText:(sel asString withoutSeparators)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1509
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1510
    ^ box
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1511
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1512
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1513
askAndBrowseMethodCategory:title action:aBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1514
    "convenient method: setup enterBox with initial being current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1515
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1516
    |sel box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1517
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1518
    box := self enterBoxTitle:title okText:'browse'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1519
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1520
    sel isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1521
	currentMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1522
	    sel := currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1523
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1524
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1525
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1526
	box initialText:(sel asString withoutSpaces)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1527
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1528
    box action:[:aString | self withWaitCursorDo:[aBlock value:aString]].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1529
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1530
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1531
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1532
listOfAllClassCategories
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1533
    "return a list of all class categories"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1534
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1535
    |newList cat|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1536
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1537
    newList := Text with:'* all *' with:'* hierarchy *'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1538
    Smalltalk allBehaviorsDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1539
	cat := aClass category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1540
	cat isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1541
	    cat := '* no category *'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1542
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1543
	newList indexOf:cat ifAbsent:[newList add:cat]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1544
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1545
    newList sort.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1546
    ^ newList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1547
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1548
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1549
listOfClassHierarchyOf:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1550
    "return a hierarchy class-list"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1551
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1552
    ^ (aClass allSuperclasses reverse , 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1553
       (Array with:aClass),
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1554
       aClass allSubclassesInOrder) collect:[:c | c name]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1555
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1556
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1557
    |newList theClass|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1558
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1559
    theClass := aClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1560
    newList := Text with:theClass name.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1561
    [theClass ~~ Object] whileTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1562
	theClass := theClass superclass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1563
	newList add:theClass name
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1564
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1565
    newList reverse.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1566
    ^ newList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1567
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1568
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1569
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1570
listOfAllClassesInCategory:aCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1571
    "return a list of all classes in a given category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1572
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1573
    |newList classList searchCategory string|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1574
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1575
    newList := Text new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1576
    (aCategory = '* all *') ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1577
	Smalltalk allBehaviorsDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1578
	    string := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1579
	    newList indexOf:string ifAbsent:[newList add:string]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1580
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1581
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1582
	(aCategory = '* hierarchy *') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1583
	    classList := Text new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1584
	    self classHierarchyDo:[:aClass :lvl|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1585
		string := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1586
		classList indexOf:string ifAbsent:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1587
		    classList add:string.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1588
		    newList add:(String new:lvl) , string
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1589
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1590
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1591
	    ^ newList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1592
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1593
	    (aCategory = '* no category *') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1594
		searchCategory := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1595
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1596
		searchCategory := aCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1597
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1598
	    Smalltalk allBehaviorsDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1599
		aClass isMeta ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1600
		    (aClass category = searchCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1601
			string := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1602
			newList indexOf:string ifAbsent:[newList add:string]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1603
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1604
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1605
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1606
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1607
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1608
    (newList size == 0) ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1609
    ^ newList sort
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1610
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1611
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1612
classHierarchyDo:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1613
    "eavluate the 2-arg block for every class,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1614
     starting at Object; passing class and nesting level to the block."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1615
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1616
    |classes s classDict l|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1617
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1618
    classes := Smalltalk allClasses.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1619
    classDict := IdentityDictionary new:classes size.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1620
    classes do:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1621
	s := aClass superclass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1622
	s notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1623
	    l := classDict at:s ifAbsent:[nil].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1624
	    l isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1625
		l := OrderedCollection new:5.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1626
		classDict at:s put:l
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1627
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1628
	    l add:aClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1629
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1630
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1631
    self classHierarchyOf:Object level:0 do:aBlock using:classDict
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1632
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1633
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1634
classHierarchyOf:aClass level:level do:aBlock using:aDictionary
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1635
    "evaluate the 2-arg block for every subclass of aClass,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1636
     passing class and nesting level to the block."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1637
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1638
    |names subclasses|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1639
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1640
    aBlock value:aClass value:level.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1641
    subclasses := aDictionary at:aClass ifAbsent:[nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1642
    (subclasses size == 0) ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1643
	names := subclasses collect:[:class | class name].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1644
	names sortWith:subclasses.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1645
	subclasses do:[:aSubClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1646
	    self classHierarchyOf:aSubClass level:(level + 1) do:aBlock using:aDictionary
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1647
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1648
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1649
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1650
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1651
listOfAllMethodCategoriesInClass:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1652
    "answer a list of all method categories of the argument, aClass"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1653
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1654
    |newList cat|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1655
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1656
    newList := Text new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1657
    aClass methodArray do:[:aMethod |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1658
	cat := aMethod category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1659
	cat isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1660
	    cat := '* no category *'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1661
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1662
	(newList includes:cat) ifFalse:[newList add:cat]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1663
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1664
    (newList size == 0) ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1665
    newList add:'* all *'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1666
    ^ newList sort
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1667
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1668
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1669
listOfAllSelectorsInCategory:aCategory ofClass:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1670
    "answer a list of all selectors in a given method category 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1671
     of the argument, aClass"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1672
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1673
    |newList searchCategory selector|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1674
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1675
    (aCategory = '* all *') ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1676
	newList := aClass selectorArray asText
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1677
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1678
	(aCategory = '* no category *') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1679
	    searchCategory := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1680
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1681
	    searchCategory := aCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1682
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1683
	newList := Text new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1684
	aClass methodArray do:[:aMethod |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1685
	    (aMethod category = searchCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1686
		selector := aClass selectorForMethod:aMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1687
		selector notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1688
		    aMethod isWrapped ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1689
			selector := selector , ' !!'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1690
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1691
		    (newList includes:selector) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1692
			newList add:selector
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1693
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1694
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1695
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1696
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1697
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1698
    (newList size == 0) ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1699
    ^ newList sort
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1700
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1701
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1702
templateFor:className in:cat
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1703
    "return a class definition template - be smart in what is offered initially"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1704
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1705
    |aString name i|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1706
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1707
    name := 'NewClass'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1708
    i := 1.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1709
    [name knownAsSymbol and:[Smalltalk includesKey:name asSymbol]] whileTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1710
	i := i + 1.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1711
	name := 'NewClass' , i printString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1712
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1713
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1714
    aString := className , ' subclass:#' , name , '
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1715
	instanceVariableNames: '''' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1716
	classVariableNames: ''''    
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1717
	poolDictionaries: ''''
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1718
	category: '''.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1719
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1720
	cat notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1721
	    aString := aString , cat
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1722
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1723
	aString := aString , ''''.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1724
	^ aString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1725
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1726
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1727
template
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1728
    "return a method definition template"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1729
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1730
    ^ 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1731
'message selector and argument names
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1732
    "comment stating purpose of message"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1733
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1734
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1735
    |temporaries|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1736
    statements
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1737
'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1738
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1739
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1740
compileCode:someCode
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1741
    (ReadStream on:someCode) fileIn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1742
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1743
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1744
!SystemBrowser methodsFor:'user interaction'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1745
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1746
instanceProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1747
    showInstance ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1748
	self checkSelectionChangeAllowed ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1749
	    classToggle turnOff.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1750
	    instanceToggle turnOn.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1751
	    showInstance := true.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1752
	    currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1753
		self classSelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1754
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1755
	    codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1756
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1757
	    instanceToggle turnOff.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1758
	    classToggle turnOn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1759
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1760
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1761
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1762
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1763
classProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1764
    showInstance ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1765
	self checkSelectionChangeAllowed ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1766
	    instanceToggle turnOff.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1767
	    classToggle turnOn.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1768
	    showInstance := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1769
	    currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1770
		self classSelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1771
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1772
	    codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1773
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1774
	    instanceToggle turnOn.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1775
	    classToggle turnOff
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1776
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1777
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1778
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1779
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1780
updateClassCategoryListWithScroll:scroll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1781
    |oldClassCategory oldClass oldMethodCategory oldMethod
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1782
     oldSelector newCategoryList|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1783
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1784
    classMethodListView notNil ifTrue:[ ^ self ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1785
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1786
    oldClassCategory := currentClassCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1787
    oldClass := currentClass.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1788
    oldMethodCategory := currentMethodCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1789
    oldMethod := currentMethod.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1790
    oldMethod notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1791
	oldSelector := methodListView selectionValue
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1792
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1793
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1794
    classCategoryListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1795
	newCategoryList := self listOfAllClassCategories.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1796
	newCategoryList = classCategoryListView list ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1797
	    scroll ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1798
		classCategoryListView contents:newCategoryList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1799
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1800
		classCategoryListView setContents:newCategoryList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1801
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1802
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1803
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1804
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1805
    oldClassCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1806
	classCategoryListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1807
	    classCategoryListView selectElement:oldClassCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1808
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1809
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1810
    classListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1811
	oldClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1812
	    classListView selectElement:(oldClass name)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1813
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1814
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1815
    oldMethodCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1816
	methodCategoryListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1817
	    methodCategoryListView selectElement:oldMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1818
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1819
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1820
    oldSelector notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1821
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1822
	    methodListView selectElement:oldSelector
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1823
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1824
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1825
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1826
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1827
updateClassCategoryList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1828
    self updateClassCategoryListWithScroll:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1829
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1830
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1831
updateClassListWithScroll:scroll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1832
    |classes oldClassName|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1833
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1834
    classListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1835
	currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1836
	    oldClassName := currentClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1837
	    currentClass := Smalltalk at:(oldClassName asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1838
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1839
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1840
	currentClassCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1841
	    classes := self listOfAllClassesInCategory:currentClassCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1842
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1843
	    currentClassHierarchy notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1844
		classes := self listOfClassHierarchyOf:currentClassHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1845
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1846
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1847
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1848
	classListView list = classes ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1849
	    scroll ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1850
		classListView contents:classes
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1851
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1852
		classListView setContents:classes
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1853
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1854
	    oldClassName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1855
		classListView setContents:classes.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1856
		classListView selectElement:oldClassName
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1857
	    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1858
		variableListView notNil ifTrue:[variableListView contents:nil]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1859
	    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1860
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1861
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1862
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1863
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1864
updateClassList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1865
    self updateClassListWithScroll:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1866
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1867
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1868
updateVariableList
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1869
    |l subList flags last|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1870
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1871
    variableListView isNil ifTrue:[^ self].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1872
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1873
    l := OrderedCollection new.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1874
    actualClass withAllSuperclasses do:[:aClass |
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1875
	subList := aClass instVarNames.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1876
	subList size ~~ 0 ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1877
	    l := l , (subList asOrderedCollection reverse).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1878
	    l := l , (OrderedCollection with:'---- ' , aClass name , ' ---------').
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1879
	]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1880
    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1881
    l reverse.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1882
    variableListView attributes:nil.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1883
    variableListView list:l.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1884
    l keysAndValuesDo:[:index :entry |
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1885
	(entry startsWith:'---') ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1886
	    variableListView attributeAt:index put:#halfIntensity.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1887
	    last := index
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1888
	]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1889
    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1890
    last notNil ifTrue:[variableListView scrollToLine:last]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1891
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1892
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1893
updateMethodCategoryListWithScroll:scroll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1894
    |categories|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1895
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1896
    methodCategoryListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1897
	currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1898
	    categories := self listOfAllMethodCategoriesInClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1899
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1900
	methodCategoryListView list = categories ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1901
	    scroll ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1902
		methodCategoryListView contents:categories
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1903
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1904
		methodCategoryListView setContents:categories
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1905
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1906
	    currentMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1907
		methodCategoryListView selectElement:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1908
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1909
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1910
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1911
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1912
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1913
updateMethodCategoryList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1914
    self updateMethodCategoryListWithScroll:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1915
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1916
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1917
updateMethodListWithScroll:scroll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1918
    |selectors scr first last|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1919
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1920
    methodListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1921
	currentMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1922
	    selectors := self listOfAllSelectorsInCategory:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1923
						   ofClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1924
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1925
	scr := scroll.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1926
	first := methodListView firstLineShown.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1927
	first ~~ 1 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1928
	    last := methodListView lastLineShown.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1929
	    selectors size <= (last - first + 1) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1930
		scr := true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1931
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1932
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1933
	methodListView list = selectors ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1934
	    scr ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1935
		methodListView contents:selectors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1936
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1937
		methodListView setContents:selectors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1938
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1939
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1940
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1941
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1942
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1943
updateMethodList
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1944
    self updateMethodListWithScroll:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1945
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1946
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1947
updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1948
    |code aStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1949
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1950
    fullClass ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1951
	currentClass notNil ifTrue:[
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1952
" this is too slow for big classes ...
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1953
	    code := String new:1000.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1954
	    aStream := WriteStream on:code.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1955
	    currentClass fileOutOn:aStream
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1956
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1957
	    aStream := FileStream newFileNamed:'__temp'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1958
	    aStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1959
		self notify:'cannot create temporary file.'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1960
		codeView contents:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1961
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1962
		^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1963
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1964
	    currentClass fileOutOn:aStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1965
	    aStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1966
	    aStream := FileStream oldFileNamed:'__temp'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1967
	    aStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1968
		self notify:'oops - cannot reopen temp file'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1969
		codeView contents:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1970
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1971
		^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1972
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1973
	    code := aStream contents.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1974
	    aStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1975
	    OperatingSystem removeFile:'__temp'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1976
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1977
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1978
	currentMethod notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1979
	    code := currentMethod source
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1980
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1981
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1982
    codeView contents:code.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1983
    codeView modified:false
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1984
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1985
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1986
classSelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1987
    |oldMethodCategory oldMethod|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1988
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1989
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1990
	oldMethodCategory := currentMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1991
	oldMethod := currentMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1992
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1993
	showInstance ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1994
	    actualClass := currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1995
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1996
	    actualClass := currentClass class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1997
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1998
	currentMethodCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1999
	currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2000
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2001
	self updateVariableList.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2002
	self updateMethodCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2003
	oldMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2004
	    methodCategoryListView selectElement:oldMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2005
	    methodCategoryListView selection notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2006
		currentMethodCategory := oldMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2007
		self methodCategorySelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2008
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2009
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2010
	self updateMethodList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2011
	self updateCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2012
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2013
	fullClass ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2014
	    codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2015
		codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2016
		Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2017
		    self compileCode:theCode asString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2018
		    codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2019
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2020
		codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2021
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2022
	    codeView explainAction:nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2023
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2024
	    self classDefinition.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2025
	    codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2026
		codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2027
		Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2028
		    (Compiler evaluate:theCode asString notifying:codeView)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2029
		    isBehavior ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2030
			self classCategoryUpdate.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2031
			self updateClassListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2032
			codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2033
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2034
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2035
		codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2036
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2037
	    codeView explainAction:nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2038
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2039
	classCategoryListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2040
	    (currentClassCategory = currentClass category) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2041
		currentClassCategory := currentClass category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2042
		classCategoryListView selectElement:currentClassCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2043
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2044
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2045
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2046
	"set self for doits. This allows accessing the current class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2047
	 as self, and access to the class variables by name."
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2048
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2049
	codeView doItAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2050
	    |compiler|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2051
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2052
	    currentClass isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2053
		compiler := Compiler
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2054
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2055
		compiler := currentClass compiler
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2056
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2057
	    compiler 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2058
		evaluate:theCode 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2059
		in:nil 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2060
		receiver:currentClass 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2061
		notifying:codeView 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2062
		logged:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2063
		ifFail:nil 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2064
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2065
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2066
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2067
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2068
classCategorySelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2069
    "class category has changed - update dependant views"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2070
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2071
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2072
	self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2073
	actualClass := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2074
	currentMethodCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2075
	currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2076
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2077
	self updateClassList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2078
	self updateMethodCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2079
	self updateMethodList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2080
	self updateCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2081
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2082
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2083
	codeView acceptAction:nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2084
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2085
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2086
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2087
classCategorySelection:lineNr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2088
    "user clicked on a class category line - show classes.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2089
     If switching to hierarchy or all, keep current selections"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2090
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2091
    |newCategory oldClass classIndex index|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2092
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2093
    newCategory := classCategoryListView selectionValue.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2094
    (newCategory startsWith:'*') ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2095
	"etiher all or hierarchy;
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2096
	 remember current selections and switch after showing class list"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2097
	oldClass := currentClass
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2098
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2099
    currentClassCategory := newCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2100
    oldClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2101
	self classCategorySelectionChanged
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2102
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2103
	self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2104
	    self updateClassList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2105
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2106
	"stupid - search for class name in (indented) list"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2107
	index := 1.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2108
	classListView list do:[:elem |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2109
	    (elem endsWith:(oldClass name)) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2110
		classIndex := index
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2111
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2112
	    index := index + 1
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2113
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2114
	classIndex notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2115
	    classListView selection:classIndex.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2116
	    self switchToClass:(Smalltalk at:(oldClass name asSymbol))
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2117
	] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2118
	    self normalLabel.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2119
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2120
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2121
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2122
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2123
classSelection:lineNr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2124
    "user clicked on a class line - show method categories"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2125
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2126
    |classSymbol cls|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2127
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2128
    classSymbol := classListView selectionValue withoutSpaces asSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2129
    (Smalltalk includesKey:classSymbol) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2130
	cls := Smalltalk at:classSymbol
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2131
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2132
    cls notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2133
	self switchToClass:cls.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2134
	self classSelectionChanged
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2135
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2136
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2137
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2138
methodCategorySelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2139
    "method category selection has changed - update dependant views"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2140
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2141
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2142
	currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2143
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2144
	self updateMethodList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2145
	self updateCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2146
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2147
	currentMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2148
	    methodCategoryListView selectElement:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2149
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2150
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2151
	codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2152
	    codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2153
	    Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2154
		actualClass compiler compile:theCode asString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2155
				    forClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2156
				  inCategory:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2157
				   notifying:codeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2158
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2159
		self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2160
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2161
	    codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2162
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2163
	codeView explainAction:[:theCode :theSelection |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2164
	    self showExplanation:(Explainer explain:theSelection 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2165
						 in:theCode
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2166
					   forClass:actualClass)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2167
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2168
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2169
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2170
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2171
methodCategorySelection:lineNr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2172
    "user clicked on a method category line - show selectors"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2173
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2174
    currentClass isNil ifTrue:[^ self].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2175
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2176
    currentMethodCategory := methodCategoryListView selectionValue.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2177
    self methodCategorySelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2178
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2179
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2180
methodSelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2181
    "method selection has changed - update dependant views"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2182
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2183
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2184
	self updateCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2185
	codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2186
	    codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2187
	    Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2188
		actualClass compiler compile:theCode asString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2189
				    forClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2190
				    inCategory:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2191
				     notifying:codeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2192
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2193
		self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2194
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2195
	    codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2196
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2197
	codeView explainAction:[:theCode :theSelection |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2198
	    self showExplanation:(Explainer explain:theSelection 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2199
						 in:theCode
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2200
					   forClass:actualClass)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2201
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2202
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2203
	    (currentMethod notNil and:[currentMethod isWrapped]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2204
		self initializeMethodMenu2
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2205
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2206
		self initializeMethodMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2207
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2208
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2209
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2210
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2211
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2212
methodSelection:lineNr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2213
    "user clicked on a method line - show code"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2214
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2215
    |selectorString selectorSymbol|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2216
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2217
    currentClass isNil ifTrue:[^ self].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2218
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2219
    selectorString := methodListView selectionValue.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2220
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2221
     kludge: check if its a wrapped one
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2222
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2223
    (selectorString endsWith:' !!') ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2224
	selectorString := selectorString copyTo:(selectorString size - 2)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2225
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2226
    selectorSymbol := selectorString asSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2227
    currentMethod := actualClass compiledMethodAt:selectorSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2228
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2229
    methodCategoryListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2230
	currentMethod notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2231
	    (currentMethodCategory = currentMethod category) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2232
		currentMethodCategory := currentMethod category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2233
		methodCategoryListView selectElement:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2234
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2235
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2236
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2237
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2238
    self methodSelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2239
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2240
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2241
classFromClassMethodString:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2242
    "helper for classMethod-list - extract class name from the string"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2243
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2244
    |pos|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2245
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2246
    pos := aString indexOf:(Character space).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2247
    ^ aString copyTo:(pos - 1)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2248
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2249
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2250
selectorFromClassMethodString:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2251
    "helper for classMethod-list - extract selector from the string"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2252
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2253
    |pos|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2254
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2255
    pos := aString indexOf:(Character space).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2256
    ^ aString copyFrom:(pos + 1)
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2257
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2258
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2259
listSelection:lineNr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2260
    "user clicked on a class/method line - show code"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2261
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2262
    |string classString selectorString|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2263
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2264
    string := classMethodListView selectionValue.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2265
    classString := self classFromClassMethodString:string.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2266
    selectorString := self selectorFromClassMethodString:string.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2267
    ((classString ~= 'Metaclass') and:[classString endsWith:'class']) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2268
	classString := classString copyTo:(classString size - 5).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2269
	self switchToClass:(Smalltalk at:classString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2270
	actualClass := currentClass class
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2271
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2272
	self switchToClass:(Smalltalk at:classString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2273
	actualClass := currentClass
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2274
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2275
    currentClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2276
	self warn:'oops class is gone'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2277
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2278
	currentClassCategory := currentClass category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2279
	currentMethod := actualClass compiledMethodAt:(selectorString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2280
	currentMethodCategory := currentMethod category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2281
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2282
	self methodSelectionChanged
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2283
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2284
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2285
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2286
!SystemBrowser methodsFor:'class category menu'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2287
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2288
initializeClassCategoryMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2289
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2290
    
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2291
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2292
						'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2293
						'fileOut each'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2294
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2295
						'fileOut binary'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2296
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2297
						'printOut' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2298
						'printOut protocol'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2299
						'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2300
						'SPAWN_CATEGORY'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2301
						'spawn full class'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2302
						'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2303
						'update'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2304
						'find class ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2305
						'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2306
						'new class category ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2307
						'rename ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2308
						'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2309
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2310
    classCategoryListView 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2311
	middleButtonMenu:(PopUpMenu 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2312
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2313
			     selectors:#(classCategoryFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2314
					 classCategoryFileOutEach
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2315
					 classCategoryPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2316
					 classCategoryPrintOutProtocol
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2317
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2318
					 classCategorySpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2319
					 classCategorySpawnFullClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2320
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2321
					 classCategoryUpdate
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2322
					 classCategoryFindClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2323
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2324
					 classCategoryNewCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2325
					 classCategoryRename
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2326
					 classCategoryRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2327
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2328
				   for:classCategoryListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2329
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2330
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2331
allClassesInCurrentCategoryInOrderDo:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2332
    "evaluate aBlock for all classes in the current class category;
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2333
     superclasses come first - then subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2334
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2335
    |classes|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2336
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2337
    currentClassCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2338
	classes := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2339
	Smalltalk allClassesDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2340
	    aClass isMeta ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2341
		(aClass category = currentClassCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2342
		    classes add:aClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2343
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2344
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2345
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2346
	classes topologicalSort:[:a :b | b isSubclassOf:a].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2347
	classes do:aBlock
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2348
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2349
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2350
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2351
allClassesInCurrentCategoryDo:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2352
    "evaluate aBlock for all classes in the current class category;
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2353
     superclasses come first - then subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2354
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2355
    currentClassCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2356
	Smalltalk allClassesDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2357
	    aClass isMeta ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2358
		(aClass category = currentClassCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2359
		    aBlock value:aClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2360
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2361
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2362
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2363
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2364
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2365
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2366
classCategoryUpdate
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2367
    "update class category list and dependants"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2368
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2369
    |oldClassName oldMethodCategory|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2370
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2371
    classCategoryListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2372
	currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2373
	    oldClassName := currentClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2374
	    (oldClassName endsWith:'-old') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2375
		oldClassName := oldClassName copyTo:(oldClassName size - 4)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2376
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2377
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2378
	oldMethodCategory := currentMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2379
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2380
	classCategoryListView setContents:(self listOfAllClassCategories).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2381
	currentClassCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2382
	    classCategoryListView selectElement:currentClassCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2383
	    self classCategorySelectionChanged.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2384
	    oldClassName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2385
		classListView selectElement:oldClassName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2386
		self switchToClass:(Smalltalk at:oldClassName asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2387
		self classSelectionChanged.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2388
		oldMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2389
		    methodCategoryListView selectElement:oldMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2390
		    currentMethodCategory := oldMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2391
		    self methodCategorySelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2392
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2393
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2394
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2395
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2396
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2397
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2398
classCategoryPrintOutProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2399
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2400
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2401
    self allClassesInCurrentCategoryInOrderDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2402
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2403
	aClass printOutProtocolOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2404
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2405
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2406
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2407
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2408
classCategoryPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2409
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2410
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2411
    self allClassesInCurrentCategoryDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2412
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2413
	aClass printOutOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2414
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2415
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2416
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2417
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2418
classCategoryFileOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2419
    "create a file 'categoryName' consisting of all classes in current category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2420
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2421
    |aStream fileName|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2422
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2423
    self checkClassCategorySelected ifFalse:[^ self].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2424
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2425
    fileName := currentClassCategory asString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2426
    fileName replaceAll:Character space by:$_.
41
91017644c8f2 prject filename interface changed
claus
parents: 37
diff changeset
  2427
    "
91017644c8f2 prject filename interface changed
claus
parents: 37
diff changeset
  2428
     this test allows a smalltalk to be built without Projects/ChangeSets
91017644c8f2 prject filename interface changed
claus
parents: 37
diff changeset
  2429
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2430
    Project notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2431
	fileName := Project currentProjectDirectory , fileName.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2432
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2433
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2434
    "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2435
     if file exists, save original in a .sav file
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2436
    "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2437
    fileName asFilename exists ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2438
	fileName asFilename copyTo:(fileName , '.sav')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2439
    ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2440
    aStream := FileStream newFileNamed:fileName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2441
    aStream isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2442
	^ self warn:'cannot create: %1' with:fileName
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2443
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2444
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2445
	self label:('System Browser writing: ' , fileName).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2446
	self allClassesInCurrentCategoryInOrderDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2447
	    aClass fileOutOn:aStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2448
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2449
	aStream close.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2450
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2451
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2452
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2453
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2454
classCategoryFileOutEach
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2455
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2456
	self allClassesInCurrentCategoryDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2457
	    self label:('System Browser saving: ' , aClass name).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2458
	    Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2459
		self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2460
		ex return.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2461
	    ] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2462
		aClass fileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2463
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2464
	].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2465
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2466
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2467
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2468
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2469
classCategorySpawn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2470
    "create a new SystemBrowser browsing current classCategory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2471
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2472
    currentClassCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2473
	self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2474
	    self class browseClassCategory:currentClassCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2475
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2476
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2477
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2478
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2479
classCategorySpawnFullClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2480
    "create a new SystemBrowser browsing full class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2481
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2482
    |newBrowser|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2483
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2484
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2485
	newBrowser := self class browseFullClasses
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2486
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2487
	.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2488
	currentClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2489
	    newBrowser switchToClassNamed:(currentClass name)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2490
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2491
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2492
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2493
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2494
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2495
classCategoryNewCategory
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2496
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2497
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2498
    box := self enterBoxTitle:'name of new class category:' okText:'create'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2499
    box action:[:aString |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2500
	|categories|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2501
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2502
	categories := classCategoryListView list.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2503
	(categories includes:aString) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2504
	    categories add:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2505
	    categories sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2506
	    classCategoryListView setContents:categories.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2507
	    currentClassCategory := aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2508
	    classCategoryListView selectElement:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2509
	    self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2510
	    actualClass := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2511
	    self classCategorySelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2512
	]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2513
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2514
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2515
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2516
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2517
switchToClassNamed:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2518
    |classSymbol theClass|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2519
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2520
    classSymbol := aString asSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2521
    theClass := Smalltalk at:classSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2522
    theClass isBehavior ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2523
	classCategoryListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2524
	    currentClassHierarchy isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2525
		(theClass category ~~ currentClassCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2526
		    currentClassCategory := theClass category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2527
		    currentClassCategory isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2528
			classCategoryListView selectElement:'* no category *'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2529
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2530
			classCategoryListView selectElement:currentClassCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2531
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2532
		    self classCategorySelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2533
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2534
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2535
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2536
	self switchToClass:theClass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2537
	classListView selectElement:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2538
	self classSelectionChanged
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2539
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2540
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2541
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2542
switchToClassNameMatching:aMatchString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2543
    |classNames thisName box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2544
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2545
    classNames := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2546
    Smalltalk allBehaviorsDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2547
	thisName := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2548
	(aMatchString match:thisName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2549
	    classNames add:thisName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2550
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2551
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2552
    (classNames size == 0) ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2553
    (classNames size == 1) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2554
	^ self switchToClassNamed:(classNames at:1)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2555
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2556
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2557
    box := self listBoxTitle:'select class to switch to:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2558
		      okText:'ok'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2559
			list:classNames sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2560
    box action:[:aString | self switchToClassNamed:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2561
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2562
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2563
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2564
classCategoryFindClass
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2565
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2566
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2567
    box := self enterBoxForCodeSelectionTitle:'class to find:' okText:'find'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2568
    box action:[:aString | self switchToClassNameMatching:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2569
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2570
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2571
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2572
renameCurrentClassCategoryTo:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2573
    "helper - do the rename"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2574
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2575
    |any categories|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2576
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2577
    currentClassCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2578
	any := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2579
	Smalltalk allBehaviorsDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2580
	    aClass category = currentClassCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2581
		aClass category:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2582
		any := true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2583
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2584
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2585
	any ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2586
	    categories := classCategoryListView list.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2587
	    categories remove:currentClassCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2588
	    categories add:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2589
	    categories sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2590
	    classCategoryListView setContents:categories.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2591
	    currentClassCategory := aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2592
	    classCategoryListView selectElement:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2593
	] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2594
	    currentClassCategory := aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2595
	    self updateClassCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2596
	    self updateClassListWithScroll:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2597
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2598
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2599
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2600
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2601
classCategoryRename
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2602
    "launch an enterBox to rename current class category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2603
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2604
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2605
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2606
    self checkClassCategorySelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2607
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2608
    box := self enterBoxTitle:'rename class category to:' okText:'rename'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2609
    box initialText:currentClassCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2610
    box action:[:aString | self renameCurrentClassCategoryTo:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2611
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2612
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2613
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2614
classCategoryRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2615
    "remove all classes in current category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2616
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2617
    |count t classesToRemove subclassesRemoved box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2618
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2619
    self checkClassCategorySelected ifFalse:[^ self].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2620
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2621
    classesToRemove := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2622
    Smalltalk allBehaviorsDo:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2623
	aClass category = currentClassCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2624
	    classesToRemove add:aClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2625
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2626
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2627
    subclassesRemoved := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2628
    classesToRemove do:[:aClass |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2629
	aClass allSubclassesDo:[:aSubclass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2630
	    (classesToRemove includes:aSubclass) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2631
		(subclassesRemoved includes:aSubclass) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2632
		    subclassesRemoved add:aSubclass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2633
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2634
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2635
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2636
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2637
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2638
    count := classesToRemove size.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2639
    t := resources string:'remove %1 ?' with:currentClassCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2640
    count ~~ 0 ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2641
       t := t , (resources at:'\(with ') , count printString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2642
       count == 1 ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2643
	    t := t , (resources at:' class')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2644
       ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2645
	    t := t , (resources at:' classes')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2646
       ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2647
       t := (t , ')') withCRs
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2648
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2649
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2650
    count := subclassesRemoved size.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2651
    count ~~ 0 ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2652
       t := t , (resources at:'\(and ') , count printString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2653
       count == 1 ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2654
	    t := t , (resources at:' subclass ')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2655
       ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2656
	    t := t , (resources at:' subclasses ')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2657
       ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2658
       t := (t , ')') withCRs
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2659
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2660
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2661
    t := t withCRs.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2662
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2663
    box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2664
	       title:t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2665
	       yesText:(resources at:'remove')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2666
	       noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2667
    box confirm ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2668
	"after querying user - do really remove classes in list1 and list2"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2669
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2670
	subclassesRemoved do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2671
	    Smalltalk removeClass:aClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2672
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2673
	classesToRemove do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2674
	    Smalltalk removeClass:aClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2675
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2676
	currentClassCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2677
	self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2678
	Smalltalk changed
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2679
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2680
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2681
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2682
!SystemBrowser methodsFor:'class menu'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2683
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2684
initializeClassMenu
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2685
    |labels menu varMenu|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2686
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2687
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2688
					'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2689
					'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2690
					'printOut protocol'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2691
				      " 'printOut full protocol' "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2692
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2693
					'SPAWN_CLASS' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2694
					'spawn hierarchy' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2695
					'spawn subclasses' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2696
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2697
					'hierarchy' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2698
					'definition' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2699
					'comment' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2700
					'class instvars' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2701
				      " 'protocols' "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2702
					'-'
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2703
"/                                        'variable search'
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2704
					'class refs'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2705
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2706
					'new class'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2707
					'new subclass'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2708
					'rename ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2709
					'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2710
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2711
    menu := PopUpMenu labels:labels
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2712
		   selectors:#(classFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2713
			       classPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2714
			       classPrintOutProtocol
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2715
			     " classPrintOutFullProtocol "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2716
			       nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2717
			       classSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2718
			       classSpawnHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2719
			       classSpawnSubclasses
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2720
			       nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2721
			       classHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2722
			       classDefinition
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2723
			       classComment
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2724
			       classClassInstVars
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2725
			     "  classProtocols "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2726
			       nil
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2727
"/                               variables
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2728
			       classRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2729
			       nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2730
			       classNewClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2731
			       classNewSubclass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2732
			       classRename
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2733
			       classRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2734
		    receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2735
			 for:classListView.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2736
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2737
    classListView middleButtonMenu:menu. 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2738
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2739
    varMenu := (PopUpMenu labels:(resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2740
					'instvar refs ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2741
					'classvar refs ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2742
					'all instvar refs ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2743
					'all classvar refs ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2744
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2745
					'instvar mods ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2746
					'classvar mods ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2747
					'all instvar mods ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2748
					'all classvar mods ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2749
				     ))
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2750
			   selectors:#(
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2751
					classInstVarRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2752
					classClassVarRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2753
					classAllInstVarRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2754
					classAllClassVarRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2755
					nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2756
					classInstVarMods
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2757
					classClassVarMods
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2758
					classAllInstVarMods
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2759
					classAllClassVarMods
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2760
				     )
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2761
			   receiver:self
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2762
				for:self).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2763
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2764
    variableListView isNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2765
	menu addLabel:(resources string:'variable search')
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2766
	     selector:#variables
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2767
	     before:#classRefs.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2768
	menu subMenuAt:#variables put:varMenu.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2769
    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2770
	variableListView middleButtonMenu:varMenu
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2771
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2772
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2773
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2774
checkClassCategorySelected
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2775
    currentClassCategory isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2776
	self warn:'select a class category first'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2777
	^ false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2778
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2779
    ^ true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2780
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2781
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2782
checkClassSelected
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2783
    currentClass isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2784
	self warn:'select a class first'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2785
	^ false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2786
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2787
    ^ true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2788
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2789
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2790
checkMethodCategorySelected
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2791
    currentMethodCategory isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2792
	self warn:'select a method category first'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2793
	^ false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2794
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2795
    ^ true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2796
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2797
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2798
whenMethodCategorySelected:aBlock
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2799
    self checkMethodCategorySelected ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2800
	self withWaitCursorDo:aBlock
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2801
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2802
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2803
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2804
checkMethodSelected
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2805
    currentMethod isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2806
	self warn:'select a method first'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2807
	^ false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2808
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2809
    ^ true
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2810
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2811
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2812
doClassMenu:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2813
    "a helper - check if class is selected and evaluate aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2814
     while showing waitCursor"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2815
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2816
    self checkClassSelected ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2817
	self withWaitCursorDo:aBlock
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2818
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2819
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2820
    
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2821
doClassMenuWithSelection:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2822
    "a helper - if there is a selection, which represents a classes name,
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2823
     evaluate aBlock, passing that class and optional selector as arguments.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2824
     Otherwise, check if a class is selected and evaluate aBlock with the
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2825
     current class."
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2826
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2827
    |string words clsName cls sel isMeta w|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2828
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2829
    string := codeView selection.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2830
    string notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2831
	string := string asString withoutSeparators.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2832
	words := string asCollectionOfWords.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2833
	words notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2834
	    clsName := words first.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2835
	    (clsName endsWith:'class') ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2836
		isMeta := true.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2837
		clsName := clsName copyTo:(clsName size - 5)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2838
	    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2839
		isMeta := false
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2840
	    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2841
	    (cls := Smalltalk classNamed:clsName) notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2842
		sel := Parser selectorInExpression:string.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2843
		isMeta ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2844
		    cls := cls class
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2845
		].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2846
		self withWaitCursorDo:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2847
		    aBlock value:cls value:sel.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2848
		].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2849
		^ self
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2850
	    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2851
		self warn:'no class named: %1 - spawning current' with:clsName
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2852
	    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2853
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2854
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2855
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2856
    self doClassMenu:[aBlock value:currentClass value:nil]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2857
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2858
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2859
classSpawn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2860
    "create a new SystemBrowser browsing current class,
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2861
     or if there is a selection, spawn a browser on the selected class
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2862
     even a class/selector pair can be specified."
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2863
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2864
    |browser|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2865
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2866
    self doClassMenuWithSelection:[:cls :sel |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2867
	cls isMeta ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2868
	    Smalltalk allClassesDo:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2869
		aClass class == cls ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2870
		    browser := self class browseClass:aClass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2871
		    browser classProtocol.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2872
		    sel notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2873
			browser switchToMethodNamed:sel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2874
		    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2875
		    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2876
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2877
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2878
	    self warn:'oops, no class for this metaclass'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2879
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2880
	].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2881
	browser := self class browseClass:cls. 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2882
	cls hasMethods ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2883
	    browser classProtocol.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2884
	].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2885
	sel notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2886
	    browser switchToMethodNamed:sel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2887
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2888
    ]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2889
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2890
    "
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2891
     select 'Smalltalk allClassesDo:' and use spawn from the class menu
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2892
     select 'Smalltalk'               and use spawn from the class menu
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2893
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2894
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2895
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2896
classSpawnHierarchy
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2897
    "create a new HierarchyBrowser browsing current class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2898
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2899
    self doClassMenuWithSelection:[:cls :sel |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2900
	self class browseClassHierarchy:cls 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2901
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2902
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2903
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2904
classSpawnSubclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2905
    "create a new browser browsing current class's subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2906
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2907
    |subs|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2908
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2909
    self doClassMenuWithSelection:[:cls :sel |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2910
	subs := cls allSubclasses.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2911
	(subs notNil and:[subs size ~~ 0]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2912
	    self class browseClasses:subs title:('subclasses of ' , cls name)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2913
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2914
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2915
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2916
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2917
classPrintOutFullProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2918
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2919
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2920
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2921
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2922
	currentClass printOutFullProtocolOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2923
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2924
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2925
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2926
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2927
classPrintOutProtocol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2928
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2929
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2930
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2931
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2932
	currentClass printOutProtocolOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2933
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2934
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2935
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2936
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2937
classPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2938
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2939
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2940
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2941
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2942
	currentClass printOutOn:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2943
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2944
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2945
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2946
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2947
classFileOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2948
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2949
	self label:('System Browser saving: ' , currentClass name).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2950
	Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2951
	    self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2952
	    ex return.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2953
	] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2954
	    currentClass fileOut.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2955
	].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  2956
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2957
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2958
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2959
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2960
classHierarchy
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2961
    "show current classes hierarchy in codeView"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2962
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2963
    |aStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2964
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2965
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2966
	aStream := WriteStream on:(String new:200).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2967
	actualClass printHierarchyOn:aStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2968
	codeView contents:(aStream contents).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2969
	codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2970
	codeView acceptAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2971
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2972
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2973
	    methodListView deselect
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2974
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2975
	aspect := #hierarchy 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2976
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2977
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2978
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2979
classDefinition
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2980
    "show class definition in codeView and setup accept-action for
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2981
     class-definition change"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2982
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2983
    |aStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2984
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  2985
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2986
	aStream := WriteStream on:(String new:200).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2987
	currentClass fileOutDefinitionOn:aStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2988
	codeView contents:(aStream contents).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2989
	codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2990
	codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2991
	    codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2992
	    Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2993
		(Compiler evaluate:theCode asString notifying:codeView)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2994
		isBehavior ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2995
		    codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2996
		    self classCategoryUpdate.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2997
		    self updateClassListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2998
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  2999
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3000
	    codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3001
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3002
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3003
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3004
	    methodListView deselect
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3005
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3006
	aspect := #definition 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3007
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3008
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3009
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3010
classClassInstVars
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3011
    "show class instance variables in codeView and setup accept-action
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3012
     for class-instvar-definition change"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3013
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3014
    |s|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3015
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3016
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3017
	s := WriteStream on:(String new).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3018
	currentClass fileOutClassInstVarDefinitionOn:s.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3019
	codeView contents:(s contents).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3020
	codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3021
	codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3022
	    codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3023
	    Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3024
		Compiler evaluate:theCode asString notifying:codeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3025
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3026
		self updateClassList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3027
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3028
	    codeView cursor:Cursor normal.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3029
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3030
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3031
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3032
	    methodListView deselect
950b84ba89e6 *** empty log message ***
claus
parents: 41
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
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3037
classProtocols
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3038
     ^ self
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3039
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3040
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3041
classComment
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3042
    "show the classes comment in the codeView"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3043
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3044
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3045
	codeView contents:(currentClass comment).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3046
	codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3047
	codeView acceptAction:[:theCode |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3048
	    Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3049
		currentClass comment:theCode asString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3050
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3051
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3052
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3053
	codeView explainAction:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3054
	methodListView notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3055
	    methodListView deselect
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3056
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3057
	aspect := #comment
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3058
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3059
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3060
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3061
classRefs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3062
    self doClassMenu:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3063
	self withCursor:(Cursor questionMark) do:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3064
	    self class browseReferendsOf:currentClass name asSymbol
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3065
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3066
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3067
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3068
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3069
classClassDefinitionTemplateFor:name in:cat
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3070
    "common helper for newClass and newSubclass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3071
     - show a template to define class name in category cat"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3072
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3073
    currentMethodCategory := nil.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3074
    currentMethod := nil.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3075
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3076
    classListView deselect.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3077
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3078
    fullClass ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3079
	methodCategoryListView contents:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3080
	methodListView contents:nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3081
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3082
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3083
    codeView contents:(self templateFor:name in:cat).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3084
    codeView modified:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3085
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3086
    codeView acceptAction:[:theCode |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3087
	codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3088
	Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3089
	    |cl|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3090
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3091
	    cl := (Compiler evaluate:theCode asString notifying:codeView).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3092
	    cl isBehavior ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3093
		codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3094
		self classCategoryUpdate.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3095
		self updateClassListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3096
		self switchToClassNamed:(cl name)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3097
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3098
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3099
	codeView cursor:(Cursor normal).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3100
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3101
    codeView explainAction:nil.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3102
    self switchToClass:nil
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3103
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3104
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3105
classNewClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3106
    "create a class-definition prototype in codeview"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3107
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3108
    |nm|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3109
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3110
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3111
	nm := currentClass superclass name 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3112
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3113
	nm := 'Object'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3114
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3115
    self classClassDefinitionTemplateFor:nm in:currentClassCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3116
    aspect := nil 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3117
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3118
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3119
classNewSubclass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3120
    "create a subclass-definition prototype in codeview"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3121
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3122
    self doClassMenu:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3123
	self classClassDefinitionTemplateFor:(currentClass name) 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3124
					  in:(currentClass category).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3125
	aspect := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3126
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3127
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3128
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3129
renameCurrentClassTo:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3130
    "helper - do the rename"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3131
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3132
    self doClassMenu:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3133
	|oldName oldSym newSym|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3134
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3135
	oldName := currentClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3136
	oldSym := oldName asSymbol.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3137
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3138
	currentClass setName:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3139
	newSym := aString asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3140
	Smalltalk at:oldSym put:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3141
	Smalltalk removeKey:oldSym.            
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3142
	Smalltalk at:newSym put:currentClass.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3143
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3144
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3145
	currentClass renameTo:aString.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3146
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3147
	Smalltalk renameClass:currentClass to:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3148
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3149
	self updateClassList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3150
	self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3151
	self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3152
	self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3153
	    Transcript showCr:('searching for users of ' , oldSym); endEntry.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3154
	    self class browseReferendsOf:oldSym warnIfNone:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3155
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3156
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3157
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3158
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3159
classRename
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3160
    "launch an enterBox for new name and query user"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3161
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3162
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3163
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3164
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3165
    box := self enterBoxTitle:(resources string:'rename %1 to:' with:currentClass name) okText:'rename'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3166
    box initialText:(currentClass name).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3167
    box action:[:aString | self renameCurrentClassTo:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3168
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3169
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3170
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3171
classRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3172
    "user requested remove of current class and all subclasses -
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3173
     count subclasses and let user confirm removal."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3174
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3175
    |count t box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3176
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3177
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3178
	count := currentClass allSubclasses size.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3179
	t := 'remove ' , currentClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3180
	count ~~ 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3181
	   t := t , '\(with ' , count printString , ' subclass'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3182
	   count ~~ 1 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3183
		t := t , 'es'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3184
	   ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3185
	   t := (t , ')') withCRs
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3186
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3187
	box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3188
		   title:t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3189
		   yesText:(resources at:'remove')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3190
		   noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3191
	box confirm ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3192
	    "after querying user - do really remove current class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3193
	     and all subclasses
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3194
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3195
	    self doClassMenu:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3196
		currentClass allSubclassesDo:[:aSubClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3197
		    Smalltalk removeClass:aSubClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3198
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3199
		Smalltalk removeClass:currentClass.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3200
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3201
		self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3202
		Smalltalk changed.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3203
		self updateClassList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3204
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3205
		"if it was the last in its category, update class category list"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3206
"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3207
		classListView numberOfLines == 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3208
		    self updateClassCategoryListWithScroll:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3209
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3210
"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3211
		methodCategoryListView notNil ifTrue:[methodCategoryListView contents:nil].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3212
		methodListView notNil ifTrue:[methodListView contents:nil].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3213
		codeView contents:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3214
		codeView modified:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3215
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3216
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3217
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3218
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3219
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3220
!SystemBrowser methodsFor:'variables menu'!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3221
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3222
enterBoxForVariableSearch:title
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3223
    |box sel|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3224
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3225
    box := self enterBoxForCodeSelectionTitle:title okText:'browse'.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3226
    variableListView notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3227
	codeView hasSelection ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3228
	    (sel := variableListView selectionValue) notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3229
		(sel startsWith:'---') ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3230
		    box initialText:sel
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3231
		]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3232
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3233
	]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3234
    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3235
    ^ box
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3236
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3237
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3238
classInstVarRefsOrModsTitle:title mods:mods
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3239
    "show an enterbox for instvar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3240
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3241
    self doClassMenu:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3242
	|box|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3243
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3244
	box := self enterBoxForVariableSearch:title.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3245
	box action:[:aString | 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3246
	    self withCursor:(Cursor questionMark) do:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3247
		self class browseInstRefsTo:aString
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3248
					 in:(Array with:currentClass)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3249
			  modificationsOnly:mods 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3250
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3251
	].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3252
	box showAtPointer
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3253
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3254
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3255
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3256
classInstVarRefs
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3257
    "show an enterbox for instVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3258
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3259
    self classInstVarRefsOrModsTitle:'instance variable to browse references to:'
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3260
				mods:false
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3261
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3262
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3263
classInstVarMods
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3264
    "show an enterbox for instVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3265
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3266
    self classInstVarRefsOrModsTitle:'instance variable to browse modifications of:'
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3267
				mods:true 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3268
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3269
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3270
classClassVarRefsOrModsTitle:title mods:mods
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3271
    "show an enterbox for classVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3272
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3273
    self doClassMenu:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3274
	|box|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3275
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3276
	box := self enterBoxForVariableSearch:title.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3277
	box action:[:aString | 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3278
	    self withCursor:(Cursor questionMark) do:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3279
		self class browseClassRefsTo:aString
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3280
					  in:(Array with:currentClass)
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3281
			   modificationsOnly:mods 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3282
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3283
	].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3284
	box showAtPointer
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3285
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3286
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3287
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3288
classClassVarMods
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3289
    "show an enterbox for classVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3290
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3291
    self classClassVarRefsOrModsTitle:'class variable to browse modifications of:'
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3292
				 mods:true
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3293
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3294
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3295
classClassVarRefs
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3296
    "show an enterbox for classVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3297
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3298
    self classClassVarRefsOrModsTitle:'class variable to browse references to:'
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3299
				 mods:false
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3300
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3301
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3302
classAllClassOrInstVarRefsTitle:title access:access mods:modifications
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3303
    "show an enterbox for instVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3304
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3305
    self doClassMenu:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3306
	|box|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3307
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3308
	box := self enterBoxForVariableSearch:title.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3309
	box action:[:aVariableName | 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3310
	    self withCursor:(Cursor questionMark) do:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3311
		|homeClass|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3312
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3313
		homeClass := self findClassOfVariable:aVariableName 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3314
					   accessWith:access.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3315
		(self class) browseInstRefsTo:aVariableName 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3316
					under:homeClass 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3317
			    modificationsOnly:modifications
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3318
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3319
	].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3320
	box showAtPointer
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3321
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3322
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3323
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3324
classAllInstVarRefs
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3325
    "show an enterbox for instVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3326
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3327
    self classAllClassOrInstVarRefsTitle:'instance variable to browse references to:' 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3328
				  access:#instVarNames
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3329
				  mods:false
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3330
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3331
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3332
classAllClassVarRefs
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3333
    "show an enterbox for classVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3334
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3335
    self classAllClassOrInstVarRefsTitle:'class variable to browse references to:' 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3336
				  access:#classVarNames
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3337
				  mods:false
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3338
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3339
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3340
classAllInstVarMods
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3341
    "show an enterbox for instVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3342
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3343
    self classAllClassOrInstVarRefsTitle:'instance variable to browse modifications of:' 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3344
				  access:#instVarNames
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3345
				  mods:true
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3346
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3347
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3348
classAllClassVarMods
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3349
    "show an enterbox for classVar to search for"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3350
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3351
    self classAllClassOrInstVarRefsTitle:'class variable to browse modifications of:' 
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3352
				  access:#classVarNames
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3353
				  mods:true
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3354
! !
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3355
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3356
!SystemBrowser methodsFor:'method category menu'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3357
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3358
initializeMethodCategoryMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3359
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3360
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3361
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3362
					'fileOut' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3363
					'fileOut all' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3364
					'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3365
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3366
					'SPAWN_METHODCATEGORY'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3367
					'spawn category'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3368
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3369
					'find method here ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3370
					'find method ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3371
					'-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3372
					'new category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3373
					'copy category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3374
					'create access methods' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3375
					'rename ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3376
					'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3377
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3378
    methodCategoryListView 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3379
	middleButtonMenu:(PopUpMenu 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3380
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3381
			     selectors:#(
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3382
					 methodCategoryFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3383
					 methodCategoryFileOutAll
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3384
					 methodCategoryPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3385
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3386
					 methodCategorySpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3387
					 methodCategorySpawnCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3388
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3389
					 methodCategoryFindMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3390
					 methodCategoryFindAnyMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3391
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3392
					 methodCategoryNewCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3393
					 methodCategoryCopyCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3394
					 methodCategoryCreateAccessMethods
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3395
					 methodCategoryRename
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3396
					 methodCategoryRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3397
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3398
				   for:methodCategoryListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3399
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3400
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3401
switchToMethodNamed:matchString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3402
    |aSelector method cat index classToSearch selectors|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3403
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3404
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3405
	showInstance ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3406
	    classToSearch := currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3407
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3408
	    classToSearch := currentClass class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3409
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3410
	selectors := classToSearch selectorArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3411
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3412
	((matchString ~= '*') and:[matchString includesMatchCharacters]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3413
	    index := selectors findFirst:[:element | matchString match:element]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3414
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3415
	    index := selectors indexOf:matchString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3416
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3417
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3418
	(index ~~ 0) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3419
	    aSelector := selectors at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3420
	    method := classToSearch methodArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3421
	    cat := method category.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3422
	    cat isNil ifTrue:[cat := '* all *'].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3423
	    methodCategoryListView selectElement:cat.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3424
	    currentMethodCategory := cat.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3425
	    self methodCategorySelectionChanged.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3426
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3427
	    currentMethod := classToSearch compiledMethodAt:aSelector.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3428
	    methodListView selectElement:aSelector.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3429
	    self methodSelectionChanged
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3430
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3431
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3432
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3433
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3434
switchToAnyMethodNamed:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3435
    |aSelector classToStartSearch aClass nm|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3436
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3437
    aSelector := aString asSymbol.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3438
    currentClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3439
	currentClassHierarchy notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3440
	    classToStartSearch := currentClassHierarchy
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3441
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3442
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3443
	classToStartSearch := currentClass 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3444
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3445
    classToStartSearch notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3446
	showInstance ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3447
	    classToStartSearch := classToStartSearch class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3448
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3449
	aClass := classToStartSearch whichClassImplements:aSelector.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3450
	aClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3451
	    nm := aClass name.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3452
	    showInstance ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3453
		((nm ~= 'Metaclass') and:[nm endsWith:'class']) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3454
		    nm := nm copyTo:(nm size - 5)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3455
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3456
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3457
	    self switchToClassNamed:nm.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3458
	    self switchToMethodNamed:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3459
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3460
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3461
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3462
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3463
copyMethodsFromClass:aClassName
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3464
    |class box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3465
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3466
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3467
	Symbol hasInterned:aClassName ifTrue:[:sym |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3468
	    (Smalltalk includesKey:sym) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3469
		class := Smalltalk at:sym
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3470
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3471
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3472
	class isBehavior ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3473
	    self warn:'no class named %1' with:aClassName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3474
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3475
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3476
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3477
	showInstance ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3478
	    class := class class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3479
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3480
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3481
	"show enterbox for category to copy from"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3482
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3483
	box := self enterBoxTitle:'name of category to copy from (matchpattern allowed, * for all):'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3484
			   okText:'copy'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3485
	box action:[:aString | self copyMethodsFromClass:class category:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3486
	box showAtPointer.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3487
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3488
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3489
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3490
copyMethodsFromClass:class category:category
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3491
    |source|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3492
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3493
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3494
"/        codeView abortAction:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3495
	Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3496
	    class methodArray do:[:aMethod |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3497
		(category match:aMethod category) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3498
		    source := aMethod source.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3499
		    codeView contents:source.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3500
		    codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3501
		    actualClass compiler compile:source 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3502
					forClass:actualClass 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3503
				      inCategory:aMethod category
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3504
				       notifying:codeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3505
		    self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3506
		    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3507
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3508
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3509
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3510
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3511
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3512
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3513
methodCategoryFindMethod
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3514
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3515
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3516
    box := self enterBoxForSearchSelectorTitle:'method selector to search for:'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3517
    box action:[:aString | self switchToMethodNamed:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3518
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3519
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3520
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3521
methodCategoryFindAnyMethod
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3522
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3523
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3524
    box := self enterBoxForSearchSelectorTitle:'method selector to search for:'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3525
    box action:[:aString | self switchToAnyMethodNamed:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3526
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3527
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3528
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3529
methodCategoryPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3530
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3531
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3532
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3533
    self whenMethodCategorySelected:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3534
	printStream := Printer new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3535
	actualClass printOutCategory:currentMethodCategory on:printStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3536
	printStream close
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3537
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3538
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3539
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3540
methodCategoryFileOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3541
    "fileOut all methods in the selected methodcategory of
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3542
     the current class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3543
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3544
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3545
    self whenMethodCategorySelected:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3546
	self label:('System Browser saving: ' , currentClass name , '-' , currentMethodCategory).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3547
	Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3548
	    self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3549
	    ex return.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3550
	] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3551
	    actualClass fileOutCategory:currentMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3552
	].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3553
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3554
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3555
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3556
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3557
methodCategoryFileOutAll
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3558
    "fileOut all methods in the selected methodcategory of
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3559
     the current class"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3560
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3561
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3562
    self whenMethodCategorySelected:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3563
	|fileName outStream|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3564
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3565
	fileName := currentMethodCategory , '.st'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3566
	fileName replaceAll:Character space by:$_.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3567
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3568
	 this test allows a smalltalk to be built without Projects/ChangeSets
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3569
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3570
	Project notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3571
	    fileName := Project currentProjectDirectory , fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3572
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3573
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3574
	 if file exists, save original in a .sav file
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3575
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3576
	fileName asFilename exists ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3577
	    fileName asFilename copyTo:(fileName , '.sav')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3578
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3579
	outStream := FileStream newFileNamed:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3580
	outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3581
	    ^ self warn:'cannot create: %1' with:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3582
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3583
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3584
	self label:('System Browser saving: ' , currentMethodCategory).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3585
	Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3586
	    self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3587
	    ex return
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3588
	] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3589
	    Smalltalk allClassesDo:[:class |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3590
		|hasMethodsInThisCategory|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3591
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3592
		hasMethodsInThisCategory := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3593
		class methodArray do:[:method |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3594
		    method category = currentMethodCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3595
			hasMethodsInThisCategory := true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3596
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3597
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3598
		hasMethodsInThisCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3599
		    class fileOutCategory:currentMethodCategory on:outStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3600
		    outStream cr
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3601
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3602
		hasMethodsInThisCategory := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3603
		class class methodArray do:[:method |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3604
		    method category = currentMethodCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3605
			hasMethodsInThisCategory := true
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3606
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3607
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3608
		hasMethodsInThisCategory ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3609
		    class class fileOutCategory:currentMethodCategory on:outStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3610
		    outStream cr
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3611
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3612
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3613
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3614
	outStream close.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3615
	self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3616
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3617
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3618
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3619
methodCategorySpawn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3620
    "create a new SystemBrowser browsing current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3621
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3622
    currentMethodCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3623
	self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3624
	    self class browseClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3625
		    methodCategory:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
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
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3630
methodCategorySpawnCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3631
    "create a new SystemBrowser browsing all methods from all
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3632
     classes with same category as current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3633
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3634
    self askAndBrowseMethodCategory:'category to browse methods:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3635
			     action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3636
					self class browseMethodCategory:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3637
				    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3638
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3639
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3640
newMethodCategory:aString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3641
    |categories|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3642
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3643
    currentClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3644
	^ self warn:'select/create a class first'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3645
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3646
    categories := methodCategoryListView list.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3647
    categories isNil ifTrue:[categories := Text new].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3648
    (categories includes:aString) ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3649
	categories add:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3650
	categories sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3651
	methodCategoryListView contents:categories
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3652
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3653
    currentMethodCategory := aString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3654
    self methodCategorySelectionChanged
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3655
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3656
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3657
methodCategoryNewCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3658
    "show the enter box to add a new method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3659
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3660
    |someCategories existingCategories box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3661
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3662
    "a tiny little goody here ..."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3663
    showInstance ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3664
	someCategories := #('accessing' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3665
			    'initialization'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3666
			    'private' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3667
			    'printing & storing'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3668
			    'queries'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3669
			    'testing'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3670
			   )
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3671
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3672
	someCategories := #(
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3673
			    'documentation'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3674
			    'initialization'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3675
			    'instance creation'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3676
			   ).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3677
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3678
    existingCategories := methodCategoryListView list.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3679
    existingCategories notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3680
	someCategories := someCategories select:[:cat | (existingCategories includes:cat) not].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3681
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3682
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3683
    box := self listBoxTitle:'name of new method category:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3684
		      okText:'create'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3685
			list:someCategories.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3686
    box action:[:aString | self newMethodCategory:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3687
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3688
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3689
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3690
methodCategoryCreateAccessMethods
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3691
    "create access methods for all instvars"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3692
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3693
    |source|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3694
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3695
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3696
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3697
    showInstance ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3698
	self warn:'select instance - and try again'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3699
	^ self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3700
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3701
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3702
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3703
	currentClass instVarNames do:[:name |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3704
	    "check, if method is not already present"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3705
	    (currentClass implements:(name asSymbol)) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3706
		source := (name , '\    "return ' , name , '"\\    ^ ' , name) withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3707
		Compiler compile:source forClass:currentClass inCategory:'accessing'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3708
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3709
		Transcript showCr:'method ''', name , ''' already present'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3710
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3711
	    (currentClass implements:((name , ':') asSymbol)) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3712
		source := (name , ':something\    "set ' , name , '"\\    ' , name , ' := something.') withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3713
		Compiler compile:source forClass:currentClass inCategory:'accessing'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3714
	    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3715
		Transcript showCr:'method ''', name , ':'' already present'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3716
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3717
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3718
	self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3719
	self updateMethodListWithScroll:false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3720
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3721
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3722
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3723
methodCategoryCopyCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3724
    "show the enter box to copy from an existing method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3725
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3726
    |title box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3727
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3728
    showInstance ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3729
	title := 'class to copy instance method category from:'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3730
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3731
	title := 'class to copy class method category from:'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3732
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3733
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3734
    box := self listBoxTitle:title 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3735
		      okText:'ok' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3736
			list:(Smalltalk allClasses collect:[:cls | cls name]) asArray sort.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3737
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3738
    box action:[:aString | self copyMethodsFromClass:aString].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3739
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3740
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3741
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3742
methodCategoryRename
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3743
    "launch an enterBox to rename current method category"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3744
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3745
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3746
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3747
    self checkMethodCategorySelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3748
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3749
    box := self enterBoxTitle:(resources string:'rename method category %1 to:' with:currentMethodCategory)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3750
		okText:(resources at:'rename').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3751
    box initialText:currentMethodCategory.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3752
    box action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3753
	actualClass renameCategory:currentMethodCategory to:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3754
	currentMethodCategory := aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3755
	currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3756
	self updateMethodCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3757
	self updateMethodListWithScroll:false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3758
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3759
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3760
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3761
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3762
methodCategoryRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3763
    "show number of methods to remove and query user"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3764
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3765
    |count t box|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3766
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3767
    currentMethodCategory notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3768
	count := 0.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3769
	actualClass methodArray do:[:aMethod |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3770
	    (aMethod category = currentMethodCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3771
		count := count + 1
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3772
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3773
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3774
	(count == 0) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3775
	    currentMethodCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3776
	    currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3777
	    self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3778
	    self updateMethodList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3779
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3780
	    (count == 1) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3781
		t := resources string:'remove %1 ?\(with 1 method)' with:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3782
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3783
		t := resources string:'remove %1 ?\(with %2 methods)' with:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3784
								      with:count printString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3785
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3786
	    t := t withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3787
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3788
	    box := YesNoBox 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3789
		       title:t
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3790
		       yesText:(resources at:'remove')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3791
		       noText:(resources at:'abort').
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3792
	    box confirm ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3793
		actualClass methodArray do:[:aMethod |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3794
		    (aMethod category = currentMethodCategory) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3795
			actualClass 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3796
			    removeSelector:(actualClass selectorForMethod:aMethod)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3797
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3798
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3799
		currentMethodCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3800
		currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3801
		self updateMethodCategoryList.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3802
		self updateMethodList
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3803
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3804
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3805
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3806
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3807
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3808
!SystemBrowser methodsFor:'method menu'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3809
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3810
initializeMethodMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3811
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3812
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3813
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3814
					 'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3815
					 'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3816
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3817
					 'SPAWN_METHOD'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3818
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3819
					 'senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3820
					 'implementors ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3821
					 'globals ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3822
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3823
					 'strings ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3824
					 'apropos ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3825
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3826
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3827
					 'local senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3828
					 'local implementors ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3829
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3830
					 'local strings ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3831
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3832
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3833
					 'breakpoint' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3834
					 'trace' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3835
					 'trace sender' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3836
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3837
					 'new method' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3838
					 'change category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3839
					 'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3840
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3841
    methodListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3842
	middleButtonMenu:(PopUpMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3843
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3844
			     selectors:#(methodFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3845
					 methodPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3846
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3847
					 methodSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3848
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3849
					 methodSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3850
					 methodImplementors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3851
					 methodGlobalReferends
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3852
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3853
					 methodStringSearch
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3854
					 methodAproposSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3855
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3856
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3857
					 methodLocalSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3858
					 methodLocalImplementors
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3859
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3860
					 methodLocalStringSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3861
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3862
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3863
					 methodBreakPoint
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3864
					 methodTrace
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3865
					 methodTraceSender
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3866
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3867
					 methodNewMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3868
					 methodChangeCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3869
					 methodRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3870
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3871
				   for:methodListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3872
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3873
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3874
initializeMethodMenu2
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3875
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3876
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3877
    methodListView isNil ifTrue:[^ self].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3878
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3879
					 'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3880
					 'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3881
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3882
					 'SPAWN_METHOD'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3883
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3884
					 'senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3885
					 'implementors ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3886
					 'globals ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3887
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3888
					 'strings ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3889
					 'apropos ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3890
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3891
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3892
					 'local senders ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3893
					 'local implementors ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3894
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3895
					 'local strings ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3896
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3897
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3898
					 'remove break/trace' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3899
					 '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3900
					 'new method' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3901
					 'change category ...' 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3902
					 'remove').
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3903
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3904
    methodListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3905
	middleButtonMenu:(PopUpMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3906
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3907
			     selectors:#(methodFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3908
					 methodPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3909
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3910
					 methodSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3911
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3912
					 methodSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3913
					 methodImplementors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3914
					 methodGlobalReferends
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3915
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3916
					 methodStringSearch
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3917
					 methodAproposSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3918
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3919
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3920
					 methodLocalSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3921
					 methodLocalImplementors
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3922
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3923
					 methodLocalStringSearch
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3924
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3925
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3926
					 methodRemoveBreakOrTrace
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3927
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3928
					 methodNewMethod
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3929
					 methodChangeCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3930
					 methodRemove)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3931
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3932
				   for:methodListView)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3933
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3934
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3935
methodPrintOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3936
    "print out the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3937
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3938
    |printStream|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3939
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3940
    self checkMethodSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3941
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3942
    printStream := Printer new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3943
    actualClass printOutSource:currentMethod source on:printStream.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3944
    printStream close
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3945
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3946
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3947
methodFileOut
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3948
    "file out the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3949
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3950
    self checkMethodSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3951
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3952
    self label:'System Browser saving'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3953
    Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3954
	self warn:'cannot create: %1' with:ex parameter.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3955
	ex return
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3956
    ] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3957
	actualClass fileOutMethod:currentMethod.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3958
    ].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  3959
    self normalLabel.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3960
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3961
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3962
methodImplementors
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3963
    "launch an enterBox for selector to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3964
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3965
    self askAndBrowseSelectorTitle:'selector to browse implementors of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3966
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3967
				       self class browseImplementorsOf:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3968
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3969
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3970
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3971
methodLocalImplementors
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3972
    "launch an enterBox for selector to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3973
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3974
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3975
    self askAndBrowseSelectorTitle:'selector to browse local implementors of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3976
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3977
				       self class browseImplementorsOf:aString under:currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3978
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3979
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3980
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3981
methodSenders
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3982
    "launch an enterBox for selector to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3983
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3984
    self askAndBrowseSelectorTitle:'selector to browse senders of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3985
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3986
				       self class browseAllCallsOn:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3987
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3988
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3989
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3990
methodLocalSenders
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3991
    "launch an enterBox for selector to search for in current class & subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3992
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3993
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3994
    self askAndBrowseSelectorTitle:'selector to browse local senderss of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3995
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3996
				       self class browseCallsOn:aString under:currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  3997
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3998
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  3999
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4000
methodGlobalReferends
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4001
    "launch an enterBox for global symbol to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4002
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4003
    self enterBoxForBrowseTitle:'global variable to browse users of:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4004
			 action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4005
				    self class browseReferendsOf:aString asSymbol
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4006
				]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4007
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4008
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4009
methodStringSearch
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4010
    "launch an enterBox for (sub)-string to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4011
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4012
    self askAndBrowseSelectorTitle:'string / matchString to search for:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4013
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4014
				       self class browseForString:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4015
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4016
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4017
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4018
methodLocalStringSearch
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4019
    "launch an enterBox for (sub)-string to search for"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4020
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4021
    self checkClassSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4022
    self askAndBrowseSelectorTitle:'string / matchString to search for locally:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4023
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4024
				       self class browseForString:aString in:(currentClass withAllSubclasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4025
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4026
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4027
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4028
methodAproposSearch
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4029
    "launch an enterBox for a keyword search"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4030
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4031
    self askAndBrowseSelectorTitle:'keyword to search for:'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4032
			    action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4033
				       self class aproposSearch:aString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4034
				   ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4035
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4036
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4037
methodSpawn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4038
    "create a new SystemBrowser browsing current method,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4039
     or if the current selection is of the form 'class>>selector', spwan
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4040
     a browser on that method."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4041
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4042
    |s sel selSymbol clsName clsSymbol cls meta browseMeta w sep|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4043
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4044
    sel := codeView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4045
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4046
	sel := sel asString withoutSeparators.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4047
	('*>>*' match:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4048
	    sep := $>
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4049
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4050
	    ('* *' match:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4051
		sep := Character space
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4052
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4053
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4054
	sep notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4055
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4056
	     extract class/sel from selection
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4057
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4058
	    s := ReadStream on:sel.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4059
	    clsName := s upTo:sep.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4060
	    [s peek == sep] whileTrue:[s next].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4061
	    sel := s upToEnd.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4062
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4063
	    (clsName endsWith:'class') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4064
		browseMeta := true.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4065
		clsName := clsName copyTo:(clsName size - 5)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4066
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4067
		browseMeta := false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4068
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4069
	    (clsName knownAsSymbol and:[sel knownAsSymbol]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4070
		clsSymbol := clsName asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4071
		(Smalltalk includesKey:clsSymbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4072
		    cls := Smalltalk at:clsSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4073
		    browseMeta ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4074
			cls := cls class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4075
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4076
		    cls isBehavior ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4077
			cls := cls class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4078
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4079
		    cls isBehavior ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4080
			selSymbol := sel asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4081
			self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4082
			    (cls implements:selSymbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4083
				self class browseClass:cls selector:selSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4084
				^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4085
			    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4086
				meta := cls class.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4087
				(meta implements:selSymbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4088
				    self class browseClass:meta selector:selSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4089
				    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4090
				].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4091
				w := ' does not implement #' , sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4092
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4093
			]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4094
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4095
			w := ' is not a class'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4096
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4097
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4098
		    w := ' is unknown'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4099
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4100
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4101
		w := ' and/or ' , sel , ' is unknown'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4102
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4103
	    self warn:(clsName , w).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4104
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4105
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4106
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4107
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4108
    self checkMethodSelected ifFalse:[^ self].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4109
    self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4110
	self class browseClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4111
		      selector:(actualClass selectorForMethod:currentMethod)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4112
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4113
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4114
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4115
methodNewMethod
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4116
    "prepare for definition of a new method - put a template into
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4117
     code view and define accept-action to compile it"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4118
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4119
    currentClass isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4120
	^ self warn:'select/create a class first'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4121
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4122
    currentMethodCategory isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4123
	^ self warn:'select/create a method category first'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4124
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4125
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4126
    currentMethod := nil.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4127
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4128
    methodListView deselect.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4129
    codeView contents:(self template).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4130
    codeView modified:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4131
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4132
    codeView acceptAction:[:theCode |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4133
	codeView cursor:Cursor execute.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4134
	Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4135
	    actualClass compiler compile:theCode asString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4136
				forClass:actualClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4137
			      inCategory:currentMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4138
			       notifying:codeView.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4139
	    codeView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4140
	    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4141
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4142
	codeView cursor:Cursor normal.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4143
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4144
    codeView explainAction:[:theCode :theSelection |
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4145
	self showExplanation:(Explainer explain:theSelection 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4146
					     in:theCode
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4147
				       forClass:actualClass)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4148
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4149
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4150
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4151
methodRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4152
    "remove the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4153
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4154
    self checkMethodSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4155
    actualClass removeSelector:(actualClass selectorForMethod:currentMethod).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4156
    self updateMethodListWithScroll:false
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4157
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4158
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4159
methodChangeCategory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4160
    "move the current method into another category -
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4161
     nothing done here, but a query for the new category.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4162
     Remember the last category, to allow faster category change of a group of methods."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4163
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4164
    |box txt|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4165
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4166
    self checkMethodSelected ifFalse:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4167
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4168
    box := self enterBoxTitle:('change category from ' , currentMethod category , ' to:') 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4169
		okText:'change'.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4170
    lastMethodCategory isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4171
	txt := currentMethod category.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4172
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4173
	txt := lastMethodCategory
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4174
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4175
    box initialText:txt.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4176
    box action:[:aString | 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4177
		    lastMethodCategory := aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4178
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4179
		    currentMethod category:aString asSymbol.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4180
		    currentClass changed.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4181
		    self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4182
		    self updateMethodListWithScroll:false
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4183
	       ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4184
    box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4185
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4186
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4187
methodRemoveBreakOrTrace
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4188
    "turn off tracing of the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4189
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4190
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4191
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4192
    currentMethod notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4193
	currentMethod isWrapped ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4194
	    currentMethod := MessageTracer unwrapMethod:currentMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4195
	    sel := methodListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4196
	    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4197
	    methodListView selection:sel.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4198
	    self initializeMethodMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4199
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4200
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4201
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4202
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4203
methodBreakPoint
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4204
    "set a breakpoint on the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4205
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4206
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4207
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4208
    currentMethod notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4209
	currentMethod isWrapped ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4210
	    currentMethod := MessageTracer trapMethod:currentMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4211
	    self initializeMethodMenu2.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4212
	    sel := methodListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4213
	    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4214
	    methodListView selection:sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4215
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4216
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4217
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4218
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4219
methodTrace
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4220
    "turn on tracing of the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4221
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4222
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4223
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4224
    currentMethod notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4225
	currentMethod isWrapped ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4226
	    currentMethod := MessageTracer traceMethod:currentMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4227
	    self initializeMethodMenu2.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4228
	    sel := methodListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4229
	    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4230
	    methodListView selection:sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4231
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4232
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4233
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4234
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4235
methodTraceSender
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4236
    "turn on tracing of the current method"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4237
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4238
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4239
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4240
    currentMethod notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4241
	currentMethod isWrapped ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4242
	    currentMethod := MessageTracer traceMethodSender:currentMethod.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4243
	    self initializeMethodMenu2.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4244
	    sel := methodListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4245
	    self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4246
	    methodListView selection:sel
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4247
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4248
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4249
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4250
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4251
!SystemBrowser methodsFor:'class-method menu'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4252
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4253
initializeClassMethodMenu
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4254
    |labels|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4255
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4256
    labels := resources array:#(
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4257
			      'fileOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4258
			      'fileOut all'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4259
			      'printOut'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4260
			      '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4261
			      'spawn'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4262
			      'spawn class'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4263
			      '-'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4264
			      'sender ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4265
			      'implementors ...'
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4266
			      'globals ...'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4267
"/                              '-'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4268
"/                              'breakpoint' 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4269
"/                              'trace' 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4270
"/                              'trace sender' 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4271
			     ).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4272
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4273
    classMethodListView
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4274
	middleButtonMenu:(PopUpMenu
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4275
				labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4276
			     selectors:#(methodFileOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4277
					 classMethodFileOutAll
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4278
					 methodPrintOut
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4279
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4280
					 methodSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4281
					 classSpawn
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4282
					 nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4283
					 methodSenders
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4284
					 methodImplementors
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4285
					 methodGlobalReferends
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4286
"/                                         nil
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4287
"/                                         methodBreakPoint 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4288
"/                                         methodTrace
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4289
"/                                         methodTraceSender
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4290
					)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4291
			      receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4292
				   for:classMethodListView)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4293
!
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4294
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4295
classMethodFileOutAll
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4296
    "fileout all methods into one source file"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4297
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4298
    |list classString selectorString cls mth outStream fileName append
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4299
     fileBox|
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4300
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4301
    append := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4302
    fileBox := FileSaveBox
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4303
			title:(resources string:'save methodss in:')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4304
			okText:(resources string:'save')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4305
			abortText:(resources string:'cancel')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4306
			action:[:fName | fileName := fName].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4307
    fileBox appendAction:[:fName | fileName := fName. append := true].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4308
    fileBox initialText:'some_methods.st'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4309
    Project notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4310
	fileBox directory:Project currentProjectDirectory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4311
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4312
    fileBox showAtPointer.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4313
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4314
    fileName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4315
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4316
	 if file exists, save original in a .sav file
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4317
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4318
	fileName asFilename exists ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4319
	    fileName asFilename copyTo:(fileName , '.sav')
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4320
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4321
	append ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4322
	    outStream := FileStream appendingOldFileNamed:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4323
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4324
	    outStream := FileStream newFileNamed:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4325
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4326
	outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4327
	    ^ self warn:'cannot create: %1' with:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4328
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4329
	self withWaitCursorDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4330
	    list := classMethodListView list.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4331
	    list do:[:line |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4332
		self label:('System Browser writing: ' , line).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4333
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4334
		classString := self classFromClassMethodString:line.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4335
		selectorString := self selectorFromClassMethodString:line.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4336
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4337
		((classString ~= 'Metaclass') and:[classString endsWith:'class']) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4338
		    classString := classString copyTo:(classString size - 5).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4339
		    cls := (Smalltalk at:classString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4340
		    cls := cls class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4341
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4342
		    cls := (Smalltalk at:classString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4343
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4344
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4345
		cls isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4346
		    self warn:'oops class %1 is gone' with:classString
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4347
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4348
		    mth := cls compiledMethodAt:(selectorString asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4349
		    Class fileOutErrorSignal handle:[:ex |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4350
			|box|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4351
			box := YesNoBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4352
			box yesText:'continue' noText:'abort'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4353
			(box confirm:('fileOut error: ' , ex errorString ,
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4354
					       '\\continue anyway ?') withCRs) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4355
			    ex proceed
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4356
			].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4357
			self label:'System Browser'.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4358
			^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4359
		    ] do:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4360
			cls fileOutMethod:mth on:outStream.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4361
		    ]    
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4362
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4363
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4364
	    outStream close.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  4365
	    self normalLabel.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4366
	]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4367
    ]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4368
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4369
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4370
!SystemBrowser methodsFor:'dependencies'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4371
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4372
update
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4373
    "handle changes from other browsers"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4374
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4375
    |oldClassCategory oldClassName oldMethodCategory oldMethod oldSelector|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4376
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4377
self updateClassCategoryListWithScroll:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4378
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4379
self updateClassListWithScroll:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4380
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4381
^ self.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4382
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4383
    oldClassCategory := currentClassCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4384
    currentClass notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4385
	oldClassName := currentClass name
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4386
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4387
    oldMethodCategory := currentMethodCategory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4388
    oldMethod := currentMethod.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4389
    methodListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4390
	oldMethod notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4391
	    oldSelector := methodListView selectionValue
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4392
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4393
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4394
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4395
    classCategoryListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4396
	classCategoryListView setContents:(self listOfAllClassCategories).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4397
	oldClassCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4398
	    classCategoryListView selectElement:oldClassCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4399
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4400
	classCategoryListView selection isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4401
	    currentClassCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4402
	    self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4403
	    oldClassName := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4404
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4405
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4406
    classListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4407
	self updateClassListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4408
	oldClassName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4409
	      classListView selectElement:oldClassName
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4410
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4411
	classListView selection isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4412
	    self switchToClass:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4413
	    currentMethodCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4414
	    oldMethodCategory := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4415
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4416
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4417
    methodCategoryListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4418
	self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4419
	oldMethodCategory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4420
	    methodCategoryListView selectElement:oldMethodCategory
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4421
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4422
	methodCategoryListView selection isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4423
	    currentMethodCategory := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4424
	    currentMethod := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4425
	    oldSelector := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4426
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4427
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4428
    methodListView notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4429
	self updateMethodListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4430
	oldSelector notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4431
	    methodListView selectElement:oldSelector
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4432
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4433
	methodListView selection isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4434
	    currentMethod := nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4435
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4436
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4437
    self updateCodeView
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4438
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4439
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4440
update:something with:someArgument from:changedObject
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4441
    (changedObject == Smalltalk) ifTrue:[self update. ^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4442
    changedObject isBehavior ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4443
	(currentClass notNil and:[changedObject name = currentClass name]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4444
	    currentClass := Smalltalk at:(currentClass name asSymbol).
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4445
	    showInstance ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4446
		actualClass := currentClass
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4447
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4448
		actualClass := currentClass class
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4449
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4450
	    self updateMethodCategoryListWithScroll:false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4451
	    "dont update codeView ...."
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4452
	    "self update"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4453
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  4454
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4455
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  4456
! !