ChangesBrowser.st
author claus
Sat, 08 Jan 1994 18:22:57 +0100
changeset 15 7fc8fcef7bc6
parent 13 145a9461122e
child 22 8b81fea5212b
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     1
"
4
77d8e96499b2 *** empty log message ***
claus
parents: 1
diff changeset
     2
 COPYRIGHT (c) 1990 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
     4
571fd5eee315 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
571fd5eee315 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
571fd5eee315 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
571fd5eee315 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
571fd5eee315 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
571fd5eee315 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    11
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    12
571fd5eee315 Initial revision
claus
parents:
diff changeset
    13
StandardSystemView subclass:#ChangesBrowser
571fd5eee315 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'changeListView codeView changeFileName 
571fd5eee315 Initial revision
claus
parents:
diff changeset
    15
                              changeChunks changePositions
571fd5eee315 Initial revision
claus
parents:
diff changeset
    16
                              changeClassNames
571fd5eee315 Initial revision
claus
parents:
diff changeset
    17
                              anyChanges changeNrShown changeNrProcessed
571fd5eee315 Initial revision
claus
parents:
diff changeset
    18
                              closeBox'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    19
       classVariableNames:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    20
       poolDictionaries:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    21
       category:'Interface-Browsers'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    22
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    23
571fd5eee315 Initial revision
claus
parents:
diff changeset
    24
ChangesBrowser comment:'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    25
4
77d8e96499b2 *** empty log message ***
claus
parents: 1
diff changeset
    26
COPYRIGHT (c) 1990 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    27
            All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
    28
571fd5eee315 Initial revision
claus
parents:
diff changeset
    29
this class implements a changes browser.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    30
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
    31
$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.6 1994-01-08 17:22:50 claus Exp $
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    32
written jan 90 by claus
571fd5eee315 Initial revision
claus
parents:
diff changeset
    33
'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    34
571fd5eee315 Initial revision
claus
parents:
diff changeset
    35
!ChangesBrowser class methodsFor:'behavior'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    36
571fd5eee315 Initial revision
claus
parents:
diff changeset
    37
autoSelectNext
571fd5eee315 Initial revision
claus
parents:
diff changeset
    38
    "returning true here, makes a Delete operation automatically
571fd5eee315 Initial revision
claus
parents:
diff changeset
    39
     select the next change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    40
571fd5eee315 Initial revision
claus
parents:
diff changeset
    41
    ^ true
571fd5eee315 Initial revision
claus
parents:
diff changeset
    42
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
    43
571fd5eee315 Initial revision
claus
parents:
diff changeset
    44
!ChangesBrowser class methodsFor:'instance creation'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    45
571fd5eee315 Initial revision
claus
parents:
diff changeset
    46
new
571fd5eee315 Initial revision
claus
parents:
diff changeset
    47
    "create a new changes browser"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    48
571fd5eee315 Initial revision
claus
parents:
diff changeset
    49
    ^ super label:'Changes Browser'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    50
             icon:(Form fromFile:'CBrowser.xbm' resolution:100)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    51
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    52
571fd5eee315 Initial revision
claus
parents:
diff changeset
    53
startOn:aFileName
571fd5eee315 Initial revision
claus
parents:
diff changeset
    54
    "create c changes browser on a change file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    55
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
    56
    ^ ((self new label:'Changes Browser:', aFileName) changeFileName:aFileName) open
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    57
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
    58
571fd5eee315 Initial revision
claus
parents:
diff changeset
    59
!ChangesBrowser methodsFor:'initialize / release'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    60
571fd5eee315 Initial revision
claus
parents:
diff changeset
    61
initialize
571fd5eee315 Initial revision
claus
parents:
diff changeset
    62
    |frame v|
571fd5eee315 Initial revision
claus
parents:
diff changeset
    63
571fd5eee315 Initial revision
claus
parents:
diff changeset
    64
    super initialize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    65
571fd5eee315 Initial revision
claus
parents:
diff changeset
    66
    changeFileName := 'changes'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    67
571fd5eee315 Initial revision
claus
parents:
diff changeset
    68
    frame := VariableVerticalPanel origin:(0.0 @ 0.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    69
                                   corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    70
                              borderWidth:0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    71
                                       in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    72
571fd5eee315 Initial revision
claus
parents:
diff changeset
    73
    v := ScrollableView for:SelectionInListView in:frame.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    74
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.3).
571fd5eee315 Initial revision
claus
parents:
diff changeset
    75
    changeListView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    76
571fd5eee315 Initial revision
claus
parents:
diff changeset
    77
    v := ScrollableView for:CodeView in:frame.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    78
    v origin:(0.0 @ 0.3) corner:(1.0 @ 1.0).
571fd5eee315 Initial revision
claus
parents:
diff changeset
    79
    codeView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    80
571fd5eee315 Initial revision
claus
parents:
diff changeset
    81
    anyChanges := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    82
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    83
571fd5eee315 Initial revision
claus
parents:
diff changeset
    84
initializeMiddleButtonMenu
571fd5eee315 Initial revision
claus
parents:
diff changeset
    85
    |labels|
571fd5eee315 Initial revision
claus
parents:
diff changeset
    86
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
    87
    labels := resources array:#(
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    88
                               'apply change'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    89
                               'apply changes to end'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    90
                               'apply all changes'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    91
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    92
                               'delete'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    93
                               'delete to end'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    94
                               'delete changes for this class to end'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    95
                               'delete all changes for this class'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    96
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    97
                               'update'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    98
                               'compress'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    99
                               'compare with current version'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   100
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   101
                               'make change a patch'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   102
                               'update sourcefile from change'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   103
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   104
                               'writeback changeFile').
571fd5eee315 Initial revision
claus
parents:
diff changeset
   105
571fd5eee315 Initial revision
claus
parents:
diff changeset
   106
    changeListView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   107
        middleButtonMenu:(PopUpMenu 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   108
                            labels:labels
571fd5eee315 Initial revision
claus
parents:
diff changeset
   109
                         selectors:#(
571fd5eee315 Initial revision
claus
parents:
diff changeset
   110
                                     doApply
571fd5eee315 Initial revision
claus
parents:
diff changeset
   111
                                     doApplyRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   112
                                     doApplyAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   113
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   114
                                     doDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
   115
                                     doDeleteRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   116
                                     doDeleteClassRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   117
                                     doDeleteClassAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   118
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   119
                                     doUpdate
571fd5eee315 Initial revision
claus
parents:
diff changeset
   120
                                     doCompress
571fd5eee315 Initial revision
claus
parents:
diff changeset
   121
                                     doCompare
571fd5eee315 Initial revision
claus
parents:
diff changeset
   122
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   123
                                     doMakePatch
571fd5eee315 Initial revision
claus
parents:
diff changeset
   124
                                     doMakePermanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
   125
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   126
                                     doWriteBack)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   127
                          receiver:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   128
                               for:changeListView)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   129
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   130
571fd5eee315 Initial revision
claus
parents:
diff changeset
   131
realize
571fd5eee315 Initial revision
claus
parents:
diff changeset
   132
    super realize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   133
    self readChangesFile.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   134
    changeListView contents:changeChunks.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   135
    changeListView action:[:lineNr | self changeSelection:lineNr].
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   136
    self disableMenuEntries.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   137
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   138
571fd5eee315 Initial revision
claus
parents:
diff changeset
   139
destroy
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   140
    closeBox notNil ifTrue:[closeBox destroy. closeBox := nil].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   141
    super destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   142
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   143
571fd5eee315 Initial revision
claus
parents:
diff changeset
   144
!ChangesBrowser methodsFor:'private'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   145
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   146
enableMenuEntries
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   147
    "enable all entries refering to a class"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   148
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   149
    changeListView middleButtonMenu enable:#doApply.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   150
    changeListView middleButtonMenu enable:#doApplyRest.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   151
    changeListView middleButtonMenu enable:#doDelete.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   152
    changeListView middleButtonMenu enable:#doDeleteRest.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   153
    changeListView middleButtonMenu enable:#doDeleteClassRest.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   154
    changeListView middleButtonMenu enable:#doDeleteClassAll.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   155
    changeListView middleButtonMenu enable:#doCompare.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   156
    changeListView middleButtonMenu enable:#doMakePatch.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   157
    changeListView middleButtonMenu enable:#doMakePermanent.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   158
!
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   159
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   160
disableMenuEntries
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   161
    "enable all entries refering to a class"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   162
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   163
    changeListView middleButtonMenu disable:#doApply.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   164
    changeListView middleButtonMenu disable:#doApplyRest.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   165
    changeListView middleButtonMenu disable:#doDelete.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   166
    changeListView middleButtonMenu disable:#doDeleteRest.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   167
    changeListView middleButtonMenu disable:#doDeleteClassRest.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   168
    changeListView middleButtonMenu disable:#doDeleteClassAll.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   169
    changeListView middleButtonMenu disable:#doCompare.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   170
    changeListView middleButtonMenu disable:#doMakePatch.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   171
    changeListView middleButtonMenu disable:#doMakePermanent.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   172
!
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   173
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   174
unselect
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   175
    "common unselect"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   176
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   177
    changeListView deselect.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   178
    self disableMenuEntries
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   179
!
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   180
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   181
queryCloseText
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   182
    "made this a method for easy redefinition in subclasses"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   183
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   184
    ^ 'Quit without updating changeFile ?'
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   185
!
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   186
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   187
changeFileName:aFileName
571fd5eee315 Initial revision
claus
parents:
diff changeset
   188
    changeFileName := aFileName
571fd5eee315 Initial revision
claus
parents:
diff changeset
   189
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   190
571fd5eee315 Initial revision
claus
parents:
diff changeset
   191
withCursor:aCursor do:aBlock
571fd5eee315 Initial revision
claus
parents:
diff changeset
   192
    "evaluate aBlock while showing another cursor"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   193
571fd5eee315 Initial revision
claus
parents:
diff changeset
   194
    |oldListCursor oldCodeViewCursor|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   195
571fd5eee315 Initial revision
claus
parents:
diff changeset
   196
    oldListCursor := changeListView cursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   197
    oldCodeViewCursor := codeView cursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   198
571fd5eee315 Initial revision
claus
parents:
diff changeset
   199
    changeListView cursor:aCursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   200
    codeView cursor:aCursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   201
571fd5eee315 Initial revision
claus
parents:
diff changeset
   202
    aBlock valueNowOrOnUnwindDo:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   203
        changeListView cursor:oldListCursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   204
        codeView cursor:oldCodeViewCursor
571fd5eee315 Initial revision
claus
parents:
diff changeset
   205
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   206
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   207
571fd5eee315 Initial revision
claus
parents:
diff changeset
   208
classNameOfChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   209
    "return the classname of a change (for xxx class - changes xxx is returned)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   210
     - since parsing ascii methods is slow, keep result cached in 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   211
       changeClassNames for the next query"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   212
571fd5eee315 Initial revision
claus
parents:
diff changeset
   213
    |chunk aParseTree recTree sel name arg1Tree|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   214
571fd5eee315 Initial revision
claus
parents:
diff changeset
   215
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   216
        name := changeClassNames at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   217
        name notNil ifTrue:[^ name].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   218
571fd5eee315 Initial revision
claus
parents:
diff changeset
   219
        chunk := changeChunks at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   220
        chunk notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   221
            aParseTree := Parser parseExpression:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   222
            (aParseTree isKindOf:MessageNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   223
                sel := aParseTree selector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   224
                "a change for a method or a comment-change"
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   225
                (#(methodsFor: removeSelector: comment:) includes:sel) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   226
                    recTree := aParseTree receiver.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   227
                    (recTree isKindOf:UnaryNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   228
                        (recTree selector ~~ #class) ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   229
                        "id class methodsFor:..."
571fd5eee315 Initial revision
claus
parents:
diff changeset
   230
                        recTree := recTree receiver
571fd5eee315 Initial revision
claus
parents:
diff changeset
   231
                    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   232
                    (recTree isKindOf:PrimaryNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   233
                        name := recTree name.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   234
                        changeClassNames at:changeNr put:name.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   235
                        ^ name
571fd5eee315 Initial revision
claus
parents:
diff changeset
   236
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   237
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   238
                "a change in a class-description"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   239
                ('subclass:*' match:sel) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   240
                    arg1Tree := aParseTree arg1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   241
                    (arg1Tree isKindOf:ConstantNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   242
                        name := arg1Tree value asString.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   243
                        changeClassNames at:changeNr put:name.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   244
                        ^ name
571fd5eee315 Initial revision
claus
parents:
diff changeset
   245
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   246
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   247
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   248
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   249
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   250
    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   251
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   252
571fd5eee315 Initial revision
claus
parents:
diff changeset
   253
streamForChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   254
    "answer a stream for change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   255
 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   256
    |aStream|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   257
571fd5eee315 Initial revision
claus
parents:
diff changeset
   258
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   259
    aStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   260
    aStream position:(changePositions at:changeNr).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   261
    ^ aStream
571fd5eee315 Initial revision
claus
parents:
diff changeset
   262
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   263
571fd5eee315 Initial revision
claus
parents:
diff changeset
   264
clearCodeView
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   265
    self unselect "changeListView deselect".
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   266
    codeView contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   267
    changeNrShown := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   268
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   269
571fd5eee315 Initial revision
claus
parents:
diff changeset
   270
autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   271
    self class autoSelectNext ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   272
        (changeNr <= changeChunks size) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   273
            changeListView selection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   274
            self changeSelection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   275
            ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   276
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   277
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   278
    self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   279
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   280
571fd5eee315 Initial revision
claus
parents:
diff changeset
   281
writeBackChanges
571fd5eee315 Initial revision
claus
parents:
diff changeset
   282
    "write back the changes file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   283
571fd5eee315 Initial revision
claus
parents:
diff changeset
   284
    |inStream outStream chunk sawExcla excla done dir|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   285
571fd5eee315 Initial revision
claus
parents:
diff changeset
   286
    outStream := FileStream newFileNamed:'n_changes'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   287
    outStream isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   288
        self warn:'cannot create temporary file'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   289
        ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   290
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   291
   
571fd5eee315 Initial revision
claus
parents:
diff changeset
   292
    inStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
    inStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   294
571fd5eee315 Initial revision
claus
parents:
diff changeset
   295
    self withCursor:(Cursor write) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   296
        excla := inStream class chunkSeparator.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
        1 to:(changeChunks size) do:[:index |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   298
            inStream position:(changePositions at:index).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   299
            sawExcla := inStream peekFor:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   300
            chunk := inStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   301
571fd5eee315 Initial revision
claus
parents:
diff changeset
   302
            sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   303
                outStream nextPut:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   304
                outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   305
                outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
                "a method-definition chunk - skip followups"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
                done := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   308
                [done] whileFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   309
                    chunk := inStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   310
                    chunk isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   311
                        done := true
571fd5eee315 Initial revision
claus
parents:
diff changeset
   312
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   313
                        outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   314
                        outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   315
                        done := chunk isEmpty
571fd5eee315 Initial revision
claus
parents:
diff changeset
   316
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   317
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   318
                0 "compiler kludge"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   319
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   320
                outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   321
                outStream cr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   322
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   323
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   324
        outStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   325
        inStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   326
        dir := FileDirectory currentDirectory.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   327
        dir removeFile:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   328
        dir renameFile:'n_changes' newName:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   329
        anyChanges := false
571fd5eee315 Initial revision
claus
parents:
diff changeset
   330
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   331
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   332
571fd5eee315 Initial revision
claus
parents:
diff changeset
   333
readChangesFile
571fd5eee315 Initial revision
claus
parents:
diff changeset
   334
    "read the changes file, create a list of header-lines and 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   335
     a list of chunk-poritions"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   336
571fd5eee315 Initial revision
claus
parents:
diff changeset
   337
    |aStream index text done sawExcla chunkPos excla|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   338
571fd5eee315 Initial revision
claus
parents:
diff changeset
   339
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   340
    aStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   341
571fd5eee315 Initial revision
claus
parents:
diff changeset
   342
    self withCursor:(Cursor read) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   343
        changeChunks := OrderedCollection new.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   344
        changePositions := OrderedCollection new.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   345
        excla := aStream class chunkSeparator.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   346
571fd5eee315 Initial revision
claus
parents:
diff changeset
   347
        [aStream atEnd] whileFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   348
            aStream skipSeparators.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   349
            chunkPos := aStream position.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   350
            sawExcla := aStream peekFor:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   351
            text := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   352
            text notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   353
                changePositions add:chunkPos.
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   354
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   355
                "only first line is saved in changeChunks ..."
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   356
                index := text indexOf:(Character cr).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   357
                (index ~~ 0) ifTrue:[
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   358
                    text := text copyFrom:1 to:(index - 1).
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   359
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   360
                    "take care for comment changes - must still be a
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   361
                     valid expression for classNameOfChange: to work"
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   362
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   363
                    (text endsWith:'comment:''') ifTrue:[
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   364
                        text := text , '...'''
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   365
                    ]
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   366
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   367
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   368
                changeChunks add:text.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   369
                sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   370
                    "a method-definition chunk - skip followups"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   371
                    done := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   372
                    [done] whileFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   373
                        text := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   374
                        text isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   375
                            done := true
571fd5eee315 Initial revision
claus
parents:
diff changeset
   376
                        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   377
                            done := text isEmpty
571fd5eee315 Initial revision
claus
parents:
diff changeset
   378
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   379
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   380
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   381
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   382
        ].
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   383
        changeClassNames := VariableArray new:(changeChunks size).
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   384
        aStream close.
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   385
        anyChanges := false
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   386
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   387
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   388
571fd5eee315 Initial revision
claus
parents:
diff changeset
   389
silentDeleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   390
    "delete a change do not update changeListView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   391
571fd5eee315 Initial revision
claus
parents:
diff changeset
   392
    anyChanges := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   393
    changeChunks removeIndex:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   394
    changePositions removeIndex:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   395
    changeClassNames removeIndex:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   396
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   397
571fd5eee315 Initial revision
claus
parents:
diff changeset
   398
571fd5eee315 Initial revision
claus
parents:
diff changeset
   399
deleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   400
    "delete a change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   401
571fd5eee315 Initial revision
claus
parents:
diff changeset
   402
    changeListView deselect.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   403
    self silentDeleteChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   404
    changeListView setContents:changeChunks
571fd5eee315 Initial revision
claus
parents:
diff changeset
   405
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   406
571fd5eee315 Initial revision
claus
parents:
diff changeset
   407
deleteChangesFrom:start to:stop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   408
    "delete a range of changes"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   409
571fd5eee315 Initial revision
claus
parents:
diff changeset
   410
    changeListView deselect.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   411
    stop to:start by:-1 do:[:changeNr |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   412
        self silentDeleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   413
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   414
    changeListView setContents:changeChunks
571fd5eee315 Initial revision
claus
parents:
diff changeset
   415
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   416
571fd5eee315 Initial revision
claus
parents:
diff changeset
   417
deleteChangesFor:aClassName from:start to:stop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   418
    "delete changes for a given class in a range"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   419
571fd5eee315 Initial revision
claus
parents:
diff changeset
   420
    |thisClassName index|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   421
571fd5eee315 Initial revision
claus
parents:
diff changeset
   422
    index := stop.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   423
    [index >= start] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   424
        thisClassName := self classNameOfChange:index.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   425
        thisClassName = aClassName ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   426
            self silentDeleteChange:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   427
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   428
        index := index - 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   429
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   430
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   431
571fd5eee315 Initial revision
claus
parents:
diff changeset
   432
applyChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   433
    "filein a change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   434
571fd5eee315 Initial revision
claus
parents:
diff changeset
   435
    |aStream chunk sawExcla upd|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   436
571fd5eee315 Initial revision
claus
parents:
diff changeset
   437
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   438
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   439
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   440
    chunk := aStream nextChunk.
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   441
    upd := Class updateChanges:false.
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   442
    codeView abortAction:[Class updateChanges:upd. 
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   443
                          codeView abortAction:nil. 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   444
                          aStream close. 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   445
                          ^self]. 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   446
    changeNrProcessed := changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   447
    [
571fd5eee315 Initial revision
claus
parents:
diff changeset
   448
        sawExcla ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   449
            Compiler evaluate:chunk notifying:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   450
        ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   451
            (Compiler evaluate:chunk notifying:self) fileInFrom:aStream
571fd5eee315 Initial revision
claus
parents:
diff changeset
   452
                                                      notifying:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   453
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   454
        changeNrProcessed := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   455
        codeView abortAction:nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   456
    ] valueNowOrOnUnwindDo:[Class updateChanges:upd].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   457
    aStream close
571fd5eee315 Initial revision
claus
parents:
diff changeset
   458
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   459
571fd5eee315 Initial revision
claus
parents:
diff changeset
   460
compareChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   461
    "compare a change with current version"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   462
571fd5eee315 Initial revision
claus
parents:
diff changeset
   463
    |aStream chunk sawExcla parseTree thisClass cat oldSource newSource
571fd5eee315 Initial revision
claus
parents:
diff changeset
   464
     parser sel oldMethod|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   465
571fd5eee315 Initial revision
claus
parents:
diff changeset
   466
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   467
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   468
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   469
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   470
    sawExcla ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   471
        Transcript showCr:'not comparable ...'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   472
    ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   473
        parseTree := Parser parseExpression:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   474
        (parseTree isKindOf:MessageNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   475
            (parseTree selector == #methodsFor:) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   476
                thisClass := (parseTree receiver evaluate).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   477
                (thisClass isBehavior "isKindOf:Class") ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   478
                    cat := parseTree arg1 evaluate.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   479
                    newSource := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   480
                    parser := Parser parseMethod:newSource in:thisClass.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   481
                    parser notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   482
                        sel := parser selector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   483
                        oldMethod := thisClass compiledMethodAt:sel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   484
                        oldMethod notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   485
                            (oldMethod category = cat) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   486
                                Transcript showCr:'category changed.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   487
                            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   488
                            oldSource := oldMethod source.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   489
                            (oldSource = newSource) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   490
                                Transcript showCr:'same source'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   491
                            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   492
                                Transcript showCr:'source changed.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   493
                            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   494
                        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   495
                            Transcript showCr:'method does not exist.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   496
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   497
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   498
                        Transcript showCr:'change unparsable.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   499
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   500
                ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   501
                    Transcript showCr:'class does not exist.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   502
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   503
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   504
                Transcript showCr:'not comparable.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   505
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   506
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   507
            Transcript showCr:'not comparable.'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   508
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   509
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   510
    aStream close
571fd5eee315 Initial revision
claus
parents:
diff changeset
   511
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   512
571fd5eee315 Initial revision
claus
parents:
diff changeset
   513
makeChangeAPatch:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   514
    "copy change to patchfile"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   515
571fd5eee315 Initial revision
claus
parents:
diff changeset
   516
    |aStream outStream chunk sawExcla|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   517
571fd5eee315 Initial revision
claus
parents:
diff changeset
   518
    outStream := FileStream oldFileNamed:'patches'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   519
    outStream isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   520
        outStream isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   521
            outStream := FileStream newFileNamed:'patches'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   522
            outStream isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   523
                self error:'cannot update patches file'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   524
                ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   525
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   526
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   527
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   528
    outStream setToEnd.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   529
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   530
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   531
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   532
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   533
        outStream nextPut:$!!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   534
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   535
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   536
    outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   537
    outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   538
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   539
        chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   540
        outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   541
        outStream space
571fd5eee315 Initial revision
claus
parents:
diff changeset
   542
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   543
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   544
        outStream nextPut:$!!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   545
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   546
    outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   547
    aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   548
    outStream close
571fd5eee315 Initial revision
claus
parents:
diff changeset
   549
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   550
571fd5eee315 Initial revision
claus
parents:
diff changeset
   551
makeChangePermanent:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   552
    "rewrite the source where change changeNr lies"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   553
571fd5eee315 Initial revision
claus
parents:
diff changeset
   554
    self notify:'this is not yet implemented'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   555
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   556
571fd5eee315 Initial revision
claus
parents:
diff changeset
   557
!ChangesBrowser methodsFor:'error handling'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   558
571fd5eee315 Initial revision
claus
parents:
diff changeset
   559
correctableError:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   560
    "compiler notifys us of an error - this should really not happen since
571fd5eee315 Initial revision
claus
parents:
diff changeset
   561
     changes ought to be correct (did someone edit the changes file ??).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   562
     Show the bad change in the codeView and let codeView hilight the error;
571fd5eee315 Initial revision
claus
parents:
diff changeset
   563
     no corrections allowed here therefore return false"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   564
571fd5eee315 Initial revision
claus
parents:
diff changeset
   565
    (changeNrProcessed ~~ changeNrShown) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   566
        self changeSelection:changeNrProcessed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   567
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   568
    codeView error:aString position:relPos to:relEndPos.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   569
    ^ false
571fd5eee315 Initial revision
claus
parents:
diff changeset
   570
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   571
571fd5eee315 Initial revision
claus
parents:
diff changeset
   572
error:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   573
    "compiler notifys us of an error - this should really not happen since
571fd5eee315 Initial revision
claus
parents:
diff changeset
   574
     changes ought to be correct (did someone edit the changes file ??).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   575
     Show the bad change in the codeView and let codeView hilight the error"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   576
571fd5eee315 Initial revision
claus
parents:
diff changeset
   577
    (changeNrProcessed ~~ changeNrShown) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   578
        self changeSelection:changeNrProcessed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   579
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   580
    ^ codeView error:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   581
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   582
571fd5eee315 Initial revision
claus
parents:
diff changeset
   583
warning:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   584
    "compiler notifys us of a warning - ignore it"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   585
571fd5eee315 Initial revision
claus
parents:
diff changeset
   586
    ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   587
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   588
571fd5eee315 Initial revision
claus
parents:
diff changeset
   589
!ChangesBrowser methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   590
571fd5eee315 Initial revision
claus
parents:
diff changeset
   591
noChangesAllowed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   592
    "show a warning that changes cannot be changed"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   593
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   594
    self warn:(resources at:'changes are not allowed to be changed')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   595
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   596
571fd5eee315 Initial revision
claus
parents:
diff changeset
   597
changeSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   598
    "show a change in the codeView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   599
571fd5eee315 Initial revision
claus
parents:
diff changeset
   600
    |aStream sawExcla chunk|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   601
571fd5eee315 Initial revision
claus
parents:
diff changeset
   602
    aStream := self streamForChange:lineNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   603
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   604
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   605
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   606
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   607
        chunk := aStream nextChunk
571fd5eee315 Initial revision
claus
parents:
diff changeset
   608
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   609
    aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   610
    codeView contents:chunk.
13
145a9461122e *** empty log message ***
claus
parents: 6
diff changeset
   611
    codeView acceptAction:[:theCode | self doApply "noChangesAllowed"].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   612
    changeNrShown := lineNr.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   613
    self enableMenuEntries
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   614
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   615
571fd5eee315 Initial revision
claus
parents:
diff changeset
   616
doMakePermanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
   617
    "user wants a change to be made permanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
   618
     - rewrite the source file where this change has to go"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   619
571fd5eee315 Initial revision
claus
parents:
diff changeset
   620
    |changeNr yesNoBox|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   621
571fd5eee315 Initial revision
claus
parents:
diff changeset
   622
    yesNoBox isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   623
        yesNoBox := YesNoBox new
571fd5eee315 Initial revision
claus
parents:
diff changeset
   624
    ].
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   625
    yesNoBox title:(resources at:'Warning: this operation cannot be undone').
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   626
    yesNoBox okText:(resources at:'apply').
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   627
    yesNoBox noText:(resources at:'abort').
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   628
    yesNoBox okAction:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   629
                  changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   630
                  changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   631
                      self makeChangePermanent:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   632
                      self autoSelect:(changeNr + 1)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   633
                  ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   634
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   635
    yesNoBox showAtPointer
571fd5eee315 Initial revision
claus
parents:
diff changeset
   636
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   637
571fd5eee315 Initial revision
claus
parents:
diff changeset
   638
doMakePatch
571fd5eee315 Initial revision
claus
parents:
diff changeset
   639
    "user wants a change to be made a patch
571fd5eee315 Initial revision
claus
parents:
diff changeset
   640
     - copy it over to the patches file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   641
571fd5eee315 Initial revision
claus
parents:
diff changeset
   642
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   643
571fd5eee315 Initial revision
claus
parents:
diff changeset
   644
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   645
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   646
        self makeChangeAPatch:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   647
        self autoSelect:(changeNr + 1)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   648
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   649
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   650
571fd5eee315 Initial revision
claus
parents:
diff changeset
   651
doApply
571fd5eee315 Initial revision
claus
parents:
diff changeset
   652
    "user wants a change to be applied"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   653
571fd5eee315 Initial revision
claus
parents:
diff changeset
   654
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   655
571fd5eee315 Initial revision
claus
parents:
diff changeset
   656
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   657
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   658
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   659
            self applyChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   660
            self autoSelect:(changeNr + 1)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   661
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   662
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   663
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   664
571fd5eee315 Initial revision
claus
parents:
diff changeset
   665
doApplyAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   666
    "user wants all changes to be applied"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   667
571fd5eee315 Initial revision
claus
parents:
diff changeset
   668
    self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   669
        self clearCodeView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   670
        1 to:(changePositions size) do:[:changeNr |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   671
            changeListView selection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   672
            self applyChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   673
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   674
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   675
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   676
571fd5eee315 Initial revision
claus
parents:
diff changeset
   677
doApplyRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   678
    "user wants all changes from changeNr to be applied"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   679
571fd5eee315 Initial revision
claus
parents:
diff changeset
   680
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   681
571fd5eee315 Initial revision
claus
parents:
diff changeset
   682
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   683
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   684
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   685
            self clearCodeView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   686
            changeNr to:(changePositions size) do:[:changeNr |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   687
                changeListView selection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   688
                self applyChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   689
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   690
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   691
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   692
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   693
571fd5eee315 Initial revision
claus
parents:
diff changeset
   694
doDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
   695
    "delete currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   696
571fd5eee315 Initial revision
claus
parents:
diff changeset
   697
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   698
571fd5eee315 Initial revision
claus
parents:
diff changeset
   699
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   700
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   701
        self deleteChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   702
        self autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   703
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   704
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   705
571fd5eee315 Initial revision
claus
parents:
diff changeset
   706
doDeleteClassRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   707
    "delete rest of changes with same class as currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   708
571fd5eee315 Initial revision
claus
parents:
diff changeset
   709
    |changeNr classNameToDelete|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   710
571fd5eee315 Initial revision
claus
parents:
diff changeset
   711
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   712
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   713
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   714
            classNameToDelete := self classNameOfChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   715
            classNameToDelete notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   716
                changeListView selection:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   717
                self deleteChangesFor:classNameToDelete 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   718
                                 from:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   719
                                   to:(changeChunks size).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   720
                changeListView setContents:changeChunks.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   721
                self autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   722
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   723
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   724
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   725
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   726
571fd5eee315 Initial revision
claus
parents:
diff changeset
   727
doDeleteRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   728
    "delete all changes from current to the end"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   729
571fd5eee315 Initial revision
claus
parents:
diff changeset
   730
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   731
571fd5eee315 Initial revision
claus
parents:
diff changeset
   732
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   733
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   734
        self deleteChangesFrom:changeNr to:(changeChunks size).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   735
        self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   736
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   737
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   738
571fd5eee315 Initial revision
claus
parents:
diff changeset
   739
doDeleteClassAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   740
    "delete all changes with same class as currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   741
571fd5eee315 Initial revision
claus
parents:
diff changeset
   742
    |changeNr classNameToDelete|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   743
571fd5eee315 Initial revision
claus
parents:
diff changeset
   744
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   745
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   746
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   747
            classNameToDelete := self classNameOfChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   748
            classNameToDelete notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   749
                changeListView selection:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   750
                self deleteChangesFor:classNameToDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
   751
                                 from:1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   752
                                   to:(changeChunks size).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   753
                changeListView contents:changeChunks.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   754
                self autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   755
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   756
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   757
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   758
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   759
571fd5eee315 Initial revision
claus
parents:
diff changeset
   760
doWriteBack
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   761
    "write back the list onto the changes file"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   762
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   763
    anyChanges ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   764
        self writeBackChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   765
        self doUpdate
571fd5eee315 Initial revision
claus
parents:
diff changeset
   766
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   767
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   768
571fd5eee315 Initial revision
claus
parents:
diff changeset
   769
saveAndTerminate
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   770
    "update the changes file and quit"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   771
571fd5eee315 Initial revision
claus
parents:
diff changeset
   772
    self doWriteBack.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   773
    self destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   774
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   775
571fd5eee315 Initial revision
claus
parents:
diff changeset
   776
terminate
571fd5eee315 Initial revision
claus
parents:
diff changeset
   777
    "window manager wants ChangeBrowser to vanish"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   778
571fd5eee315 Initial revision
claus
parents:
diff changeset
   779
    anyChanges ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   780
        closeBox isNil ifTrue:[closeBox := YesNoBox new].
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   781
        closeBox title:(resources at:(self queryCloseText)).
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   782
        closeBox yesAction:[self destroy] noAction:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   783
        closeBox showAtPointer
571fd5eee315 Initial revision
claus
parents:
diff changeset
   784
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   785
        self destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   786
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   787
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   788
571fd5eee315 Initial revision
claus
parents:
diff changeset
   789
doUpdate
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   790
    "reread the changes-file"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   791
571fd5eee315 Initial revision
claus
parents:
diff changeset
   792
    self readChangesFile.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   793
    changeListView setContents:changeChunks
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   794
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   795
571fd5eee315 Initial revision
claus
parents:
diff changeset
   796
doCompare
571fd5eee315 Initial revision
claus
parents:
diff changeset
   797
    "compare change with current system version
571fd5eee315 Initial revision
claus
parents:
diff changeset
   798
     - give a note in transcript"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   799
571fd5eee315 Initial revision
claus
parents:
diff changeset
   800
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   801
571fd5eee315 Initial revision
claus
parents:
diff changeset
   802
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   803
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   804
        self compareChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   805
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   806
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   807
571fd5eee315 Initial revision
claus
parents:
diff changeset
   808
doCompress
571fd5eee315 Initial revision
claus
parents:
diff changeset
   809
    "compress the change-set; this replaces multiple method-changes by the last 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   810
     (i.e. the most recent) change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   811
571fd5eee315 Initial revision
claus
parents:
diff changeset
   812
    |classes types selectors thisClass thisSelector
571fd5eee315 Initial revision
claus
parents:
diff changeset
   813
     aStream chunk changeNr sawExcla aParseTree codeChunk codeParser
571fd5eee315 Initial revision
claus
parents:
diff changeset
   814
     searchIndex anyMore deleteSet index parseTreeChunk numChanges
571fd5eee315 Initial revision
claus
parents:
diff changeset
   815
     excla|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   816
571fd5eee315 Initial revision
claus
parents:
diff changeset
   817
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   818
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   819
571fd5eee315 Initial revision
claus
parents:
diff changeset
   820
    self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   821
        numChanges := changePositions size.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   822
        classes := Array new:numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   823
        selectors := Array new:numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   824
        types := Array new:numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   825
571fd5eee315 Initial revision
claus
parents:
diff changeset
   826
        "starting at the end, get the change class and change selector;
571fd5eee315 Initial revision
claus
parents:
diff changeset
   827
         collect all in classes / selectors"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   828
571fd5eee315 Initial revision
claus
parents:
diff changeset
   829
        changeNr := numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   830
        excla := aStream class chunkSeparator.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   831
571fd5eee315 Initial revision
claus
parents:
diff changeset
   832
        [changeNr >= 1] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   833
            aStream position:(changePositions at:changeNr).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   834
            sawExcla := aStream peekFor:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   835
            chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   836
            sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   837
                "optimize a bit if multiple methods for same category arrive"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   838
                (chunk = parseTreeChunk) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   839
                    aParseTree := Parser parseExpression:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   840
                    parseTreeChunk := chunk
571fd5eee315 Initial revision
claus
parents:
diff changeset
   841
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   842
                (aParseTree isKindOf:MessageNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   843
                    (aParseTree selector == #methodsFor:) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   844
                        thisClass := (aParseTree receiver evaluate).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   845
                        codeChunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   846
                        codeParser := Parser parseMethodSpecification:codeChunk
571fd5eee315 Initial revision
claus
parents:
diff changeset
   847
                                                                   in:thisClass.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   848
                        codeParser notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   849
                            selectors at:changeNr put:(codeParser selector).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   850
                            classes at:changeNr put:thisClass.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   851
                            types at:changeNr put:#methodsFor
571fd5eee315 Initial revision
claus
parents:
diff changeset
   852
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   853
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   854
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   855
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   856
                aParseTree := Parser parseExpression:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   857
                parseTreeChunk := chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   858
                (aParseTree isKindOf:MessageNode) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   859
                    (aParseTree selector == #removeSelector:) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   860
                        selectors at:changeNr put:(aParseTree arg1 value ).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   861
                        classes at:changeNr put:(aParseTree receiver evaluate).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   862
                        types at:changeNr put:#removeSelector
571fd5eee315 Initial revision
claus
parents:
diff changeset
   863
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   864
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   865
            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   866
            changeNr := changeNr - 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   867
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   868
        aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   869
571fd5eee315 Initial revision
claus
parents:
diff changeset
   870
        "for all changes, look for another class/selector occurence and
571fd5eee315 Initial revision
claus
parents:
diff changeset
   871
         add change number to delete set if found"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   872
571fd5eee315 Initial revision
claus
parents:
diff changeset
   873
        deleteSet := OrderedCollection new.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   874
        changeNr := 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   875
        [changeNr < changePositions size] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   876
            thisClass := classes at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   877
            thisSelector := selectors at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   878
            searchIndex := changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   879
            anyMore := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   880
            [anyMore] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   881
                searchIndex := classes indexOf:thisClass
571fd5eee315 Initial revision
claus
parents:
diff changeset
   882
                                    startingAt:(searchIndex + 1).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   883
                (searchIndex ~~ 0) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   884
                    ((selectors at:searchIndex) == thisSelector) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   885
                        thisClass notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   886
                            deleteSet add:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   887
                            anyMore := false
571fd5eee315 Initial revision
claus
parents:
diff changeset
   888
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   889
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   890
                ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   891
                    anyMore := false      
571fd5eee315 Initial revision
claus
parents:
diff changeset
   892
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   893
            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   894
            changeNr := changeNr + 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   895
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   896
571fd5eee315 Initial revision
claus
parents:
diff changeset
   897
        "finally delete what has been found"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   898
571fd5eee315 Initial revision
claus
parents:
diff changeset
   899
        (deleteSet size > 0) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   900
            changeListView selection:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   901
            index := deleteSet size.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   902
            [index > 0] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   903
                self silentDeleteChange:(deleteSet at:index).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   904
                index := index - 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   905
            ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   906
            changeListView setContents:changeChunks.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   907
            changeListView firstLineShown > changeChunks size ifTrue:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   908
                changeListView makeLineVisible:changeChunks size
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   909
            ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   910
            self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   911
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   912
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   913
! !