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