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