NewChangesBrowser.st
changeset 2250 dc7a9ae0d6bb
parent 1938 ce74385df068
child 2740 6b8666356abb
equal deleted inserted replaced
2249:fc17eb66cbec 2250:dc7a9ae0d6bb
    20 documentation
    20 documentation
    21 "
    21 "
    22     The future Changes Browser.
    22     The future Changes Browser.
    23 
    23 
    24     [start with:]
    24     [start with:]
    25         NewChangesBrowser open
    25 	NewChangesBrowser open
    26         NewChangesBrowser openOnFile:aFileName
    26 	NewChangesBrowser openOnFile:aFileName
    27 
    27 
    28     [author:]
    28     [author:]
    29         Thomas Zwick, eXept Software AG
    29 	Thomas Zwick, eXept Software AG
    30 "
    30 "
    31 
    31 
    32 
    32 
    33 ! !
    33 ! !
    34 
    34 
    44 
    44 
    45 openOnFile:aFileName
    45 openOnFile:aFileName
    46     "opens a Changes Browser with the changes of the aFileName"
    46     "opens a Changes Browser with the changes of the aFileName"
    47 
    47 
    48     ^self new 
    48     ^self new 
    49         changeFileName:aFileName;
    49 	changeFileName:aFileName;
    50         open
    50 	open
    51 
    51 
    52 ! !
    52 ! !
    53 
    53 
    54 !NewChangesBrowser class methodsFor:'accessing'!
    54 !NewChangesBrowser class methodsFor:'accessing'!
    55 
    55 
   182     "
   182     "
   183 
   183 
   184     <resource: #image>
   184     <resource: #image>
   185 
   185 
   186     ^Icon
   186     ^Icon
   187         constantNamed:#'NewChangesBrowser applyFromLastSnapshotIcon'
   187 	constantNamed:#'NewChangesBrowser applyFromLastSnapshotIcon'
   188         ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@QDQ<@@@@@@@@@@AH"H@@@@@@@@@@@D"H @@@@@@@@@@@RH"@@@@@@@@@@@AH"H@@@@@@@@@@@@@@@@@@@@@@@@@<@@@@@@@@@@@@@@@@@@@@@@@;.;.; @@@@@@@@C.;.;.@@@@@@@@@@@@@@8@@N@@@@C?????C @@@N@@@O????<@@@8@@@@@@@@@C0@@@@8@@O????<O@@C @@@@?????0@@@@C @@@@@@@O@@@N@@@@DQDQDP<@C @@@@@_??DQ@@@@@@@@@A????D@@@@@@@@@DQDQDP@@@@C @@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C<@@C<@@C<@@C<@@C<@@A<@@D@@?<@@?<@@?<LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]!
   188 	ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@QDQ<@@@@@@@@@@AH"H@@@@@@@@@@@D"H @@@@@@@@@@@RH"@@@@@@@@@@@AH"H@@@@@@@@@@@@@@@@@@@@@@@@@<@@@@@@@@@@@@@@@@@@@@@@@;.;.; @@@@@@@@C.;.;.@@@@@@@@@@@@@@8@@N@@@@C?????C @@@N@@@O????<@@@8@@@@@@@@@C0@@@@8@@O????<O@@C @@@@?????0@@@@C @@@@@@@O@@@N@@@@DQDQDP<@C @@@@@_??DQ@@@@@@@@@A????D@@@@@@@@@DQDQDP@@@@C @@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@C<@@C<@@C<@@C<@@C<@@A<@@D@@?<@@?<@@?<LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]!
   189 
   189 
   190 applyIcon
   190 applyIcon
   191     "This resource specification was automatically generated
   191     "This resource specification was automatically generated
   192      by the ImageEditor of ST/X."
   192      by the ImageEditor of ST/X."
   193 
   193 
   199     "
   199     "
   200 
   200 
   201     <resource: #image>
   201     <resource: #image>
   202 
   202 
   203     ^Icon
   203     ^Icon
   204         constantNamed:#'NewChangesBrowser applyIcon'
   204 	constantNamed:#'NewChangesBrowser applyIcon'
   205         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UUUUUUUPUUUUUUUPUUUUUUU[UUUUUUUPP@@@@@@QQUUUUUTPQUUUUUTVQ**UUUTPQUUUUUTPQUUUUUTXQ***UUTPQ**UUUTPQ*****TPQ***%UTPQ****)TPQUUUUUTPQUUUUUTUP@@@@@@PUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUP') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]!
   205 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UUUUUUUPUUUUUUUPUUUUUUU[UUUUUUUPP@@@@@@QQUUUUUTPQUUUUUTVQ**UUUTPQUUUUUTPQUUUUUTXQ***UUTPQ**UUUTPQ*****TPQ***%UTPQ****)TPQUUUUUTPQUUUUUTUP@@@@@@PUUUUUUUPUUUUUUUPUUUUUUUPUUUUUUUP') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]!
   206 
   206 
   207 applyToEndIcon
   207 applyToEndIcon
   208     "This resource specification was automatically generated
   208     "This resource specification was automatically generated
   209      by the ImageEditor of ST/X."
   209      by the ImageEditor of ST/X."
   210 
   210 
   216     "
   216     "
   217 
   217 
   218     <resource: #image>
   218     <resource: #image>
   219 
   219 
   220     ^Icon
   220     ^Icon
   221         constantNamed:#'NewChangesBrowser applyToEndIcon'
   221 	constantNamed:#'NewChangesBrowser applyToEndIcon'
   222         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@B** H@@@B** H@@@@@@ @@@@**( @@@@**(@J@@@@@H@@@@O??H@@@@O??@@@@@@@C@H@@C??3@@ @C??0@ @@@@@0@B@@UUT0B@K@UUT@@H@@@@D@H@CEUUDB@@JG?U@@@@MG?=@@@@@EUU@@B@@@@@@@@@H') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C?0@C?0@C?0@O?0@O?0@O?0@??@@??@@??LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]!
   222 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@B** H@@@B** H@@@@@@ @@@@**( @@@@**(@J@@@@@H@@@@O??H@@@@O??@@@@@@@C@H@@C??3@@ @C??0@ @@@@@0@B@@UUT0B@K@UUT@@H@@@@D@H@CEUUDB@@JG?U@@@@MG?=@@@@@EUU@@B@@@@@@@@@H') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@C?0@C?0@C?0@O?0@O?0@O?0@??@@??@@??LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]!
   223 
   223 
   224 compressIcon
   224 compressIcon
   225     "This resource specification was automatically generated
   225     "This resource specification was automatically generated
   226      by the ImageEditor of ST/X."
   226      by the ImageEditor of ST/X."
   227 
   227 
   233     "
   233     "
   234 
   234 
   235     <resource: #image>
   235     <resource: #image>
   236 
   236 
   237     ^Icon
   237     ^Icon
   238         constantNamed:#'NewChangesBrowser compressIcon'
   238 	constantNamed:#'NewChangesBrowser compressIcon'
   239         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@????<@@@:***(@@@8@@@8@@@8@@@8@@@@@@@8@@@@@@@8A@@@@@@8@@:**0@8HC**+@@8@@@@@@@8H@@@@@@8@@@@@@@8@@@@@@@8@@@@@@@8@@C????8@@C****(@@@@@@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 124 124 124 170 170 170 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@??0A??8A??8A??8A8A8G>A8@@A8G?98O?18_?!!8??A8@@A8G>A8@0A8C??8C??8C??8C??0@0@@D2@@G>@@D2@@') ; yourself); yourself]!
   239 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@????<@@@:***(@@@8@@@8@@@8@@@8@@@@@@@8@@@@@@@8A@@@@@@8@@:**0@8HC**+@@8@@@@@@@8H@@@@@@8@@@@@@@8@@@@@@@8@@@@@@@8@@C????8@@C****(@@@@@@@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 124 124 124 170 170 170 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@??0A??8A??8A??8A8A8G>A8@@A8G?98O?18_?!!8??A8@@A8G>A8@0A8C??8C??8C??8C??0@0@@D2@@G>@@D2@@') ; yourself); yourself]!
   240 
   240 
   241 deleteIcon
   241 deleteIcon
   242     "This resource specification was automatically generated
   242     "This resource specification was automatically generated
   243      by the ImageEditor of ST/X."
   243      by the ImageEditor of ST/X."
   244 
   244 
   250     "
   250     "
   251 
   251 
   252     <resource: #image>
   252     <resource: #image>
   253 
   253 
   254     ^Icon
   254     ^Icon
   255         constantNamed:#'NewChangesBrowser deleteIcon'
   255 	constantNamed:#'NewChangesBrowser deleteIcon'
   256         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@AUUUU@@OA??UU@@@AUUUU@@@AUUUU@B@A???U@H@A??5U@@@A???0@@@AUUUB@B@@@@@@@@@@@@@A@BK@@@@A_:@@@@@AO2G@@@@AL2@@@@@AL2C@@@@AL2@@@@@AL2@@@@@AL2H@@@@AL2@@@@@A\:@@@@@H_8 @@@@@@@H') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?<@_?<@_?<P_?<P_?<X_?<X_?<H_? H_?O<_?XL@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@G0') ; yourself); yourself]!
   256 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@AUUUU@@OA??UU@@@AUUUU@@@AUUUU@B@A???U@H@A??5U@@@A???0@@@AUUUB@B@@@@@@@@@@@@@A@BK@@@@A_:@@@@@AO2G@@@@AL2@@@@@AL2C@@@@AL2@@@@@AL2@@@@@AL2H@@@@AL2@@@@@A\:@@@@@H_8 @@@@@@@H') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'_?<@_?<@_?<P_?<P_?<X_?<X_?<H_? H_?O<_?XL@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@G0') ; yourself); yourself]!
   257 
   257 
   258 deleteToEndIcon
   258 deleteToEndIcon
   259     "This resource specification was automatically generated
   259     "This resource specification was automatically generated
   260      by the ImageEditor of ST/X."
   260      by the ImageEditor of ST/X."
   261 
   261 
   267     "
   267     "
   268 
   268 
   269     <resource: #image>
   269     <resource: #image>
   270 
   270 
   271     ^Icon
   271     ^Icon
   272         constantNamed:#'NewChangesBrowser deleteToEndIcon'
   272 	constantNamed:#'NewChangesBrowser deleteToEndIcon'
   273         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@B** @@O@B** @@@@@@@ @@@@??< @B@@??<@@H@@@@L@@@@EUUL@@@@G?U@B@B@G?=@@@@@EUU@A@BK@@@@A_:@@@@@AO2G@@@@AL2@@@@@AL2C@@@@AL2@@@@@AL2@@@@@AL2H@@@@AL2@@@@@A\:@@@@@H_8 @@@@@@@H') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?0@C?0@C?0PO?0PO?0XO?0X??@H??@H??O<?<XL?<_<?<_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@G0') ; yourself); yourself]!
   273 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@B** @@O@B** @@@@@@@ @@@@??< @B@@??<@@H@@@@L@@@@EUUL@@@@G?U@B@B@G?=@@@@@EUU@A@BK@@@@A_:@@@@@AO2G@@@@AL2@@@@@AL2C@@@@AL2@@@@@AL2@@@@@AL2H@@@@AL2@@@@@A\:@@@@@H_8 @@@@@@@H') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C?0@C?0@C?0PO?0PO?0XO?0X??@H??@H??O<?<XL?<_<?<_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@_<@@G0') ; yourself); yourself]!
   274 
   274 
   275 findLastSnapshotIcon
   275 findLastSnapshotIcon
   276     "This resource specification was automatically generated
   276     "This resource specification was automatically generated
   277      by the ImageEditor of ST/X."
   277      by the ImageEditor of ST/X."
   278 
   278 
   284     "
   284     "
   285 
   285 
   286     <resource: #image>
   286     <resource: #image>
   287 
   287 
   288     ^Icon
   288     ^Icon
   289         constantNamed:#'NewChangesBrowser findLastSnapshotIcon'
   289 	constantNamed:#'NewChangesBrowser findLastSnapshotIcon'
   290         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@EUUUW@A@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@A@F***(@M@F***(@H@F***(@@@F***(@@@F***(@I@L@@@@@@@@@@@@@A@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??B@@@B@C@B@G B@O0@@_8@@G @@G @@G @') ; yourself); yourself]!
   290 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@EUUUW@A@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@A@F***(@M@F***(@H@F***(@@@F***(@@@F***(@I@L@@@@@@@@@@@@@A@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??@C??B@@@B@C@B@G B@O0@@_8@@G @@G @@G @') ; yourself); yourself]!
   291 
   291 
   292 findNextSnapshotIcon
   292 findNextSnapshotIcon
   293     "This resource specification was automatically generated
   293     "This resource specification was automatically generated
   294      by the ImageEditor of ST/X."
   294      by the ImageEditor of ST/X."
   295 
   295 
   301     "
   301     "
   302 
   302 
   303     <resource: #image>
   303     <resource: #image>
   304 
   304 
   305     ^Icon
   305     ^Icon
   306         constantNamed:#'NewChangesBrowser findNextSnapshotIcon'
   306 	constantNamed:#'NewChangesBrowser findNextSnapshotIcon'
   307         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@DA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D@B@@@@@@@@@@@@@@@E@@@@@@@@@EUUUW@N@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@V***(@H@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@L@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G @@G @@G @@_8@@O0@@G @@C@@@@@@C??@C??@C??@C??@C??@C??BC??BC??BC??BC??@C??@C??@C??@C??@') ; yourself); yourself]! !
   307 	ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@DA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@D@B@@@@@@@@@@@@@@@E@@@@@@@@@EUUUW@N@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@V***(@H@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@L@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G @@G @@G @@_8@@O0@@G @@C@@@@@@C??@C??@C??@C??@C??@C??BC??BC??BC??BC??@C??@C??@C??@C??@') ; yourself); yourself]! !
   308 
   308 
   309 !NewChangesBrowser class methodsFor:'interface specs'!
   309 !NewChangesBrowser class methodsFor:'interface specs'!
   310 
   310 
   311 windowSpec
   311 windowSpec
   312     "This resource specification was automatically generated
   312     "This resource specification was automatically generated
   324     <resource: #canvas>
   324     <resource: #canvas>
   325 
   325 
   326     ^
   326     ^
   327      
   327      
   328        #(#FullSpec
   328        #(#FullSpec
   329           #window: 
   329 	  #window: 
   330            #(#WindowSpec
   330 	   #(#WindowSpec
   331               #name: 'Changes Browser'
   331 	      #name: 'Changes Browser'
   332               #layout: #(#LayoutFrame 53 0 92 0 687 0 583 0)
   332 	      #layout: #(#LayoutFrame 53 0 92 0 687 0 583 0)
   333               #label: 'Changes Browser'
   333 	      #label: 'Changes Browser'
   334               #min: #(#Point 10 10)
   334 	      #min: #(#Point 10 10)
   335               #max: #(#Point 1152 900)
   335 	      #max: #(#Point 1152 900)
   336               #bounds: #(#Rectangle 53 92 688 584)
   336 	      #bounds: #(#Rectangle 53 92 688 584)
   337               #menu: #menu
   337 	      #menu: #menu
   338               #usePreferredExtent: false
   338 	      #usePreferredExtent: false
   339           )
   339 	  )
   340           #component: 
   340 	  #component: 
   341            #(#SpecCollection
   341 	   #(#SpecCollection
   342               #collection: 
   342 	      #collection: 
   343                #(
   343 	       #(
   344                  #(#MenuPanelSpec
   344 		 #(#MenuPanelSpec
   345                     #name: 'menuToolbarView'
   345 		    #name: 'menuToolbarView'
   346                     #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 32 0)
   346 		    #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 32 0)
   347                     #menu: #menuToolbar
   347 		    #menu: #menuToolbar
   348                     #style: #(#FontDescription #helvetica #medium #roman 10)
   348 		    #style: #(#FontDescription #helvetica #medium #roman 10)
   349                     #showSeparatingLines: true
   349 		    #showSeparatingLines: true
   350                 )
   350 		)
   351                  #(#VariableVerticalPanelSpec
   351 		 #(#VariableVerticalPanelSpec
   352                     #name: 'variableVerticalPanel1'
   352 		    #name: 'variableVerticalPanel1'
   353                     #layout: #(#LayoutFrame 0 0.0 34 0 0 1.0 -26 1.0)
   353 		    #layout: #(#LayoutFrame 0 0.0 34 0 0 1.0 -26 1.0)
   354                     #component: 
   354 		    #component: 
   355                      #(#SpecCollection
   355 		     #(#SpecCollection
   356                         #collection: 
   356 			#collection: 
   357                          #(
   357 			 #(
   358                            #(#ViewSpec
   358 			   #(#ViewSpec
   359                               #name: 'Box1'
   359 			      #name: 'Box1'
   360                               #component: 
   360 			      #component: 
   361                                #(#SpecCollection
   361 			       #(#SpecCollection
   362                                   #collection: 
   362 				  #collection: 
   363                                    #(
   363 				   #(
   364                                      #(#DataSetSpec
   364 				     #(#DataSetSpec
   365                                         #name: 'changesDataSetView'
   365 					#name: 'changesDataSetView'
   366                                         #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -28 1.0)
   366 					#layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -28 1.0)
   367                                         #model: #selectionOfChange
   367 					#model: #selectionOfChange
   368                                         #menu: #menuTable
   368 					#menu: #menuTable
   369                                         #hasHorizontalScrollBar: true
   369 					#hasHorizontalScrollBar: true
   370                                         #hasVerticalScrollBar: true
   370 					#hasVerticalScrollBar: true
   371                                         #miniScrollerHorizontal: true
   371 					#miniScrollerHorizontal: true
   372                                         #dataList: #listOfChanges
   372 					#dataList: #listOfChanges
   373                                         #useIndex: false
   373 					#useIndex: false
   374                                         #has3Dsepartors: true
   374 					#has3Dsepartors: true
   375                                         #doubleClickSelector: #doBrowseClass
   375 					#doubleClickSelector: #doBrowseClass
   376                                         #columnHolder: #listOfChangeColumns
   376 					#columnHolder: #listOfChangeColumns
   377                                         #valueChangeSelector: #changeSelected:
   377 					#valueChangeSelector: #changeSelected:
   378                                     )
   378 				    )
   379                                      #(#ViewSpec
   379 				     #(#ViewSpec
   380                                         #name: 'Box2'
   380 					#name: 'Box2'
   381                                         #layout: #(#LayoutFrame 0 0.0 -28 1 0 1.0 0 1.0)
   381 					#layout: #(#LayoutFrame 0 0.0 -28 1 0 1.0 0 1.0)
   382                                         #component: 
   382 					#component: 
   383                                          #(#SpecCollection
   383 					 #(#SpecCollection
   384                                             #collection: 
   384 					    #collection: 
   385                                              #(
   385 					     #(
   386                                                #(#LabelSpec
   386 					       #(#LabelSpec
   387                                                   #name: 'filterLabel'
   387 						  #name: 'filterLabel'
   388                                                   #layout: #(#AlignmentOrigin 37 0 13 0.0 1 0.5)
   388 						  #layout: #(#AlignmentOrigin 37 0 13 0.0 1 0.5)
   389                                                   #label: 'Filter:'
   389 						  #label: 'Filter:'
   390                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   390 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   391                                                   #adjust: #left
   391 						  #adjust: #left
   392                                               )
   392 					      )
   393                                                #(#InputFieldSpec
   393 					       #(#InputFieldSpec
   394                                                   #name: 'filterField'
   394 						  #name: 'filterField'
   395                                                   #layout: #(#LayoutFrame 41 0.0 3 0 250 0 25 0)
   395 						  #layout: #(#LayoutFrame 41 0.0 3 0 250 0 25 0)
   396                                                   #activeHelpKey: #filterField
   396 						  #activeHelpKey: #filterField
   397                                                   #model: #valueOfFilter
   397 						  #model: #valueOfFilter
   398                                                   #immediateAccept: false
   398 						  #immediateAccept: false
   399                                               )
   399 					      )
   400                                                #(#ProgressIndicatorSpec
   400 					       #(#ProgressIndicatorSpec
   401                                                   #name: 'readProgressIndicator'
   401 						  #name: 'readProgressIndicator'
   402                                                   #layout: #(#LayoutFrame 41 0 3 0 250 0 25 0)
   402 						  #layout: #(#LayoutFrame 41 0 3 0 250 0 25 0)
   403                                                   #model: #valueOfReadProgress
   403 						  #model: #valueOfReadProgress
   404                                                   #foregroundColor: #(#Color 0.0 60.0 60.0)
   404 						  #foregroundColor: #(#Color 0.0 60.0 60.0)
   405                                               )
   405 					      )
   406                                                #(#ActionButtonSpec
   406 					       #(#ActionButtonSpec
   407                                                   #name: 'allButton'
   407 						  #name: 'allButton'
   408                                                   #layout: #(#LayoutFrame 258 0.0 2 0.0 268 0 13 0)
   408 						  #layout: #(#LayoutFrame 258 0.0 2 0.0 268 0 13 0)
   409                                                   #label: ' '
   409 						  #label: ' '
   410                                                   #model: #doFilter:
   410 						  #model: #doFilter:
   411                                                   #actionValue: ''
   411 					      )
   412                                               )
   412 					       #(#LabelSpec
   413                                                #(#LabelSpec
   413 						  #name: 'allLabel'
   414                                                   #name: 'allLabel'
   414 						  #layout: #(#LayoutFrame 273 0 0 0.0 310 0 14 0)
   415                                                   #layout: #(#LayoutFrame 273 0 0 0.0 310 0 14 0)
   415 						  #label: '= all'
   416                                                   #label: '= all'
   416 						  #translateLabel: true
   417                                                   #translateLabel: true
   417 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   418                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   418 						  #adjust: #left
   419                                                   #adjust: #left
   419 					      )
   420                                               )
   420 					       #(#ActionButtonSpec
   421                                                #(#ActionButtonSpec
   421 						  #name: 'methodChangesButton'
   422                                                   #name: 'methodChangesButton'
   422 						  #layout: #(#LayoutFrame 359 0.0 2 0.0 369 0 13 0)
   423                                                   #layout: #(#LayoutFrame 359 0.0 2 0.0 369 0 13 0)
   423 						  #label: ' '
   424                                                   #label: ' '
   424 						  #backgroundColor: #(#Color 100.0 100.0 100.0)
   425                                                   #backgroundColor: #(#Color 100.0 100.0 100.0)
   425 						  #model: #doFilterType:
   426                                                   #model: #doFilterType:
   426 						  #actionValue: 'method'
   427                                                   #actionValue: 'method'
   427 					      )
   428                                               )
   428 					       #(#LabelSpec
   429                                                #(#LabelSpec
   429 						  #name: 'methodChangesLabel'
   430                                                   #name: 'methodChangesLabel'
   430 						  #layout: #(#LayoutFrame 373 0 0 0.0 458 0 14 0)
   431                                                   #layout: #(#LayoutFrame 373 0 0 0.0 458 0 14 0)
   431 						  #label: '= method'
   432                                                   #label: '= method'
   432 						  #translateLabel: true
   433                                                   #translateLabel: true
   433 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   434                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   434 						  #adjust: #left
   435                                                   #adjust: #left
   435 					      )
   436                                               )
   436 					       #(#ActionButtonSpec
   437                                                #(#ActionButtonSpec
   437 						  #name: 'classChangesButton'
   438                                                   #name: 'classChangesButton'
   438 						  #layout: #(#LayoutFrame 455 0.0 2 0.0 465 0 13 0)
   439                                                   #layout: #(#LayoutFrame 455 0.0 2 0.0 465 0 13 0)
   439 						  #label: ' '
   440                                                   #label: ' '
   440 						  #backgroundColor: #(#Color 50.0008 50.0008 50.0008)
   441                                                   #backgroundColor: #(#Color 50.0008 50.0008 50.0008)
   441 						  #model: #doFilterType:
   442                                                   #model: #doFilterType:
   442 						  #actionValue: 'class'
   443                                                   #actionValue: 'class'
   443 					      )
   444                                               )
   444 					       #(#LabelSpec
   445                                                #(#LabelSpec
   445 						  #name: 'classChangesLabel'
   446                                                   #name: 'classChangesLabel'
   446 						  #layout: #(#LayoutFrame 470 0 0 0.0 580 0 14 0)
   447                                                   #layout: #(#LayoutFrame 470 0 0 0.0 580 0 14 0)
   447 						  #label: '= class change'
   448                                                   #label: '= class change'
   448 						  #translateLabel: true
   449                                                   #translateLabel: true
   449 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   450                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   450 						  #adjust: #left
   451                                                   #adjust: #left
   451 					      )
   452                                               )
   452 					       #(#ActionButtonSpec
   453                                                #(#ActionButtonSpec
   453 						  #name: 'snapshotButton'
   454                                                   #name: 'snapshotButton'
   454 						  #layout: #(#LayoutFrame 258 0.0 16 0.0 268 0 27 0)
   455                                                   #layout: #(#LayoutFrame 258 0.0 16 0.0 268 0 27 0)
   455 						  #label: ' '
   456                                                   #label: ' '
   456 						  #backgroundColor: #(#Color 100.0 0.0 0.0)
   457                                                   #backgroundColor: #(#Color 100.0 0.0 0.0)
   457 						  #model: #doFilterType:
   458                                                   #model: #doFilterType:
   458 						  #actionValue: 'image'
   459                                                   #actionValue: 'image'
   459 					      )
   460                                               )
   460 					       #(#LabelSpec
   461                                                #(#LabelSpec
   461 						  #name: 'snapshotLabel'
   462                                                   #name: 'snapshotLabel'
   462 						  #layout: #(#LayoutFrame 273 0 14 0.0 355 0 28 0)
   463                                                   #layout: #(#LayoutFrame 273 0 14 0.0 355 0 28 0)
   463 						  #label: '= snapshot'
   464                                                   #label: '= snapshot'
   464 						  #translateLabel: true
   465                                                   #translateLabel: true
   465 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   466                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   466 						  #adjust: #left
   467                                                   #adjust: #left
   467 					      )
   468                                               )
   468 					       #(#ActionButtonSpec
   469                                                #(#ActionButtonSpec
   469 						  #name: 'fileInButton'
   470                                                   #name: 'fileInButton'
   470 						  #layout: #(#LayoutFrame 359 0.0 16 0.0 369 0 27 0)
   471                                                   #layout: #(#LayoutFrame 359 0.0 16 0.0 369 0 27 0)
   471 						  #label: ' '
   472                                                   #label: ' '
   472 						  #backgroundColor: #(#Color 0.0 80.0 80.0)
   473                                                   #backgroundColor: #(#Color 0.0 80.0 80.0)
   473 						  #model: #doFilterSourceType:
   474                                                   #model: #doFilterSourceType:
   474 						  #actionValue: '* file*'
   475                                                   #actionValue: '* file*'
   475 					      )
   476                                               )
   476 					       #(#LabelSpec
   477                                                #(#LabelSpec
   477 						  #name: 'fileInLabel'
   478                                                   #name: 'fileInLabel'
   478 						  #layout: #(#LayoutFrame 374 0 14 0.0 440 0 28 0)
   479                                                   #layout: #(#LayoutFrame 374 0 14 0.0 440 0 28 0)
   479 						  #label: '= fileIn'
   480                                                   #label: '= fileIn'
   480 						  #translateLabel: true
   481                                                   #translateLabel: true
   481 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   482                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   482 						  #adjust: #left
   483                                                   #adjust: #left
   483 					      )
   484                                               )
   484 					       #(#ActionButtonSpec
   485                                                #(#ActionButtonSpec
   485 						  #name: 'checkInButton'
   486                                                   #name: 'checkInButton'
   486 						  #layout: #(#LayoutFrame 455 0.0 16 0.0 465 0 27 0)
   487                                                   #layout: #(#LayoutFrame 455 0.0 16 0.0 465 0 27 0)
   487 						  #label: ' '
   488                                                   #label: ' '
   488 						  #backgroundColor: #(#Color 0.0 0.0 100.0)
   489                                                   #backgroundColor: #(#Color 0.0 0.0 100.0)
   489 						  #model: #doFilterSourceType:
   490                                                   #model: #doFilterSourceType:
   490 						  #actionValue: '* checkin*'
   491                                                   #actionValue: '* checkin*'
   491 					      )
   492                                               )
   492 					       #(#LabelSpec
   493                                                #(#LabelSpec
   493 						  #name: 'checkInLabel'
   494                                                   #name: 'checkInLabel'
   494 						  #layout: #(#LayoutFrame 470 0 14 0.0 550 0 28 0)
   495                                                   #layout: #(#LayoutFrame 470 0 14 0.0 550 0 28 0)
   495 						  #label: '= checkIn'
   496                                                   #label: '= checkIn'
   496 						  #translateLabel: true
   497                                                   #translateLabel: true
   497 						  #style: #(#FontDescription #helvetica #medium #roman 10)
   498                                                   #style: #(#FontDescription #helvetica #medium #roman 10)
   498 						  #adjust: #left
   499                                                   #adjust: #left
   499 					      )
   500                                               )
   500 					    )
   501                                             )
   501 					)
   502                                         )
   502 				    )
   503                                     )
   503 				  )
   504                                   )
   504 			      )
   505                               )
   505 			  )
   506                           )
   506 			   #(#WorkspaceSpec
   507                            #(#WorkspaceSpec
   507 			      #name: 'changeTextEditor'
   508                               #name: 'changeTextEditor'
   508 			      #model: #valueOfChangeText
   509                               #model: #valueOfChangeText
   509 			      #hasHorizontalScrollBar: true
   510                               #hasHorizontalScrollBar: true
   510 			      #hasVerticalScrollBar: true
   511                               #hasVerticalScrollBar: true
   511 			      #miniScrollerHorizontal: true
   512                               #miniScrollerHorizontal: true
   512 			      #isReadOnly: true
   513                               #isReadOnly: true
   513 			  )
   514                           )
   514 			)
   515                         )
   515 		    )
   516                     )
   516 		    #handles: #(#Any 0.5 1.0)
   517                     #handles: #(#Any 0.5 1.0)
   517 		)
   518                 )
   518 		 #(#UISubSpecification
   519                  #(#UISubSpecification
   519 		    #name: 'windowSpecForInfoBar'
   520                     #name: 'windowSpecForInfoBar'
   520 		    #layout: #(#LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
   521                     #layout: #(#LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
   521 		    #majorKey: #ToolApplicationModel
   522                     #majorKey: #ToolApplicationModel
   522 		    #minorKey: #windowSpecForInfoBar
   523                     #minorKey: #windowSpecForInfoBar
   523 		)
   524                 )
   524 	      )
   525               )
   525 	  )
   526           )
       
   527       )
   526       )
   528 
   527 
   529     "Modified: / 19.5.1998 / 18:58:47 / cg"
   528     "Modified: / 19.5.1998 / 18:58:47 / cg"
   530 ! !
   529 ! !
   531 
   530 
   544 
   543 
   545     <resource: #tableColumns>
   544     <resource: #tableColumns>
   546 
   545 
   547 
   546 
   548     ^ #(
   547     ^ #(
   549         #(#DataSetColumnSpec
   548 	#(#DataSetColumnSpec
   550            #rendererType: #rowSelector
   549 	   #rendererType: #rowSelector
   551            #backgroundSelector: #listColor
   550 	   #backgroundSelector: #listColor
   552            #showSelectionHighLighted: false
   551 	   #showSelectionHighLighted: false
   553        )
   552        )
   554         #(#DataSetColumnSpec
   553 	#(#DataSetColumnSpec
   555            #label: 'Change'
   554 	   #label: 'Change'
   556            #id: #change
   555 	   #id: #change
   557            #translateLabel: true
   556 	   #translateLabel: true
   558            #labelAlignment: #left
   557 	   #labelAlignment: #left
   559            #model: #string
   558 	   #model: #string
   560            #canSelect: false
   559 	   #canSelect: false
   561        )
   560        )
   562         #(#DataSetColumnSpec
   561 	#(#DataSetColumnSpec
   563            #label: 'Category'
   562 	   #label: 'Category'
   564            #id: #category
   563 	   #id: #category
   565            #translateLabel: true
   564 	   #translateLabel: true
   566            #labelAlignment: #left
   565 	   #labelAlignment: #left
   567            #model: #category
   566 	   #model: #category
   568            #canSelect: false
   567 	   #canSelect: false
   569        )
   568        )
   570         #(#DataSetColumnSpec
   569 	#(#DataSetColumnSpec
   571            #label: 'Delta Info'
   570 	   #label: 'Delta Info'
   572            #id: #deltaInfo
   571 	   #id: #deltaInfo
   573            #translateLabel: true
   572 	   #translateLabel: true
   574            #labelAlignment: #left
   573 	   #labelAlignment: #left
   575            #model: #delta
   574 	   #model: #delta
   576            #canSelect: false
   575 	   #canSelect: false
   577        )
   576        )
   578         #(#DataSetColumnSpec
   577 	#(#DataSetColumnSpec
   579            #label: 'Time Stamp'
   578 	   #label: 'Time Stamp'
   580            #id: #timeStamp
   579 	   #id: #timeStamp
   581            #translateLabel: true
   580 	   #translateLabel: true
   582            #labelAlignment: #left
   581 	   #labelAlignment: #left
   583            #model: #timeStamp
   582 	   #model: #timeStamp
   584            #canSelect: false
   583 	   #canSelect: false
   585        )
   584        )
   586         #(#DataSetColumnSpec
   585 	#(#DataSetColumnSpec
   587            #label: 'Type'
   586 	   #label: 'Type'
   588            #id: #type
   587 	   #id: #type
   589            #translateLabel: true
   588 	   #translateLabel: true
   590            #labelAlignment: #left
   589 	   #labelAlignment: #left
   591            #model: #type
   590 	   #model: #type
   592            #canSelect: false
   591 	   #canSelect: false
   593        )
   592        )
   594         #(#DataSetColumnSpec
   593 	#(#DataSetColumnSpec
   595            #label: 'Position'
   594 	   #label: 'Position'
   596            #id: #position
   595 	   #id: #position
   597            #translateLabel: true
   596 	   #translateLabel: true
   598            #labelAlignment: #left
   597 	   #labelAlignment: #left
   599            #model: #positions
   598 	   #model: #positions
   600            #canSelect: false
   599 	   #canSelect: false
   601        )
   600        )
   602      )
   601      )
   603 ! !
   602 ! !
   604 
   603 
   605 !NewChangesBrowser class methodsFor:'menu specs'!
   604 !NewChangesBrowser class methodsFor:'menu specs'!
   620 
   619 
   621     ^
   620     ^
   622      
   621      
   623        #(#Menu
   622        #(#Menu
   624           
   623           
   625            #(
   624 	   #(
   626              #(#MenuItem
   625 	     #(#MenuItem
   627                 #label: 'About'
   626 		#label: 'About'
   628                 #translateLabel: true
   627 		#translateLabel: true
   629                 #activeHelpKey: #about
   628 		#activeHelpKey: #about
   630                 #labelImage: #(#ResourceRetriever nil #menuIcon)
   629 		#labelImage: #(#ResourceRetriever nil #menuIcon)
   631                 #submenuChannel: #menuAbout
   630 		#submenuChannel: #menuAbout
   632             )
   631 	    )
   633              #(#MenuItem
   632 	     #(#MenuItem
   634                 #label: 'File'
   633 		#label: 'File'
   635                 #translateLabel: true
   634 		#translateLabel: true
   636                 #activeHelpKey: #file
   635 		#activeHelpKey: #file
   637                 #submenu: 
   636 		#submenu: 
   638                  #(#Menu
   637 		 #(#Menu
   639                     
   638                     
   640                      #(
   639 		     #(
   641                        #(#MenuItem
   640 		       #(#MenuItem
   642                           #label: 'Reload'
   641 			  #label: 'Reload'
   643                           #translateLabel: true
   642 			  #translateLabel: true
   644                           #value: #doReload
   643 			  #value: #doReload
   645                           #activeHelpKey: #fileReload
   644 			  #activeHelpKey: #fileReload
   646                           #enabled: #valueOfNotReading
   645 			  #enabled: #valueOfNotReading
   647                       )
   646 		      )
   648                        #(#MenuItem
   647 		       #(#MenuItem
   649                           #label: '-'
   648 			  #label: '-'
   650                       )
   649 		      )
   651                        #(#MenuItem
   650 		       #(#MenuItem
   652                           #label: 'Load...'
   651 			  #label: 'Load...'
   653                           #translateLabel: true
   652 			  #translateLabel: true
   654                           #value: #doLoad
   653 			  #value: #doLoad
   655                           #activeHelpKey: #fileLoad
   654 			  #activeHelpKey: #fileLoad
   656                           #enabled: #valueOfNotSaving
   655 			  #enabled: #valueOfNotSaving
   657                       )
   656 		      )
   658                        #(#MenuItem
   657 		       #(#MenuItem
   659                           #label: '-'
   658 			  #label: '-'
   660                       )
   659 		      )
   661                        #(#MenuItem
   660 		       #(#MenuItem
   662                           #label: 'Save'
   661 			  #label: 'Save'
   663                           #translateLabel: true
   662 			  #translateLabel: true
   664                           #value: #doSave
   663 			  #value: #doSave
   665                           #activeHelpKey: #fileSave
   664 			  #activeHelpKey: #fileSave
   666                           #enabled: #valueOfNotReading
   665 			  #enabled: #valueOfNotReading
   667                       )
   666 		      )
   668                        #(#MenuItem
   667 		       #(#MenuItem
   669                           #label: '-'
   668 			  #label: '-'
   670                       )
   669 		      )
   671                        #(#MenuItem
   670 		       #(#MenuItem
   672                           #label: 'Browse Class'
   671 			  #label: 'Browse Class'
   673                           #translateLabel: true
   672 			  #translateLabel: true
   674                           #value: #doBrowseClass
   673 			  #value: #doBrowseClass
   675                           #activeHelpKey: #fileBrowseClass
   674 			  #activeHelpKey: #fileBrowseClass
   676                           #enabled: #valueOfHavingChangeSelection
   675 			  #enabled: #valueOfHavingChangeSelection
   677                       )
   676 		      )
   678                        #(#MenuItem
   677 		       #(#MenuItem
   679                           #label: '-'
   678 			  #label: '-'
   680                       )
   679 		      )
   681                        #(#MenuItem
   680 		       #(#MenuItem
   682                           #label: 'Exit'
   681 			  #label: 'Exit'
   683                           #translateLabel: true
   682 			  #translateLabel: true
   684                           #value: #closeRequest
   683 			  #value: #closeRequest
   685                           #activeHelpKey: #fileExit
   684 			  #activeHelpKey: #fileExit
   686                           #enabled: #valueOfNotSaving
   685 			  #enabled: #valueOfNotSaving
   687                       )
   686 		      )
   688                     ) nil
   687 		    ) nil
   689                     nil
   688 		    nil
   690                 )
   689 		)
   691             )
   690 	    )
   692              #(#MenuItem
   691 	     #(#MenuItem
   693                 #label: 'Apply'
   692 		#label: 'Apply'
   694                 #translateLabel: true
   693 		#translateLabel: true
   695                 #submenu: 
   694 		#submenu: 
   696                  #(#Menu
   695 		 #(#Menu
   697                     
   696                     
   698                      #(
   697 		     #(
   699                        #(#MenuItem
   698 		       #(#MenuItem
   700                           #label: 'Change'
   699 			  #label: 'Change'
   701                           #translateLabel: true
   700 			  #translateLabel: true
   702                           #value: #doApply
   701 			  #value: #doApply
   703                           #activeHelpKey: #applyLine
   702 			  #activeHelpKey: #applyLine
   704                           #enabled: #valueOfHavingChangeSelection
   703 			  #enabled: #valueOfHavingChangeSelection
   705                       )
   704 		      )
   706                        #(#MenuItem
   705 		       #(#MenuItem
   707                           #label: '-'
   706 			  #label: '-'
   708                       )
   707 		      )
   709                        #(#MenuItem
   708 		       #(#MenuItem
   710                           #label: 'All'
   709 			  #label: 'All'
   711                           #translateLabel: true
   710 			  #translateLabel: true
   712                           #value: #doApplyAll
   711 			  #value: #doApplyAll
   713                           #activeHelpKey: #applyAll
   712 			  #activeHelpKey: #applyAll
   714                           #enabled: #valueOfNotReading
   713 			  #enabled: #valueOfNotReading
   715                       )
   714 		      )
   716                        #(#MenuItem
   715 		       #(#MenuItem
   717                           #label: 'To End'
   716 			  #label: 'To End'
   718                           #translateLabel: true
   717 			  #translateLabel: true
   719                           #value: #doApplyToEnd
   718 			  #value: #doApplyToEnd
   720                           #activeHelpKey: #applyToEnd
   719 			  #activeHelpKey: #applyToEnd
   721                           #enabled: #valueOfHavingSelection
   720 			  #enabled: #valueOfHavingSelection
   722                       )
   721 		      )
   723                        #(#MenuItem
   722 		       #(#MenuItem
   724                           #label: 'All for Class'
   723 			  #label: 'All for Class'
   725                           #translateLabel: true
   724 			  #translateLabel: true
   726                           #value: #doApplyAllForClass
   725 			  #value: #doApplyAllForClass
   727                           #activeHelpKey: #applyForClassToEnd
   726 			  #activeHelpKey: #applyForClassToEnd
   728                           #enabled: #valueOfHavingChangeSelection
   727 			  #enabled: #valueOfHavingChangeSelection
   729                       )
   728 		      )
   730                        #(#MenuItem
   729 		       #(#MenuItem
   731                           #label: 'For Class to End'
   730 			  #label: 'For Class to End'
   732                           #translateLabel: true
   731 			  #translateLabel: true
   733                           #value: #doApplyForClassToEnd
   732 			  #value: #doApplyForClassToEnd
   734                           #activeHelpKey: #applyForClassToEnd
   733 			  #activeHelpKey: #applyForClassToEnd
   735                           #enabled: #valueOfHavingChangeSelection
   734 			  #enabled: #valueOfHavingChangeSelection
   736                       )
   735 		      )
   737                        #(#MenuItem
   736 		       #(#MenuItem
   738                           #label: '-'
   737 			  #label: '-'
   739                       )
   738 		      )
   740                        #(#MenuItem
   739 		       #(#MenuItem
   741                           #label: 'From last Snapshot'
   740 			  #label: 'From last Snapshot'
   742                           #translateLabel: true
   741 			  #translateLabel: true
   743                           #value: #doApplyFromLastSnapshot
   742 			  #value: #doApplyFromLastSnapshot
   744                           #activeHelpKey: #applyFromLastSnapshot
   743 			  #activeHelpKey: #applyFromLastSnapshot
   745                           #enabled: #valueOfNotReading
   744 			  #enabled: #valueOfNotReading
   746                       )
   745 		      )
   747                     ) nil
   746 		    ) nil
   748                     nil
   747 		    nil
   749                 )
   748 		)
   750             )
   749 	    )
   751              #(#MenuItem
   750 	     #(#MenuItem
   752                 #label: 'Delete'
   751 		#label: 'Delete'
   753                 #translateLabel: true
   752 		#translateLabel: true
   754                 #activeHelpKey: #edit
   753 		#activeHelpKey: #edit
   755                 #submenu: 
   754 		#submenu: 
   756                  #(#Menu
   755 		 #(#Menu
   757                     
   756                     
   758                      #(
   757 		     #(
   759                        #(#MenuItem
   758 		       #(#MenuItem
   760                           #label: 'Change'
   759 			  #label: 'Change'
   761                           #translateLabel: true
   760 			  #translateLabel: true
   762                           #value: #doDelete
   761 			  #value: #doDelete
   763                           #activeHelpKey: #deleteLine
   762 			  #activeHelpKey: #deleteLine
   764                           #enabled: #valueOfHavingSelection
   763 			  #enabled: #valueOfHavingSelection
   765                       )
   764 		      )
   766                        #(#MenuItem
   765 		       #(#MenuItem
   767                           #label: '-'
   766 			  #label: '-'
   768                       )
   767 		      )
   769                        #(#MenuItem
   768 		       #(#MenuItem
   770                           #label: 'All'
   769 			  #label: 'All'
   771                           #translateLabel: true
   770 			  #translateLabel: true
   772                           #value: #doDeleteAll
   771 			  #value: #doDeleteAll
   773                           #activeHelpKey: #deleteAll
   772 			  #activeHelpKey: #deleteAll
   774                           #enabled: #valueOfNotReading
   773 			  #enabled: #valueOfNotReading
   775                       )
   774 		      )
   776                        #(#MenuItem
   775 		       #(#MenuItem
   777                           #label: 'To End'
   776 			  #label: 'To End'
   778                           #translateLabel: true
   777 			  #translateLabel: true
   779                           #value: #doDeleteToEnd
   778 			  #value: #doDeleteToEnd
   780                           #activeHelpKey: #deleteToEnd
   779 			  #activeHelpKey: #deleteToEnd
   781                           #enabled: #valueOfHavingSelection
   780 			  #enabled: #valueOfHavingSelection
   782                       )
   781 		      )
   783                        #(#MenuItem
   782 		       #(#MenuItem
   784                           #label: 'All for Class'
   783 			  #label: 'All for Class'
   785                           #translateLabel: true
   784 			  #translateLabel: true
   786                           #value: #doDeleteAllForClass
   785 			  #value: #doDeleteAllForClass
   787                           #activeHelpKey: #applyForClassToEnd
   786 			  #activeHelpKey: #applyForClassToEnd
   788                           #enabled: #valueOfHavingChangeSelection
   787 			  #enabled: #valueOfHavingChangeSelection
   789                       )
   788 		      )
   790                        #(#MenuItem
   789 		       #(#MenuItem
   791                           #label: 'For Class to End'
   790 			  #label: 'For Class to End'
   792                           #translateLabel: true
   791 			  #translateLabel: true
   793                           #value: #doDeleteForClassToEnd
   792 			  #value: #doDeleteForClassToEnd
   794                           #activeHelpKey: #deleteForClassToEnd
   793 			  #activeHelpKey: #deleteForClassToEnd
   795                           #enabled: #valueOfHavingChangeSelection
   794 			  #enabled: #valueOfHavingChangeSelection
   796                       )
   795 		      )
   797                        #(#MenuItem
   796 		       #(#MenuItem
   798                           #label: '-'
   797 			  #label: '-'
   799                       )
   798 		      )
   800                        #(#MenuItem
   799 		       #(#MenuItem
   801                           #label: 'Compress'
   800 			  #label: 'Compress'
   802                           #translateLabel: true
   801 			  #translateLabel: true
   803                           #value: #doCompress
   802 			  #value: #doCompress
   804                           #activeHelpKey: #deleteCompress
   803 			  #activeHelpKey: #deleteCompress
   805                           #enabled: #valueOfNotReading
   804 			  #enabled: #valueOfNotReading
   806                       )
   805 		      )
   807                        #(#MenuItem
   806 		       #(#MenuItem
   808                           #label: 'Compress for Class'
   807 			  #label: 'Compress for Class'
   809                           #translateLabel: true
   808 			  #translateLabel: true
   810                           #value: #doCompressForClass
   809 			  #value: #doCompressForClass
   811                           #activeHelpKey: #deleteCompressForClass
   810 			  #activeHelpKey: #deleteCompressForClass
   812                           #enabled: #valueOfHavingChangeSelection
   811 			  #enabled: #valueOfHavingChangeSelection
   813                       )
   812 		      )
   814                     ) nil
   813 		    ) nil
   815                     nil
   814 		    nil
   816                 )
   815 		)
   817             )
   816 	    )
   818              #(#MenuItem
   817 	     #(#MenuItem
   819                 #label: 'Test'
   818 		#label: 'Test'
   820                 #translateLabel: true
   819 		#translateLabel: true
   821                 #activeHelpKey: #test
   820 		#activeHelpKey: #test
   822                 #submenu: 
   821 		#submenu: 
   823                  #(#Menu
   822 		 #(#Menu
   824                     
   823                     
   825                      #(
   824 		     #(
   826                        #(#MenuItem
   825 		       #(#MenuItem
   827                           #label: 'Find last Snapshot'
   826 			  #label: 'Find last Snapshot'
   828                           #translateLabel: true
   827 			  #translateLabel: true
   829                           #value: #doFindSnapshot:
   828 			  #value: #doFindSnapshot:
   830                           #activeHelpKey: #testFindLastSnapshot
   829 			  #activeHelpKey: #testFindLastSnapshot
   831                           #enabled: #valueOfHavingSelection
   830 			  #enabled: #valueOfHavingSelection
   832                           #argument: 'last'
   831 			  #argument: 'last'
   833                       )
   832 		      )
   834                        #(#MenuItem
   833 		       #(#MenuItem
   835                           #label: 'Find next Snapshot'
   834 			  #label: 'Find next Snapshot'
   836                           #translateLabel: true
   835 			  #translateLabel: true
   837                           #value: #doFindSnapshot:
   836 			  #value: #doFindSnapshot:
   838                           #activeHelpKey: #testFindNextSnapshot
   837 			  #activeHelpKey: #testFindNextSnapshot
   839                           #enabled: #valueOfHavingSelection
   838 			  #enabled: #valueOfHavingSelection
   840                           #argument: 'next'
   839 			  #argument: 'next'
   841                       )
   840 		      )
   842                        #(#MenuItem
   841 		       #(#MenuItem
   843                           #label: '-'
   842 			  #label: '-'
   844                       )
   843 		      )
   845                        #(#MenuItem
   844 		       #(#MenuItem
   846                           #label: 'Compare with Current Version'
   845 			  #label: 'Compare with Current Version'
   847                           #translateLabel: true
   846 			  #translateLabel: true
   848                           #value: #doCompare
   847 			  #value: #doCompare
   849                           #activeHelpKey: #testCompareWithCurrentVersion
   848 			  #activeHelpKey: #testCompareWithCurrentVersion
   850                           #enabled: #valueOfHavingChangeSelection
   849 			  #enabled: #valueOfHavingChangeSelection
   851                       )
   850 		      )
   852                     ) nil
   851 		    ) nil
   853                     nil
   852 		    nil
   854                 )
   853 		)
   855             )
   854 	    )
   856              #(#MenuItem
   855 	     #(#MenuItem
   857                 #label: 'Settings'
   856 		#label: 'Settings'
   858                 #translateLabel: true
   857 		#translateLabel: true
   859                 #activeHelpKey: #settings
   858 		#activeHelpKey: #settings
   860                 #submenu: 
   859 		#submenu: 
   861                  #(#Menu
   860 		 #(#Menu
   862                     
   861                     
   863                      #(
   862 		     #(
   864                        #(#MenuItem
   863 		       #(#MenuItem
   865                           #label: 'Auto Update'
   864 			  #label: 'Auto Update'
   866                           #translateLabel: true
   865 			  #translateLabel: true
   867                           #activeHelpKey: #settingsAutoUpdate
   866 			  #activeHelpKey: #settingsAutoUpdate
   868                           #enabled: #valueOfNotReading
   867 			  #enabled: #valueOfNotReading
   869                           #indication: #autoUpdateMode:
   868 			  #indication: #autoUpdateMode:
   870                       )
   869 		      )
   871                        #(#MenuItem
   870 		       #(#MenuItem
   872                           #label: '-'
   871 			  #label: '-'
   873                       )
   872 		      )
   874                        #(#MenuItem
   873 		       #(#MenuItem
   875                           #label: 'Private Classes as Separate'
   874 			  #label: 'Private Classes as Separate'
   876                           #translateLabel: true
   875 			  #translateLabel: true
   877                           #activeHelpKey: #settingsPrivateAsSeparate
   876 			  #activeHelpKey: #settingsPrivateAsSeparate
   878                           #enabled: #valueOfNotReading
   877 			  #enabled: #valueOfNotReading
   879                           #indication: #privateAsSeparate:
   878 			  #indication: #privateAsSeparate:
   880                       )
   879 		      )
   881                        #(#MenuItem
   880 		       #(#MenuItem
   882                           #label: '-'
   881 			  #label: '-'
   883                       )
   882 		      )
   884                        #(#MenuItem
   883 		       #(#MenuItem
   885                           #label: 'Columns'
   884 			  #label: 'Columns'
   886                           #translateLabel: true
   885 			  #translateLabel: true
   887                           #activeHelpKey: #settingsColumns
   886 			  #activeHelpKey: #settingsColumns
   888                           #submenu: 
   887 			  #submenu: 
   889                            #(#Menu
   888 			   #(#Menu
   890                               
   889                               
   891                                #(
   890 			       #(
   892                                  #(#MenuItem
   891 				 #(#MenuItem
   893                                     #label: 'Category'
   892 				    #label: 'Category'
   894                                     #activeHelpKey: #settingsColumnsCategory
   893 				    #activeHelpKey: #settingsColumnsCategory
   895                                     #indication: #categoryColumn:
   894 				    #indication: #categoryColumn:
   896                                 )
   895 				)
   897                                  #(#MenuItem
   896 				 #(#MenuItem
   898                                     #label: 'Delta Info'
   897 				    #label: 'Delta Info'
   899                                     #activeHelpKey: #settingsColumnsDeltaInfo
   898 				    #activeHelpKey: #settingsColumnsDeltaInfo
   900                                     #indication: #deltaInfoColumn:
   899 				    #indication: #deltaInfoColumn:
   901                                 )
   900 				)
   902                                  #(#MenuItem
   901 				 #(#MenuItem
   903                                     #label: 'Type'
   902 				    #label: 'Type'
   904                                     #activeHelpKey: #settingsColumnsType
   903 				    #activeHelpKey: #settingsColumnsType
   905                                     #indication: #typeColumn:
   904 				    #indication: #typeColumn:
   906                                 )
   905 				)
   907                                  #(#MenuItem
   906 				 #(#MenuItem
   908                                     #label: 'Time Stamp'
   907 				    #label: 'Time Stamp'
   909                                     #activeHelpKey: #settingsColumnsTimeStamp
   908 				    #activeHelpKey: #settingsColumnsTimeStamp
   910                                     #indication: #timeStampColumn:
   909 				    #indication: #timeStampColumn:
   911                                 )
   910 				)
   912                                  #(#MenuItem
   911 				 #(#MenuItem
   913                                     #label: 'Positions'
   912 				    #label: 'Positions'
   914                                     #activeHelpKey: #settingsColumnsPosition
   913 				    #activeHelpKey: #settingsColumnsPosition
   915                                     #indication: #positionsColumn:
   914 				    #indication: #positionsColumn:
   916                                 )
   915 				)
   917                               ) nil
   916 			      ) nil
   918                               nil
   917 			      nil
   919                           )
   918 			  )
   920                       )
   919 		      )
   921                        #(#MenuItem
   920 		       #(#MenuItem
   922                           #label: '-'
   921 			  #label: '-'
   923                       )
   922 		      )
   924                        #(#MenuItem
   923 		       #(#MenuItem
   925                           #label: 'Fonts'
   924 			  #label: 'Fonts'
   926                           #translateLabel: true
   925 			  #translateLabel: true
   927                           #enabled: #valueOfNotReading
   926 			  #enabled: #valueOfNotReading
   928                           #submenuChannel: #menuFont
   927 			  #submenuChannel: #menuFont
   929                       )
   928 		      )
   930                     ) nil
   929 		    ) nil
   931                     nil
   930 		    nil
   932                 )
   931 		)
   933             )
   932 	    )
   934              #(#MenuItem
   933 	     #(#MenuItem
   935                 #label: 'History'
   934 		#label: 'History'
   936                 #translateLabel: true
   935 		#translateLabel: true
   937                 #submenuChannel: #menuHistory
   936 		#submenuChannel: #menuHistory
   938             )
   937 	    )
   939              #(#MenuItem
   938 	     #(#MenuItem
   940                 #label: 'Help'
   939 		#label: 'Help'
   941                 #translateLabel: true
   940 		#translateLabel: true
   942                 #startGroup: #right
   941 		#startGroup: #right
   943                 #activeHelpKey: #help
   942 		#activeHelpKey: #help
   944                 #submenuChannel: #menuHelp
   943 		#submenuChannel: #menuHelp
   945             )
   944 	    )
   946           ) nil
   945 	  ) nil
   947           nil
   946 	  nil
   948       )
   947       )
   949 
   948 
   950     "Modified: / 19.5.1998 / 18:17:27 / cg"
   949     "Modified: / 19.5.1998 / 18:17:27 / cg"
   951 !
   950 !
   952 
   951 
   966 
   965 
   967     ^
   966     ^
   968      
   967      
   969        #(#Menu
   968        #(#Menu
   970           
   969           
   971            #(
   970 	   #(
   972              #(#MenuItem
   971 	     #(#MenuItem
   973                 #label: 'Apply'
   972 		#label: 'Apply'
   974                 #translateLabel: true
   973 		#translateLabel: true
   975                 #value: #doApply
   974 		#value: #doApply
   976                 #activeHelpKey: #applyLine
   975 		#activeHelpKey: #applyLine
   977                 #enabled: #valueOfHavingChangeSelection
   976 		#enabled: #valueOfHavingChangeSelection
   978             )
   977 	    )
   979              #(#MenuItem
   978 	     #(#MenuItem
   980                 #label: 'Apply To End'
   979 		#label: 'Apply To End'
   981                 #translateLabel: true
   980 		#translateLabel: true
   982                 #value: #doApplyToEnd
   981 		#value: #doApplyToEnd
   983                 #activeHelpKey: #applyToEnd
   982 		#activeHelpKey: #applyToEnd
   984                 #enabled: #valueOfHavingSelection
   983 		#enabled: #valueOfHavingSelection
   985             )
   984 	    )
   986              #(#MenuItem
   985 	     #(#MenuItem
   987                 #label: 'Apply All For Class'
   986 		#label: 'Apply All For Class'
   988                 #translateLabel: true
   987 		#translateLabel: true
   989                 #value: #doApplyAllForClass
   988 		#value: #doApplyAllForClass
   990                 #activeHelpKey: #applyForClassToEnd
   989 		#activeHelpKey: #applyForClassToEnd
   991                 #enabled: #valueOfHavingChangeSelection
   990 		#enabled: #valueOfHavingChangeSelection
   992             )
   991 	    )
   993              #(#MenuItem
   992 	     #(#MenuItem
   994                 #label: 'Apply For Class To End'
   993 		#label: 'Apply For Class To End'
   995                 #translateLabel: true
   994 		#translateLabel: true
   996                 #value: #doApplyForClassToEnd
   995 		#value: #doApplyForClassToEnd
   997                 #activeHelpKey: #applyForClassToEnd
   996 		#activeHelpKey: #applyForClassToEnd
   998                 #enabled: #valueOfHavingChangeSelection
   997 		#enabled: #valueOfHavingChangeSelection
   999             )
   998 	    )
  1000              #(#MenuItem
   999 	     #(#MenuItem
  1001                 #label: '-'
  1000 		#label: '-'
  1002             )
  1001 	    )
  1003              #(#MenuItem
  1002 	     #(#MenuItem
  1004                 #label: 'Delete'
  1003 		#label: 'Delete'
  1005                 #translateLabel: true
  1004 		#translateLabel: true
  1006                 #value: #doDelete
  1005 		#value: #doDelete
  1007                 #activeHelpKey: #deleteLine
  1006 		#activeHelpKey: #deleteLine
  1008                 #enabled: #valueOfHavingSelection
  1007 		#enabled: #valueOfHavingSelection
  1009             )
  1008 	    )
  1010              #(#MenuItem
  1009 	     #(#MenuItem
  1011                 #label: 'Delete To End'
  1010 		#label: 'Delete To End'
  1012                 #translateLabel: true
  1011 		#translateLabel: true
  1013                 #value: #doDeleteToEnd
  1012 		#value: #doDeleteToEnd
  1014                 #activeHelpKey: #deleteToEnd
  1013 		#activeHelpKey: #deleteToEnd
  1015                 #enabled: #valueOfHavingSelection
  1014 		#enabled: #valueOfHavingSelection
  1016             )
  1015 	    )
  1017              #(#MenuItem
  1016 	     #(#MenuItem
  1018                 #label: 'Delete All For Class'
  1017 		#label: 'Delete All For Class'
  1019                 #translateLabel: true
  1018 		#translateLabel: true
  1020                 #value: #doDeleteAllForClass
  1019 		#value: #doDeleteAllForClass
  1021                 #activeHelpKey: #applyForClassToEnd
  1020 		#activeHelpKey: #applyForClassToEnd
  1022                 #enabled: #valueOfHavingChangeSelection
  1021 		#enabled: #valueOfHavingChangeSelection
  1023             )
  1022 	    )
  1024              #(#MenuItem
  1023 	     #(#MenuItem
  1025                 #label: 'Delete For Class To End'
  1024 		#label: 'Delete For Class To End'
  1026                 #translateLabel: true
  1025 		#translateLabel: true
  1027                 #value: #doDeleteForClassToEnd
  1026 		#value: #doDeleteForClassToEnd
  1028                 #activeHelpKey: #deleteForClassToEnd
  1027 		#activeHelpKey: #deleteForClassToEnd
  1029                 #enabled: #valueOfHavingChangeSelection
  1028 		#enabled: #valueOfHavingChangeSelection
  1030             )
  1029 	    )
  1031              #(#MenuItem
  1030 	     #(#MenuItem
  1032                 #label: '-'
  1031 		#label: '-'
  1033             )
  1032 	    )
  1034              #(#MenuItem
  1033 	     #(#MenuItem
  1035                 #label: 'Browse Class'
  1034 		#label: 'Browse Class'
  1036                 #translateLabel: true
  1035 		#translateLabel: true
  1037                 #value: #doBrowseClass
  1036 		#value: #doBrowseClass
  1038                 #activeHelpKey: #fileBrowseClass
  1037 		#activeHelpKey: #fileBrowseClass
  1039                 #enabled: #valueOfHavingChangeSelection
  1038 		#enabled: #valueOfHavingChangeSelection
  1040             )
  1039 	    )
  1041              #(#MenuItem
  1040 	     #(#MenuItem
  1042                 #label: '-'
  1041 		#label: '-'
  1043             )
  1042 	    )
  1044              #(#MenuItem
  1043 	     #(#MenuItem
  1045                 #label: 'Compress For Class'
  1044 		#label: 'Compress For Class'
  1046                 #translateLabel: true
  1045 		#translateLabel: true
  1047                 #value: #doCompressForClass
  1046 		#value: #doCompressForClass
  1048                 #activeHelpKey: #deleteCompressForClass
  1047 		#activeHelpKey: #deleteCompressForClass
  1049                 #enabled: #valueOfHavingChangeSelection
  1048 		#enabled: #valueOfHavingChangeSelection
  1050             )
  1049 	    )
  1051           ) nil
  1050 	  ) nil
  1052           nil
  1051 	  nil
  1053       )
  1052       )
  1054 
  1053 
  1055     "Modified: / 19.5.1998 / 18:03:59 / cg"
  1054     "Modified: / 19.5.1998 / 18:03:59 / cg"
  1056 !
  1055 !
  1057 
  1056 
  1071 
  1070 
  1072     ^
  1071     ^
  1073      
  1072      
  1074        #(#Menu
  1073        #(#Menu
  1075           
  1074           
  1076            #(
  1075 	   #(
  1077              #(#MenuItem
  1076 	     #(#MenuItem
  1078                 #label: 'Load'
  1077 		#label: 'Load'
  1079                 #isButton: true
  1078 		#isButton: true
  1080                 #value: #doLoad
  1079 		#value: #doLoad
  1081                 #activeHelpKey: #fileLoad
  1080 		#activeHelpKey: #fileLoad
  1082                 #enabled: #valueOfNotReading
  1081 		#enabled: #valueOfNotReading
  1083                 #labelImage: #(#ResourceRetriever #Icon #loadIcon)
  1082 		#labelImage: #(#ResourceRetriever #Icon #loadIcon)
  1084             )
  1083 	    )
  1085              #(#MenuItem
  1084 	     #(#MenuItem
  1086                 #label: 'Save'
  1085 		#label: 'Save'
  1087                 #isButton: true
  1086 		#isButton: true
  1088                 #value: #doSave
  1087 		#value: #doSave
  1089                 #activeHelpKey: #fileSave
  1088 		#activeHelpKey: #fileSave
  1090                 #enabled: #valueOfNotSaving
  1089 		#enabled: #valueOfNotSaving
  1091                 #labelImage: #(#ResourceRetriever #Icon #saveIcon)
  1090 		#labelImage: #(#ResourceRetriever #Icon #saveIcon)
  1092             )
  1091 	    )
  1093              #(#MenuItem
  1092 	     #(#MenuItem
  1094                 #label: ''
  1093 		#label: ''
  1095             )
  1094 	    )
  1096              #(#MenuItem
  1095 	     #(#MenuItem
  1097                 #label: 'Compress'
  1096 		#label: 'Compress'
  1098                 #isButton: true
  1097 		#isButton: true
  1099                 #value: #doCompress
  1098 		#value: #doCompress
  1100                 #activeHelpKey: #deleteCompress
  1099 		#activeHelpKey: #deleteCompress
  1101                 #enabled: #valueOfNotReading
  1100 		#enabled: #valueOfNotReading
  1102                 #labelImage: #(#ResourceRetriever nil #compressIcon)
  1101 		#labelImage: #(#ResourceRetriever nil #compressIcon)
  1103             )
  1102 	    )
  1104              #(#MenuItem
  1103 	     #(#MenuItem
  1105                 #label: ''
  1104 		#label: ''
  1106             )
  1105 	    )
  1107              #(#MenuItem
  1106 	     #(#MenuItem
  1108                 #label: 'Apply'
  1107 		#label: 'Apply'
  1109                 #isButton: true
  1108 		#isButton: true
  1110                 #value: #doApply
  1109 		#value: #doApply
  1111                 #activeHelpKey: #applyLine
  1110 		#activeHelpKey: #applyLine
  1112                 #enabled: #valueOfHavingChangeSelection
  1111 		#enabled: #valueOfHavingChangeSelection
  1113                 #labelImage: #(#ResourceRetriever nil #applyIcon)
  1112 		#labelImage: #(#ResourceRetriever nil #applyIcon)
  1114             )
  1113 	    )
  1115              #(#MenuItem
  1114 	     #(#MenuItem
  1116                 #label: 'Apply To End'
  1115 		#label: 'Apply To End'
  1117                 #isButton: true
  1116 		#isButton: true
  1118                 #value: #doApplyToEnd
  1117 		#value: #doApplyToEnd
  1119                 #activeHelpKey: #applyToEnd
  1118 		#activeHelpKey: #applyToEnd
  1120                 #enabled: #valueOfHavingSelection
  1119 		#enabled: #valueOfHavingSelection
  1121                 #labelImage: #(#ResourceRetriever nil #applyToEndIcon)
  1120 		#labelImage: #(#ResourceRetriever nil #applyToEndIcon)
  1122             )
  1121 	    )
  1123              #(#MenuItem
  1122 	     #(#MenuItem
  1124                 #label: 'Apply From Last Snapshot'
  1123 		#label: 'Apply From Last Snapshot'
  1125                 #isButton: true
  1124 		#isButton: true
  1126                 #value: #doApplyFromLastSnapshot
  1125 		#value: #doApplyFromLastSnapshot
  1127                 #activeHelpKey: #applyFromLastSnapshot
  1126 		#activeHelpKey: #applyFromLastSnapshot
  1128                 #enabled: #valueOfNotReading
  1127 		#enabled: #valueOfNotReading
  1129                 #labelImage: #(#ResourceRetriever nil #applyFromLastSnapshotIcon)
  1128 		#labelImage: #(#ResourceRetriever nil #applyFromLastSnapshotIcon)
  1130             )
  1129 	    )
  1131              #(#MenuItem
  1130 	     #(#MenuItem
  1132                 #label: ''
  1131 		#label: ''
  1133             )
  1132 	    )
  1134              #(#MenuItem
  1133 	     #(#MenuItem
  1135                 #label: 'Delete'
  1134 		#label: 'Delete'
  1136                 #isButton: true
  1135 		#isButton: true
  1137                 #value: #doDelete
  1136 		#value: #doDelete
  1138                 #activeHelpKey: #deleteLine
  1137 		#activeHelpKey: #deleteLine
  1139                 #enabled: #valueOfHavingSelection
  1138 		#enabled: #valueOfHavingSelection
  1140                 #labelImage: #(#ResourceRetriever nil #deleteIcon)
  1139 		#labelImage: #(#ResourceRetriever nil #deleteIcon)
  1141             )
  1140 	    )
  1142              #(#MenuItem
  1141 	     #(#MenuItem
  1143                 #label: 'Delete To End'
  1142 		#label: 'Delete To End'
  1144                 #isButton: true
  1143 		#isButton: true
  1145                 #value: #doDeleteToEnd
  1144 		#value: #doDeleteToEnd
  1146                 #activeHelpKey: #deleteToEnd
  1145 		#activeHelpKey: #deleteToEnd
  1147                 #enabled: #valueOfHavingSelection
  1146 		#enabled: #valueOfHavingSelection
  1148                 #labelImage: #(#ResourceRetriever nil #deleteToEndIcon)
  1147 		#labelImage: #(#ResourceRetriever nil #deleteToEndIcon)
  1149             )
  1148 	    )
  1150              #(#MenuItem
  1149 	     #(#MenuItem
  1151                 #label: ''
  1150 		#label: ''
  1152             )
  1151 	    )
  1153              #(#MenuItem
  1152 	     #(#MenuItem
  1154                 #label: 'Find Last Snapshot'
  1153 		#label: 'Find Last Snapshot'
  1155                 #isButton: true
  1154 		#isButton: true
  1156                 #value: #doFindSnapshot:
  1155 		#value: #doFindSnapshot:
  1157                 #activeHelpKey: #testFindLastSnapshot
  1156 		#activeHelpKey: #testFindLastSnapshot
  1158                 #enabled: #valueOfHavingSelection
  1157 		#enabled: #valueOfHavingSelection
  1159                 #argument: 'last'
  1158 		#argument: 'last'
  1160                 #labelImage: #(#ResourceRetriever nil #findLastSnapshotIcon)
  1159 		#labelImage: #(#ResourceRetriever nil #findLastSnapshotIcon)
  1161             )
  1160 	    )
  1162              #(#MenuItem
  1161 	     #(#MenuItem
  1163                 #label: 'Find Next Snapshot'
  1162 		#label: 'Find Next Snapshot'
  1164                 #isButton: true
  1163 		#isButton: true
  1165                 #value: #doFindSnapshot:
  1164 		#value: #doFindSnapshot:
  1166                 #activeHelpKey: #testFindNextSnapshot
  1165 		#activeHelpKey: #testFindNextSnapshot
  1167                 #enabled: #valueOfHavingSelection
  1166 		#enabled: #valueOfHavingSelection
  1168                 #argument: 'next'
  1167 		#argument: 'next'
  1169                 #labelImage: #(#ResourceRetriever nil #findNextSnapshotIcon)
  1168 		#labelImage: #(#ResourceRetriever nil #findNextSnapshotIcon)
  1170             )
  1169 	    )
  1171           ) nil
  1170 	  ) nil
  1172           nil
  1171 	  nil
  1173       )
  1172       )
  1174 ! !
  1173 ! !
  1175 
  1174 
  1176 !NewChangesBrowser methodsFor:'accesssing - columns'!
  1175 !NewChangesBrowser methodsFor:'accesssing - columns'!
  1177 
  1176 
  1289 listOfChangeColumns
  1288 listOfChangeColumns
  1290     "initializes (during the startup) and returns the value holder for the columns"
  1289     "initializes (during the startup) and returns the value holder for the columns"
  1291 
  1290 
  1292     |holder|
  1291     |holder|
  1293     (holder := builder bindingAt:#listOfChangeColumns) isNil ifTrue:[
  1292     (holder := builder bindingAt:#listOfChangeColumns) isNil ifTrue:[
  1294         builder aspectAt:#listOfChangeColumns put:(holder := List new).
  1293 	builder aspectAt:#listOfChangeColumns put:(holder := List new).
  1295         self changeColumn: nil add: true.
  1294 	self changeColumn: nil add: true.
  1296         self changeColumn: #change add: true.
  1295 	self changeColumn: #change add: true.
  1297         self categoryColumn: self categoryColumn.
  1296 	self categoryColumn: self categoryColumn.
  1298         self timeStampColumn: self timeStampColumn.
  1297 	self timeStampColumn: self timeStampColumn.
  1299         self typeColumn: self typeColumn.
  1298 	self typeColumn: self typeColumn.
  1300         self deltaInfoColumn: self deltaInfoColumn.
  1299 	self deltaInfoColumn: self deltaInfoColumn.
  1301         self positionsColumn: self positionsColumn.
  1300 	self positionsColumn: self positionsColumn.
  1302     ].
  1301     ].
  1303     ^ holder
  1302     ^ holder
  1304 
  1303 
  1305     "Modified: / 19.5.1998 / 20:30:31 / cg"
  1304     "Modified: / 19.5.1998 / 20:30:31 / cg"
  1306 !
  1305 !
  1308 listOfChanges
  1307 listOfChanges
  1309     "returns the value holder for the changes"
  1308     "returns the value holder for the changes"
  1310 
  1309 
  1311     |holder| 
  1310     |holder| 
  1312     (holder := builder bindingAt:#listOfChanges) isNil ifTrue:[
  1311     (holder := builder bindingAt:#listOfChanges) isNil ifTrue:[
  1313         builder aspectAt:#listOfChanges put:(holder := List new)
  1312 	builder aspectAt:#listOfChanges put:(holder := List new)
  1314     ].   
  1313     ].   
  1315     ^ holder
  1314     ^ holder
  1316 !
  1315 !
  1317 
  1316 
  1318 selectionOfChange
  1317 selectionOfChange
  1319     "returns the value holder for the selected change"
  1318     "returns the value holder for the selected change"
  1320 
  1319 
  1321     |holder|
  1320     |holder|
  1322     (holder := builder bindingAt:#selectionOfChange) isNil ifTrue:[
  1321     (holder := builder bindingAt:#selectionOfChange) isNil ifTrue:[
  1323         builder aspectAt:#selectionOfChange put:(holder :=  ValueHolder new).
  1322 	builder aspectAt:#selectionOfChange put:(holder :=  ValueHolder new).
  1324     ].                                           
  1323     ].                                           
  1325     ^ holder
  1324     ^ holder
  1326 !
  1325 !
  1327 
  1326 
  1328 valueOfChangeText
  1327 valueOfChangeText
  1329     "returns the value holder for the source code of the selected change"
  1328     "returns the value holder for the source code of the selected change"
  1330 
  1329 
  1331     |holder|
  1330     |holder|
  1332     (holder := builder bindingAt:#valueOfChangeText) isNil ifTrue:[
  1331     (holder := builder bindingAt:#valueOfChangeText) isNil ifTrue:[
  1333         builder aspectAt:#valueOfChangeText put:(holder :=  ValueHolder new).
  1332 	builder aspectAt:#valueOfChangeText put:(holder :=  ValueHolder new).
  1334     ].
  1333     ].
  1335     ^ holder
  1334     ^ holder
  1336 !
  1335 !
  1337 
  1336 
  1338 valueOfFilter
  1337 valueOfFilter
  1339     "returns the value holder for the string of the filter"
  1338     "returns the value holder for the string of the filter"
  1340 
  1339 
  1341     |holder|
  1340     |holder|
  1342     (holder := builder bindingAt:#valueOfFilter) isNil ifTrue:[
  1341     (holder := builder bindingAt:#valueOfFilter) isNil ifTrue:[
  1343         builder aspectAt:#valueOfFilter put:(holder :=  ValueHolder new).
  1342 	builder aspectAt:#valueOfFilter put:(holder :=  ValueHolder new).
  1344         holder addDependent: self
  1343 	holder addDependent: self
  1345     ].
  1344     ].
  1346     ^ holder
  1345     ^ holder
  1347 !
  1346 !
  1348 
  1347 
  1349 valueOfHavingChangeSelection
  1348 valueOfHavingChangeSelection
  1350     "returns whether the selected change can be applied as value holder"
  1349     "returns whether the selected change can be applied as value holder"
  1351 
  1350 
  1352     |holder|
  1351     |holder|
  1353     (holder := builder bindingAt:#valueOfHavingChangeSelection) isNil ifTrue:[
  1352     (holder := builder bindingAt:#valueOfHavingChangeSelection) isNil ifTrue:[
  1354         builder aspectAt:#valueOfHavingChangeSelection put:(holder :=  false asValue).
  1353 	builder aspectAt:#valueOfHavingChangeSelection put:(holder :=  false asValue).
  1355     ].
  1354     ].
  1356     ^ holder
  1355     ^ holder
  1357 !
  1356 !
  1358 
  1357 
  1359 valueOfHavingSelection
  1358 valueOfHavingSelection
  1360     "returns whether a change is selected as value holder"
  1359     "returns whether a change is selected as value holder"
  1361 
  1360 
  1362     |holder|
  1361     |holder|
  1363     (holder := builder bindingAt:#valueOfHavingSelection) isNil ifTrue:[
  1362     (holder := builder bindingAt:#valueOfHavingSelection) isNil ifTrue:[
  1364         builder aspectAt:#valueOfHavingSelection put:(holder :=  false asValue).
  1363 	builder aspectAt:#valueOfHavingSelection put:(holder :=  false asValue).
  1365     ].
  1364     ].
  1366     ^ holder
  1365     ^ holder
  1367 !
  1366 !
  1368 
  1367 
  1369 valueOfNotReading
  1368 valueOfNotReading
  1370     "returns whether it is not reading or compressing as value holder"
  1369     "returns whether it is not reading or compressing as value holder"
  1371 
  1370 
  1372     |holder|
  1371     |holder|
  1373     (holder := builder bindingAt:#valueOfReading) isNil ifTrue:[
  1372     (holder := builder bindingAt:#valueOfReading) isNil ifTrue:[
  1374         builder aspectAt:#valueOfReading put:(holder :=  true asValue).
  1373 	builder aspectAt:#valueOfReading put:(holder :=  true asValue).
  1375     ].
  1374     ].
  1376     ^ holder
  1375     ^ holder
  1377 !
  1376 !
  1378 
  1377 
  1379 valueOfNotSaving
  1378 valueOfNotSaving
  1380     "returns whether it is not saving as value holder"
  1379     "returns whether it is not saving as value holder"
  1381 
  1380 
  1382     |holder|
  1381     |holder|
  1383     (holder := builder bindingAt:#valueOfNotSaving) isNil ifTrue:[
  1382     (holder := builder bindingAt:#valueOfNotSaving) isNil ifTrue:[
  1384         builder aspectAt:#valueOfNotSaving put:(holder :=  true asValue).
  1383 	builder aspectAt:#valueOfNotSaving put:(holder :=  true asValue).
  1385     ].
  1384     ].
  1386     ^ holder
  1385     ^ holder
  1387 !
  1386 !
  1388 
  1387 
  1389 valueOfReadProgress
  1388 valueOfReadProgress
  1390     "returns the stage of reading or compressing as value holder"
  1389     "returns the stage of reading or compressing as value holder"
  1391 
  1390 
  1392     |holder|
  1391     |holder|
  1393     (holder := builder bindingAt:#valueOfReadProgress) isNil ifTrue:[
  1392     (holder := builder bindingAt:#valueOfReadProgress) isNil ifTrue:[
  1394         builder aspectAt:#valueOfReadProgress put:(holder :=  ValueHolder with: 0).
  1393 	builder aspectAt:#valueOfReadProgress put:(holder :=  ValueHolder with: 0).
  1395     ].
  1394     ].
  1396     ^ holder
  1395     ^ holder
  1397 ! !
  1396 ! !
  1398 
  1397 
  1399 !NewChangesBrowser methodsFor:'callbacks'!
  1398 !NewChangesBrowser methodsFor:'callbacks'!
  1408     aStream := self streamForChange: (changes at: changeNr).
  1407     aStream := self streamForChange: (changes at: changeNr).
  1409     aStream isNil ifTrue:[^ self].
  1408     aStream isNil ifTrue:[^ self].
  1410     sawExcla := aStream peekFor:(aStream class chunkSeparator).
  1409     sawExcla := aStream peekFor:(aStream class chunkSeparator).
  1411     chunk := aStream nextChunk.
  1410     chunk := aStream nextChunk.
  1412     sawExcla ifTrue:[
  1411     sawExcla ifTrue:[
  1413         chunk := aStream nextChunk
  1412 	chunk := aStream nextChunk
  1414     ].
  1413     ].
  1415     aStream close.        
  1414     aStream close.        
  1416     self valueOfChangeText value:chunk.
  1415     self valueOfChangeText value:chunk.
  1417 
  1416 
  1418     self updateChannels
  1417     self updateChannels
  1426     super update:something with:aParameter from:changedObject.
  1425     super update:something with:aParameter from:changedObject.
  1427 
  1426 
  1428     changedObject == self valueOfFilter 
  1427     changedObject == self valueOfFilter 
  1429     ifTrue: 
  1428     ifTrue: 
  1430     [                           
  1429     [                           
  1431         filterCompletionBlock value: changedObject value. 
  1430 	filterCompletionBlock value: changedObject value. 
  1432         self listOfChanges size > 0 ifTrue: [self addToHistory: changedObject value -> #doFilter:] 
  1431 	self listOfChanges size > 0 ifTrue: [self addToHistory: changedObject value -> #doFilter:] 
  1433     ]
  1432     ]
  1434 
  1433 
  1435 
  1434 
  1436 
  1435 
  1437 
  1436 
  1444 
  1443 
  1445     |change|           
  1444     |change|           
  1446     (change := self selectionOfChange value) notNil
  1445     (change := self selectionOfChange value) notNil
  1447     ifTrue:
  1446     ifTrue:
  1448     [
  1447     [
  1449         self valueOfHavingSelection value: true.
  1448 	self valueOfHavingSelection value: true.
  1450         self valueOfHavingChangeSelection value: 
  1449 	self valueOfHavingChangeSelection value: 
  1451             ((change type = 'method') or: [(change type = 'class')])
  1450 	    ((change type = 'method') or: [(change type = 'class')])
  1452     ]
  1451     ]
  1453     ifFalse:
  1452     ifFalse:
  1454     [
  1453     [
  1455         self valueOfHavingSelection value: false.
  1454 	self valueOfHavingSelection value: false.
  1456         self valueOfHavingChangeSelection value: false
  1455 	self valueOfHavingChangeSelection value: false
  1457     ]
  1456     ]
  1458 
  1457 
  1459 
  1458 
  1460 
  1459 
  1461 
  1460 
  1493 
  1492 
  1494     |action|
  1493     |action|
  1495 
  1494 
  1496     (skipSignal notNil) ifTrue:[
  1495     (skipSignal notNil) ifTrue:[
  1497 
  1496 
  1498         self changeTextEditor highlightingErrorPosition:relPos to:relEndPos do:[
  1497 	self changeTextEditor highlightingErrorPosition:relPos to:relEndPos do:[
  1499             |box|
  1498 	    |box|
  1500 
  1499 
  1501             "
  1500 	    "
  1502              start dialog - make certain cleanup is done
  1501 	     start dialog - make certain cleanup is done
  1503             "
  1502 	    "
  1504             action := OptionBox 
  1503 	    action := OptionBox 
  1505                           request:aString
  1504 			  request:aString
  1506                           label:'Error'
  1505 			  label:'Error'
  1507                           form:(WarningBox iconBitmap)
  1506 			  form:(WarningBox iconBitmap)
  1508                           buttonLabels:#('cancel' 'skip' 'continue')
  1507 			  buttonLabels:#('cancel' 'skip' 'continue')
  1509                           values:#(#abort #skip #continue)
  1508 			  values:#(#abort #skip #continue)
  1510                           default:#continue.
  1509 			  default:#continue.
  1511         ].
  1510 	].
  1512 
  1511 
  1513         action == #abort ifTrue:[
  1512 	action == #abort ifTrue:[
  1514             Object abortSignal raise.
  1513 	    Object abortSignal raise.
  1515             ^ false
  1514 	    ^ false
  1516         ].
  1515 	].
  1517         action == #skip ifTrue:[
  1516 	action == #skip ifTrue:[
  1518             skipSignal raise.
  1517 	    skipSignal raise.
  1519             ^ false
  1518 	    ^ false
  1520         ].
  1519 	].
  1521         ^  false 
  1520 	^  false 
  1522     ].
  1521     ].
  1523     ^self changeTextEditor error:aString position:relPos to:relEndPos from:aCompiler
  1522     ^self changeTextEditor error:aString position:relPos to:relEndPos from:aCompiler
  1524 
  1523 
  1525 !
  1524 !
  1526 
  1525 
  1598     aStream := self streamForChange:aChange.
  1597     aStream := self streamForChange:aChange.
  1599     aStream isNil ifTrue:[^ self].
  1598     aStream isNil ifTrue:[^ self].
  1600 
  1599 
  1601     nm := self classNameOfChange:aChange.
  1600     nm := self classNameOfChange:aChange.
  1602     nm notNil ifTrue:[
  1601     nm notNil ifTrue:[
  1603         |cls|
  1602 	|cls|
  1604 
  1603 
  1605         cls := Smalltalk at:(nm asSymbol) ifAbsent:[].
  1604 	cls := Smalltalk at:(nm asSymbol) ifAbsent:[].
  1606         cls notNil ifTrue:[
  1605 	cls notNil ifTrue:[
  1607             cls isLoaded ifFalse:[
  1606 	    cls isLoaded ifFalse:[
  1608                 cls autoload
  1607 		cls autoload
  1609             ]
  1608 	    ]
  1610         ]
  1609 	]
  1611     ].
  1610     ].
  1612 
  1611 
  1613     applyAction := [
  1612     applyAction := [
  1614         |sig|
  1613 	|sig|
  1615 
  1614 
  1616         (skipSignal notNil) ifTrue:[
  1615 	(skipSignal notNil) ifTrue:[
  1617             sig := skipSignal
  1616 	    sig := skipSignal
  1618         ] ifFalse:[
  1617 	] ifFalse:[
  1619             sig := Object abortSignal
  1618 	    sig := Object abortSignal
  1620         ].
  1619 	].
  1621         sig catch:[
  1620 	sig catch:[
  1622             |reader doItChunk methodsForChunk|
  1621 	    |reader doItChunk methodsForChunk|
  1623 
  1622 
  1624             "/ a followup methodsFor: chunk...
  1623 	    "/ a followup methodsFor: chunk...
  1625             aChange followUp ifTrue:[
  1624 	    aChange followUp ifTrue:[
  1626                 methodsForChunk := aChange chunk.
  1625 		methodsForChunk := aChange chunk.
  1627             ] ifFalse:[
  1626 	    ] ifFalse:[
  1628                 doItChunk := aStream nextChunk.   "/ an empty chunk sometimes...
  1627 		doItChunk := aStream nextChunk.   "/ an empty chunk sometimes...
  1629                 doItChunk notEmpty ifTrue:[
  1628 		doItChunk notEmpty ifTrue:[
  1630                     Compiler evaluate:doItChunk notifying:self.
  1629 		    Compiler evaluate:doItChunk notifying:self.
  1631                 ] ifFalse:[
  1630 		] ifFalse:[
  1632                     methodsForChunk := aStream nextChunk.   "/ the real one
  1631 		    methodsForChunk := aStream nextChunk.   "/ the real one
  1633                 ]
  1632 		]
  1634             ].
  1633 	    ].
  1635             methodsForChunk notNil ifTrue:[
  1634 	    methodsForChunk notNil ifTrue:[
  1636                 Class methodRedefinitionSignal handle:[:ex |
  1635 		Class methodRedefinitionSignal handle:[:ex |
  1637                     ex proceedWith:#keep
  1636 		    ex proceedWith:#keep
  1638                 ] do:[
  1637 		] do:[
  1639                     reader := Compiler evaluate:methodsForChunk notifying:self.
  1638 		    reader := Compiler evaluate:methodsForChunk notifying:self.
  1640                     reader fileInFrom:aStream notifying:self passChunk:false single:true.
  1639 		    reader fileInFrom:aStream notifying:self passChunk:false single:true.
  1641                 ]
  1640 		]
  1642             ]
  1641 	    ]
  1643         ].
  1642 	].
  1644     ].
  1643     ].
  1645 
  1644 
  1646     "/
  1645     "/
  1647     "/ if I am showing the changes file, dont update it
  1646     "/ if I am showing the changes file, dont update it
  1648     "/
  1647     "/
  1649     changeFileName asFilename pathName = ObjectMemory nameForChanges asFilename pathName ifTrue:[
  1648     changeFileName asFilename pathName = ObjectMemory nameForChanges asFilename pathName ifTrue:[
  1650         Class withoutUpdatingChangesDo:applyAction
  1649 	Class withoutUpdatingChangesDo:applyAction
  1651     ] ifFalse:[
  1650     ] ifFalse:[
  1652         applyAction value
  1651 	applyAction value
  1653     ].
  1652     ].
  1654     aStream close
  1653     aStream close
  1655 
  1654 
  1656     "Modified: / 8.9.1998 / 12:48:01 / cg"
  1655     "Modified: / 8.9.1998 / 12:48:01 / cg"
  1657 !
  1656 !
  1658 
  1657 
  1659 autoSelectChange:aChange
  1658 autoSelectChange:aChange
  1660     "selects aChange"
  1659     "selects aChange"
  1661 
  1660 
  1662     self class autoSelectNext ifTrue:[         
  1661     self class autoSelectNext ifTrue:[         
  1663         ((self listOfChanges indexOf: aChange) <= self listOfChanges size) ifTrue:[
  1662 	((self listOfChanges indexOf: aChange) <= self listOfChanges size) ifTrue:[
  1664             self selectionOfChange value: aChange.  
  1663 	    self selectionOfChange value: aChange.  
  1665             self changeSelected:(self listOfChanges indexOf: aChange).
  1664 	    self changeSelected:(self listOfChanges indexOf: aChange).
  1666             self updateChannels.
  1665 	    self updateChannels.
  1667             ^ self
  1666 	    ^ self
  1668         ]
  1667 	]
  1669     ].         
  1668     ].         
  1670     self updateChannels.
  1669     self updateChannels.
  1671     self unselectChange
  1670     self unselectChange
  1672 
  1671 
  1673 !
  1672 !
  1685 
  1684 
  1686     |last|
  1685     |last|
  1687 
  1686 
  1688     last := self listOfChanges size.
  1687     last := self listOfChanges size.
  1689     aChange notNil ifTrue:[  
  1688     aChange notNil ifTrue:[  
  1690         self autoSelectChange:aChange
  1689 	self autoSelectChange:aChange
  1691     ] ifFalse:[
  1690     ] ifFalse:[
  1692         self selectionOfChange value: (self listOfChanges at: last ifAbsent: nil).
  1691 	self selectionOfChange value: (self listOfChanges at: last ifAbsent: nil).
  1693         self changeSelected: last
  1692 	self changeSelected: last
  1694     ].
  1693     ].
  1695     self updateChannels
  1694     self updateChannels
  1696 !
  1695 !
  1697 
  1696 
  1698 changeColumn: aColumnId add: addOrRemove
  1697 changeColumn: aColumnId add: addOrRemove
  1702 
  1701 
  1703     newListOfChangeColumns := self listOfChangeColumns asOrderedCollection.
  1702     newListOfChangeColumns := self listOfChangeColumns asOrderedCollection.
  1704     addOrRemove
  1703     addOrRemove
  1705     ifTrue:
  1704     ifTrue:
  1706     [    
  1705     [    
  1707         newListOfChangeColumns add: 
  1706 	newListOfChangeColumns add: 
  1708             ((self class tableColumnsForChangeAttributes 
  1707 	    ((self class tableColumnsForChangeAttributes 
  1709                 collect: [:i| i decodeAsLiteralArray]) 
  1708 		collect: [:i| i decodeAsLiteralArray]) 
  1710                     detect: [:column| column id = aColumnId])
  1709 		    detect: [:column| column id = aColumnId])
  1711     ]
  1710     ]
  1712     ifFalse:
  1711     ifFalse:
  1713     [
  1712     [
  1714         newListOfChangeColumns remove: 
  1713 	newListOfChangeColumns remove: 
  1715             (self listOfChangeColumns detect: [:column| column id = aColumnId] ifNone: nil) ifAbsent: nil
  1714 	    (self listOfChangeColumns detect: [:column| column id = aColumnId] ifNone: nil) ifAbsent: nil
  1716     ].
  1715     ].
  1717     self listOfChangeColumns contents: newListOfChangeColumns.
  1716     self listOfChangeColumns contents: newListOfChangeColumns.
  1718     self autoSelectLast
  1717     self autoSelectLast
  1719 
  1718 
  1720     "Modified: / 19.5.1998 / 20:32:53 / cg"
  1719     "Modified: / 19.5.1998 / 20:32:53 / cg"
  1732 checkClassIsLoaded:aClass
  1731 checkClassIsLoaded:aClass
  1733     "returns true if aClass is loaded"
  1732     "returns true if aClass is loaded"
  1734 
  1733 
  1735     |cls|
  1734     |cls|
  1736     aClass isMeta ifTrue:[
  1735     aClass isMeta ifTrue:[
  1737         cls := aClass soleInstance
  1736 	cls := aClass soleInstance
  1738     ] ifFalse:[
  1737     ] ifFalse:[
  1739         cls := aClass
  1738 	cls := aClass
  1740     ].
  1739     ].
  1741     cls isLoaded ifFalse:[
  1740     cls isLoaded ifFalse:[
  1742         (self confirm:(cls name , ' is an autoloaded class.\I can only compare the methods texts if its loaded first.\\Load the class first ?') withCRs)
  1741 	(self confirm:(cls name , ' is an autoloaded class.\I can only compare the methods texts if its loaded first.\\Load the class first ?') withCRs)
  1743         ifTrue:[
  1742 	ifTrue:[
  1744             cls autoload
  1743 	    cls autoload
  1745         ]
  1744 	]
  1746     ].
  1745     ].
  1747     ^ cls isLoaded
  1746     ^ cls isLoaded
  1748 !
  1747 !
  1749 
  1748 
  1750 checkIfFileHasChanged
  1749 checkIfFileHasChanged
  1753     |f info|
  1752     |f info|
  1754 
  1753 
  1755     Processor removeTimedBlock:autoUpdateBlock.   
  1754     Processor removeTimedBlock:autoUpdateBlock.   
  1756     f := changeFileName asFilename.
  1755     f := changeFileName asFilename.
  1757     (info := f info) isNil ifTrue:[
  1756     (info := f info) isNil ifTrue:[
  1758         self newLabel:'unaccessable'
  1757 	self newLabel:'unaccessable'
  1759     ] ifFalse:[
  1758     ] ifFalse:[
  1760         (info modified) > changeFileTimestamp ifTrue:[
  1759 	(info modified) > changeFileTimestamp ifTrue:[
  1761             self newLabel:'outdated'.
  1760 	    self newLabel:'outdated'.
  1762             AutoUpdate ifTrue:[
  1761 	    AutoUpdate ifTrue:[
  1763                 self doReload
  1762 		self doReload
  1764             ]
  1763 	    ]
  1765         ] ifFalse:[
  1764 	] ifFalse:[
  1766             self newLabel:''
  1765 	    self newLabel:''
  1767         ]
  1766 	]
  1768     ].
  1767     ].
  1769     Processor addTimedBlock:autoUpdateBlock afterSeconds:5.
  1768     Processor addTimedBlock:autoUpdateBlock afterSeconds:5.
  1770 !
  1769 !
  1771 
  1770 
  1772 classNameOfChange:aChange
  1771 classNameOfChange:aChange
  1776     |name|
  1775     |name|
  1777 
  1776 
  1778     name := self fullClassNameOfChange:aChange.
  1777     name := self fullClassNameOfChange:aChange.
  1779     name isNil ifTrue:[^ nil].
  1778     name isNil ifTrue:[^ nil].
  1780     (name endsWith:' class') ifTrue:[
  1779     (name endsWith:' class') ifTrue:[
  1781         ^ name copyWithoutLast:6
  1780 	^ name copyWithoutLast:6
  1782     ].
  1781     ].
  1783     ^ name
  1782     ^ name
  1784 !
  1783 !
  1785 
  1784 
  1786 compareChange:aChange
  1785 compareChange:aChange
  1794     aStream isNil ifTrue:[^ self].
  1793     aStream isNil ifTrue:[^ self].
  1795 
  1794 
  1796     showDiff := false.
  1795     showDiff := false.
  1797 
  1796 
  1798     aChange followUp ifFalse:[
  1797     aChange followUp ifFalse:[
  1799         sawExcla := aStream peekFor:(aStream class chunkSeparator).
  1798 	sawExcla := aStream peekFor:(aStream class chunkSeparator).
  1800         chunk := aStream nextChunk.
  1799 	chunk := aStream nextChunk.
  1801     ] ifTrue:[
  1800     ] ifTrue:[
  1802         chunk := aChange chunk.
  1801 	chunk := aChange chunk.
  1803         sawExcla := true.
  1802 	sawExcla := true.
  1804     ].
  1803     ].
  1805 
  1804 
  1806     beep := false.
  1805     beep := false.
  1807     sawExcla ifFalse:[
  1806     sawExcla ifFalse:[
  1808         outcome := 'Cannot compare this change\(i.e. this is not a method change)!!'.
  1807 	outcome := 'Cannot compare this change\(i.e. this is not a method change)!!'.
  1809 
  1808 
  1810         parseTree := Parser parseExpression:chunk.
  1809 	parseTree := Parser parseExpression:chunk.
  1811         (parseTree notNil and:[parseTree isMessage]) ifTrue:[
  1810 	(parseTree notNil and:[parseTree isMessage]) ifTrue:[
  1812             ((selector := parseTree selector) == #removeSelector:) ifTrue:[
  1811 	    ((selector := parseTree selector) == #removeSelector:) ifTrue:[
  1813                 thisClass := (parseTree receiver evaluate).
  1812 		thisClass := (parseTree receiver evaluate).
  1814                 thisClass isBehavior ifTrue:[
  1813 		thisClass isBehavior ifTrue:[
  1815                     (self checkClassIsLoaded:thisClass) ifTrue:[
  1814 		    (self checkClassIsLoaded:thisClass) ifTrue:[
  1816                         selector := (parseTree arg1 evaluate).
  1815 			selector := (parseTree arg1 evaluate).
  1817                         (thisClass includesSelector:selector) ifTrue:[
  1816 			(thisClass includesSelector:selector) ifTrue:[
  1818                             outcome := 'Change removes the #' , selector , ' method from ' , thisClass name.
  1817 			    outcome := 'Change removes the #' , selector , ' method from ' , thisClass name.
  1819                         ] ifFalse:[
  1818 			] ifFalse:[
  1820                             outcome := 'Change has no effect\(there is no method for #' , selector , ' in ' , thisClass name , ')'
  1819 			    outcome := 'Change has no effect\(there is no method for #' , selector , ' in ' , thisClass name , ')'
  1821                         ]
  1820 			]
  1822                     ] ifFalse:[
  1821 		    ] ifFalse:[
  1823                         beep := true.
  1822 			beep := true.
  1824                         outcome := 'Cannot compare this change (compare requires class to be loaded)!!'.
  1823 			outcome := 'Cannot compare this change (compare requires class to be loaded)!!'.
  1825                     ]
  1824 		    ]
  1826                 ]
  1825 		]
  1827             ].
  1826 	    ].
  1828             selector == #category: ifTrue:[
  1827 	    selector == #category: ifTrue:[
  1829                 parseTree receiver isMessage ifTrue:[
  1828 		parseTree receiver isMessage ifTrue:[
  1830                     parseTree receiver selector == #compiledMethodAt: ifTrue:[
  1829 		    parseTree receiver selector == #compiledMethodAt: ifTrue:[
  1831                         (method := parseTree receiver evaluate) isMethod ifTrue:[
  1830 			(method := parseTree receiver evaluate) isMethod ifTrue:[
  1832                             method category = parseTree arg1 evaluate ifTrue:[
  1831 			    method category = parseTree arg1 evaluate ifTrue:[
  1833                                 outcome := 'Change has no effect\(same category)'.
  1832 				outcome := 'Change has no effect\(same category)'.
  1834                             ] ifFalse:[
  1833 			    ] ifFalse:[
  1835                                 outcome := 'Category is different (''' , method category , ''' vs. ''' , parseTree arg1 evaluate , ''')'
  1834 				outcome := 'Category is different (''' , method category , ''' vs. ''' , parseTree arg1 evaluate , ''')'
  1836                             ]
  1835 			    ]
  1837                         ] ifFalse:[
  1836 			] ifFalse:[
  1838                             beep := true.
  1837 			    beep := true.
  1839                             outcome := 'There is no such method!!'
  1838 			    outcome := 'There is no such method!!'
  1840                         ]
  1839 			]
  1841                     ]
  1840 		    ]
  1842                 ]
  1841 		]
  1843             ]
  1842 	    ]
  1844         ]
  1843 	]
  1845     ] ifTrue:[
  1844     ] ifTrue:[
  1846         parseTree := Parser parseExpression:chunk.
  1845 	parseTree := Parser parseExpression:chunk.
  1847         (parseTree notNil 
  1846 	(parseTree notNil 
  1848          and:[parseTree ~~ #Error
  1847 	 and:[parseTree ~~ #Error
  1849          and:[parseTree isMessage]]) ifTrue:[
  1848 	 and:[parseTree isMessage]]) ifTrue:[
  1850             (parseTree selector == #methodsFor:) ifTrue:[
  1849 	    (parseTree selector == #methodsFor:) ifTrue:[
  1851                 thisClass := (parseTree receiver evaluate).
  1850 		thisClass := (parseTree receiver evaluate).
  1852                 thisClass isBehavior ifTrue:[
  1851 		thisClass isBehavior ifTrue:[
  1853                     (isLoaded := self checkClassIsLoaded:thisClass) ifFalse:[
  1852 		    (isLoaded := self checkClassIsLoaded:thisClass) ifFalse:[
  1854                         outcome := 'Cannot compare this change\(compare requires class to be loaded)!!'.
  1853 			outcome := 'Cannot compare this change\(compare requires class to be loaded)!!'.
  1855                     ].
  1854 		    ].
  1856 
  1855 
  1857                     cat := parseTree arg1 evaluate.
  1856 		    cat := parseTree arg1 evaluate.
  1858                     newSource := aStream nextChunk.
  1857 		    newSource := aStream nextChunk.
  1859 
  1858 
  1860                     parser := Parser parseMethod:newSource in:thisClass.
  1859 		    parser := Parser parseMethod:newSource in:thisClass.
  1861                     (parser notNil and:[parser ~~ #Error]) ifTrue:[
  1860 		    (parser notNil and:[parser ~~ #Error]) ifTrue:[
  1862                         sel := parser selector.
  1861 			sel := parser selector.
  1863                         oldMethod := thisClass compiledMethodAt:sel.
  1862 			oldMethod := thisClass compiledMethodAt:sel.
  1864                         oldMethod notNil ifTrue:[
  1863 			oldMethod notNil ifTrue:[
  1865                             (oldMethod category = cat) ifFalse:[
  1864 			    (oldMethod category = cat) ifFalse:[
  1866                                 Transcript showCR:'Category changed.'.
  1865 				Transcript showCR:'Category changed.'.
  1867                             ].
  1866 			    ].
  1868                             oldSource := oldMethod source.
  1867 			    oldSource := oldMethod source.
  1869                             (oldSource = newSource) ifTrue:[
  1868 			    (oldSource = newSource) ifTrue:[
  1870                                 outcome := 'Same source.'
  1869 				outcome := 'Same source.'
  1871                             ] ifFalse:[
  1870 			    ] ifFalse:[
  1872                                 oldSource isNil ifTrue:[
  1871 				oldSource isNil ifTrue:[
  1873                                     beep := true.
  1872 				    beep := true.
  1874                                     outcome := 'No source for compare.'
  1873 				    outcome := 'No source for compare.'
  1875                                 ] ifFalse:[
  1874 				] ifFalse:[
  1876                                     "/
  1875 				    "/
  1877                                     "/ compare for tabulator <-> space changes
  1876 				    "/ compare for tabulator <-> space changes
  1878                                     "/ before showing diff...
  1877 				    "/ before showing diff...
  1879                                     "/
  1878 				    "/
  1880                                     t1 := oldSource asCollectionOfLines collect:[:s | s withTabsExpanded].
  1879 				    t1 := oldSource asCollectionOfLines collect:[:s | s withTabsExpanded].
  1881                                     t2 := newSource asCollectionOfLines collect:[:s | s withTabsExpanded].
  1880 				    t2 := newSource asCollectionOfLines collect:[:s | s withTabsExpanded].
  1882                                     t1 = t2 ifTrue:[
  1881 				    t1 = t2 ifTrue:[
  1883                                         outcome := 'Same source.'
  1882 					outcome := 'Same source.'
  1884                                     ] ifFalse:[
  1883 				    ] ifFalse:[
  1885                                         outcome := 'Source changed!!'.
  1884 					outcome := 'Source changed!!'.
  1886                                         showDiff := true.
  1885 					showDiff := true.
  1887 
  1886 
  1888                                         "/
  1887 					"/
  1889                                         "/ check if only historyLine diffs
  1888 					"/ check if only historyLine diffs
  1890                                         "/
  1889 					"/
  1891                                         (HistoryManager notNil 
  1890 					(HistoryManager notNil 
  1892                                         and:[HistoryManager isActive]) ifTrue:[
  1891 					and:[HistoryManager isActive]) ifTrue:[
  1893                                             (HistoryManager withoutHistoryLines:newSource)
  1892 					    (HistoryManager withoutHistoryLines:newSource)
  1894                                             =
  1893 					    =
  1895                                             (HistoryManager withoutHistoryLines:oldSource)
  1894 					    (HistoryManager withoutHistoryLines:oldSource)
  1896                                             ifTrue:[
  1895 					    ifTrue:[
  1897                                                 outcome := 'Same source (history only).'.
  1896 						outcome := 'Same source (history only).'.
  1898                                                 showDiff := false.
  1897 						showDiff := false.
  1899                                             ]
  1898 					    ]
  1900                                         ].
  1899 					].
  1901                                     ]
  1900 				    ]
  1902                                 ]
  1901 				]
  1903                             ]
  1902 			    ]
  1904                         ] ifFalse:[
  1903 			] ifFalse:[
  1905                             isLoaded ifTrue:[
  1904 			    isLoaded ifTrue:[
  1906                                 beep := true.
  1905 				beep := true.
  1907                                 outcome := 'Method does not exist!!'
  1906 				outcome := 'Method does not exist!!'
  1908                             ]
  1907 			    ]
  1909                         ]
  1908 			]
  1910                     ] ifFalse:[
  1909 		    ] ifFalse:[
  1911                         outcome := 'Change unparsable!!'
  1910 			outcome := 'Change unparsable!!'
  1912                     ].
  1911 		    ].
  1913                     (showDiff and:[oldSource notNil and:[newSource notNil]]) ifTrue:[
  1912 		    (showDiff and:[oldSource notNil and:[newSource notNil]]) ifTrue:[
  1914                         d := DiffTextView 
  1913 			d := DiffTextView 
  1915                                 openOn:oldSource label:'Current version (in image)'
  1914 				openOn:oldSource label:'Current version (in image)'
  1916                                 and:newSource label:'Change version'.
  1915 				and:newSource label:'Change version'.
  1917                         d label:'method differences'.
  1916 			d label:'method differences'.
  1918                     ]
  1917 		    ]
  1919                 ] ifFalse:[
  1918 		] ifFalse:[
  1920                     beep := true.
  1919 		    beep := true.
  1921                     outcome := 'Class does not exist!!'
  1920 		    outcome := 'Class does not exist!!'
  1922                 ]
  1921 		]
  1923             ] ifFalse:[
  1922 	    ] ifFalse:[
  1924                 beep := true.
  1923 		beep := true.
  1925                 outcome := 'Not comparable!!'
  1924 		outcome := 'Not comparable!!'
  1926             ]
  1925 	    ]
  1927         ] ifFalse:[
  1926 	] ifFalse:[
  1928             beep := true.
  1927 	    beep := true.
  1929             outcome := 'Not comparable!!'
  1928 	    outcome := 'Not comparable!!'
  1930         ]
  1929 	]
  1931     ].
  1930     ].
  1932     aStream close.
  1931     aStream close.
  1933     showDiff ifFalse:[
  1932     showDiff ifFalse:[
  1934         beep ifTrue:[
  1933 	beep ifTrue:[
  1935             self warn:outcome withCRs.
  1934 	    self warn:outcome withCRs.
  1936         ] ifFalse:[
  1935 	] ifFalse:[
  1937             self information:outcome withCRs.
  1936 	    self information:outcome withCRs.
  1938         ]
  1937 	]
  1939     ]
  1938     ]
  1940 !
  1939 !
  1941 
  1940 
  1942 compressForClass:aClassNameOrNil
  1941 compressForClass:aClassNameOrNil
  1943     "compresses the list of changes; 
  1942     "compresses the list of changes; 
  1950 
  1949 
  1951     aStream := FileStream readonlyFileNamed:changeFileName.
  1950     aStream := FileStream readonlyFileNamed:changeFileName.
  1952     aStream isNil ifTrue:[^ self].
  1951     aStream isNil ifTrue:[^ self].
  1953 
  1952 
  1954     aClassNameOrNil isNil ifTrue:[
  1953     aClassNameOrNil isNil ifTrue:[
  1955         self newLabel:'compressing...'.
  1954 	self newLabel:'compressing...'.
  1956     ] ifFalse:[
  1955     ] ifFalse:[
  1957         self newLabel:'compressing for ' , aClassNameOrNil.
  1956 	self newLabel:'compressing for ' , aClassNameOrNil.
  1958     ].
  1957     ].
  1959 
  1958 
  1960     CompressSnapshotInfo == true ifTrue:[
  1959     CompressSnapshotInfo == true ifTrue:[
  1961         "
  1960 	"
  1962          get a prototype snapshot record (to be independent of
  1961 	 get a prototype snapshot record (to be independent of
  1963          the actual format ..
  1962 	 the actual format ..
  1964         "
  1963 	"
  1965         str := WriteStream on:String new.
  1964 	str := WriteStream on:String new.
  1966         Class addChangeRecordForSnapshot:'foo' to:str.
  1965 	Class addChangeRecordForSnapshot:'foo' to:str.
  1967         snapshotProto := str contents.
  1966 	snapshotProto := str contents.
  1968         snapshotPrefix := snapshotProto copyTo:10.
  1967 	snapshotPrefix := snapshotProto copyTo:10.
  1969         snapshotNameIndex := snapshotProto findString:'foo'.
  1968 	snapshotNameIndex := snapshotProto findString:'foo'.
  1970     ].
  1969     ].
  1971 
  1970 
  1972     self valueOfNotReading value: false.
  1971     self valueOfNotReading value: false.
  1973     self valueOfHavingSelection value: false.
  1972     self valueOfHavingSelection value: false.
  1974     self valueOfHavingChangeSelection value: false.
  1973     self valueOfHavingChangeSelection value: false.
  1975     self valueOfReadProgress value: 0.
  1974     self valueOfReadProgress value: 0.
  1976     self readProgressIndicator raise.
  1975     self readProgressIndicator raise.
  1977     self filterLabel label: 'Comp:'; redraw.
  1976     self filterLabel label: 'Comp:'; redraw.
  1978 
  1977 
  1979     self withExecuteCursorDo:[
  1978     self withExecuteCursorDo:[
  1980         |numChanges classes selectors types excla sawExcla
  1979 	|numChanges classes selectors types excla sawExcla
  1981          changeNr chunk aParseTree parseTreeChunk
  1980 	 changeNr chunk aParseTree parseTreeChunk
  1982          thisClass thisSelector codeChunk codeParser
  1981 	 thisClass thisSelector codeChunk codeParser
  1983          compressThis oldValue|
  1982 	 compressThis oldValue|
  1984 
  1983 
  1985         numChanges := changes size.
  1984 	numChanges := changes size.
  1986         classes := Array new:numChanges.
  1985 	classes := Array new:numChanges.
  1987         selectors := Array new:numChanges.
  1986 	selectors := Array new:numChanges.
  1988         types := Array new:numChanges.
  1987 	types := Array new:numChanges.
  1989 
  1988 
  1990         "starting at the end, get the change class and change selector;
  1989 	"starting at the end, get the change class and change selector;
  1991          collect all in classes / selectors"
  1990 	 collect all in classes / selectors"
  1992 
  1991 
  1993         changeNr := numChanges.
  1992 	changeNr := numChanges.
  1994         excla := aStream class chunkSeparator.
  1993 	excla := aStream class chunkSeparator.
  1995 
  1994 
  1996         [changeNr >= 1] whileTrue:[
  1995 	[changeNr >= 1] whileTrue:[
  1997             oldValue := self valueOfReadProgress value.
  1996 	    oldValue := self valueOfReadProgress value.
  1998                 self valueOfReadProgress value: (100 - ((aStream position/aStream size) * 100) rounded).
  1997 		self valueOfReadProgress value: (100 - ((aStream position/aStream size) * 100) rounded).
  1999                 oldValue ~~ self valueOfReadProgress value
  1998 		oldValue ~~ self valueOfReadProgress value
  2000                     ifTrue: [self readProgressIndicator redrawEdges;redraw].
  1999 		    ifTrue: [self readProgressIndicator redrawEdges;redraw].
  2001             aStream position:(changes at: changeNr) position.
  2000 	    aStream position:(changes at: changeNr) position.
  2002             sawExcla := aStream peekFor:excla.
  2001 	    sawExcla := aStream peekFor:excla.
  2003             chunk := aStream nextChunk.
  2002 	    chunk := aStream nextChunk.
  2004             sawExcla ifTrue:[
  2003 	    sawExcla ifTrue:[
  2005                 "optimize a bit if multiple methods for same category arrive"
  2004 		"optimize a bit if multiple methods for same category arrive"
  2006                 (chunk = parseTreeChunk) ifFalse:[
  2005 		(chunk = parseTreeChunk) ifFalse:[
  2007                     aParseTree := Parser parseExpression:chunk.
  2006 		    aParseTree := Parser parseExpression:chunk.
  2008                     parseTreeChunk := chunk
  2007 		    parseTreeChunk := chunk
  2009                 ].
  2008 		].
  2010                 (aParseTree notNil 
  2009 		(aParseTree notNil 
  2011                 and:[(aParseTree ~~ #Error) 
  2010 		and:[(aParseTree ~~ #Error) 
  2012                 and:[aParseTree isMessage]]) ifTrue:[
  2011 		and:[aParseTree isMessage]]) ifTrue:[
  2013                     (aParseTree selector == #methodsFor:) ifTrue:[
  2012 		    (aParseTree selector == #methodsFor:) ifTrue:[
  2014                         thisClass := (aParseTree receiver evaluate).
  2013 			thisClass := (aParseTree receiver evaluate).
  2015                         codeChunk := aStream nextChunk.
  2014 			codeChunk := aStream nextChunk.
  2016                         codeParser := Parser 
  2015 			codeParser := Parser 
  2017                                           parseMethodSpecification:codeChunk
  2016 					  parseMethodSpecification:codeChunk
  2018                                           in:thisClass
  2017 					  in:thisClass
  2019                                           ignoreErrors:true
  2018 					  ignoreErrors:true
  2020                                           ignoreWarnings:true.
  2019 					  ignoreWarnings:true.
  2021                         (codeParser notNil and:[codeParser ~~ #Error]) ifTrue:[
  2020 			(codeParser notNil and:[codeParser ~~ #Error]) ifTrue:[
  2022                             selectors at:changeNr put:(codeParser selector).
  2021 			    selectors at:changeNr put:(codeParser selector).
  2023                             classes at:changeNr put:thisClass.
  2022 			    classes at:changeNr put:thisClass.
  2024                             types at:changeNr put:#methodsFor
  2023 			    types at:changeNr put:#methodsFor
  2025                         ]
  2024 			]
  2026                     ]
  2025 		    ]
  2027                 ]
  2026 		]
  2028             ] ifFalse:[
  2027 	    ] ifFalse:[
  2029                 aParseTree := Parser parseExpression:chunk.
  2028 		aParseTree := Parser parseExpression:chunk.
  2030                 parseTreeChunk := chunk.
  2029 		parseTreeChunk := chunk.
  2031                 (aParseTree notNil 
  2030 		(aParseTree notNil 
  2032                 and:[(aParseTree ~~ #Error) 
  2031 		and:[(aParseTree ~~ #Error) 
  2033                 and:[aParseTree isMessage]]) ifTrue:[
  2032 		and:[aParseTree isMessage]]) ifTrue:[
  2034                     (aParseTree selector == #removeSelector:) ifTrue:[
  2033 		    (aParseTree selector == #removeSelector:) ifTrue:[
  2035                         selectors at:changeNr put:(aParseTree arg1 value ).
  2034 			selectors at:changeNr put:(aParseTree arg1 value ).
  2036                         classes at:changeNr put:(aParseTree receiver evaluate).
  2035 			classes at:changeNr put:(aParseTree receiver evaluate).
  2037                         types at:changeNr put:#removeSelector
  2036 			types at:changeNr put:#removeSelector
  2038                     ]
  2037 		    ]
  2039                 ] ifFalse:[
  2038 		] ifFalse:[
  2040                     CompressSnapshotInfo == true ifTrue:[
  2039 		    CompressSnapshotInfo == true ifTrue:[
  2041                         (chunk startsWith:snapshotPrefix) ifTrue:[
  2040 			(chunk startsWith:snapshotPrefix) ifTrue:[
  2042                             str := chunk readStream position:snapshotNameIndex.
  2041 			    str := chunk readStream position:snapshotNameIndex.
  2043                             fileName := str upTo:(Character space).
  2042 			    fileName := str upTo:(Character space).
  2044                             "
  2043 			    "
  2045                              kludge to allow use of match-check below
  2044 			     kludge to allow use of match-check below
  2046                             "
  2045 			    "
  2047                             selectors at:changeNr put:snapshotPrefix.
  2046 			    selectors at:changeNr put:snapshotPrefix.
  2048                             classes at:changeNr put:fileName.
  2047 			    classes at:changeNr put:fileName.
  2049                         ]
  2048 			]
  2050                     ]
  2049 		    ]
  2051                 ]
  2050 		]
  2052             ].
  2051 	    ].
  2053             changeNr := changeNr - 1
  2052 	    changeNr := changeNr - 1
  2054         ].
  2053 	].
  2055         aStream close.
  2054 	aStream close.
  2056 
  2055 
  2057         "for all changes, look for another class/selector occurence later
  2056 	"for all changes, look for another class/selector occurence later
  2058          in the list and, if there is one, add change number to the delete set"
  2057 	 in the list and, if there is one, add change number to the delete set"
  2059 
  2058 
  2060         deleteSet := OrderedCollection new.
  2059 	deleteSet := OrderedCollection new.
  2061         changeNr := 1.
  2060 	changeNr := 1.
  2062         [changeNr < changes size] whileTrue:[
  2061 	[changeNr < changes size] whileTrue:[
  2063             thisClass := classes at:changeNr.
  2062 	    thisClass := classes at:changeNr.
  2064 
  2063 
  2065             compressThis := false.
  2064 	    compressThis := false.
  2066             aClassNameOrNil isNil ifTrue:[
  2065 	    aClassNameOrNil isNil ifTrue:[
  2067                 compressThis := true
  2066 		compressThis := true
  2068             ] ifFalse:[
  2067 	    ] ifFalse:[
  2069                 "/ skipping unloaded/unknown classes
  2068 		"/ skipping unloaded/unknown classes
  2070                 thisClass isBehavior ifTrue:[
  2069 		thisClass isBehavior ifTrue:[
  2071                     thisClass isMeta ifTrue:[
  2070 		    thisClass isMeta ifTrue:[
  2072                         compressThis := aClassNameOrNil = thisClass soleInstance name. 
  2071 			compressThis := aClassNameOrNil = thisClass soleInstance name. 
  2073                     ] ifFalse:[
  2072 		    ] ifFalse:[
  2074                         compressThis := aClassNameOrNil = thisClass name.
  2073 			compressThis := aClassNameOrNil = thisClass name.
  2075                         (PrivateAsSeparate not and: [thisClass isPrivate])
  2074 			(PrivateAsSeparate not and: [thisClass isPrivate])
  2076                             ifTrue:[compressThis := aClassNameOrNil = thisClass owningClass name]
  2075 			    ifTrue:[compressThis := aClassNameOrNil = thisClass owningClass name]
  2077                     ]
  2076 		    ]
  2078                  ]
  2077 		 ]
  2079             ].
  2078 	    ].
  2080 
  2079 
  2081             compressThis ifTrue:[
  2080 	    compressThis ifTrue:[
  2082                 thisSelector := selectors at:changeNr.
  2081 		thisSelector := selectors at:changeNr.
  2083                 searchIndex := changeNr.
  2082 		searchIndex := changeNr.
  2084                 anyMore := true.
  2083 		anyMore := true.
  2085                 [anyMore] whileTrue:[
  2084 		[anyMore] whileTrue:[
  2086                     searchIndex := classes indexOf:thisClass
  2085 		    searchIndex := classes indexOf:thisClass
  2087                                         startingAt:(searchIndex + 1).
  2086 					startingAt:(searchIndex + 1).
  2088                     (searchIndex ~~ 0) ifTrue:[
  2087 		    (searchIndex ~~ 0) ifTrue:[
  2089                         ((selectors at:searchIndex) == thisSelector) ifTrue:[
  2088 			((selectors at:searchIndex) == thisSelector) ifTrue:[
  2090                             thisClass notNil ifTrue:[
  2089 			    thisClass notNil ifTrue:[
  2091                                 deleteSet add:changeNr.
  2090 				deleteSet add:changeNr.
  2092                                 anyMore := false
  2091 				anyMore := false
  2093                             ]
  2092 			    ]
  2094                         ]
  2093 			]
  2095                     ] ifFalse:[
  2094 		    ] ifFalse:[
  2096                         anyMore := false      
  2095 			anyMore := false      
  2097                     ]
  2096 		    ]
  2098                 ].
  2097 		].
  2099             ].
  2098 	    ].
  2100 
  2099 
  2101             changeNr := changeNr + 1
  2100 	    changeNr := changeNr + 1
  2102         ].
  2101 	].
  2103 
  2102 
  2104         "finally delete what has been found"
  2103 	"finally delete what has been found"
  2105 
  2104 
  2106         (deleteSet size > 0) ifTrue:[
  2105 	(deleteSet size > 0) ifTrue:[
  2107             index := deleteSet size.
  2106 	    index := deleteSet size.
  2108             [index > 0] whileTrue:[
  2107 	    [index > 0] whileTrue:[
  2109                 self silentDeleteChange: (changes at: (deleteSet at:index)).
  2108 		self silentDeleteChange: (changes at: (deleteSet at:index)).
  2110                 index := index - 1
  2109 		index := index - 1
  2111             ].
  2110 	    ].
  2112             self setChangeList
  2111 	    self setChangeList
  2113         ].
  2112 	].
  2114     ].
  2113     ].
  2115     self valueOfNotReading value: true.
  2114     self valueOfNotReading value: true.
  2116     self filterField raise.
  2115     self filterField raise.
  2117     self filterLabel label: 'Filter:'.
  2116     self filterLabel label: 'Filter:'.
  2118     self newLabel: ''
  2117     self newLabel: ''
  2121 contractClass:className selector:selector to:maxLen
  2120 contractClass:className selector:selector to:maxLen
  2122     |s l|
  2121     |s l|
  2123 
  2122 
  2124     s := className , ' ', selector.
  2123     s := className , ' ', selector.
  2125     s size > maxLen ifTrue:[
  2124     s size > maxLen ifTrue:[
  2126         l := maxLen - 1 - selector size max:20.
  2125 	l := maxLen - 1 - selector size max:20.
  2127         s := (className contractTo:l) , ' ' , selector.
  2126 	s := (className contractTo:l) , ' ' , selector.
  2128 
  2127 
  2129         s size > maxLen ifTrue:[
  2128 	s size > maxLen ifTrue:[
  2130             l := maxLen - 1 - className size max:20.
  2129 	    l := maxLen - 1 - className size max:20.
  2131             s := className , ' ', (selector contractTo:l).
  2130 	    s := className , ' ', (selector contractTo:l).
  2132 
  2131 
  2133             s size > maxLen ifTrue:[
  2132 	    s size > maxLen ifTrue:[
  2134                 s := (className contractTo:(maxLen // 2 - 1)) , ' ' , (selector contractTo:maxLen // 2)
  2133 		s := (className contractTo:(maxLen // 2 - 1)) , ' ' , (selector contractTo:maxLen // 2)
  2135             ]
  2134 	    ]
  2136         ]
  2135 	]
  2137     ].
  2136     ].
  2138     ^ s
  2137     ^ s
  2139 
  2138 
  2140 !
  2139 !
  2141 
  2140 
  2142 deleteChangesFrom:start to:stop
  2141 deleteChangesFrom:start to:stop
  2143     "deletes a range of changes"
  2142     "deletes a range of changes"
  2144 
  2143 
  2145     self unselectChange.     
  2144     self unselectChange.     
  2146     stop to:start by:-1 do:[:changeNr|
  2145     stop to:start by:-1 do:[:changeNr|
  2147         self silentDeleteChange:(self listOfChanges at: changeNr)
  2146 	self silentDeleteChange:(self listOfChanges at: changeNr)
  2148     ].
  2147     ].
  2149     self setChangeList
  2148     self setChangeList
  2150 !
  2149 !
  2151 
  2150 
  2152 fullClassNameOfChange:aChange
  2151 fullClassNameOfChange:aChange
  2166     name := aChange className.
  2165     name := aChange className.
  2167     name notNil ifTrue:[^ name].
  2166     name notNil ifTrue:[^ name].
  2168 
  2167 
  2169     prevMethodDefNr := changes indexOf: aChange.
  2168     prevMethodDefNr := changes indexOf: aChange.
  2170     [(changes at:prevMethodDefNr) followUp] whileTrue:[
  2169     [(changes at:prevMethodDefNr) followUp] whileTrue:[
  2171         prevMethodDefNr := prevMethodDefNr - 1.
  2170 	prevMethodDefNr := prevMethodDefNr - 1.
  2172     ].
  2171     ].
  2173 
  2172 
  2174     "
  2173     "
  2175      get the chunk
  2174      get the chunk
  2176     "
  2175     "
  2177     chunk := (changes at:prevMethodDefNr) chunk.
  2176     chunk := (changes at:prevMethodDefNr) chunk.
  2178     chunk isNil ifTrue:[^ nil].       "mhmh - empty"
  2177     chunk isNil ifTrue:[^ nil].       "mhmh - empty"
  2179 
  2178 
  2180     (chunk startsWith:'''---') ifTrue:[
  2179     (chunk startsWith:'''---') ifTrue:[
  2181         words := chunk asCollectionOfWords.
  2180 	words := chunk asCollectionOfWords.
  2182         words size > 2 ifTrue:[
  2181 	words size > 2 ifTrue:[
  2183             (words at:2) = 'checkin' ifTrue:[
  2182 	    (words at:2) = 'checkin' ifTrue:[
  2184                 name := words at:3.
  2183 		name := words at:3.
  2185                 aChange className: name.
  2184 		aChange className: name.
  2186                 ^ name
  2185 		^ name
  2187             ]
  2186 	    ]
  2188         ].
  2187 	].
  2189     ].
  2188     ].
  2190 
  2189 
  2191     "/ fix it - otherwise, it cannot be parsed
  2190     "/ fix it - otherwise, it cannot be parsed
  2192     (chunk endsWith:'primitiveDefinitions:') ifTrue:[
  2191     (chunk endsWith:'primitiveDefinitions:') ifTrue:[
  2193         chunk := chunk , ''''''
  2192 	chunk := chunk , ''''''
  2194     ].
  2193     ].
  2195     (chunk endsWith:'primitiveFunctions:') ifTrue:[
  2194     (chunk endsWith:'primitiveFunctions:') ifTrue:[
  2196         chunk := chunk , ''''''
  2195 	chunk := chunk , ''''''
  2197     ].
  2196     ].
  2198     (chunk endsWith:'primitiveVariables:') ifTrue:[
  2197     (chunk endsWith:'primitiveVariables:') ifTrue:[
  2199         chunk := chunk , ''''''
  2198 	chunk := chunk , ''''''
  2200     ].
  2199     ].
  2201 
  2200 
  2202     "
  2201     "
  2203      use parser to construct a parseTree
  2202      use parser to construct a parseTree
  2204     "
  2203     "
  2205     oldDollarSetting := Parser allowDollarInIdentifier.
  2204     oldDollarSetting := Parser allowDollarInIdentifier.
  2206     [
  2205     [
  2207         Parser allowDollarInIdentifier:true.
  2206 	Parser allowDollarInIdentifier:true.
  2208         aParseTree := Parser parseExpression:chunk.
  2207 	aParseTree := Parser parseExpression:chunk.
  2209     ] valueNowOrOnUnwindDo:[
  2208     ] valueNowOrOnUnwindDo:[
  2210         Parser allowDollarInIdentifier:oldDollarSetting
  2209 	Parser allowDollarInIdentifier:oldDollarSetting
  2211     ].
  2210     ].
  2212 
  2211 
  2213     (aParseTree isNil or:[aParseTree == #Error]) ifTrue:[
  2212     (aParseTree isNil or:[aParseTree == #Error]) ifTrue:[
  2214         ^ nil        "seems strange... (could be a comment)"
  2213 	^ nil        "seems strange... (could be a comment)"
  2215     ].
  2214     ].
  2216     aParseTree isMessage ifFalse:[
  2215     aParseTree isMessage ifFalse:[
  2217         ^ nil        "very strange... (whats that ?)"
  2216 	^ nil        "very strange... (whats that ?)"
  2218     ].
  2217     ].
  2219 
  2218 
  2220     "
  2219     "
  2221      ask parser for selector
  2220      ask parser for selector
  2222     "
  2221     "
  2236        #'primitiveFunctions:'
  2235        #'primitiveFunctions:'
  2237        #'primitiveVariables:'
  2236        #'primitiveVariables:'
  2238        #'renameCategory:to:'
  2237        #'renameCategory:to:'
  2239        #'instanceVariableNames:'
  2238        #'instanceVariableNames:'
  2240     ) includes:sel) ifTrue:[
  2239     ) includes:sel) ifTrue:[
  2241         "
  2240 	"
  2242          yes, the className is the receiver
  2241 	 yes, the className is the receiver
  2243         "
  2242 	"
  2244         (recTree notNil and:[recTree ~~ #Error]) ifTrue:[
  2243 	(recTree notNil and:[recTree ~~ #Error]) ifTrue:[
  2245             isMeta := false.
  2244 	    isMeta := false.
  2246             recTree isUnaryMessage ifTrue:[
  2245 	    recTree isUnaryMessage ifTrue:[
  2247                 (recTree selector ~~ #class) ifTrue:[^ nil].
  2246 		(recTree selector ~~ #class) ifTrue:[^ nil].
  2248                 "id class methodsFor:..."
  2247 		"id class methodsFor:..."
  2249                 recTree := recTree receiver.
  2248 		recTree := recTree receiver.
  2250                 isMeta := true.
  2249 		isMeta := true.
  2251             ].
  2250 	    ].
  2252             recTree isPrimary ifTrue:[
  2251 	    recTree isPrimary ifTrue:[
  2253                 name := recTree name.
  2252 		name := recTree name.
  2254                 isMeta ifTrue:[
  2253 		isMeta ifTrue:[
  2255                     name := name , ' class'.
  2254 		    name := name , ' class'.
  2256                 ].
  2255 		].
  2257                 aChange className: name.
  2256 		aChange className: name.
  2258                 ^ name
  2257 		^ name
  2259             ]
  2258 	    ]
  2260         ].
  2259 	].
  2261         "more strange things"
  2260 	"more strange things"
  2262         ^ nil
  2261 	^ nil
  2263     ].
  2262     ].
  2264 
  2263 
  2265     "
  2264     "
  2266      is it a change in a class-description ?
  2265      is it a change in a class-description ?
  2267     "
  2266     "
  2268     (('subclass:*' match:sel) 
  2267     (('subclass:*' match:sel) 
  2269     or:[('variable*subclass:*' match:sel)]) ifTrue:[
  2268     or:[('variable*subclass:*' match:sel)]) ifTrue:[
  2270         "/ must parse the full changes text, to get
  2269 	"/ must parse the full changes text, to get
  2271         "/ privacy information.
  2270 	"/ privacy information.
  2272 
  2271 
  2273         changeStream := self streamForChange:aChange.
  2272 	changeStream := self streamForChange:aChange.
  2274         changeStream notNil ifTrue:[
  2273 	changeStream notNil ifTrue:[
  2275             chunk := changeStream nextChunk.
  2274 	    chunk := changeStream nextChunk.
  2276             changeStream close.
  2275 	    changeStream close.
  2277             fullParseTree := Parser parseExpression:chunk.
  2276 	    fullParseTree := Parser parseExpression:chunk.
  2278             (fullParseTree isNil or:[fullParseTree == #Error]) ifTrue:[
  2277 	    (fullParseTree isNil or:[fullParseTree == #Error]) ifTrue:[
  2279                 fullParseTree := nil
  2278 		fullParseTree := nil
  2280             ].
  2279 	    ].
  2281             fullParseTree isMessage ifFalse:[
  2280 	    fullParseTree isMessage ifFalse:[
  2282                 fullParseTree := nil
  2281 		fullParseTree := nil
  2283             ].
  2282 	    ].
  2284             "/ actually, the nil case cannot happen
  2283 	    "/ actually, the nil case cannot happen
  2285             fullParseTree notNil ifTrue:[
  2284 	    fullParseTree notNil ifTrue:[
  2286                 aParseTree := fullParseTree.
  2285 		aParseTree := fullParseTree.
  2287                 sel := aParseTree selector.
  2286 		sel := aParseTree selector.
  2288             ].
  2287 	    ].
  2289         ].
  2288 	].
  2290 
  2289 
  2291         arg1Tree := aParseTree arg1.
  2290 	arg1Tree := aParseTree arg1.
  2292         (arg1Tree notNil and:[arg1Tree isConstant]) ifTrue:[
  2291 	(arg1Tree notNil and:[arg1Tree isConstant]) ifTrue:[
  2293             name := arg1Tree value asString.
  2292 	    name := arg1Tree value asString.
  2294 
  2293 
  2295             "/ is it a private-class ?
  2294 	    "/ is it a private-class ?
  2296             ('*privateIn:' match:sel) ifTrue:[
  2295 	    ('*privateIn:' match:sel) ifTrue:[
  2297                 ownerTree := aParseTree args last.
  2296 		ownerTree := aParseTree args last.
  2298                 ownerName := ownerTree name asString.
  2297 		ownerName := ownerTree name asString.
  2299                 name := ownerName , '::' , name
  2298 		name := ownerName , '::' , name
  2300             ].
  2299 	    ].
  2301             aChange className: name.
  2300 	    aChange className: name.
  2302             ^ name
  2301 	    ^ name
  2303         ].
  2302 	].
  2304         "very strange"
  2303 	"very strange"
  2305         ^ nil
  2304 	^ nil
  2306     ].
  2305     ].
  2307 
  2306 
  2308     "
  2307     "
  2309      is it a class remove ?
  2308      is it a class remove ?
  2310     "
  2309     "
  2311     (sel == #removeClass:) ifTrue:[
  2310     (sel == #removeClass:) ifTrue:[
  2312         (recTree notNil 
  2311 	(recTree notNil 
  2313         and:[recTree ~~ #Error
  2312 	and:[recTree ~~ #Error
  2314         and:[recTree isPrimary
  2313 	and:[recTree isPrimary
  2315         and:[recTree name = 'Smalltalk']]]) ifTrue:[
  2314 	and:[recTree name = 'Smalltalk']]]) ifTrue:[
  2316             arg1Tree := aParseTree arg1.
  2315 	    arg1Tree := aParseTree arg1.
  2317             (arg1Tree notNil and:[arg1Tree isPrimary]) ifTrue:[
  2316 	    (arg1Tree notNil and:[arg1Tree isPrimary]) ifTrue:[
  2318                 name := arg1Tree name.
  2317 		name := arg1Tree name.
  2319                 aChange className: name.
  2318 		aChange className: name.
  2320                 ^ name
  2319 		^ name
  2321             ].
  2320 	    ].
  2322         ]
  2321 	]
  2323     ].
  2322     ].
  2324 
  2323 
  2325     "
  2324     "
  2326      is it a method category change ?
  2325      is it a method category change ?
  2327     "
  2326     "
  2328     ((sel == #category:)
  2327     ((sel == #category:)
  2329     or:[sel == #privacy:]) ifTrue:[
  2328     or:[sel == #privacy:]) ifTrue:[
  2330         (recTree notNil 
  2329 	(recTree notNil 
  2331         and:[recTree ~~ #Error
  2330 	and:[recTree ~~ #Error
  2332         and:[recTree isMessage
  2331 	and:[recTree isMessage
  2333         and:[recTree selector == #compiledMethodAt:]]]) ifTrue:[
  2332 	and:[recTree selector == #compiledMethodAt:]]]) ifTrue:[
  2334             isMeta := false.
  2333 	    isMeta := false.
  2335             recTree := recTree receiver.
  2334 	    recTree := recTree receiver.
  2336             recTree isUnaryMessage ifTrue:[
  2335 	    recTree isUnaryMessage ifTrue:[
  2337                 (recTree selector ~~ #class) ifTrue:[^ nil].
  2336 		(recTree selector ~~ #class) ifTrue:[^ nil].
  2338                 "id class "
  2337 		"id class "
  2339                 recTree := recTree receiver
  2338 		recTree := recTree receiver
  2340             ].
  2339 	    ].
  2341             recTree isPrimary ifTrue:[
  2340 	    recTree isPrimary ifTrue:[
  2342                 isMeta ifTrue:[
  2341 		isMeta ifTrue:[
  2343                     name := name , ' class'.
  2342 		    name := name , ' class'.
  2344                 ].
  2343 		].
  2345                 name := recTree name.
  2344 		name := recTree name.
  2346                 aChange className: name.
  2345 		aChange className: name.
  2347                 ^ name
  2346 		^ name
  2348             ]
  2347 	    ]
  2349         ]
  2348 	]
  2350     ].
  2349     ].
  2351     ^ nil
  2350     ^ nil
  2352 !
  2351 !
  2353 
  2352 
  2354 newLabel:how
  2353 newLabel:how
  2361 readChangesFileInBackground:inBackground
  2360 readChangesFileInBackground:inBackground
  2362     "reads the changes file, creates a list of header-lines (changeChunks)
  2361     "reads the changes file, creates a list of header-lines (changeChunks)
  2363      and a list of chunk-positions (changePositions).
  2362      and a list of chunk-positions (changePositions).
  2364      Starting with 2.10.3, the entries are multi-col entries;
  2363      Starting with 2.10.3, the entries are multi-col entries;
  2365      the cols are:
  2364      the cols are:
  2366         1   delta (only if comparing)
  2365 	1   delta (only if comparing)
  2367                 '+' -> new method (w.r.t. current state)
  2366 		'+' -> new method (w.r.t. current state)
  2368                 '-' -> removed method (w.r.t. current state)
  2367 		'-' -> removed method (w.r.t. current state)
  2369                 '?' -> class does not exist currently
  2368 		'?' -> class does not exist currently
  2370                 '=' -> change is same as current methods source
  2369 		'=' -> change is same as current methods source
  2371         2   class/selector
  2370 	2   class/selector
  2372         3   type of change
  2371 	3   type of change
  2373                 doit
  2372 		doit
  2374                 method
  2373 		method
  2375                 category change
  2374 		category change
  2376         4   timestamp
  2375 	4   timestamp
  2377 
  2376 
  2378      since comparing slows down startup time, it is now disabled by
  2377      since comparing slows down startup time, it is now disabled by
  2379      default and can be enabled via a toggle."
  2378      default and can be enabled via a toggle."
  2380 
  2379 
  2381     |aStream maxLen i f|
  2380     |aStream maxLen i f|
  2400     self valueOfReadProgress value: 0.
  2399     self valueOfReadProgress value: 0.
  2401     self readProgressIndicator raise.
  2400     self readProgressIndicator raise.
  2402     self filterLabel label: 'Read:'; redraw.
  2401     self filterLabel label: 'Read:'; redraw.
  2403 
  2402 
  2404     self withReadCursorDo:[
  2403     self withReadCursorDo:[
  2405         |myProcess myPriority|
  2404 	|myProcess myPriority|
  2406 
  2405 
  2407         "
  2406 	"
  2408          this is a time consuming operation (especially, if reading an
  2407 	 this is a time consuming operation (especially, if reading an
  2409          NFS-mounted directory; therefore lower my priority...
  2408 	 NFS-mounted directory; therefore lower my priority...
  2410         "
  2409 	"
  2411         inBackground ifTrue:[
  2410 	inBackground ifTrue:[
  2412             myProcess := Processor activeProcess.
  2411 	    myProcess := Processor activeProcess.
  2413             myPriority := myProcess priority.
  2412 	    myPriority := myProcess priority.
  2414             myProcess priority:(Processor userBackgroundPriority).
  2413 	    myProcess priority:(Processor userBackgroundPriority).
  2415         ].
  2414 	].
  2416 
  2415 
  2417         [
  2416 	[
  2418             |excla timeStampInfo lastChange|
  2417 	    |excla timeStampInfo lastChange|
  2419 
  2418 
  2420             excla := aStream class chunkSeparator.
  2419 	    excla := aStream class chunkSeparator.
  2421 
  2420 
  2422             [aStream atEnd] whileFalse:[
  2421 	    [aStream atEnd] whileFalse:[
  2423                 |change changeDelta changeString changeType changeCategory
  2422 		|change changeDelta changeString changeType changeCategory
  2424                  line s l changeClass sawExcla category 
  2423 		 line s l changeClass sawExcla category 
  2425                  chunkText chunkPos sel oldValue|
  2424 		 chunkText chunkPos sel oldValue|
  2426 
  2425 
  2427                 change := Change new.
  2426 		change := Change new.
  2428                 "
  2427 		"
  2429                  get a chunk (separated by excla)
  2428 		 get a chunk (separated by excla)
  2430                 "
  2429 		"
  2431                 oldValue := self valueOfReadProgress value.
  2430 		oldValue := self valueOfReadProgress value.
  2432                 self valueOfReadProgress value: (((aStream position/aStream size) * 100) rounded).
  2431 		self valueOfReadProgress value: (((aStream position/aStream size) * 100) rounded).
  2433                 oldValue ~~ self valueOfReadProgress value
  2432 		oldValue ~~ self valueOfReadProgress value
  2434                     ifTrue: [self readProgressIndicator redrawEdges;redraw].
  2433 		    ifTrue: [self readProgressIndicator redrawEdges;redraw].
  2435 
  2434 
  2436                 aStream skipSeparators.
  2435 		aStream skipSeparators.
  2437                 chunkPos := aStream position.
  2436 		chunkPos := aStream position.
  2438 
  2437 
  2439                 sawExcla := aStream peekFor:excla.
  2438 		sawExcla := aStream peekFor:excla.
  2440                 chunkText := aStream nextChunk.
  2439 		chunkText := aStream nextChunk.
  2441                 chunkText notNil ifTrue:[
  2440 		chunkText notNil ifTrue:[
  2442                     |index headerLine cls|
  2441 		    |index headerLine cls|
  2443 
  2442 
  2444                     (chunkText startsWith:'''---- timestamp ') ifTrue:[
  2443 		    (chunkText startsWith:'''---- timestamp ') ifTrue:[
  2445                         timeStampInfo := (chunkText copyFrom:16 to:(chunkText size - 6)) withoutSpaces.
  2444 			timeStampInfo := (chunkText copyFrom:16 to:(chunkText size - 6)) withoutSpaces.
  2446                     ] ifFalse:[
  2445 		    ] ifFalse:[
  2447 
  2446 
  2448                         "
  2447 			"
  2449                          only first line is saved in changeChunks...
  2448 			 only first line is saved in changeChunks...
  2450                         "
  2449 			"
  2451                         index := chunkText indexOf:(Character cr).
  2450 			index := chunkText indexOf:(Character cr).
  2452                         (index ~~ 0) ifTrue:[
  2451 			(index ~~ 0) ifTrue:[
  2453                             chunkText := chunkText copyTo:(index - 1).
  2452 			    chunkText := chunkText copyTo:(index - 1).
  2454 
  2453 
  2455                             "take care for comment changes - must still be a
  2454 			    "take care for comment changes - must still be a
  2456                              valid expression for classNameOfChange: to work"
  2455 			     valid expression for classNameOfChange: to work"
  2457 
  2456 
  2458                             (chunkText endsWith:'comment:''') ifTrue:[
  2457 			    (chunkText endsWith:'comment:''') ifTrue:[
  2459                                 chunkText := chunkText , '...'''
  2458 				chunkText := chunkText , '...'''
  2460                             ].
  2459 			    ].
  2461                             (chunkText endsWith:'primitiveDefinitions:''') ifTrue:[
  2460 			    (chunkText endsWith:'primitiveDefinitions:''') ifTrue:[
  2462                                 sel := 'primitiveDefinitions:'.
  2461 				sel := 'primitiveDefinitions:'.
  2463                                 chunkText := chunkText copyWithoutLast:1
  2462 				chunkText := chunkText copyWithoutLast:1
  2464                             ].
  2463 			    ].
  2465                             (chunkText endsWith:'primitiveVariables:''') ifTrue:[
  2464 			    (chunkText endsWith:'primitiveVariables:''') ifTrue:[
  2466                                 sel := 'primitiveVariables:'.
  2465 				sel := 'primitiveVariables:'.
  2467                                 chunkText := chunkText copyWithoutLast:1
  2466 				chunkText := chunkText copyWithoutLast:1
  2468                             ].
  2467 			    ].
  2469                             (chunkText endsWith:'primitiveFunctions:''') ifTrue:[
  2468 			    (chunkText endsWith:'primitiveFunctions:''') ifTrue:[
  2470                                 sel := 'primitiveFunctions:'.
  2469 				sel := 'primitiveFunctions:'.
  2471                                 chunkText := chunkText copyWithoutLast:1
  2470 				chunkText := chunkText copyWithoutLast:1
  2472                             ].
  2471 			    ].
  2473                         ].
  2472 			].
  2474 
  2473 
  2475                         change chunk: chunkText.
  2474 			change chunk: chunkText.
  2476                         change position: chunkPos. 
  2475 			change position: chunkPos. 
  2477                         lastChange notNil ifTrue: [lastChange lastPosition: chunkPos - 1].
  2476 			lastChange notNil ifTrue: [lastChange lastPosition: chunkPos - 1].
  2478                         lastChange := change.
  2477 			lastChange := change.
  2479                         change timeStamp: timeStampInfo.
  2478 			change timeStamp: timeStampInfo.
  2480                         change followUp: false.
  2479 			change followUp: false.
  2481                         headerLine := nil.
  2480 			headerLine := nil.
  2482                         changeDelta := ' '.
  2481 			changeDelta := ' '.
  2483 
  2482 
  2484                         sawExcla ifFalse:[
  2483 			sawExcla ifFalse:[
  2485                             (chunkText startsWith:'''---- snap') ifTrue:[
  2484 			    (chunkText startsWith:'''---- snap') ifTrue:[
  2486                                 changeType := ''.
  2485 				changeType := ''.
  2487                                 headerLine := chunkText.
  2486 				headerLine := chunkText.
  2488                                 changeString := (chunkText contractTo:maxLen).
  2487 				changeString := (chunkText contractTo:maxLen).
  2489                                 timeStampInfo := nil.
  2488 				timeStampInfo := nil.
  2490                             ] ifFalse:[
  2489 			    ] ifFalse:[
  2491 
  2490 
  2492                                 |p cls|
  2491 				|p cls|
  2493 
  2492 
  2494                                 headerLine := chunkText , ' (doIt)'.
  2493 				headerLine := chunkText , ' (doIt)'.
  2495 
  2494 
  2496                                 "
  2495 				"
  2497                                  first, assume doIt - then lets have a more detailed look...
  2496 				 first, assume doIt - then lets have a more detailed look...
  2498                                 "
  2497 				"
  2499                                 ((chunkText startsWith:'''---- file')
  2498 				((chunkText startsWith:'''---- file')
  2500                                 or:[(chunkText startsWith:'''---- check')]) ifTrue:[
  2499 				or:[(chunkText startsWith:'''---- check')]) ifTrue:[
  2501                                     changeType := ''.
  2500 				    changeType := ''.
  2502                                     timeStampInfo := nil.
  2501 				    timeStampInfo := nil.
  2503                                 ] ifFalse:[
  2502 				] ifFalse:[
  2504                                     changeType := 'doIt'.
  2503 				    changeType := 'doIt'.
  2505                                 ].    
  2504 				].    
  2506                                 changeString := (chunkText contractTo:maxLen).
  2505 				changeString := (chunkText contractTo:maxLen).
  2507 
  2506 
  2508                                 p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2507 				p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2509                                 (p notNil 
  2508 				(p notNil 
  2510                                  and:[p ~~ #Error
  2509 				 and:[p ~~ #Error
  2511                                  and:[p isMessage]]) ifTrue:[
  2510 				 and:[p isMessage]]) ifTrue:[
  2512                                     sel := p selector.
  2511 				    sel := p selector.
  2513                                 ].
  2512 				].
  2514                                 (sel == #removeSelector:) ifTrue:[
  2513 				(sel == #removeSelector:) ifTrue:[
  2515                                     p receiver isUnaryMessage ifTrue:[
  2514 				    p receiver isUnaryMessage ifTrue:[
  2516                                         cls := p receiver receiver name.
  2515 					cls := p receiver receiver name.
  2517                                         changeClass := (Smalltalk classNamed:cls) class.
  2516 					changeClass := (Smalltalk classNamed:cls) class.
  2518                                         cls := cls , ' class'.
  2517 					cls := cls , ' class'.
  2519                                     ] ifFalse:[
  2518 				    ] ifFalse:[
  2520                                         cls := p receiver name.
  2519 					cls := p receiver name.
  2521                                         changeClass := (Smalltalk classNamed:cls)
  2520 					changeClass := (Smalltalk classNamed:cls)
  2522                                     ].
  2521 				    ].
  2523                                     sel := (p args at:1) evaluate.
  2522 				    sel := (p args at:1) evaluate.
  2524 
  2523 
  2525                                     DeltaInfoColumn ifTrue:[
  2524 				    DeltaInfoColumn ifTrue:[
  2526                                         (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[
  2525 					(changeClass isNil or:[changeClass isLoaded not]) ifTrue:[
  2527                                             changeDelta := '?'
  2526 					    changeDelta := '?'
  2528                                         ] ifFalse:[
  2527 					] ifFalse:[
  2529                                             (changeClass implements:sel asSymbol) ifTrue:[
  2528 					    (changeClass implements:sel asSymbol) ifTrue:[
  2530                                                 changeDelta := '-'.
  2529 						changeDelta := '-'.
  2531                                             ]
  2530 					    ]
  2532                                         ]
  2531 					]
  2533                                     ].
  2532 				    ].
  2534                                     changeType := 'remove'.
  2533 				    changeType := 'remove'.
  2535                                     changeString := self contractClass:cls selector:sel to:maxLen.
  2534 				    changeString := self contractClass:cls selector:sel to:maxLen.
  2536                                 ].
  2535 				].
  2537                                 (p ~~ #Error
  2536 				(p ~~ #Error
  2538                                 and:[p isMessage 
  2537 				and:[p isMessage 
  2539                                 and:[p receiver isMessage
  2538 				and:[p receiver isMessage
  2540                                 and:[p receiver selector == #compiledMethodAt:]]]) ifTrue:[
  2539 				and:[p receiver selector == #compiledMethodAt:]]]) ifTrue:[
  2541                                     p receiver receiver isUnaryMessage ifTrue:[
  2540 				    p receiver receiver isUnaryMessage ifTrue:[
  2542                                         cls := p receiver receiver receiver name.
  2541 					cls := p receiver receiver receiver name.
  2543                                         changeClass := (Smalltalk classNamed:cls) class.
  2542 					changeClass := (Smalltalk classNamed:cls) class.
  2544                                         cls := cls , ' class'.
  2543 					cls := cls , ' class'.
  2545                                     ] ifFalse:[
  2544 				    ] ifFalse:[
  2546                                         cls := p receiver receiver name.
  2545 					cls := p receiver receiver name.
  2547                                         changeClass := (Smalltalk classNamed:cls)
  2546 					changeClass := (Smalltalk classNamed:cls)
  2548                                     ].
  2547 				    ].
  2549                                     (sel == #category:) ifTrue:[
  2548 				    (sel == #category:) ifTrue:[
  2550                                         sel := (p receiver args at:1) evaluate.
  2549 					sel := (p receiver args at:1) evaluate.
  2551                                         changeType := '(category change)'.
  2550 					changeType := '(category change)'.
  2552                                         changeString := self contractClass:cls selector:sel to:maxLen.
  2551 					changeString := self contractClass:cls selector:sel to:maxLen.
  2553                                     ].
  2552 				    ].
  2554                                     (sel == #privacy:) ifTrue:[
  2553 				    (sel == #privacy:) ifTrue:[
  2555                                         sel := (p receiver args at:1) evaluate.
  2554 					sel := (p receiver args at:1) evaluate.
  2556                                         changeType := 'privacy change'.
  2555 					changeType := 'privacy change'.
  2557                                         changeString := self contractClass:cls selector:sel to:maxLen.
  2556 					changeString := self contractClass:cls selector:sel to:maxLen.
  2558                                     ].
  2557 				    ].
  2559                                 ].
  2558 				].
  2560                                 (#(#'subclass:'
  2559 				(#(#'subclass:'
  2561                                   #'variableSubclass:'
  2560 				  #'variableSubclass:'
  2562                                   #'variableByteSubclass:'
  2561 				  #'variableByteSubclass:'
  2563                                   #'variableWordSubclass:'
  2562 				  #'variableWordSubclass:'
  2564                                   #'variableLongSubclass:'
  2563 				  #'variableLongSubclass:'
  2565                                   #'variableFloatSubclass:'
  2564 				  #'variableFloatSubclass:'
  2566                                   #'variableDoubleSubclass:'
  2565 				  #'variableDoubleSubclass:'
  2567                                   #'primitiveDefinitions:'
  2566 				  #'primitiveDefinitions:'
  2568                                   #'primitiveFunctions:'
  2567 				  #'primitiveFunctions:'
  2569                                   #'primitiveVariables:'
  2568 				  #'primitiveVariables:'
  2570                                  ) includes:sel) ifTrue:[
  2569 				 ) includes:sel) ifTrue:[
  2571                                     changeType := 'class definition'.
  2570 				    changeType := 'class definition'.
  2572                                 ].
  2571 				].
  2573                             ]
  2572 			    ]
  2574                         ] ifTrue:[
  2573 			] ifTrue:[
  2575                             |done first p className cls text methodPos|
  2574 			    |done first p className cls text methodPos|
  2576 
  2575 
  2577                             "
  2576 			    "
  2578                              method definitions actually consist of
  2577 			     method definitions actually consist of
  2579                              two (or more) chunks; skip next chunk(s)
  2578 			     two (or more) chunks; skip next chunk(s)
  2580                              up to an empty one.
  2579 			     up to an empty one.
  2581                              The system only writes one chunk,
  2580 			     The system only writes one chunk,
  2582                              and we cannot handle more in this ChangesBrowser....
  2581 			     and we cannot handle more in this ChangesBrowser....
  2583                             "
  2582 			    "
  2584                             className := nil.
  2583 			    className := nil.
  2585                             p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2584 			    p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2586 
  2585 
  2587                             (p notNil and:[p ~~ #Error]) ifTrue:[
  2586 			    (p notNil and:[p ~~ #Error]) ifTrue:[
  2588                                 sel := p selector.
  2587 				sel := p selector.
  2589                                 (sel == #methodsFor:) ifTrue:[
  2588 				(sel == #methodsFor:) ifTrue:[
  2590                                     p receiver isUnaryMessage ifTrue:[
  2589 				    p receiver isUnaryMessage ifTrue:[
  2591                                         className := p receiver receiver name.
  2590 					className := p receiver receiver name.
  2592                                         changeClass := (Smalltalk classNamed:className) class.
  2591 					changeClass := (Smalltalk classNamed:className) class.
  2593                                         className := className , ' class'.
  2592 					className := className , ' class'.
  2594                                     ] ifFalse:[
  2593 				    ] ifFalse:[
  2595                                         className := p receiver name.
  2594 					className := p receiver name.
  2596                                         changeClass := Smalltalk classNamed:className
  2595 					changeClass := Smalltalk classNamed:className
  2597                                     ].
  2596 				    ].
  2598                                     category := (p args at:1) evaluate.
  2597 				    category := (p args at:1) evaluate.
  2599                                 ].
  2598 				].
  2600                             ].
  2599 			    ].
  2601 
  2600 
  2602                             done := false.
  2601 			    done := false.
  2603                             first := true.
  2602 			    first := true.
  2604                             [done] whileFalse:[
  2603 			    [done] whileFalse:[
  2605 
  2604 
  2606                                 changeDelta := ' '.
  2605 				changeDelta := ' '.
  2607                                 methodPos := aStream position.
  2606 				methodPos := aStream position.
  2608 
  2607 
  2609                                 text := aStream nextChunk.
  2608 				text := aStream nextChunk.
  2610                                 text isNil ifTrue:[
  2609 				text isNil ifTrue:[
  2611                                     done := true
  2610 				    done := true
  2612                                 ] ifFalse:[
  2611 				] ifFalse:[
  2613                                     done := text isEmpty
  2612 				    done := text isEmpty
  2614                                 ].
  2613 				].
  2615                                 done ifFalse:[
  2614 				done ifFalse:[
  2616                                     first ifFalse:[
  2615 				    first ifFalse:[
  2617                                         change := Change new.
  2616 					change := Change new.
  2618                                         change chunk: chunkText.
  2617 					change chunk: chunkText.
  2619                                         change string:changeString.
  2618 					change string:changeString.
  2620                                         change position: methodPos. 
  2619 					change position: methodPos. 
  2621                                         change className: className. 
  2620 					change className: className. 
  2622                                         lastChange notNil ifTrue: [lastChange lastPosition: methodPos - 1].
  2621 					lastChange notNil ifTrue: [lastChange lastPosition: methodPos - 1].
  2623                                         lastChange := change.
  2622 					lastChange := change.
  2624                                         change timeStamp: timeStampInfo.
  2623 					change timeStamp: timeStampInfo.
  2625                                         change followUp: true.
  2624 					change followUp: true.
  2626                                         editingClassSource := true.
  2625 					editingClassSource := true.
  2627                                     ].
  2626 				    ].
  2628 
  2627 
  2629                                     first := false.
  2628 				    first := false.
  2630                                     "
  2629 				    "
  2631                                      try to find the selector
  2630 				     try to find the selector
  2632                                     "
  2631 				    "
  2633                                     sel := nil.
  2632 				    sel := nil.
  2634                                     className notNil ifTrue:[
  2633 				    className notNil ifTrue:[
  2635                                         p := Parser 
  2634 					p := Parser 
  2636                                                  parseMethodSpecification:text
  2635 						 parseMethodSpecification:text
  2637                                                  in:nil
  2636 						 in:nil
  2638                                                  ignoreErrors:true
  2637 						 ignoreErrors:true
  2639                                                  ignoreWarnings:true.
  2638 						 ignoreWarnings:true.
  2640                                         (p notNil and:[p ~~ #Error]) ifTrue:[
  2639 					(p notNil and:[p ~~ #Error]) ifTrue:[
  2641                                             sel := p selector.
  2640 					    sel := p selector.
  2642                                         ]
  2641 					]
  2643                                     ].
  2642 				    ].
  2644 
  2643 
  2645                                     sel isNil ifTrue:[
  2644 				    sel isNil ifTrue:[
  2646                                         changeString := (chunkText contractTo:maxLen).
  2645 					changeString := (chunkText contractTo:maxLen).
  2647                                         changeType := 'change'.
  2646 					changeType := 'change'.
  2648                                         headerLine := chunkText , ' (change)'.
  2647 					headerLine := chunkText , ' (change)'.
  2649                                     ] ifFalse:[
  2648 				    ] ifFalse:[
  2650                                         changeString :=  self contractClass:className selector:sel to:maxLen.
  2649 					changeString :=  self contractClass:className selector:sel to:maxLen.
  2651                                         changeType := 'method definition'.
  2650 					changeType := 'method definition'.
  2652                                         changeCategory := category.
  2651 					changeCategory := category.
  2653                                         headerLine := className , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
  2652 					headerLine := className , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
  2654                                     ].
  2653 				    ].
  2655 
  2654 
  2656                                     DeltaInfoColumn ifTrue:[ 
  2655 				    DeltaInfoColumn ifTrue:[ 
  2657                                         changeClass isNil ifFalse:[
  2656 					changeClass isNil ifFalse:[
  2658                                             changeClass isMeta ifTrue:[
  2657 					    changeClass isMeta ifTrue:[
  2659                                                 cls := changeClass soleInstance
  2658 						cls := changeClass soleInstance
  2660                                             ] ifFalse:[
  2659 					    ] ifFalse:[
  2661                                                 cls := changeClass
  2660 						cls := changeClass
  2662                                             ].
  2661 					    ].
  2663                                         ].
  2662 					].
  2664 
  2663 
  2665                                         (changeClass isNil or:[cls isLoaded not]) ifTrue:[
  2664 					(changeClass isNil or:[cls isLoaded not]) ifTrue:[
  2666                                             changeDelta := '?'
  2665 					    changeDelta := '?'
  2667                                         ] ifFalse:[
  2666 					] ifFalse:[
  2668                                             (changeClass implements:sel asSymbol) ifFalse:[
  2667 					    (changeClass implements:sel asSymbol) ifFalse:[
  2669                                                 changeDelta := '+'.
  2668 						changeDelta := '+'.
  2670                                             ] ifTrue:[
  2669 					    ] ifTrue:[
  2671                                                 |m currentText t1 t2|
  2670 						|m currentText t1 t2|
  2672 
  2671 
  2673                                                 m := changeClass compiledMethodAt:sel asSymbol.
  2672 						m := changeClass compiledMethodAt:sel asSymbol.
  2674                                                 currentText := m source.
  2673 						currentText := m source.
  2675                                                 currentText notNil ifTrue:[
  2674 						currentText notNil ifTrue:[
  2676                                                     text asString = currentText asString ifTrue:[
  2675 						    text asString = currentText asString ifTrue:[
  2677                                                         changeDelta := '='
  2676 							changeDelta := '='
  2678                                                     ] ifFalse:[
  2677 						    ] ifFalse:[
  2679                                                         t1 := currentText asCollectionOfLines collect:[:s | s withTabsExpanded].
  2678 							t1 := currentText asCollectionOfLines collect:[:s | s withTabsExpanded].
  2680                                                         t2 := text asCollectionOfLines collect:[:s | s withTabsExpanded].
  2679 							t2 := text asCollectionOfLines collect:[:s | s withTabsExpanded].
  2681                                                         t1 = t2 ifTrue:[
  2680 							t1 = t2 ifTrue:[
  2682                                                             changeDelta := '='
  2681 							    changeDelta := '='
  2683                                                         ]
  2682 							]
  2684                                                     ]
  2683 						    ]
  2685                                                 ]
  2684 						]
  2686                                             ]
  2685 					    ]
  2687                                         ]
  2686 					]
  2688                                     ].
  2687 				    ].
  2689                                     change delta:changeDelta.
  2688 				    change delta:changeDelta.
  2690                                     change string:changeString.
  2689 				    change string:changeString.
  2691                                     change type:changeType.
  2690 				    change type:changeType.
  2692                                     change category: changeCategory.
  2691 				    change category: changeCategory.
  2693                                     change timeStamp:timeStampInfo.
  2692 				    change timeStamp:timeStampInfo.
  2694                                     changes add:change.
  2693 				    changes add:change.
  2695                                 ].
  2694 				].
  2696                                 changeString := nil.
  2695 				changeString := nil.
  2697                                 headerLine := nil.
  2696 				headerLine := nil.
  2698 
  2697 
  2699                             ]
  2698 			    ]
  2700                         ].
  2699 			].
  2701                         changeString notNil ifTrue:[
  2700 			changeString notNil ifTrue:[
  2702                             change delta:changeDelta.
  2701 			    change delta:changeDelta.
  2703                             change string:changeString.
  2702 			    change string:changeString.
  2704                             change type:changeType.
  2703 			    change type:changeType.
  2705                             change timeStamp:timeStampInfo.
  2704 			    change timeStamp:timeStampInfo.
  2706                             changes add:change.
  2705 			    changes add:change.
  2707 
  2706 
  2708                         ] ifFalse:[
  2707 			] ifFalse:[
  2709                             headerLine notNil ifTrue:[     
  2708 			    headerLine notNil ifTrue:[     
  2710                                 changes add: change.
  2709 				changes add: change.
  2711                             ]
  2710 			    ]
  2712                         ]
  2711 			]
  2713                     ]
  2712 		    ]
  2714                 ]. 
  2713 		]. 
  2715                 change lastPosition: aStream position.
  2714 		change lastPosition: aStream position.
  2716             ].
  2715 	    ].
  2717             modified := false.
  2716 	    modified := false.
  2718 
  2717 
  2719         ] valueNowOrOnUnwindDo:[ 
  2718 	] valueNowOrOnUnwindDo:[ 
  2720             aStream close.
  2719 	    aStream close.
  2721             inBackground ifTrue:[myProcess priority:myPriority].
  2720 	    inBackground ifTrue:[myProcess priority:myPriority].
  2722         ].
  2721 	].
  2723     ].
  2722     ].
  2724     self setChangeList.
  2723     self setChangeList.
  2725     self valueOfNotReading value: true.
  2724     self valueOfNotReading value: true.
  2726     self filterField raise.
  2725     self filterField raise.
  2727     self filterLabel label: 'Filter:'.
  2726     self filterLabel label: 'Filter:'.
  2738 
  2737 
  2739     source := self sourceOfMethodChange:aChange.
  2738     source := self sourceOfMethodChange:aChange.
  2740     source isNil ifTrue:[^ nil].
  2739     source isNil ifTrue:[^ nil].
  2741 
  2740 
  2742     parser := Parser 
  2741     parser := Parser 
  2743                 parseMethod:source 
  2742 		parseMethod:source 
  2744                 in:nil 
  2743 		in:nil 
  2745                 ignoreErrors:true 
  2744 		ignoreErrors:true 
  2746                 ignoreWarnings:true.
  2745 		ignoreWarnings:true.
  2747 
  2746 
  2748     (parser notNil and:[parser ~~ #Error]) ifTrue:[
  2747     (parser notNil and:[parser ~~ #Error]) ifTrue:[
  2749         sel := parser selector.
  2748 	sel := parser selector.
  2750     ].
  2749     ].
  2751     ^ sel
  2750     ^ sel
  2752 !
  2751 !
  2753 
  2752 
  2754 setChangeList
  2753 setChangeList
  2774 
  2773 
  2775     numDeleted := 0.
  2774     numDeleted := 0.
  2776     index := stop.          
  2775     index := stop.          
  2777     [index >= start] whileTrue:
  2776     [index >= start] whileTrue:
  2778     [                                         
  2777     [                                         
  2779         ((clsName := self classNameOfChange:(self listOfChanges at: index)) notNil and:
  2778 	((clsName := self classNameOfChange:(self listOfChanges at: index)) notNil and:
  2780         [(clsName = aClassName or: [PrivateAsSeparate not and: [(clsName upTo: $:) = aClassName]])])
  2779 	[(clsName = aClassName or: [PrivateAsSeparate not and: [(clsName upTo: $:) = aClassName]])])
  2781         ifTrue:
  2780 	ifTrue:
  2782         [     
  2781 	[     
  2783             self silentDeleteChange:(self listOfChanges at: index).
  2782 	    self silentDeleteChange:(self listOfChanges at: index).
  2784             numDeleted := numDeleted + 1.
  2783 	    numDeleted := numDeleted + 1.
  2785         ].
  2784 	].
  2786         index := index - 1
  2785 	index := index - 1
  2787     ].
  2786     ].
  2788     ^ numDeleted
  2787     ^ numDeleted
  2789 !
  2788 !
  2790 
  2789 
  2791 sourceOfMethodChange:aChange
  2790 sourceOfMethodChange:aChange
  2795 
  2794 
  2796     aStream := self streamForChange:aChange. 
  2795     aStream := self streamForChange:aChange. 
  2797     aStream isNil ifTrue:[^ nil].
  2796     aStream isNil ifTrue:[^ nil].
  2798 
  2797 
  2799     aChange followUp ifFalse:[
  2798     aChange followUp ifFalse:[
  2800         sawExcla := aStream peekFor:(aStream class chunkSeparator).
  2799 	sawExcla := aStream peekFor:(aStream class chunkSeparator).
  2801         chunk := aStream nextChunk.
  2800 	chunk := aStream nextChunk.
  2802     ] ifTrue:[
  2801     ] ifTrue:[
  2803         chunk := aChange chunk.
  2802 	chunk := aChange chunk.
  2804         sawExcla := true.
  2803 	sawExcla := true.
  2805     ].
  2804     ].
  2806 
  2805 
  2807     sawExcla ifTrue:[
  2806     sawExcla ifTrue:[
  2808         parseTree := Parser parseExpression:chunk.
  2807 	parseTree := Parser parseExpression:chunk.
  2809         (parseTree notNil and:[parseTree isMessage]) ifTrue:[
  2808 	(parseTree notNil and:[parseTree isMessage]) ifTrue:[
  2810             (parseTree selector == #methodsFor:) ifTrue:[
  2809 	    (parseTree selector == #methodsFor:) ifTrue:[
  2811                 sourceChunk := aStream nextChunk.
  2810 		sourceChunk := aStream nextChunk.
  2812             ]
  2811 	    ]
  2813         ].
  2812 	].
  2814     ].
  2813     ].
  2815     aStream close.
  2814     aStream close.
  2816     ^ sourceChunk
  2815     ^ sourceChunk
  2817 !
  2816 !
  2818 
  2817 
  2842 
  2841 
  2843     |change|
  2842     |change|
  2844 
  2843 
  2845     (change := self selectionOfChange value) notNil 
  2844     (change := self selectionOfChange value) notNil 
  2846     ifTrue:[
  2845     ifTrue:[
  2847         self withExecuteCursorDo:[aBlock value:change]
  2846 	self withExecuteCursorDo:[aBlock value:change]
  2848     ]
  2847     ]
  2849 ! !
  2848 ! !
  2850 
  2849 
  2851 !NewChangesBrowser methodsFor:'startup / release'!
  2850 !NewChangesBrowser methodsFor:'startup / release'!
  2852 
  2851 
  2854     "asks for saving before closing"
  2853     "asks for saving before closing"
  2855 
  2854 
  2856     self valueOfNotSaving value ifFalse: [^nil].
  2855     self valueOfNotSaving value ifFalse: [^nil].
  2857 
  2856 
  2858     modified ifTrue:[
  2857     modified ifTrue:[
  2859         (OptionBox 
  2858 	(OptionBox 
  2860               request:(resources string:'Changes list was modified !!') withCRs
  2859 	      request:(resources string:'Changes list was modified !!') withCRs
  2861               label:'Changes Browser'
  2860 	      label:'Changes Browser'
  2862               form:(WarningBox iconBitmap)
  2861 	      form:(WarningBox iconBitmap)
  2863               buttonLabels:(resources array:#('Cancel' 'Forget it and proceed'))
  2862 	      buttonLabels:(resources array:#('Cancel' 'Forget it and proceed'))
  2864               values:#(#abort #ignore)
  2863 	      values:#(#abort #ignore)
  2865               default:#save
  2864 	      default:#save
  2866         ) == #abort ifTrue:[^self].
  2865 	) == #abort ifTrue:[^self].
  2867     ].
  2866     ].
  2868     super closeRequest
  2867     super closeRequest
  2869 
  2868 
  2870     "Modified: / 20.5.1998 / 03:53:47 / cg"
  2869     "Modified: / 20.5.1998 / 03:53:47 / cg"
  2871 !
  2870 !
  2876 
  2875 
  2877     super postOpenWith:aBuilder.
  2876     super postOpenWith:aBuilder.
  2878 
  2877 
  2879     builder namedComponents do: 
  2878     builder namedComponents do: 
  2880     [:aView|    
  2879     [:aView|    
  2881         aView allSubViewsDo: 
  2880 	aView allSubViewsDo: 
  2882         [:v|
  2881 	[:v|
  2883             v redraw
  2882 	    v redraw
  2884         ] 
  2883 	] 
  2885     ].
  2884     ].
  2886 
  2885 
  2887     autoUpdateBlock := [self checkIfFileHasChanged].
  2886     autoUpdateBlock := [self checkIfFileHasChanged].
  2888     Processor addTimedBlock:autoUpdateBlock afterSeconds:5.  
  2887     Processor addTimedBlock:autoUpdateBlock afterSeconds:5.  
  2889     self updateInfoLabel.
  2888     self updateInfoLabel.
  2890 
  2889 
  2891     self filterField entryCompletionBlock:
  2890     self filterField entryCompletionBlock:
  2892     (filterCompletionBlock := [:value|
  2891     (filterCompletionBlock := [:value|
  2893         |filter filters i changesCopy|
  2892 	|filter filters i changesCopy|
  2894         self unselectChange.
  2893 	self unselectChange.
  2895         filter := self filterField contents.
  2894 	filter := self filterField contents.
  2896         (filters := filter asArrayOfSubstrings) size > 0 ifTrue: 
  2895 	(filters := filter asArrayOfSubstrings) size > 0 ifTrue: 
  2897         [
  2896 	[
  2898             i := 0.
  2897 	    i := 0.
  2899             changesCopy := changes copy.
  2898 	    changesCopy := changes copy.
  2900             filters do: 
  2899 	    filters do: 
  2901             [:filter|
  2900 	    [:filter|
  2902                 i := i + 1.
  2901 		i := i + 1.
  2903                 changesCopy contents: 
  2902 		changesCopy contents: 
  2904                     (changesCopy select: [:row| 
  2903 		    (changesCopy select: [:row| 
  2905                         filter match: (row string asArrayOfSubstrings at: i ifAbsent: [''''])])
  2904 			filter match: (row string asArrayOfSubstrings at: i ifAbsent: [''''])])
  2906             ].            
  2905 	    ].            
  2907             self listOfChanges contents: changesCopy
  2906 	    self listOfChanges contents: changesCopy
  2908         ] 
  2907 	] 
  2909         ifFalse: 
  2908 	ifFalse: 
  2910         [
  2909 	[
  2911             self listOfChanges contents: changes
  2910 	    self listOfChanges contents: changes
  2912         ].
  2911 	].
  2913         self autoSelectLast.
  2912 	self autoSelectLast.
  2914     ]).
  2913     ]).
  2915 
  2914 
  2916     Object errorSignal handle: [:ex |
  2915     Object errorSignal handle: [:ex |
  2917         ex parameter signal == HaltSignal ifTrue:[
  2916 	ex parameter signal == HaltSignal ifTrue:[
  2918             ex reject
  2917 	    ex reject
  2919         ].
  2918 	].
  2920         ex parameter signal == MessageTracer breakpointSignal ifTrue:[
  2919 	ex parameter signal == MessageTracer breakpointSignal ifTrue:[
  2921             ex reject
  2920 	    ex reject
  2922         ].
  2921 	].
  2923         self warn:'Error while reading changes file:\\' , ex errorString.
  2922 	self warn:'Error while reading changes file:\\' , ex errorString.
  2924     ] do: [
  2923     ] do: [
  2925         self readChangesFileInBackground:true
  2924 	self readChangesFileInBackground:true
  2926     ].
  2925     ].
  2927 
  2926 
  2928     "Modified: / 30.7.1998 / 11:37:51 / cg"
  2927     "Modified: / 30.7.1998 / 11:37:51 / cg"
  2929 !
  2928 !
  2930 
  2929 
  2939 
  2938 
  2940 doApply
  2939 doApply
  2941     "applies the selected change"
  2940     "applies the selected change"
  2942 
  2941 
  2943     self withSelectedChangeDo:[:change|
  2942     self withSelectedChangeDo:[:change|
  2944         skipSignal := nil.
  2943 	skipSignal := nil.
  2945         self applyChange:change.
  2944 	self applyChange:change.
  2946         self autoSelectChange: (self listOfChanges at: (self listOfChanges indexOf: change) + 1 ifAbsent: [^self autoSelectLast])
  2945 	self autoSelectChange: (self listOfChanges at: (self listOfChanges indexOf: change) + 1 ifAbsent: [^self autoSelectLast])
  2947     ]
  2946     ]
  2948 !
  2947 !
  2949 
  2948 
  2950 doApplyAll
  2949 doApplyAll
  2951     "applies all changes"
  2950     "applies all changes"
  2952 
  2951 
  2953     self withExecuteCursorDo:[
  2952     self withExecuteCursorDo:[
  2954         |change|
  2953 	|change|
  2955         self unselectChange.
  2954 	self unselectChange.
  2956         skipSignal isNil ifTrue:[skipSignal := Signal new].
  2955 	skipSignal isNil ifTrue:[skipSignal := Signal new].
  2957         1 to:self listOfChanges size do:[:changeNr |
  2956 	1 to:self listOfChanges size do:[:changeNr |
  2958             self selectionOfChange value:(change := self listOfChanges at: changeNr).
  2957 	    self selectionOfChange value:(change := self listOfChanges at: changeNr).
  2959             self applyChange:change
  2958 	    self applyChange:change
  2960         ].
  2959 	].
  2961         self autoSelectLast
  2960 	self autoSelectLast
  2962     ]
  2961     ]
  2963 
  2962 
  2964 !
  2963 !
  2965 
  2964 
  2966 doApplyAllForClass
  2965 doApplyAllForClass
  2979 
  2978 
  2980 doApplyForClassToEndFrom: start
  2979 doApplyForClassToEndFrom: start
  2981     "applies changes with same class like the selected one from start to end"
  2980     "applies changes with same class like the selected one from start to end"
  2982 
  2981 
  2983     self withSelectedChangeDo:[:change|
  2982     self withSelectedChangeDo:[:change|
  2984         |classNameToApply thisClassName lastChange change2|
  2983 	|classNameToApply thisClassName lastChange change2|
  2985         (classNameToApply := self classNameOfChange:change) notNil 
  2984 	(classNameToApply := self classNameOfChange:change) notNil 
  2986         ifTrue:
  2985 	ifTrue:
  2987         [             
  2986 	[             
  2988             self unselectChange.
  2987 	    self unselectChange.
  2989             skipSignal isNil ifTrue:[skipSignal := Signal new].
  2988 	    skipSignal isNil ifTrue:[skipSignal := Signal new].
  2990             start to:self listOfChanges size do:
  2989 	    start to:self listOfChanges size do:
  2991             [:changeNr|
  2990 	    [:changeNr|
  2992                 change2 := self listOfChanges at: changeNr.
  2991 		change2 := self listOfChanges at: changeNr.
  2993                 ((thisClassName := self classNameOfChange:change2) notNil and:
  2992 		((thisClassName := self classNameOfChange:change2) notNil and:
  2994                 [thisClassName = classNameToApply or:
  2993 		[thisClassName = classNameToApply or:
  2995                 [PrivateAsSeparate not and: [(thisClassName upTo: $:) = classNameToApply]]])
  2994 		[PrivateAsSeparate not and: [(thisClassName upTo: $:) = classNameToApply]]])
  2996                 ifTrue:
  2995 		ifTrue:
  2997                 [                           
  2996 		[                           
  2998                     self selectionOfChange value: change2.
  2997 		    self selectionOfChange value: change2.
  2999                     self applyChange:change2.
  2998 		    self applyChange:change2.
  3000                     lastChange := change2
  2999 		    lastChange := change2
  3001                 ]
  3000 		]
  3002             ].
  3001 	    ].
  3003             self autoSelectChange:lastChange.
  3002 	    self autoSelectChange:lastChange.
  3004         ]
  3003 	]
  3005     ]
  3004     ]
  3006 
  3005 
  3007 !
  3006 !
  3008 
  3007 
  3009 doApplyFromLastSnapshot
  3008 doApplyFromLastSnapshot
  3015 
  3014 
  3016 doApplyToEnd
  3015 doApplyToEnd
  3017     "applies all changes from selected one to be end"
  3016     "applies all changes from selected one to be end"
  3018 
  3017 
  3019     self withSelectedChangeDo:[:change|
  3018     self withSelectedChangeDo:[:change|
  3020         self unselectChange.
  3019 	self unselectChange.
  3021         skipSignal isNil ifTrue:[skipSignal := Signal new].
  3020 	skipSignal isNil ifTrue:[skipSignal := Signal new].
  3022         (self listOfChanges indexOf: change) to: self listOfChanges size do:[:changeNr|
  3021 	(self listOfChanges indexOf: change) to: self listOfChanges size do:[:changeNr|
  3023             self selectionOfChange value:(self listOfChanges at: changeNr).
  3022 	    self selectionOfChange value:(self listOfChanges at: changeNr).
  3024             self applyChange:(self listOfChanges at: changeNr)
  3023 	    self applyChange:(self listOfChanges at: changeNr)
  3025         ].
  3024 	].
  3026         self autoSelectChange:self listOfChanges last
  3025 	self autoSelectChange:self listOfChanges last
  3027     ]
  3026     ]
  3028 
  3027 
  3029 !
  3028 !
  3030 
  3029 
  3031 doBrowseClass
  3030 doBrowseClass
  3033 
  3032 
  3034     |className cls isMeta|
  3033     |className cls isMeta|
  3035 
  3034 
  3036     className := self fullClassNameOfChange:self selectionOfChange value.
  3035     className := self fullClassNameOfChange:self selectionOfChange value.
  3037     className notNil ifTrue:[
  3036     className notNil ifTrue:[
  3038         isMeta := false.
  3037 	isMeta := false.
  3039         (className endsWith:' class') ifTrue:[
  3038 	(className endsWith:' class') ifTrue:[
  3040             className := className copyWithoutLast:6.
  3039 	    className := className copyWithoutLast:6.
  3041             isMeta := true.
  3040 	    isMeta := true.
  3042         ].
  3041 	].
  3043         (cls := Smalltalk classNamed:className) notNil ifTrue:[
  3042 	(cls := Smalltalk classNamed:className) notNil ifTrue:[
  3044             isMeta ifTrue:[cls := cls class].
  3043 	    isMeta ifTrue:[cls := cls class].
  3045             SystemBrowser 
  3044 	    SystemBrowser 
  3046                 openInClass:cls 
  3045 		openInClass:cls 
  3047                 selector:(self selectorOfMethodChange:self selectionOfChange value)
  3046 		selector:(self selectorOfMethodChange:self selectionOfChange value)
  3048         ]
  3047 	]
  3049     ]
  3048     ]
  3050 
  3049 
  3051 
  3050 
  3052 
  3051 
  3053 !
  3052 !
  3056     "compares a change with the current system version"
  3055     "compares a change with the current system version"
  3057 
  3056 
  3058     |change|
  3057     |change|
  3059 
  3058 
  3060     (change := self selectionOfChange value) notNil ifTrue:[
  3059     (change := self selectionOfChange value) notNil ifTrue:[
  3061         self withExecuteCursorDo:[self compareChange:change]
  3060 	self withExecuteCursorDo:[self compareChange:change]
  3062     ].
  3061     ].
  3063     self newLabel:''
  3062     self newLabel:''
  3064 !
  3063 !
  3065 
  3064 
  3066 doCompress
  3065 doCompress
  3073     self compressForClass:nil.
  3072     self compressForClass:nil.
  3074     self setChangeList.    
  3073     self setChangeList.    
  3075     self updateInfoLabel.
  3074     self updateInfoLabel.
  3076 
  3075 
  3077     self information: 
  3076     self information: 
  3078         'Compression Rate:   ', (((changesSizeBefore - changes size)/changesSizeBefore) * 100) rounded printString, '%\' withCRs,
  3077 	'Compression Rate:   ', (((changesSizeBefore - changes size)/changesSizeBefore) * 100) rounded printString, '%\' withCRs,
  3079         'Obsolete Changes: ', (changesSizeBefore - changes size) printString, ' from ', changesSizeBefore printString
  3078 	'Obsolete Changes: ', (changesSizeBefore - changes size) printString, ' from ', changesSizeBefore printString
  3080 
  3079 
  3081 
  3080 
  3082 
  3081 
  3083 
  3082 
  3084 !
  3083 !
  3086 doCompressForClass
  3085 doCompressForClass
  3087     "compresses changes for the selected class.
  3086     "compresses changes for the selected class.
  3088      this replaces multiple method-changes by the last (i.e. the most recent) change."
  3087      this replaces multiple method-changes by the last (i.e. the most recent) change."
  3089 
  3088 
  3090     self withSelectedChangeDo:[:change|
  3089     self withSelectedChangeDo:[:change|
  3091         | classNameToCompress |
  3090 	| classNameToCompress |
  3092 
  3091 
  3093         (classNameToCompress := self classNameOfChange:change) notNil ifTrue:[
  3092 	(classNameToCompress := self classNameOfChange:change) notNil ifTrue:[
  3094             self compressForClass:classNameToCompress.
  3093 	    self compressForClass:classNameToCompress.
  3095             filterCompletionBlock value: self valueOfFilter value.
  3094 	    filterCompletionBlock value: self valueOfFilter value.
  3096             self autoSelectLast
  3095 	    self autoSelectLast
  3097         ]
  3096 	]
  3098     ]
  3097     ]
  3099 
  3098 
  3100 !
  3099 !
  3101 
  3100 
  3102 doDelete
  3101 doDelete
  3103     "deletes the selected change"
  3102     "deletes the selected change"
  3104 
  3103 
  3105     |change selectionIndex|
  3104     |change selectionIndex|
  3106 
  3105 
  3107     (change := self selectionOfChange value) notNil ifTrue:[
  3106     (change := self selectionOfChange value) notNil ifTrue:[
  3108         selectionIndex := self listOfChanges indexOf: change.
  3107 	selectionIndex := self listOfChanges indexOf: change.
  3109         self unselectChange.
  3108 	self unselectChange.
  3110         self silentDeleteChange:change.
  3109 	self silentDeleteChange:change.
  3111         self listOfChanges remove:change.
  3110 	self listOfChanges remove:change.
  3112         self autoSelectOrEnd: (self listOfChanges at: selectionIndex ifAbsent: [nil]).
  3111 	self autoSelectOrEnd: (self listOfChanges at: selectionIndex ifAbsent: [nil]).
  3113     ]
  3112     ]
  3114 !
  3113 !
  3115 
  3114 
  3116 doDeleteAll
  3115 doDeleteAll
  3117     "deletes all changes"
  3116     "deletes all changes"
  3130 
  3129 
  3131 doDeleteForClassToEnd
  3130 doDeleteForClassToEnd
  3132     "deletes all changes having the same class like the selected one from the selected to the end"
  3131     "deletes all changes having the same class like the selected one from the selected to the end"
  3133 
  3132 
  3134     self withSelectedChangeDo:[:change|
  3133     self withSelectedChangeDo:[:change|
  3135         self doDeleteForClassToEndFrom: (self listOfChanges indexOf: change)
  3134 	self doDeleteForClassToEndFrom: (self listOfChanges indexOf: change)
  3136     ]
  3135     ]
  3137 
  3136 
  3138 
  3137 
  3139 !
  3138 !
  3140 
  3139 
  3141 doDeleteForClassToEndFrom: start
  3140 doDeleteForClassToEndFrom: start
  3142     "deletes changes with same class like the selected one from start to end"
  3141     "deletes changes with same class like the selected one from start to end"
  3143 
  3142 
  3144     self withSelectedChangeDo:[:change|
  3143     self withSelectedChangeDo:[:change|
  3145         |classNameToDelete|
  3144 	|classNameToDelete|
  3146         (classNameToDelete := self classNameOfChange:change) notNil ifTrue:[
  3145 	(classNameToDelete := self classNameOfChange:change) notNil ifTrue:[
  3147             self unselectChange.
  3146 	    self unselectChange.
  3148             self silentDeleteChangesFor:classNameToDelete 
  3147 	    self silentDeleteChangesFor:classNameToDelete 
  3149                                    from:start
  3148 				   from:start
  3150                                      to:self listOfChanges size.
  3149 				     to:self listOfChanges size.
  3151             self setChangeList.
  3150 	    self setChangeList.
  3152             self autoSelectOrEnd: nil
  3151 	    self autoSelectOrEnd: nil
  3153         ]
  3152 	]
  3154     ].
  3153     ].
  3155 
  3154 
  3156 
  3155 
  3157 
  3156 
  3158 !
  3157 !
  3162 
  3161 
  3163     |changeNr|
  3162     |changeNr|
  3164 
  3163 
  3165     changeNr := (self listOfChanges indexOf: self selectionOfChange value).
  3164     changeNr := (self listOfChanges indexOf: self selectionOfChange value).
  3166     changeNr ~~ 0 ifTrue:[
  3165     changeNr ~~ 0 ifTrue:[
  3167         self deleteChangesFrom:changeNr to: self listOfChanges size.
  3166 	self deleteChangesFrom:changeNr to: self listOfChanges size.
  3168         self unselectChange.
  3167 	self unselectChange.
  3169         self autoSelectOrEnd: nil
  3168 	self autoSelectOrEnd: nil
  3170     ]
  3169     ]
  3171 
  3170 
  3172 !
  3171 !
  3173 
  3172 
  3174 doFilter: aFilterString
  3173 doFilter: aFilterString
  3207     |snapshotNr snapshotFound|
  3206     |snapshotNr snapshotFound|
  3208 
  3207 
  3209     self listOfChanges detect: [:change| change type = 'image'] ifNone: [^self warn: 'No snapshot found!!'].
  3208     self listOfChanges detect: [:change| change type = 'image'] ifNone: [^self warn: 'No snapshot found!!'].
  3210 
  3209 
  3211     self withSelectedChangeDo:[:change|
  3210     self withSelectedChangeDo:[:change|
  3212         snapshotNr := self listOfChanges indexOf: change.
  3211 	snapshotNr := self listOfChanges indexOf: change.
  3213         snapshotFound := false.
  3212 	snapshotFound := false.
  3214         [snapshotNr > 0 and: [snapshotFound not]] 
  3213 	[snapshotNr > 0 and: [snapshotFound not]] 
  3215         whileTrue: 
  3214 	whileTrue: 
  3216         [
  3215 	[
  3217             what = 'last'
  3216 	    what = 'last'
  3218             ifTrue:
  3217 	    ifTrue:
  3219             [
  3218 	    [
  3220                 snapshotNr := snapshotNr - 1.
  3219 		snapshotNr := snapshotNr - 1.
  3221                 snapshotNr == 0 ifTrue: [snapshotNr := self listOfChanges size].   
  3220 		snapshotNr == 0 ifTrue: [snapshotNr := self listOfChanges size].   
  3222             ]
  3221 	    ]
  3223             ifFalse:
  3222 	    ifFalse:
  3224             [
  3223 	    [
  3225                 snapshotNr := snapshotNr + 1.
  3224 		snapshotNr := snapshotNr + 1.
  3226                 snapshotNr > self listOfChanges size ifTrue: [snapshotNr := 1].
  3225 		snapshotNr > self listOfChanges size ifTrue: [snapshotNr := 1].
  3227             ].
  3226 	    ].
  3228             (self listOfChanges at: snapshotNr ifAbsent: [^self autoSelectChange: (what = 'last' ifTrue: [self listOfChanges last] ifFalse: [self listOfChanges first])]) type = 'image'
  3227 	    (self listOfChanges at: snapshotNr ifAbsent: [^self autoSelectChange: (what = 'last' ifTrue: [self listOfChanges last] ifFalse: [self listOfChanges first])]) type = 'image'
  3229             ifTrue: 
  3228 	    ifTrue: 
  3230             [
  3229 	    [
  3231                 snapshotFound := true.
  3230 		snapshotFound := true.
  3232                 self autoSelectChange:(self listOfChanges at: snapshotNr)
  3231 		self autoSelectChange:(self listOfChanges at: snapshotNr)
  3233             ]
  3232 	    ]
  3234         ]
  3233 	]
  3235     ].
  3234     ].
  3236 
  3235 
  3237     ^snapshotFound
  3236     ^snapshotFound
  3238 !
  3237 !
  3239 
  3238 
  3240 doLoad
  3239 doLoad
  3241     "opens a dialog for loading changes from a file"
  3240     "opens a dialog for loading changes from a file"
  3242 
  3241 
  3243     |fileName|
  3242     |fileName|
  3244     (fileName :=
  3243     (fileName :=
  3245         (FileSelectionBrowser
  3244 	(FileSelectionBrowser
  3246             request: 'Load Changes List'
  3245 	    request: 'Load Changes List'
  3247             fileName: changeFileName
  3246 	    fileName: changeFileName
  3248             withFileFilters: #('c*'))) notNil
  3247 	    withFileFilters: #('c*'))) notNil
  3249     ifTrue:
  3248     ifTrue:
  3250     [
  3249     [
  3251         changeFileName := fileName.
  3250 	changeFileName := fileName.
  3252         changes removeAll.
  3251 	changes removeAll.
  3253         self readChangesFileInBackground:true.
  3252 	self readChangesFileInBackground:true.
  3254         self unselectChange.
  3253 	self unselectChange.
  3255         Processor addTimedBlock:autoUpdateBlock afterSeconds:5.
  3254 	Processor addTimedBlock:autoUpdateBlock afterSeconds:5.
  3256         self updateInfoLabel.
  3255 	self updateInfoLabel.
  3257         self autoSelectLast
  3256 	self autoSelectLast
  3258     ]
  3257     ]
  3259 !
  3258 !
  3260 
  3259 
  3261 doReload
  3260 doReload
  3262     "reloads the changes from the file"
  3261     "reloads the changes from the file"
  3280     |inStream outStream tempfile stamp f| 
  3279     |inStream outStream tempfile stamp f| 
  3281 
  3280 
  3282     self valueOfNotReading value ifFalse: [^nil].
  3281     self valueOfNotReading value ifFalse: [^nil].
  3283 
  3282 
  3284     editingClassSource ifTrue:[
  3283     editingClassSource ifTrue:[
  3285         (self confirm:'You are editing a classes sourceFile (not a changeFile) !!\Are you certain, you want to overwrite it ?' withCRs)
  3284 	(self confirm:'You are editing a classes sourceFile (not a changeFile) !!\Are you certain, you want to overwrite it ?' withCRs)
  3286         ifFalse:[
  3285 	ifFalse:[
  3287             ^ false
  3286 	    ^ false
  3288         ]
  3287 	]
  3289     ].
  3288     ].
  3290 
  3289 
  3291     tempfile := Filename newTemporaryIn:nil.
  3290     tempfile := Filename newTemporaryIn:nil.
  3292     tempfile exists ifTrue:[tempfile remove].
  3291     tempfile exists ifTrue:[tempfile remove].
  3293 
  3292 
  3294     outStream := tempfile writeStream.
  3293     outStream := tempfile writeStream.
  3295     outStream isNil ifTrue:[
  3294     outStream isNil ifTrue:[
  3296         self warn:'Cannot create temporary file in current directory.'.
  3295 	self warn:'Cannot create temporary file in current directory.'.
  3297         ^ false
  3296 	^ false
  3298     ].
  3297     ].
  3299 
  3298 
  3300     inStream := FileStream readonlyFileNamed:changeFileName.
  3299     inStream := FileStream readonlyFileNamed:changeFileName.
  3301     inStream isNil ifTrue:[^ false].
  3300     inStream isNil ifTrue:[^ false].
  3302 
  3301 
  3303     self withCursor:(Cursor write) do:[
  3302     self withCursor:(Cursor write) do:[
  3304         |excla sawExcla done first chunk
  3303 	|excla sawExcla done first chunk
  3305          nChanges "{Class:SmallInteger}" |
  3304 	 nChanges "{Class:SmallInteger}" |
  3306 
  3305 
  3307         Stream writeErrorSignal handle:[:ex |
  3306 	Stream writeErrorSignal handle:[:ex |
  3308             self warn:('Could not update the changes file.\\' , ex errorString) withCRs.
  3307 	    self warn:('Could not update the changes file.\\' , ex errorString) withCRs.
  3309             ^ false
  3308 	    ^ false
  3310         ] do:[
  3309 	] do:[
  3311 
  3310 
  3312             self valueOfNotSaving value: false.
  3311 	    self valueOfNotSaving value: false.
  3313 
  3312 
  3314             excla := inStream class chunkSeparator.
  3313 	    excla := inStream class chunkSeparator.
  3315             nChanges := changes size.
  3314 	    nChanges := changes size.
  3316 
  3315 
  3317             1 to:nChanges do:[:index |     
  3316 	    1 to:nChanges do:[:index |     
  3318                 inStream position: (changes at: index) position.
  3317 		inStream position: (changes at: index) position.
  3319                 sawExcla := inStream peekFor:excla.
  3318 		sawExcla := inStream peekFor:excla.
  3320                 chunk := inStream nextChunk.
  3319 		chunk := inStream nextChunk.
  3321 
  3320 
  3322                 (chunk notNil
  3321 		(chunk notNil
  3323                 and:[(chunk startsWith:'''---- snap') not]) ifTrue:[
  3322 		and:[(chunk startsWith:'''---- snap') not]) ifTrue:[
  3324                     (stamp := (changes at:index) timeStamp) notNil ifTrue:[
  3323 		    (stamp := (changes at:index) timeStamp) notNil ifTrue:[
  3325                         outStream nextPutAll:'''---- timestamp ' , stamp , ' ----'''.
  3324 			outStream nextPutAll:'''---- timestamp ' , stamp , ' ----'''.
  3326                         outStream nextPut:excla; cr.
  3325 			outStream nextPut:excla; cr.
  3327                     ].
  3326 		    ].
  3328                 ].
  3327 		].
  3329 
  3328 
  3330                 sawExcla ifTrue:[     
  3329 		sawExcla ifTrue:[     
  3331                     outStream nextPut:excla.   
  3330 		    outStream nextPut:excla.   
  3332                     outStream nextChunkPut:chunk.
  3331 		    outStream nextChunkPut:chunk.
  3333                     outStream cr; cr.
  3332 		    outStream cr; cr.
  3334 
  3333 
  3335                     "
  3334 		    "
  3336                      a method-definition chunk - skip followups
  3335 		     a method-definition chunk - skip followups
  3337                     "
  3336 		    "
  3338                     done := false.
  3337 		    done := false.
  3339                     first := true.
  3338 		    first := true.
  3340                     [done] whileFalse:[
  3339 		    [done] whileFalse:[
  3341                         chunk := inStream nextChunk.
  3340 			chunk := inStream nextChunk.
  3342                         chunk isNil ifTrue:[
  3341 			chunk isNil ifTrue:[
  3343                             outStream cr; cr.
  3342 			    outStream cr; cr.
  3344                             done := true
  3343 			    done := true
  3345                         ] ifFalse:[
  3344 			] ifFalse:[
  3346                             chunk isEmpty ifTrue:[
  3345 			    chunk isEmpty ifTrue:[
  3347                                 outStream space; nextChunkPut:chunk; cr; cr.
  3346 				outStream space; nextChunkPut:chunk; cr; cr.
  3348                                 done := true.
  3347 				done := true.
  3349                             ] ifFalse:[
  3348 			    ] ifFalse:[
  3350                                 first ifFalse:[
  3349 				first ifFalse:[
  3351                                     outStream cr; cr.
  3350 				    outStream cr; cr.
  3352                                 ].
  3351 				].
  3353                                 outStream nextChunkPut:chunk.
  3352 				outStream nextChunkPut:chunk.
  3354                             ].
  3353 			    ].
  3355                         ].
  3354 			].
  3356                         first := false.
  3355 			first := false.
  3357                     ].
  3356 		    ].
  3358                 ] ifFalse:[
  3357 		] ifFalse:[
  3359                     outStream nextChunkPut:chunk.
  3358 		    outStream nextChunkPut:chunk.
  3360                     outStream cr
  3359 		    outStream cr
  3361                 ]
  3360 		]
  3362             ].
  3361 	    ].
  3363             outStream close.
  3362 	    outStream close.
  3364             inStream close.
  3363 	    inStream close.
  3365         ].
  3364 	].
  3366 
  3365 
  3367         f := changeFileName asFilename.
  3366 	f := changeFileName asFilename.
  3368         f renameTo:(f withSuffix:'bak').
  3367 	f renameTo:(f withSuffix:'bak').
  3369         tempfile renameTo:changeFileName.
  3368 	tempfile renameTo:changeFileName.
  3370         self doReload.
  3369 	self doReload.
  3371         modified := false.
  3370 	modified := false.
  3372         self valueOfNotSaving value: true.
  3371 	self valueOfNotSaving value: true.
  3373     ].
  3372     ].
  3374     ^ true
  3373     ^ true
  3375 
  3374 
  3376 
  3375 
  3377 ! !
  3376 ! !
  3412     |cls|
  3411     |cls|
  3413 
  3412 
  3414     delta size = 0 ifTrue: [^''].
  3413     delta size = 0 ifTrue: [^''].
  3415     delta = '='    ifTrue: [^'Current'].
  3414     delta = '='    ifTrue: [^'Current'].
  3416     delta = '?'    ifTrue: [
  3415     delta = '?'    ifTrue: [
  3417         (className notNil and:[className knownAsSymbol]) ifTrue:[
  3416 	(className notNil and:[className knownAsSymbol]) ifTrue:[
  3418             (cls := Smalltalk at:className asSymbol ifAbsent:nil) notNil ifTrue:[
  3417 	    (cls := Smalltalk at:className asSymbol ifAbsent:nil) notNil ifTrue:[
  3419                 cls isBehavior ifTrue:[
  3418 		cls isBehavior ifTrue:[
  3420                     cls isLoaded ifFalse:[
  3419 		    cls isLoaded ifFalse:[
  3421                         ^ 'Not loaded'
  3420 			^ 'Not loaded'
  3422                     ]
  3421 		    ]
  3423                 ]
  3422 		]
  3424             ]
  3423 	    ]
  3425         ].
  3424 	].
  3426         ^'No class'
  3425 	^'No class'
  3427     ].
  3426     ].
  3428     delta = '-'    ifTrue: [^'Remove'].
  3427     delta = '-'    ifTrue: [^'Remove'].
  3429     delta = '+'    ifTrue: [^'New'].
  3428     delta = '+'    ifTrue: [^'New'].
  3430     ^delta
  3429     ^delta
  3431 
  3430 
  3454 
  3453 
  3455 listColor
  3454 listColor
  3456 
  3455 
  3457     (string at: 3) ~~ $- ifTrue: 
  3456     (string at: 3) ~~ $- ifTrue: 
  3458     [
  3457     [
  3459         (self type = 'class') ifTrue: [^Color gray].
  3458 	(self type = 'class') ifTrue: [^Color gray].
  3460         ^Color white
  3459 	^Color white
  3461     ].
  3460     ].
  3462 
  3461 
  3463     (string includesMatchString: '---- s') ifTrue: [^Color red].
  3462     (string includesMatchString: '---- s') ifTrue: [^Color red].
  3464     (string includesMatchString: '---- f') ifTrue: [^Color cyan: 100 magenta: 20 yellow: 20].
  3463     (string includesMatchString: '---- f') ifTrue: [^Color cyan: 100 magenta: 20 yellow: 20].
  3465     (string includesMatchString: '---- c') ifTrue: [^Color blue].
  3464     (string includesMatchString: '---- c') ifTrue: [^Color blue].
  3516 ! !
  3515 ! !
  3517 
  3516 
  3518 !NewChangesBrowser class methodsFor:'documentation'!
  3517 !NewChangesBrowser class methodsFor:'documentation'!
  3519 
  3518 
  3520 version
  3519 version
  3521     ^ '$Header: /cvs/stx/stx/libtool/NewChangesBrowser.st,v 1.23 1998-10-17 13:25:54 cg Exp $'
  3520     ^ '$Header: /cvs/stx/stx/libtool/NewChangesBrowser.st,v 1.24 1999-07-10 10:43:40 cg Exp $'
  3522 ! !
  3521 ! !