ChangesBrowser.st
author claus
Tue, 01 Nov 1994 14:18:24 +0100
changeset 50 3106c0de1707
parent 49 6fe62433cfa3
child 51 57c1ccc3d7e0
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     1
"
4
77d8e96499b2 *** empty log message ***
claus
parents: 1
diff changeset
     2
 COPYRIGHT (c) 1990 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
     3
	      All Rights Reserved
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     4
571fd5eee315 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
571fd5eee315 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
571fd5eee315 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
571fd5eee315 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
571fd5eee315 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
571fd5eee315 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    11
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    12
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    13
'From Smalltalk/X, Version:2.10.3 on 26-sep-1994 at 1:19:22 pm'!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    14
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    15
StandardSystemView subclass:#ChangesBrowser
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    16
	 instanceVariableNames:'changeListView codeView changeFileName changeChunks
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    17
		changePositions changeClassNames changeHeaderLines anyChanges
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    18
		changeNrShown changeNrProcessed fileBox skipSignal'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    19
	 classVariableNames:''
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    20
	 poolDictionaries:''
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    21
	 category:'Interface-Browsers'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    22
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    23
571fd5eee315 Initial revision
claus
parents:
diff changeset
    24
ChangesBrowser comment:'
4
77d8e96499b2 *** empty log message ***
claus
parents: 1
diff changeset
    25
COPYRIGHT (c) 1990 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    26
	    All Rights Reserved
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    27
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
    28
$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.18 1994-11-01 13:18:24 claus Exp $
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    29
'!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    30
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    31
!ChangesBrowser class methodsFor:'documentation'!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    32
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    33
copyright
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    34
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    35
 COPYRIGHT (c) 1990 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    36
	      All Rights Reserved
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    37
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    38
 This software is furnished under a license and may be used
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    39
 only in accordance with the terms of that license and with the
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    40
 inclusion of the above copyright notice.   This software may not
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    41
 be provided or otherwise made available to, or used by, any
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    42
 other person.  No title to or ownership of the software is
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    43
 hereby transferred.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    44
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    45
!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    46
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    47
version
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    48
"
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
    49
$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.18 1994-11-01 13:18:24 claus Exp $
31
7ee4217817fa *** empty log message ***
claus
parents: 29
diff changeset
    50
"
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    51
!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    52
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    53
documentation
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    54
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    55
    this implements a browser for the changes-file.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    56
    See the extra document 'doc/misc/cbrowser.doc' for how to use this browser.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    57
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    58
    written jan 90 by claus
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    59
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    60
! !
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    61
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    62
!ChangesBrowser class methodsFor:'instance creation'!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    63
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    64
new
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    65
    "create a new changes browser"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    66
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    67
    ^ super label:'Changes Browser'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    68
	     icon:(Form fromFile:'CBrowser.xbm' resolution:100)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    69
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    70
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    71
openOn:aFileName
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    72
    "create c changes browser on a change file"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    73
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
    74
    ^ ((self new label:'Changes Browser: ', aFileName) changeFileName:aFileName) open
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    75
! !
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    76
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    77
!ChangesBrowser class methodsFor:'behavior'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    78
571fd5eee315 Initial revision
claus
parents:
diff changeset
    79
autoSelectNext
571fd5eee315 Initial revision
claus
parents:
diff changeset
    80
    "returning true here, makes a Delete operation automatically
571fd5eee315 Initial revision
claus
parents:
diff changeset
    81
     select the next change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    82
571fd5eee315 Initial revision
claus
parents:
diff changeset
    83
    ^ true
571fd5eee315 Initial revision
claus
parents:
diff changeset
    84
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
    85
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    86
!ChangesBrowser methodsFor:'initialize / release'!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    87
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    88
initializeMiddleButtonMenu
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    89
    |labels|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    90
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    91
    labels := resources array:#(
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    92
			       'apply change'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    93
			       'apply changes to end'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    94
			       'apply all changes'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    95
			       '-'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    96
			       'delete'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    97
			       'delete to end'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    98
			       'delete changes for this class to end'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    99
			       'delete all changes for this class'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   100
			       '-'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   101
			       'update'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   102
			       'compress'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   103
			       'compare with current version'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   104
			       'browse class'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   105
			       '-'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   106
			       'make change a patch'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   107
"/                               'update sourcefile from change'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   108
"/                               '-'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   109
			       'save change in file ...'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   110
			       'save changes to end in file ...'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   111
			       'save changes for this class to end in file ...'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   112
			       'save all changes for this class in file ...'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   113
			       '-'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   114
			       'writeback changeFile').
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   115
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   116
    changeListView
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   117
	middleButtonMenu:(PopUpMenu 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   118
			    labels:labels
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   119
			 selectors:#(
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   120
				     doApply
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   121
				     doApplyRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   122
				     doApplyAll
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   123
				     nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   124
				     doDelete
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   125
				     doDeleteRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   126
				     doDeleteClassRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   127
				     doDeleteClassAll
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   128
				     nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   129
				     doUpdate
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   130
				     doCompress
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   131
				     doCompare
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   132
				     doBrowse
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   133
				     nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   134
				     doMakePatch
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   135
"/                                     doMakePermanent
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   136
"/                                     nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   137
				     doSave
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   138
				     doSaveRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   139
				     doSaveClassRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   140
				     doSaveClassAll
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   141
				     nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   142
				     doWriteBack)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   143
			  receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   144
			       for:changeListView)
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   145
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   146
571fd5eee315 Initial revision
claus
parents:
diff changeset
   147
initialize
571fd5eee315 Initial revision
claus
parents:
diff changeset
   148
    |frame v|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   149
571fd5eee315 Initial revision
claus
parents:
diff changeset
   150
    super initialize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   151
571fd5eee315 Initial revision
claus
parents:
diff changeset
   152
    changeFileName := 'changes'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   153
571fd5eee315 Initial revision
claus
parents:
diff changeset
   154
    frame := VariableVerticalPanel origin:(0.0 @ 0.0)
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   155
				   corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   156
			      borderWidth:0
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   157
				       in:self.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   158
571fd5eee315 Initial revision
claus
parents:
diff changeset
   159
    v := ScrollableView for:SelectionInListView in:frame.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   160
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.3).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   161
    changeListView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   162
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   163
    v := HVScrollableView for:CodeView miniScrollerH:true miniScrollerV:false in:frame.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   164
    v origin:(0.0 @ 0.3) corner:(1.0 @ 1.0).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   165
    codeView := v scrolledView.
33
11474e0f4d00 make codeview readonly
claus
parents: 31
diff changeset
   166
    codeView readOnly.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   167
571fd5eee315 Initial revision
claus
parents:
diff changeset
   168
    anyChanges := false.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   169
    ObjectMemory addDependent:self.   "to get shutdown-update"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   170
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   171
571fd5eee315 Initial revision
claus
parents:
diff changeset
   172
realize
571fd5eee315 Initial revision
claus
parents:
diff changeset
   173
    super realize.
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   174
    self readChangesFileInBackground:true.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   175
    self setChangeList.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   176
    changeListView action:[:lineNr | self changeSelection:lineNr].
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   177
    self disableMenuEntries.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   178
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   179
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   180
update:what
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   181
    |box|
27
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   182
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   183
    (what == #aboutToExit) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   184
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   185
	 smalltalk is about to shut down -
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   186
	 - if change list was modified, ask user and save if requested.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   187
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   188
	anyChanges ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   189
	    shown ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   190
		self unrealize.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   191
		self realize
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   192
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   193
	    self raise.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   194
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   195
	    box := YesNoBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   196
	    box title:(resources at:'ChangesBrowser:\changefile has not been updated from the modified changelist.\\Update before exiting ?') withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   197
	    box noText:(resources at:'don''t update').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   198
	    box okText:(resources at:'update').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   199
	    box yesAction:[self writeBackChanges] 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   200
		 noAction:[].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   201
	    box showAtPointer
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   202
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   203
	^ self
27
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   204
    ].
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   205
    super update:what
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   206
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   207
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   208
!ChangesBrowser methodsFor:'termination'!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   209
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   210
terminate
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   211
    "window manager wants us to go away"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   212
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   213
    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   214
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   215
    anyChanges ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   216
	box := OptionBox title:'' numberOfOptions:3.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   217
	box title:(resources at:'close ChangesBrowser.\\changefile has not been updated from the modified changelist.\\Update before closing ?') withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   218
	box buttonTitles:(resources array:#('abort' 'don''t update' 'update')).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   219
	box actions:(Array with:[^ self]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   220
			   with:[self destroy]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   221
			   with:[self writeBackChanges. self destroy]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   222
		    ).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   223
	box showAtPointer.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   224
    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   225
	self destroy
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   226
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   227
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   228
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   229
destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   230
    "destroy the receiver; make certain, that boxes are destroyed too"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   231
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   232
    ObjectMemory removeDependent:self.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   233
    fileBox notNil ifTrue:[fileBox destroy. fileBox := nil].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   234
    super destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   235
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   236
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   237
saveAndTerminate
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   238
    "update the changes file and quit.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   239
     Dont depend on this being sent, not all window managers
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   240
     send it; instead, they simply destroy the view."
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   241
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   242
    anyChanges ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   243
	self writeBackChanges.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   244
    ].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   245
    self destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   246
! !
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   247
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   248
!ChangesBrowser methodsFor:'private'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   249
571fd5eee315 Initial revision
claus
parents:
diff changeset
   250
streamForChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   251
    "answer a stream for change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   252
 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   253
    |aStream|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   254
571fd5eee315 Initial revision
claus
parents:
diff changeset
   255
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   256
    aStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   257
    aStream position:(changePositions at:changeNr).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   258
    ^ aStream
571fd5eee315 Initial revision
claus
parents:
diff changeset
   259
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   260
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   261
enableMenuEntries
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   262
    "enable all entries refering to a selected change"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   263
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   264
    #(doApply doApplyRest doDelete doDeleteRest doDeleteClassRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   265
      doDeleteClassAll doCompare doMakePatch doSaveChangeInFile doMakePermanent
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   266
      doSave doSaveRest doSaveClassAll doSaveClassRest doBrowse) 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   267
    do:[:sel |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   268
	changeListView middleButtonMenu enable:sel
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   269
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   270
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   271
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   272
unselect
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   273
    "common unselect"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   274
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   275
    changeListView deselect.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   276
    self disableMenuEntries
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   277
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   278
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   279
disableMenuEntries
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   280
    "enable all entries refering to a selected change"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   281
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   282
    #(doApply doApplyRest doDelete doDeleteRest doDeleteClassRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   283
      doDeleteClassAll doCompare doMakePatch doSaveChangeInFile doMakePermanent
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   284
      doSave doSaveRest doSaveClassAll doSaveClassRest doBrowse) 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   285
    do:[:sel |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   286
	changeListView middleButtonMenu disable:sel
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   287
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   288
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   289
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   290
clearCodeView
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   291
    self unselect "changeListView deselect".
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   292
    codeView contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
    changeNrShown := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   294
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   295
571fd5eee315 Initial revision
claus
parents:
diff changeset
   296
autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
    self class autoSelectNext ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   298
	(changeNr <= changePositions size) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   299
	    self clearCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   300
	    changeListView selection:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   301
	    self changeSelection:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   302
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   303
	]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   304
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   305
    self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   308
autoSelectOrEnd:changeNr
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   309
    |last|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   310
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   311
    last := changePositions size.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   312
    changeNr < last ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   313
	self autoSelect:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   314
    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   315
	self clearCodeView.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   316
	changeListView selection:last .
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   317
	self changeSelection:last .
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   318
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   319
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   320
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   321
contractClass:className selector:selector to:maxLen
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   322
    |s l|
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   323
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   324
    s := className , ' ', selector.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   325
    s size > maxLen ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   326
	l := maxLen - 1 - selector size max:20.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   327
	s := (className contractTo:l) , ' ' , selector.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   328
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   329
	s size > maxLen ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   330
	    l := maxLen - 1 - className size max:20.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   331
	    s := className , ' ', (selector contractTo:l).
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   332
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   333
	    s size > maxLen ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   334
		s := (className contractTo:(maxLen // 2 - 1)) , ' ' , (selector contractTo:maxLen // 2)
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   335
	    ]
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   336
	]
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   337
    ].
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   338
    ^ s
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   339
!
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   340
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   341
readChangesFileInBackground:inBackground
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   342
    "read the changes file, create a list of header-lines (changeChunks)
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   343
     and a list of chunk-positions (changePositions)"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   344
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   345
     |aStream index chunkText headerLine done sawExcla chunkPos excla
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   346
     myProcess myPriority p sel cls text first category tabSpec entry
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   347
     maxLen|
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   348
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   349
    maxLen := 60.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   350
571fd5eee315 Initial revision
claus
parents:
diff changeset
   351
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   352
    aStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   353
571fd5eee315 Initial revision
claus
parents:
diff changeset
   354
    self withCursor:(Cursor read) do:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   355
	tabSpec := TabulatorSpecification new.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   356
	tabSpec unit:#inch.
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   357
	tabSpec positions:#(0        4.5   5.5 ).
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   358
	"                   cls>>sel type  info "
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   359
	tabSpec align:    #(#left    #left #left).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   360
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   361
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   362
	 this is a time consuming operation (especially, if reading an
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   363
	 NFS-mounted directory; therefore lower my priority ...
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   364
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   365
	inBackground ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   366
	    myProcess := Processor activeProcess.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   367
	    myPriority := myProcess priority.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   368
	    myProcess priority:(Processor userBackgroundPriority).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   369
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   370
	[
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   371
	    |entry changeString changeType line s l|
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   372
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   373
	    changeChunks := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   374
	    changeHeaderLines := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   375
	    changePositions := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   376
	    excla := aStream class chunkSeparator.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   377
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   378
	    [aStream atEnd] whileFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   379
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   380
		 get a chunk (separated by excla)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   381
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   382
		aStream skipSeparators.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   383
		chunkPos := aStream position.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   384
		sawExcla := aStream peekFor:excla.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   385
		chunkText := aStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   386
		chunkText notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   387
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   388
		     only first line is saved in changeChunks ...
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   389
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   390
		    index := chunkText indexOf:(Character cr).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   391
		    (index ~~ 0) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   392
			chunkText := chunkText copyTo:(index - 1).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   393
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   394
			"take care for comment changes - must still be a
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   395
			 valid expression for classNameOfChange: to work"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   396
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   397
			(chunkText endsWith:'comment:''') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   398
			    chunkText := chunkText , '...'''
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   399
			]
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   400
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   401
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   402
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   403
		    changeChunks add:chunkText.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   404
		    changePositions add:chunkPos.
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   405
		    headerLine := nil.
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   406
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   407
		    sawExcla ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   408
			(chunkText startsWith:'''---- snap') ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   409
			    headerLine := chunkText , ' (doIt)'.
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   410
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   411
			    entry := MultiColListEntry new.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   412
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   413
			    changeType := '(doIt)'.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   414
			    changeString := (chunkText contractTo:maxLen).
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   415
			    p := Parser parseExpression:chunkText.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   416
			    (p notNil and:[p ~~ #Error]) ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   417
				sel := p selector.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   418
				(sel == #removeSelector:) ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   419
				    p receiver isUnaryMessage ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   420
					cls := p receiver receiver name.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   421
					cls := cls , 'class'
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   422
				    ] ifFalse:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   423
					cls := p receiver name
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   424
				    ].
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   425
				    sel := (p args at:1) evaluate.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   426
				    changeType := '(remove)'.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   427
				    changeString := self contractClass:cls selector:sel to:maxLen.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   428
				]
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   429
			    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   430
			] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   431
			    headerLine := chunkText
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   432
			].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   433
		    ] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   434
			"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   435
			 method definitions actually consist of
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   436
			 two (or more) chunks; skip next chunk(s)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   437
			 up to an empty one.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   438
			 The system only writes one chunk,
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   439
			 and we cannot handle more in this ChangesBrowser ....
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   440
			"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   441
			cls := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   442
			p := Parser parseExpression:chunkText.
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   443
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   444
			(p notNil and:[p ~~ #Error]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   445
			    sel := p selector.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   446
			    (sel == #methodsFor:) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   447
				p receiver isUnaryMessage ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   448
				    cls := p receiver receiver name.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   449
				    cls := cls , 'class'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   450
				] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   451
				    cls := p receiver name
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   452
				].
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   453
				category := (p args at:1) evaluate.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   454
			    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   455
			].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   456
			done := false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   457
			first := true.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   458
			[done] whileFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   459
			    text := aStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   460
			    text isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   461
				done := true
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   462
			    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   463
				done := text isEmpty
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   464
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   465
			    done ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   466
				first ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   467
				    Transcript showCr:'only one method per ''methodsFor:'' handled'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   468
				] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   469
				    first := false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   470
				    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   471
				     try to find the selector
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   472
				    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   473
				    sel := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   474
				    cls notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   475
					p := Parser 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   476
						 parseMethodSpecification:text
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   477
						 in:nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   478
						 ignoreErrors:true
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   479
						 ignoreWarnings:true.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   480
					(p notNil and:[p ~~ #Error]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   481
					    sel := p selector.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   482
					]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   483
				    ].
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   484
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   485
				    entry := MultiColListEntry new.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   486
				    sel isNil ifTrue:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   487
					changeString := (chunkText contractTo:maxLen).
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   488
					changeType := '(change)'.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   489
				    ] ifFalse:[
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   490
					changeString :=  self contractClass:cls selector:sel to:maxLen.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   491
					changeType := '(method in: ''' , category , ''')'.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   492
				    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   493
				    sel isNil ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   494
					headerLine := chunkText , ' (change)'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   495
				    ] ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   496
					headerLine := cls , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   497
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   498
				]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   499
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   500
			]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   501
		    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   502
		    entry notNil ifTrue:[
50
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   503
			entry tabulatorSpecification:tabSpec.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   504
			entry colAt:1 put:changeString.
3106c0de1707 *** empty log message ***
claus
parents: 49
diff changeset
   505
			entry colAt:2 put:changeType.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   506
			changeHeaderLines add:entry
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   507
		    ] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   508
			headerLine notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   509
			    changeHeaderLines add:headerLine
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   510
			]
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   511
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   512
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   513
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   514
	    changeClassNames := OrderedCollection new grow:(changeChunks size).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   515
	    aStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   516
	    anyChanges := false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   517
	] valueNowOrOnUnwindDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   518
	    inBackground ifTrue:[myProcess priority:myPriority].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   519
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   520
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   521
!
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   522
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   523
queryCloseText
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   524
    "made this a method for easy redefinition in subclasses"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   525
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   526
    ^ 'Quit without updating changeFile ?'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   527
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   528
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   529
applyChange:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   530
    "fileIn a change"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   531
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   532
    |aStream upd sig nm cls|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   533
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   534
    aStream := self streamForChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   535
    aStream isNil ifTrue:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   536
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   537
    nm := self classNameOfChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   538
    nm notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   539
	cls := Smalltalk at:(nm asSymbol) ifAbsent:[].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   540
	cls notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   541
	    cls isLoaded ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   542
		cls autoload
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   543
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   544
	]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   545
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   546
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   547
    upd := Class updateChanges:false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   548
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   549
    changeNrProcessed := changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   550
    [
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   551
	(skipSignal notNil) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   552
	    sig := skipSignal
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   553
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   554
	    sig := Object abortSignal
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   555
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   556
	sig catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   557
	    aStream fileInNextChunkNotifying:self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   558
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   559
	changeNrProcessed := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   560
    ] valueNowOrOnUnwindDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   561
	Class updateChanges:upd.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   562
	aStream close
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   563
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   564
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   565
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   566
changeFileName:aFileName
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   567
    changeFileName := aFileName
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   568
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   569
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   570
setChangeList
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   571
    "extract type-information from changes and stuff into top selection
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   572
     view"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   573
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   574
"/    changeListView list:changeHeaderLines "changeChunks".
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   575
changeListView setList:changeHeaderLines expandTabs:false.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   576
    self disableMenuEntries
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   577
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   578
571fd5eee315 Initial revision
claus
parents:
diff changeset
   579
silentDeleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   580
    "delete a change do not update changeListView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   581
571fd5eee315 Initial revision
claus
parents:
diff changeset
   582
    anyChanges := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   583
    changeChunks removeIndex:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   584
    changePositions removeIndex:changeNr.
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   585
    changeClassNames removeIndex:changeNr.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   586
    changeHeaderLines removeIndex:changeNr
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   587
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   588
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   589
writeBackChanges
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   590
    "write back the changes file"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   591
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   592
    |inStream outStream chunk sawExcla excla done dir|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   593
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   594
    outStream := FileStream newFileNamed:'n_changes'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   595
    outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   596
	self warn:'cannot create temporary file'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   597
	^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   598
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   599
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   600
    inStream := FileStream readonlyFileNamed:changeFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   601
    inStream isNil ifTrue:[^ nil].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   602
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   603
    self withCursor:(Cursor write) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   604
	excla := inStream class chunkSeparator.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   605
	1 to:(changePositions size) do:[:index |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   606
	    inStream position:(changePositions at:index).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   607
	    sawExcla := inStream peekFor:excla.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   608
	    chunk := inStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   609
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   610
	    sawExcla ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   611
		outStream nextPut:excla.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   612
		outStream nextChunkPut:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   613
		outStream cr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   614
		"a method-definition chunk - skip followups"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   615
		done := false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   616
		[done] whileFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   617
		    chunk := inStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   618
		    chunk isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   619
			done := true
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   620
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   621
			outStream nextChunkPut:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   622
			outStream cr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   623
			done := chunk isEmpty
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   624
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   625
		].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   626
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   627
		outStream nextChunkPut:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   628
		outStream cr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   629
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   630
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   631
	outStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   632
	inStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   633
	dir := FileDirectory currentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   634
"/        dir removeFile:changeFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   635
	dir renameFile:'changes' newName:'changes.bak'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   636
	dir renameFile:'n_changes' newName:changeFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   637
	anyChanges := false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   638
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   639
!
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   640
571fd5eee315 Initial revision
claus
parents:
diff changeset
   641
deleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   642
    "delete a change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   643
571fd5eee315 Initial revision
claus
parents:
diff changeset
   644
    changeListView deselect.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   645
    self silentDeleteChange:changeNr.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   646
    self setChangeList "/changeListView setContents:changeChunks
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   647
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   648
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   649
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   650
classNameOfChange:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   651
    "return the classname of a change (for xxx class - changes xxx is returned)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   652
     - since parsing ascii methods is slow, keep result cached in 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   653
       changeClassNames for the next query"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   654
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   655
    |chunk aParseTree recTree sel name arg1Tree|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   656
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   657
    changeNr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   658
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   659
	 first look, if not already known
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   660
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   661
	name := changeClassNames at:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   662
	name notNil ifTrue:[^ name].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   663
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   664
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   665
	 get the chunk
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   666
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   667
	chunk := changeChunks at:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   668
	chunk notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   669
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   670
	     use parser to construct a parseTree
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   671
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   672
	    aParseTree := Parser parseExpression:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   673
	    (aParseTree notNil and:[aParseTree isMessage]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   674
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   675
		 ask parser for selector
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   676
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   677
		sel := aParseTree selector.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   678
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   679
		 is it a method-change, methodRemove or comment-change ?
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   680
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   681
		(#(methodsFor: privateMethodsFor: publicMethodsFor: 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   682
		   removeSelector: comment:) includes:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   683
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   684
		     yes, the className is the receiver
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   685
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   686
		    recTree := aParseTree receiver.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   687
		    (recTree notNil and:[recTree ~~ #Error]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   688
			recTree isUnaryMessage ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   689
			    (recTree selector ~~ #class) ifTrue:[^ nil].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   690
			    "id class methodsFor:..."
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   691
			    recTree := recTree receiver
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   692
			].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   693
			recTree isPrimary ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   694
			    name := recTree name.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   695
			    changeClassNames at:changeNr put:name.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   696
			    ^ name
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   697
			]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   698
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   699
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   700
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   701
		     is it a change in a class-description ?
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   702
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   703
		    ('subclass:*' match:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   704
			arg1Tree := aParseTree arg1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   705
			(arg1Tree notNil and:[arg1Tree isConstant]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   706
			    name := arg1Tree value asString.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   707
			    changeClassNames at:changeNr put:name.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   708
			    ^ name
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   709
			]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   710
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   711
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   712
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   713
	]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   714
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   715
    ^ nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   716
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   717
571fd5eee315 Initial revision
claus
parents:
diff changeset
   718
deleteChangesFrom:start to:stop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   719
    "delete a range of changes"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   720
571fd5eee315 Initial revision
claus
parents:
diff changeset
   721
    changeListView deselect.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   722
    stop to:start by:-1 do:[:changeNr |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   723
	self silentDeleteChange:changeNr
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   724
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   725
    self setChangeList "/changeListView setContents:changeChunks
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   726
571fd5eee315 Initial revision
claus
parents:
diff changeset
   727
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   728
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   729
readChangesFile
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   730
    "read the changes file, create a list of header-lines (changeChunks)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   731
     and a list of chunk-positions (changePositions)"
22
8b81fea5212b *** empty log message ***
claus
parents: 15
diff changeset
   732
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   733
    ^ self readChangesFileInBackground:false
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   734
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   735
571fd5eee315 Initial revision
claus
parents:
diff changeset
   736
compareChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   737
    "compare a change with current version"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   738
571fd5eee315 Initial revision
claus
parents:
diff changeset
   739
    |aStream chunk sawExcla parseTree thisClass cat oldSource newSource
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   740
     parser sel oldMethod outcome showDiff d|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   741
571fd5eee315 Initial revision
claus
parents:
diff changeset
   742
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   743
    aStream isNil ifTrue:[^ self].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   744
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   745
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   746
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   747
    sawExcla ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   748
	outcome := 'not comparable ...'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   749
    ] ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   750
	parseTree := Parser parseExpression:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   751
	(parseTree notNil and:[parseTree isMessage]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   752
	    (parseTree selector == #methodsFor:) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   753
		thisClass := (parseTree receiver evaluate).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   754
		thisClass isBehavior ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   755
		    showDiff := false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   756
		    cat := parseTree arg1 evaluate.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   757
		    newSource := aStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   758
		    parser := Parser parseMethod:newSource in:thisClass.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   759
		    (parser notNil and:[parser ~~ #Error]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   760
			sel := parser selector.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   761
			oldMethod := thisClass compiledMethodAt:sel.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   762
			oldMethod notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   763
			    (oldMethod category = cat) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   764
				Transcript showCr:'category changed.'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   765
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   766
			    oldSource := oldMethod source.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   767
			    (oldSource = newSource) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   768
				outcome := 'same source'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   769
			    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   770
				outcome := 'source changed.'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   771
				showDiff := true
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   772
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   773
			] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   774
			    outcome := 'method does not exist.'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   775
			]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   776
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   777
			outcome := 'change unparsable.'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   778
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   779
		    (showDiff and:[oldSource notNil and:[newSource notNil]]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   780
			d := DiffTextView openOn:oldSource and:newSource.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   781
			d label:'differences (current left; change right)'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   782
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   783
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   784
		    outcome := 'class does not exist.'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   785
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   786
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   787
		outcome := 'not comparable.'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   788
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   789
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   790
	    outcome := 'not comparable.'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   791
	]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   792
    ].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   793
    Transcript showCr:outcome.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   794
    aStream close.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   795
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   796
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   797
appendChange:changeNr toFile:fileName
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   798
    "append change to a file. return true if ok."
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   799
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   800
    |aStream outStream chunk sawExcla separator|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   801
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   802
    outStream := FileStream oldFileNamed:fileName.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   803
    outStream isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   804
	outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   805
	    outStream := FileStream newFileNamed:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   806
	    outStream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   807
		self warn:'cannot update file ''%1''' with:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   808
		^ false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   809
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   810
	]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   811
    ].
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   812
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   813
    outStream setToEnd.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   814
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   815
    aStream := self streamForChange:changeNr.
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   816
    aStream isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   817
	self warn:'oops cannot read change'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   818
	^ false
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   819
    ].
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   820
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   821
    separator := aStream class chunkSeparator.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   822
    sawExcla := aStream peekFor:separator.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   823
    sawExcla ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   824
	outStream nextPut:separator
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   825
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   826
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   827
    outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   828
    outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   829
    sawExcla ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   830
	chunk := aStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   831
	outStream nextChunkPut:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   832
	outStream space
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   833
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   834
    sawExcla ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   835
	outStream nextPut:separator
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   836
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   837
    outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   838
    aStream close.
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   839
    outStream close.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   840
    ^ true
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   841
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   842
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   843
makeChangeAPatch:changeNr
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   844
    "append change to patchfile"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   845
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   846
    self appendChange:changeNr toFile:'patches'
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   847
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   848
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   849
makeChangePermanent:changeNr
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   850
    "rewrite the source file where change changeNr lies"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   851
571fd5eee315 Initial revision
claus
parents:
diff changeset
   852
    self notify:'this is not yet implemented'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   853
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   854
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   855
silentDeleteChangesFor:aClassName from:start to:stop
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   856
    "delete changes for a given class in a range"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   857
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   858
    |thisClassName index|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   859
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   860
    index := stop.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   861
    [index >= start] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   862
	thisClassName := self classNameOfChange:index.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   863
	thisClassName = aClassName ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   864
	    self silentDeleteChange:index
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   865
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   866
	index := index - 1
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   867
    ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   868
571fd5eee315 Initial revision
claus
parents:
diff changeset
   869
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   870
571fd5eee315 Initial revision
claus
parents:
diff changeset
   871
!ChangesBrowser methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   872
571fd5eee315 Initial revision
claus
parents:
diff changeset
   873
changeSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   874
    "show a change in the codeView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   875
571fd5eee315 Initial revision
claus
parents:
diff changeset
   876
    |aStream sawExcla chunk|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   877
571fd5eee315 Initial revision
claus
parents:
diff changeset
   878
    aStream := self streamForChange:lineNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   879
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   880
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   881
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   882
    sawExcla ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   883
	chunk := aStream nextChunk
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   884
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   885
    aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   886
    codeView contents:chunk.
13
145a9461122e *** empty log message ***
claus
parents: 6
diff changeset
   887
    codeView acceptAction:[:theCode | self doApply "noChangesAllowed"].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   888
    changeNrShown := lineNr.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   889
    self enableMenuEntries
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   890
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   891
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   892
noChangesAllowed
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   893
    "show a warning that changes cannot be changed"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   894
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   895
    self warn:'changes are not allowed to be changed'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   896
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   897
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   898
doSaveClass
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   899
    "user wants changes for some class from current to end to be appended to a file"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   900
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   901
    self doSaveClassFrom:1
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   902
!
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   903
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   904
doSaveClassAll
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   905
    "user wants changes for some class from current to end to be appended to a file"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   906
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   907
    self doSaveClassFrom:1
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   908
!
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   909
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   910
doApply
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   911
    "user wants a change to be applied"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   912
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   913
    |changeNr|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   914
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   915
    changeNr := changeListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   916
    changeNr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   917
	self withCursor:(Cursor execute) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   918
	    skipSignal := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   919
	    self applyChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   920
	    self autoSelect:(changeNr + 1)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   921
	]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   922
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   923
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   924
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   925
doSaveClassRest
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   926
    "user wants changes for some class from current to end to be appended to a file"
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   927
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   928
    |changeNr|
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   929
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   930
    changeNr := changeListView selection.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   931
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   932
	self doSaveClassFrom:changeNr
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   933
    ]
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   934
!
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   935
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   936
saveClass:aClassName from:startNr
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   937
    "user wants changes from current to end to be appended to a file"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   938
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   939
    |changeNr classNameToSave fileBox|
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   940
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   941
    changeNr := changeListView selection.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   942
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   943
	fileBox := FileSelectionBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   944
	fileBox title:'append change to:'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   945
	fileBox okText:'append'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   946
	fileBox abortText:'cancel'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   947
	fileBox action:[:fileName |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   948
			    |thisClassName|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   949
			    self withCursor:(Cursor write) do:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   950
				startNr to:(changePositions size) do:[:changeNr |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   951
				    thisClassName := self classNameOfChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   952
				    thisClassName = aClassName ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   953
					changeListView selection:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   954
					(self appendChange:changeNr toFile:fileName) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   955
					    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   956
					]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   957
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   958
				]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   959
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   960
		       ].
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   961
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   962
	fileBox pattern:'*.chg'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   963
	fileBox showAtPointer
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   964
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   965
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   966
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   967
doBrowse
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   968
    "user wants a browser on the class of a change"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   969
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   970
    |changeNr className cls|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   971
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   972
    changeNr := changeListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   973
    changeNr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   974
	className := self classNameOfChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   975
	className notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   976
	    (cls := Smalltalk classNamed:className) notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   977
		SystemBrowser browseClass:cls
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   978
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   979
	]
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   980
    ]
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   981
!
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   982
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   983
doSaveClassFrom:startNr
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   984
    "user wants changes from current to end to be appended to a file"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   985
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   986
    |changeNr classNameToSave|
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   987
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   988
    changeNr := changeListView selection.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   989
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   990
	classNameToSave := self classNameOfChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   991
	classNameToSave notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   992
	    self saveClass:classNameToSave from:startNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   993
	]
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   994
    ]
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   995
!
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   996
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   997
doSaveRest
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   998
    "user wants changes from current to end to be appended to a file"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
   999
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1000
    |changeNr fileBox|
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1001
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1002
    changeNr := changeListView selection.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1003
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1004
	fileBox := FileSelectionBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1005
	fileBox title:'append change to:'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1006
	fileBox okText:'append'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1007
	fileBox abortText:'cancel'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1008
	fileBox action:[:fileName |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1009
			    self withCursor:(Cursor write) do:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1010
				changeNr to:(changePositions size) do:[:changeNr |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1011
				    changeListView selection:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1012
				    (self appendChange:changeNr toFile:fileName) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1013
					^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1014
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1015
				]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1016
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1017
		       ].
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1018
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1019
	fileBox pattern:'*.chg'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1020
	fileBox showAtPointer
37
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1021
    ]
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1022
!
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1023
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1024
doSave
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1025
    "user wants a change to be appended to a file"
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1026
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1027
    |changeNr fileBox|
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1028
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1029
    changeNr := changeListView selection.
50f59bad66b1 *** empty log message ***
claus
parents: 33
diff changeset
  1030
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1031
	fileBox := FileSelectionBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1032
	fileBox title:'append change to:'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1033
	fileBox okText:'append'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1034
	fileBox abortText:'cancel'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1035
	fileBox action:[:fileName | 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1036
			    self withCursor:(Cursor write) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1037
				self appendChange:changeNr toFile:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1038
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1039
			    self autoSelect:(changeNr + 1)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1040
		       ].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1041
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1042
	fileBox pattern:'*.chg'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1043
	fileBox showAtPointer
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1044
    ]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1045
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1046
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1047
doMakePermanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1048
    "user wants a change to be made permanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1049
     - rewrite the source file where this change has to go"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1050
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1051
    |changeNr yesNoBox|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1052
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1053
    yesNoBox := YesNoBox new.
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
  1054
    yesNoBox title:(resources at:'Warning: this operation cannot be undone').
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1055
    yesNoBox okText:(resources at:'continue').
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
  1056
    yesNoBox noText:(resources at:'abort').
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1057
    yesNoBox okAction:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1058
			  changeNr := changeListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1059
			  changeNr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1060
			      self makeChangePermanent:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1061
			      self autoSelect:(changeNr + 1)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1062
			  ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1063
		      ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1064
    yesNoBox showAtPointer
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1065
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1066
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1067
doMakePatch
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1068
    "user wants a change to be made a patch
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1069
     - copy it over to the patches file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1070
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1071
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1072
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1073
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1074
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1075
	self makeChangeAPatch:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1076
	self autoSelect:(changeNr + 1)
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1077
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1078
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1079
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1080
doDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1081
    "delete currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1082
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1083
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1084
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1085
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1086
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1087
	self deleteChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1088
	self autoSelectOrEnd:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1089
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1090
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1091
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1092
doApplyRest
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1093
    "user wants all changes from changeNr to be applied"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1094
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1095
    |changeNr|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1096
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1097
    changeNr := changeListView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1098
    changeNr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1099
	self withCursor:(Cursor execute) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1100
	    self clearCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1101
	    skipSignal isNil ifTrue:[skipSignal := Signal new].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1102
"/            Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1103
		changeNr to:(changePositions size) do:[:changeNr |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1104
		    changeListView selection:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1105
		    self applyChange:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1106
"/                ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1107
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1108
"/            skipSignal := nil
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1109
	]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1110
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1111
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1112
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1113
doApplyAll
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1114
    "user wants all changes to be applied"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1115
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1116
    self withCursor:(Cursor execute) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1117
	self clearCodeView.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1118
	skipSignal isNil ifTrue:[skipSignal := Signal new].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1119
"/        Object abortSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1120
	    1 to:(changePositions size) do:[:changeNr |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1121
		changeListView selection:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1122
		self applyChange:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1123
"/            ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1124
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1125
"/        skipSignal := nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1126
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1127
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1128
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1129
doDeleteClassRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1130
    "delete rest of changes with same class as currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1131
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1132
    |changeNr classNameToDelete|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1133
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1134
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1135
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1136
	self withCursor:(Cursor execute) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1137
	    classNameToDelete := self classNameOfChange:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1138
	    classNameToDelete notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1139
		changeListView selection:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1140
		self silentDeleteChangesFor:classNameToDelete 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1141
				       from:changeNr
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1142
					 to:(changePositions size).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1143
		self setChangeList. "/changeListView setContents:changeChunks.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1144
		self autoSelectOrEnd:changeNr
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1145
	    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1146
	]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1147
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1148
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1149
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1150
doDeleteRest
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1151
    "delete all changes from current to the end"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1152
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1153
    |changeNr|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1154
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1155
    changeNr := changeListView selection.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1156
    changeNr notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1157
	self deleteChangesFrom:changeNr to:(changePositions size).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1158
	self clearCodeView.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1159
	self autoSelectOrEnd:changeNr-1
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1160
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1161
!
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1162
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1163
doDeleteClassAll
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1164
    "delete all changes with same class as currently selected change"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1165
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1166
    |changeNr classNameToDelete|
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1167
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1168
    changeNr := changeListView selection.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1169
    changeNr notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1170
	self withCursor:(Cursor execute) do:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1171
	    classNameToDelete := self classNameOfChange:changeNr.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1172
	    classNameToDelete notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1173
		changeListView selection:nil.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1174
		self silentDeleteChangesFor:classNameToDelete
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1175
				       from:1
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1176
					 to:(changePositions size).
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1177
		self setChangeList. "/changeListView setContents:changeChunks.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1178
		self autoSelectOrEnd:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1179
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1180
	]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1181
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1182
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1183
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1184
doWriteBack
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1185
    "write back the list onto the changes file"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1186
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1187
    anyChanges ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1188
	self writeBackChanges.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1189
	realized ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1190
	    self readChangesFileInBackground:false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1191
	    realized ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1192
		self setChangeList
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1193
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1194
	]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1195
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1196
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1197
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1198
doCompress
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1199
    "compress the change-set; this replaces multiple method-changes by the last 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1200
     (i.e. the most recent) change"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1201
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1202
    |classes types selectors thisClass thisSelector
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1203
     aStream chunk changeNr sawExcla aParseTree codeChunk codeParser
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1204
     searchIndex anyMore deleteSet index parseTreeChunk numChanges
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1205
     excla snapshotProto str snapshotPrefix snapshotNameIndex fileName|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1206
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1207
    aStream := FileStream readonlyFileNamed:changeFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1208
    aStream isNil ifTrue:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1209
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1210
    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1211
     get a prototype snapshot record (to be independent of
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1212
     the actual format ..
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1213
    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1214
    str := WriteStream on:String new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1215
    Class addChangeRecordForSnapshot:'foo' to:str.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1216
    snapshotProto := str contents.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1217
    snapshotPrefix := snapshotProto copyTo:10.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1218
    snapshotNameIndex := snapshotProto findString:'foo'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1219
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1220
    self withCursor:(Cursor execute) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1221
	numChanges := changePositions size.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1222
	classes := Array new:numChanges.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1223
	selectors := Array new:numChanges.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1224
	types := Array new:numChanges.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1225
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1226
	"starting at the end, get the change class and change selector;
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1227
	 collect all in classes / selectors"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1228
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1229
	changeNr := numChanges.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1230
	excla := aStream class chunkSeparator.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1231
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1232
	[changeNr >= 1] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1233
	    aStream position:(changePositions at:changeNr).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1234
	    sawExcla := aStream peekFor:excla.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1235
	    chunk := aStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1236
	    sawExcla ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1237
		"optimize a bit if multiple methods for same category arrive"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1238
		(chunk = parseTreeChunk) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1239
		    aParseTree := Parser parseExpression:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1240
		    parseTreeChunk := chunk
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1241
		].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1242
		(aParseTree notNil 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1243
		and:[(aParseTree ~~ #Error) 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1244
		and:[aParseTree isMessage]]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1245
		    (aParseTree selector == #methodsFor:) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1246
			thisClass := (aParseTree receiver evaluate).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1247
			codeChunk := aStream nextChunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1248
			codeParser := Parser 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1249
					  parseMethodSpecification:codeChunk
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1250
					  in:thisClass
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1251
					  ignoreErrors:true
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1252
					  ignoreWarnings:true.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1253
			codeParser notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1254
			    selectors at:changeNr put:(codeParser selector).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1255
			    classes at:changeNr put:thisClass.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1256
			    types at:changeNr put:#methodsFor
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1257
			]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1258
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1259
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1260
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1261
		aParseTree := Parser parseExpression:chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1262
		parseTreeChunk := chunk.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1263
		(aParseTree notNil 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1264
		and:[(aParseTree ~~ #Error) 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1265
		and:[aParseTree isMessage]]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1266
		    (aParseTree selector == #removeSelector:) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1267
			selectors at:changeNr put:(aParseTree arg1 value ).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1268
			classes at:changeNr put:(aParseTree receiver evaluate).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1269
			types at:changeNr put:#removeSelector
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1270
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1271
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1272
		    (chunk startsWith:snapshotPrefix) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1273
			str := chunk readStream position:snapshotNameIndex.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1274
			fileName := str upTo:(Character space).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1275
			"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1276
			 kludge to allow use of match-check below
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1277
			"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1278
			selectors at:changeNr put:snapshotPrefix.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1279
			classes at:changeNr put:fileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1280
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1281
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1282
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1283
	    changeNr := changeNr - 1
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1284
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1285
	aStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1286
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1287
	"for all changes, look for another class/selector occurence later
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1288
	 in the list and, if there is one, add change number to the delete set"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1289
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1290
	deleteSet := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1291
	changeNr := 1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1292
	[changeNr < changePositions size] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1293
	    thisClass := classes at:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1294
	    thisSelector := selectors at:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1295
	    searchIndex := changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1296
	    anyMore := true.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1297
	    [anyMore] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1298
		searchIndex := classes indexOf:thisClass
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1299
				    startingAt:(searchIndex + 1).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1300
		(searchIndex ~~ 0) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1301
		    ((selectors at:searchIndex) == thisSelector) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1302
			thisClass notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1303
			    deleteSet add:changeNr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1304
			    anyMore := false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1305
			]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1306
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1307
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1308
		    anyMore := false      
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1309
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1310
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1311
	    changeNr := changeNr + 1
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1312
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1313
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1314
	"finally delete what has been found"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1315
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1316
	(deleteSet size > 0) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1317
	    changeListView selection:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1318
	    index := deleteSet size.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1319
	    [index > 0] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1320
		self silentDeleteChange:(deleteSet at:index).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1321
		index := index - 1
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1322
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1323
	    self setChangeList.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1324
	    changeListView firstLineShown > changePositions size ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
  1325
		changeListView makeLineVisible:changePositions size
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1326
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1327
	    self clearCodeView
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1328
	]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1329
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1330
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1331
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1332
doUpdate
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1333
    "reread the changes-file"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1334
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1335
    self readChangesFileInBackground:true.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1336
    realized ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1337
	self setChangeList
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1338
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1339
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1340
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1341
doCompare
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1342
    "compare change with current system version
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1343
     - give a note in transcript"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1344
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1345
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1346
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1347
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1348
    changeNr notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1349
	self withCursor:(Cursor execute) do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1350
	    self compareChange:changeNr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1351
	]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1352
    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1353
! !
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1354
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1355
!ChangesBrowser methodsFor:'error handling'!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1356
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1357
correctableError:aString position:relPos to:relEndPos
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1358
    "compiler notifys us of an error - this should really not happen since
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1359
     changes ought to be correct (did someone edit the changes file ??).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1360
     Show the bad change in the codeView and let codeView hilight the error;
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1361
     no corrections allowed here therefore return false"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1362
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1363
    |action|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1364
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1365
    (changeNrProcessed ~~ changeNrShown) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1366
	self changeSelection:changeNrProcessed
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1367
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1368
    (skipSignal notNil) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1369
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1370
	codeView highlightingErrorPosition:relPos to:relEndPos do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1371
	    |box|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1372
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1373
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1374
	     start dialog - make certain cleanup is done
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1375
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1376
	    box := OptionBox title:aString numberOfOptions:3.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1377
	    box buttonTitles:#('abort' 'skip' 'continue').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1378
	    box actions:(Array with:[action := #abort]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1379
			       with:[action := #skip]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1380
			       with:[action := #continue]).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1381
	    box showAtPointer
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1382
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1383
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1384
	action == #abort ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1385
	    Object abortSignal raise.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1386
	    ^ false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1387
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1388
	action == #skip ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1389
	    skipSignal raise.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1390
	    ^ false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1391
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1392
	^  false 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1393
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1394
    codeView error:aString position:relPos to:relEndPos.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1395
    ^ false
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1396
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1397
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1398
error:aString position:relPos to:relEndPos
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1399
    "compiler notifys us of an error - this should really not happen since
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1400
     changes ought to be correct (did someone edit the changes file ??).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1401
     Show the bad change in the codeView and let codeView hilight the error"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1402
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1403
    |action|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1404
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1405
    (changeNrProcessed ~~ changeNrShown) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1406
	self changeSelection:changeNrProcessed
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1407
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1408
    (skipSignal notNil) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1409
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1410
	codeView highlightingErrorPosition:relPos to:relEndPos do:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1411
	    |box|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1412
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1413
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1414
	     start dialog - make certain cleanup is done
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1415
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1416
	    box := OptionBox title:aString numberOfOptions:3.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1417
	    box buttonTitles:#('abort' 'skip' 'continue').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1418
	    box actions:(Array with:[action := #abort]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1419
			       with:[action := #skip]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1420
			       with:[action := #continue]).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1421
	    box showAtPointer
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1422
	].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1423
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1424
	action == #abort ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1425
	    Object abortSignal raise.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1426
	    ^ false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1427
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1428
	action == #skip ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1429
	    skipSignal raise.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1430
	    ^ false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1431
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1432
	^  false 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1433
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1434
    ^ codeView error:aString position:relPos to:relEndPos
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1435
!
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1436
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1437
warning:aString position:relPos to:relEndPos
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1438
    "compiler notifys us of a warning - ignore it"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1439
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1440
    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1441
! !
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1442