--- a/NewChangesBrowser.st Mon Feb 04 13:24:53 2008 +0100
+++ b/NewChangesBrowser.st Mon Feb 04 13:25:06 2008 +0100
@@ -4,14 +4,15 @@
instanceVariableNames:'changes changeFileName skipSignal changeFileTimestamp
autoUpdateBlock filterCompletionBlock editingClassSource modified'
classVariableNames:'AutoUpdate CompressSnapshotInfo CategoryColumn DeltaInfoColumn
- TypeColumn TimeStampColumn PositionsColumn PrivateAsSeparate'
+ TypeColumn TimeStampColumn PositionsColumn PrivateAsSeparate
+ ClassNameColumn ClassAndSelectorColumn SelectorColumn'
poolDictionaries:''
category:'Interface-Browsers'
!
Object subclass:#Change
instanceVariableNames:'delta string type timeStamp category chunk lastPosition position
- className followUp'
+ className selector followUp'
classVariableNames:''
poolDictionaries:''
privateIn:NewChangesBrowser
@@ -24,14 +25,13 @@
The future Changes Browser.
[start with:]
- NewChangesBrowser open
- NewChangesBrowser openOnFile:aFileName
+ NewChangesBrowser open
+ NewChangesBrowser openOnFile:aFileName
[author:]
- Thomas Zwick, eXept Software AG
+ Thomas Zwick, eXept Software AG
+ enhanced by Felix Madrid, eXept Software AG
"
-
-
! !
!NewChangesBrowser class methodsFor:'instance creation'!
@@ -72,7 +72,7 @@
!NewChangesBrowser class methodsFor:'help specs'!
-helpSpec
+flyByHelpSpec
"This resource specification was automatically generated
by the UIHelpTool of ST/X."
@@ -85,13 +85,13 @@
<resource: #help>
- ^super helpSpec addPairsFrom:#(
+ ^super flyByHelpSpec addPairsFrom:#(
#applyAll
'Apply all changes.'
#applyForClassToEnd
-'Apply changes to the end which affect this class.'
+'Apply changes which affect this class to the end.'
#applyFromLastSnapshot
'Apply changes from the last snapshot to the end.'
@@ -160,7 +160,7 @@
'Opens a info dialog showing the difference between the changes code and the method current code.'
#testFindLastSnapshot
-'Searches backward for the latest snapshot entry.'
+'Searches backward for the previous snapshot entry.'
#testFindNextSnapshot
'Searches forward for the next snapshot entry.'
@@ -168,11 +168,114 @@
)
"Modified: / 19.5.1998 / 17:59:39 / cg"
+!
+
+helpSpec
+ "This resource specification was automatically generated
+ by the UIHelpTool of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the UIHelpTool may not be able to read the specification."
+
+ "
+ UIHelpTool openOnClass:NewChangesBrowser
+ "
+
+ <resource: #help>
+
+ ^ super helpSpec addPairsFrom:#(
+
+#applyAll
+'Apply all changes.'
+
+#applyForClassToEnd
+'Apply changes to the end which affect this class.'
+
+#applyFromLastSnapshot
+'Apply changes from the last snapshot to the end.'
+
+#applyLine
+'Apply the selected change.'
+
+#applyToEnd
+'Apply all changes from the selected one to the end.'
+
+#deleteAll
+'Deletes all changes.'
+
+#deleteCompress
+'Deletes all obsolete changes.'
+
+#deleteCompressForClass
+'Deletes obsolete changes for this class, leaving the last one.'
+
+#deleteForClassToEnd
+'Deletes changes for this class from the selection to the end.'
+
+#deleteLine
+'Deletes the selected change.'
+
+#deleteToEnd
+'Deletes changes from the selected one to the end.'
+
+#fileLoad
+'Opens a dialog for selecting and loading another changes file.'
+
+#fileReload
+'Reloads the changes file (undo your modifications).'
+
+#fileSave
+'Saves the list of changes into the current changes file.'
+
+#filterField
+'Matching patterns filtering the changes (separate patterns by blanks).'
+
+#settingsAutoUpdate
+'Toggle automatic update.'
+
+#settingsColumns
+'Configure which columns are shown in the list.'
+
+#settingsColumnsCategory
+'Toggle display of the changes category in the list.'
+
+#settingsColumnsClassName
+'Toggle display of the className in the list.'
+
+#settingsColumnsDeltaInfo
+'Toggle display of the delta-info in the list.'
+
+#settingsColumnsPosition
+'Togle display of the changes file-position in the list.'
+
+#settingsColumnsTimeStamp
+'Toggle display of the changes time stamp in the list.'
+
+#settingsColumnsType
+'Toggle display of the change-type in the list.'
+
+#settingsPrivateAsSeparate
+'Toggle if changes for private private are included when applying, deleting, or compressing for a class.'
+
+#testCompareWithCurrentVersion
+'Opens a info dialog showing the difference between the changes code and the method current code.'
+
+#testFindLastSnapshot
+'Searches backward for the previous snapshot entry.'
+
+#testFindNextSnapshot
+'Searches forward for the next snapshot entry.'
+
+)
! !
!NewChangesBrowser class methodsFor:'image specs'!
applyFromLastSnapshotIcon
+ ^ self applyFromLastSnapshotIcon2
+!
+
+applyFromLastSnapshotIcon1
"This resource specification was automatically generated
by the ImageEditor of ST/X."
@@ -180,17 +283,22 @@
the ImageEditor may not be able to read the specification."
"
+ self applyFromLastSnapshotIcon inspect
ImageEditor openOnClass:self andSelector:#applyFromLastSnapshotIcon
+ Icon flushCachedIcons
"
<resource: #image>
^Icon
- constantNamed:#'NewChangesBrowser applyFromLastSnapshotIcon'
- 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]
+ constantNamed:#'NewChangesBrowser class applyFromLastSnapshotIcon'
+ ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH"H"H@@@@@@@@@H"H"H @@@@@@@@@@@@@B@@@@@@
+@@;.;.; 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?0@B@P@B@P@O?P@O?P@O?0@??@@??@@??LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]
!
-applyIcon
+applyFromLastSnapshotIcon2
"This resource specification was automatically generated
by the ImageEditor of ST/X."
@@ -198,14 +306,80 @@
the ImageEditor may not be able to read the specification."
"
+ self applyFromLastSnapshotIcon1 inspect
+ ImageEditor openOnClass:self andSelector:#applyFromLastSnapshotIcon1
+ Icon flushCachedIcons
+ "
+
+ <resource: #image>
+
+ ^Icon
+ constantNamed:#'NewChangesBrowser class applyFromLastSnapshotIcon1'
+ ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@BH@@@@@@QDQ<@@BH @@@@@AH"H@@@H"@@@@@@D"H H H"@@@@@@@RH"@"H"@@@@@@@AH"H@H"H@@@@@@@<@@@@BH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@;.;.; @@@@@@@@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:'A@C<C@C<C@C<&@C<<@C<\@C<H@@@@?<@@?<@@?<LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]
+!
+
+applyIcon
+ ^ self applyIcon2
+!
+
+applyIcon1
+ "This resource specification was automatically generated
+ by the ImageEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the ImageEditor may not be able to read the specification."
+
+ "
+ self applyIcon inspect
ImageEditor openOnClass:self andSelector:#applyIcon
+ Icon flushCachedIcons
"
<resource: #image>
^Icon
- constantNamed:#'NewChangesBrowser applyIcon'
- 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]
+ constantNamed:#'NewChangesBrowser class applyIcon'
+ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+UUUUUUUPUUUUUU?PUUUUUU?[UUUUUW=PP@@@@C<QQUUU=_4PQUUU?_4VQ**U_?TPQUUUW?TPQUUUW=TXQ***U=TPQ**UUUTPQ*****TPQ***%UTPQ****)TP
+QUUUUUTPQUUUUUTUP@@@@@@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@@A0_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+!
+
+applyIcon2
+ "This resource specification was automatically generated
+ by the ImageEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the ImageEditor may not be able to read the specification."
+
+ "
+ self applyIcon2 inspect
+ ImageEditor openOnClass:self andSelector:#applyIcon2
+ Icon flushCachedIcons
+ "
+
+ <resource: #image>
+
+ ^Icon
+ constantNamed:#'NewChangesBrowser class applyIcon2'
+ ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+DQDQDQDQDQDQP3PQDQDQDQDQDQECMADQDQDQDQDQECMADQDQDQEDPQDTL4DP@@@@@DL4@DL4@Q@QDQDQP3MAP3PADADQDQDTL3P3PPDPD"H"HQECL3MA@Q@Q
+DQDQDQP3MADADADQDQDQDTL4DPDPD"H"H"HQEDDQ@Q@RH"H!!DQDQDQDADAH"H"H"H"H"DPDPD"H"H"H!!DQDQ@Q@RH"H"H"H"HQDADADQDQDQDQDQDPDPDQDQ
+DQDQDQDQ@Q@@@@@@@@@@@@@ADQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDb') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 0 0 85 85 85]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@<@@@<@@A8@C!!8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
!
applyToEndIcon
@@ -216,14 +390,19 @@
the ImageEditor may not be able to read the specification."
"
+ self applyToEndIcon inspect
ImageEditor openOnClass:self andSelector:#applyToEndIcon
+ Icon flushCachedIcons
"
<resource: #image>
^Icon
- constantNamed:#'NewChangesBrowser applyToEndIcon'
- 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]
+ constantNamed:#'NewChangesBrowser class applyToEndIcon'
+ ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@@@DP@@@@@@@@@@@@DQ@@@@@@@@@@@@@QD@@@"H"H"@@Q@QD@@@BH"H"H@ADQD@@@@@@@@@ @@QDP@@BH"H"HB@@@DP@@@H"H"H @@@@@@@@@@@@@B@@@@@@
+@@L3L3L0H@@@@@@@@3L3L3@@@@@@@@@@@@@@L@@B@@@@@3L3L3@0@@@B@@@CL3L3L@@@H@@@@@@@@@@0@@@@H@@ADQDQDC@@@ @@@@DQDQDP@@@@@ @@@@@@
+@A@@@B@@@@DQDQDPD@@ @@@@@SL3DQ@@@@@@@@@AL3L3D@@@@@@@@@DQDQDP@@@@@ @@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A@@@CC?0CC?0&C?0<O?0\O?0HO?0@??@@??@@??LC?<\C?<\C?<8O?08O?10O?10??C ??[@??_@?<^@?<_@?<_@') ; yourself); yourself]
!
compressIcon
@@ -314,6 +493,50 @@
^Icon
constantNamed:#'NewChangesBrowser findNextSnapshotIcon'
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]
+!
+
+findPreviousForClassIcon
+ "This resource specification was automatically generated
+ by the ImageEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the ImageEditor may not be able to read the specification."
+
+ "
+ self findPreviousForClassIcon inspect
+ ImageEditor openOnClass:self andSelector:#findPreviousForClassIcon
+ Icon flushCachedIcons
+ "
+
+ <resource: #image>
+
+ ^Icon
+ constantNamed:#'NewChangesBrowser class findPreviousForClassIcon'
+ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@EUUUW@A@G???<@@@G???<@@@G???<@@@G???<@@@G???<@@@G???<@@@G???<@A@G???<@M@G???<@H@G???<@@@G???<@@@G???<@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]
+!
+
+findPreviousSnapshotIcon
+ "This resource specification was automatically generated
+ by the ImageEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the ImageEditor may not be able to read the specification."
+
+ "
+ self findPreviousSnapshotIcon inspect
+ ImageEditor openOnClass:self andSelector:#findPreviousSnapshotIcon
+ Icon flushCachedIcons
+ "
+
+ <resource: #image>
+
+ ^Icon
+ constantNamed:#'NewChangesBrowser class findPreviousSnapshotIcon'
+ 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]
! !
!NewChangesBrowser class methodsFor:'interface specs'!
@@ -553,62 +776,81 @@
<resource: #tableColumns>
-
- ^ #(
- #(#DataSetColumnSpec
- #rendererType: #rowSelector
- #backgroundSelector: #listColor
- #showSelectionHighLighted: false
+ ^#(
+ (DataSetColumnSpec
+ labelButtonType: Button
+ rendererType: rowSelector
+ backgroundSelector: listColor
+ showSelectionHighLighted: false
+ )
+ (DataSetColumnSpec
+ label: 'Change'
+ id: change
+ labelAlignment: left
+ labelButtonType: Button
+ model: string
+ canSelect: false
)
- #(#DataSetColumnSpec
- #label: 'Change'
- #id: #change
- #translateLabel: true
- #labelAlignment: #left
- #model: #string
- #canSelect: false
+ (DataSetColumnSpec
+ label: 'Class'
+ id: 'className'
+ labelAlignment: left
+ activeHelpKey: ''
+ labelButtonType: Button
+ model: className
+ canSelect: false
)
- #(#DataSetColumnSpec
- #label: 'Category'
- #id: #category
- #translateLabel: true
- #labelAlignment: #left
- #model: #category
- #canSelect: false
+ (DataSetColumnSpec
+ label: 'Selector'
+ id: 'selector'
+ labelAlignment: left
+ activeHelpKey: ''
+ labelButtonType: Button
+ model: selector
+ canSelect: false
)
- #(#DataSetColumnSpec
- #label: 'Delta Info'
- #id: #deltaInfo
- #translateLabel: true
- #labelAlignment: #left
- #model: #delta
- #canSelect: false
+ (DataSetColumnSpec
+ label: 'Category'
+ id: category
+ labelAlignment: left
+ labelButtonType: Button
+ model: category
+ canSelect: false
)
- #(#DataSetColumnSpec
- #label: 'Time Stamp'
- #id: #timeStamp
- #translateLabel: true
- #labelAlignment: #left
- #model: #timeStamp
- #canSelect: false
+ (DataSetColumnSpec
+ label: 'Delta Info'
+ id: deltaInfo
+ labelAlignment: left
+ labelButtonType: Button
+ model: delta
+ canSelect: false
)
- #(#DataSetColumnSpec
- #label: 'Type'
- #id: #type
- #translateLabel: true
- #labelAlignment: #left
- #model: #type
- #canSelect: false
+ (DataSetColumnSpec
+ label: 'Time Stamp'
+ id: timeStamp
+ labelAlignment: left
+ labelButtonType: Button
+ model: timeStamp
+ canSelect: false
)
- #(#DataSetColumnSpec
- #label: 'Position'
- #id: #position
- #translateLabel: true
- #labelAlignment: #left
- #model: #positions
- #canSelect: false
+ (DataSetColumnSpec
+ label: 'Type'
+ id: type
+ labelAlignment: left
+ labelButtonType: Button
+ model: type
+ canSelect: false
)
- )
+ (DataSetColumnSpec
+ label: 'Position'
+ id: position
+ labelAlignment: left
+ labelButtonType: Button
+ model: positions
+ canSelect: false
+ )
+ )
+
! !
!NewChangesBrowser class methodsFor:'menu specs'!
@@ -627,336 +869,364 @@
<resource: #menu>
- ^
-
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'About'
- #translateLabel: true
- #activeHelpKey: #about
- #labelImage: #(#ResourceRetriever nil #menuIcon)
- #submenuChannel: #menuAbout
- )
- #(#MenuItem
- #label: 'File'
- #translateLabel: true
- #activeHelpKey: #file
- #submenu:
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Reload'
- #translateLabel: true
- #value: #doReload
- #activeHelpKey: #fileReload
- #enabled: #valueOfNotReading
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Load...'
- #translateLabel: true
- #value: #doLoad
- #activeHelpKey: #fileLoad
- #enabled: #valueOfNotSaving
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Save'
- #translateLabel: true
- #value: #doSave
- #activeHelpKey: #fileSave
- #enabled: #valueOfNotReading
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Browse Class'
- #translateLabel: true
- #value: #doBrowseClass
- #activeHelpKey: #fileBrowseClass
- #enabled: #valueOfHavingChangeSelection
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Exit'
- #translateLabel: true
- #value: #closeRequest
- #activeHelpKey: #fileExit
- #enabled: #valueOfNotSaving
- )
- ) nil
- nil
- )
- )
- #(#MenuItem
- #label: 'Apply'
- #translateLabel: true
- #submenu:
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Change'
- #translateLabel: true
- #value: #doApply
- #activeHelpKey: #applyLine
- #enabled: #valueOfHavingChangeSelection
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'All'
- #translateLabel: true
- #value: #doApplyAll
- #activeHelpKey: #applyAll
- #enabled: #valueOfNotReading
- )
- #(#MenuItem
- #label: 'To End'
- #translateLabel: true
- #value: #doApplyToEnd
- #activeHelpKey: #applyToEnd
- #enabled: #valueOfHavingSelection
- )
- #(#MenuItem
- #label: 'All for Class'
- #translateLabel: true
- #value: #doApplyAllForClass
- #activeHelpKey: #applyForClassToEnd
- #enabled: #valueOfHavingChangeSelection
- )
- #(#MenuItem
- #label: 'For Class to End'
- #translateLabel: true
- #value: #doApplyForClassToEnd
- #activeHelpKey: #applyForClassToEnd
- #enabled: #valueOfHavingChangeSelection
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'From last Snapshot'
- #translateLabel: true
- #value: #doApplyFromLastSnapshot
- #activeHelpKey: #applyFromLastSnapshot
- #enabled: #valueOfNotReading
- )
- ) nil
- nil
- )
- )
- #(#MenuItem
- #label: 'Delete'
- #translateLabel: true
- #activeHelpKey: #edit
- #submenu:
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Change'
- #translateLabel: true
- #value: #doDelete
- #activeHelpKey: #deleteLine
- #enabled: #valueOfHavingSelection
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'All'
- #translateLabel: true
- #value: #doDeleteAll
- #activeHelpKey: #deleteAll
- #enabled: #valueOfNotReading
- )
- #(#MenuItem
- #label: 'To End'
- #translateLabel: true
- #value: #doDeleteToEnd
- #activeHelpKey: #deleteToEnd
- #enabled: #valueOfHavingSelection
- )
- #(#MenuItem
- #label: 'All for Class'
- #translateLabel: true
- #value: #doDeleteAllForClass
- #activeHelpKey: #applyForClassToEnd
- #enabled: #valueOfHavingChangeSelection
- )
- #(#MenuItem
- #label: 'For Class to End'
- #translateLabel: true
- #value: #doDeleteForClassToEnd
- #activeHelpKey: #deleteForClassToEnd
- #enabled: #valueOfHavingChangeSelection
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Compress'
- #translateLabel: true
- #value: #doCompress
- #activeHelpKey: #deleteCompress
- #enabled: #valueOfNotReading
- )
- #(#MenuItem
- #label: 'Compress for Class'
- #translateLabel: true
- #value: #doCompressForClass
- #activeHelpKey: #deleteCompressForClass
- #enabled: #valueOfHavingChangeSelection
- )
- ) nil
- nil
- )
- )
- #(#MenuItem
- #label: 'Test'
- #translateLabel: true
- #activeHelpKey: #test
- #submenu:
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Find last Snapshot'
- #translateLabel: true
- #value: #doFindSnapshot:
- #activeHelpKey: #testFindLastSnapshot
- #enabled: #valueOfHavingSelection
- #argument: 'last'
- )
- #(#MenuItem
- #label: 'Find next Snapshot'
- #translateLabel: true
- #value: #doFindSnapshot:
- #activeHelpKey: #testFindNextSnapshot
- #enabled: #valueOfHavingSelection
- #argument: 'next'
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Compare with Current Version'
- #translateLabel: true
- #value: #doCompare
- #activeHelpKey: #testCompareWithCurrentVersion
- #enabled: #valueOfHavingChangeSelection
- )
- ) nil
- nil
- )
- )
- #(#MenuItem
- #label: 'Settings'
- #translateLabel: true
- #activeHelpKey: #settings
- #submenu:
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Auto Update'
- #translateLabel: true
- #activeHelpKey: #settingsAutoUpdate
- #enabled: #valueOfNotReading
- #indication: #autoUpdateMode:
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Private Classes as Separate'
- #translateLabel: true
- #activeHelpKey: #settingsPrivateAsSeparate
- #enabled: #valueOfNotReading
- #indication: #privateAsSeparate:
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Columns'
- #translateLabel: true
- #activeHelpKey: #settingsColumns
- #submenu:
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Category'
- #activeHelpKey: #settingsColumnsCategory
- #indication: #categoryColumn:
- )
- #(#MenuItem
- #label: 'Delta Info'
- #activeHelpKey: #settingsColumnsDeltaInfo
- #indication: #deltaInfoColumn:
- )
- #(#MenuItem
- #label: 'Type'
- #activeHelpKey: #settingsColumnsType
- #indication: #typeColumn:
- )
- #(#MenuItem
- #label: 'Time Stamp'
- #activeHelpKey: #settingsColumnsTimeStamp
- #indication: #timeStampColumn:
- )
- #(#MenuItem
- #label: 'Positions'
- #activeHelpKey: #settingsColumnsPosition
- #indication: #positionsColumn:
- )
- ) nil
- nil
- )
- )
- #(#MenuItem
- #label: '-'
- )
- #(#MenuItem
- #label: 'Fonts'
- #translateLabel: true
- #enabled: #valueOfNotReading
- #submenuChannel: #menuFont
- )
- ) nil
- nil
- )
- )
- #(#MenuItem
- #label: 'History'
- #translateLabel: true
- #submenuChannel: #menuHistory
- )
- #(#MenuItem
- #label: 'Help'
- #translateLabel: true
- #startGroup: #right
- #activeHelpKey: #help
- #submenuChannel: #menuHelp
- )
- ) nil
- nil
+ ^
+ #(Menu
+ (
+ (MenuItem
+ activeHelpKey: file
+ label: 'File'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: fileReload
+ enabled: valueOfNotReading
+ label: 'Reload'
+ itemValue: doReload
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: fileLoad
+ enabled: valueOfNotSaving
+ label: 'Load...'
+ itemValue: doLoad
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: fileSave
+ enabled: valueOfNotReading
+ label: 'Save'
+ itemValue: doSave
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: fileBrowseClass
+ enabled: valueOfHavingChangeSelection
+ label: 'Browse Class'
+ itemValue: doBrowseClass
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: fileExit
+ enabled: valueOfNotSaving
+ label: 'Exit'
+ itemValue: closeRequest
+ translateLabel: true
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ label: 'Apply'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: applyLine
+ enabled: valueOfHavingChangeSelection
+ label: 'Change'
+ itemValue: doApply
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: applyAll
+ enabled: valueOfNotReading
+ label: 'All'
+ itemValue: doApplyAll
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: applyToEnd
+ enabled: valueOfHavingSelection
+ label: 'To End'
+ itemValue: doApplyToEnd
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: applyForClassToEnd
+ enabled: valueOfHavingChangeSelection
+ label: 'All for Class'
+ itemValue: doApplyAllForClass
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: applyForClassToEnd
+ enabled: valueOfHavingChangeSelection
+ label: 'For Class to End'
+ itemValue: doApplyForClassToEnd
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: applyFromLastSnapshot
+ enabled: valueOfNotReading
+ label: 'From Last Snapshot'
+ itemValue: doApplyFromLastSnapshot
+ translateLabel: true
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ activeHelpKey: edit
+ label: 'Delete'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: deleteLine
+ enabled: valueOfHavingSelection
+ label: 'Change'
+ itemValue: doDelete
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: deleteAll
+ enabled: valueOfNotReading
+ label: 'All'
+ itemValue: doDeleteAll
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: deleteToEnd
+ enabled: valueOfHavingSelection
+ label: 'To End'
+ itemValue: doDeleteToEnd
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: applyForClassToEnd
+ enabled: valueOfHavingChangeSelection
+ label: 'All for Class'
+ itemValue: doDeleteAllForClass
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: deleteForClassToEnd
+ enabled: valueOfHavingChangeSelection
+ label: 'For Class to End'
+ itemValue: doDeleteForClassToEnd
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: deleteCompress
+ enabled: valueOfNotReading
+ label: 'Compress'
+ itemValue: doCompress
+ translateLabel: true
+ )
+ (MenuItem
+ activeHelpKey: deleteCompressForClass
+ enabled: valueOfHavingChangeSelection
+ label: 'Compress for Class'
+ itemValue: doCompressForClass
+ translateLabel: true
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ activeHelpKey: test
+ label: 'Search'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: testFindPreviousSnapshot
+ enabled: valueOfHavingSelection
+ label: 'Find Previous Snapshot'
+ itemValue: doFindSnapshot:
+ translateLabel: true
+ argument: 'previous'
+ )
+ (MenuItem
+ activeHelpKey: testFindNextSnapshot
+ enabled: valueOfHavingSelection
+ label: 'Find Next Snapshot'
+ itemValue: doFindSnapshot:
+ translateLabel: true
+ argument: 'next'
+ )
+ (MenuItem
+ activeHelpKey: testFindLastSnapshot
+ enabled: valueOfHavingSelection
+ label: 'Find Last Snapshot'
+ itemValue: doFindSnapshot:
+ translateLabel: true
+ argument: 'last'
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ activeHelpKey: test
+ label: 'Test'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: testCompareWithCurrentVersion
+ enabled: valueOfHavingChangeSelection
+ label: 'Compare with Current Version'
+ itemValue: doCompare
+ translateLabel: true
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ activeHelpKey: settings
+ label: 'Settings'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: settingsAutoUpdate
+ enabled: valueOfNotReading
+ label: 'Auto Update'
+ translateLabel: true
+ indication: autoUpdateMode:
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: settingsPrivateAsSeparate
+ enabled: valueOfNotReading
+ label: 'Private Classes as Separate'
+ translateLabel: true
+ indication: privateAsSeparate:
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: settingsColumns
+ label: 'Columns'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ activeHelpKey: settingsColumnsClassName
+ label: 'Class'
+ translateLabel: true
+ isVisible: false
+ hideMenuOnActivated: false
+ indication: classNameColumn:
+ )
+ (MenuItem
+ activeHelpKey: settingsColumnsCategory
+ label: 'Selector'
+ translateLabel: true
+ isVisible: false
+ hideMenuOnActivated: false
+ indication: selectorColumn:
+ )
+ (MenuItem
+ activeHelpKey: settingsColumnsCategory
+ label: 'Category'
+ translateLabel: true
+ hideMenuOnActivated: false
+ indication: categoryColumn:
+ )
+ (MenuItem
+ activeHelpKey: settingsColumnsDeltaInfo
+ label: 'Delta Info'
+ translateLabel: true
+ hideMenuOnActivated: false
+ indication: deltaInfoColumn:
+ )
+ (MenuItem
+ activeHelpKey: settingsColumnsType
+ label: 'Type'
+ translateLabel: true
+ hideMenuOnActivated: false
+ indication: typeColumn:
+ )
+ (MenuItem
+ activeHelpKey: settingsColumnsTimeStamp
+ label: 'Time Stamp'
+ translateLabel: true
+ hideMenuOnActivated: false
+ indication: timeStampColumn:
+ )
+ (MenuItem
+ activeHelpKey: settingsColumnsPosition
+ label: 'Positions'
+ translateLabel: true
+ hideMenuOnActivated: false
+ indication: positionsColumn:
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ enabled: valueOfNotReading
+ label: 'Fonts'
+ translateLabel: true
+ submenuChannel: menuFont
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ activeHelpKey: help
+ label: 'MENU_Help'
+ translateLabel: true
+ startGroup: conditionalRight
+ submenuChannel: menuHelp
+ )
+ )
+ nil
+ nil
)
-
- "Modified: / 19.5.1998 / 18:17:27 / cg"
!
menuTable
@@ -1078,107 +1348,113 @@
<resource: #menu>
- ^
-
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'Load'
- #isButton: true
- #value: #doLoad
- #activeHelpKey: #fileLoad
- #enabled: #valueOfNotReading
- #labelImage: #(#ResourceRetriever #Icon #loadIcon)
- )
- #(#MenuItem
- #label: 'Save'
- #isButton: true
- #value: #doSave
- #activeHelpKey: #fileSave
- #enabled: #valueOfNotSaving
- #labelImage: #(#ResourceRetriever #Icon #saveIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Compress'
- #isButton: true
- #value: #doCompress
- #activeHelpKey: #deleteCompress
- #enabled: #valueOfNotReading
- #labelImage: #(#ResourceRetriever nil #compressIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Apply'
- #isButton: true
- #value: #doApply
- #activeHelpKey: #applyLine
- #enabled: #valueOfHavingChangeSelection
- #labelImage: #(#ResourceRetriever nil #applyIcon)
- )
- #(#MenuItem
- #label: 'Apply To End'
- #isButton: true
- #value: #doApplyToEnd
- #activeHelpKey: #applyToEnd
- #enabled: #valueOfHavingSelection
- #labelImage: #(#ResourceRetriever nil #applyToEndIcon)
- )
- #(#MenuItem
- #label: 'Apply From Last Snapshot'
- #isButton: true
- #value: #doApplyFromLastSnapshot
- #activeHelpKey: #applyFromLastSnapshot
- #enabled: #valueOfNotReading
- #labelImage: #(#ResourceRetriever nil #applyFromLastSnapshotIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Delete'
- #isButton: true
- #value: #doDelete
- #activeHelpKey: #deleteLine
- #enabled: #valueOfHavingSelection
- #labelImage: #(#ResourceRetriever nil #deleteIcon)
- )
- #(#MenuItem
- #label: 'Delete To End'
- #isButton: true
- #value: #doDeleteToEnd
- #activeHelpKey: #deleteToEnd
- #enabled: #valueOfHavingSelection
- #labelImage: #(#ResourceRetriever nil #deleteToEndIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Find Last Snapshot'
- #isButton: true
- #value: #doFindSnapshot:
- #activeHelpKey: #testFindLastSnapshot
- #enabled: #valueOfHavingSelection
- #argument: 'last'
- #labelImage: #(#ResourceRetriever nil #findLastSnapshotIcon)
- )
- #(#MenuItem
- #label: 'Find Next Snapshot'
- #isButton: true
- #value: #doFindSnapshot:
- #activeHelpKey: #testFindNextSnapshot
- #enabled: #valueOfHavingSelection
- #argument: 'next'
- #labelImage: #(#ResourceRetriever nil #findNextSnapshotIcon)
- )
- ) nil
- nil
+ ^
+ #(Menu
+ (
+ (MenuItem
+ activeHelpKey: fileLoad
+ enabled: valueOfNotReading
+ label: 'Load'
+ itemValue: doLoad
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever XPToolbarIconLibrary loadFromFileIcon)
+ )
+ (MenuItem
+ activeHelpKey: fileSave
+ enabled: valueOfNotSaving
+ label: 'Save'
+ itemValue: doSave
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever XPToolbarIconLibrary saveToFileIcon)
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: applyLine
+ enabled: valueOfHavingChangeSelection
+ label: 'Apply'
+ itemValue: doApply
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil applyIcon)
+ )
+ (MenuItem
+ activeHelpKey: applyToEnd
+ enabled: valueOfHavingSelection
+ label: 'Apply To End'
+ itemValue: doApplyToEnd
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil applyToEndIcon)
+ )
+ (MenuItem
+ activeHelpKey: applyFromLastSnapshot
+ enabled: valueOfNotReading
+ label: 'Apply From Last Snapshot'
+ itemValue: doApplyFromLastSnapshot
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil applyFromLastSnapshotIcon)
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: deleteLine
+ enabled: valueOfHavingSelection
+ label: 'Delete'
+ itemValue: doDelete
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil deleteIcon)
+ )
+ (MenuItem
+ activeHelpKey: deleteToEnd
+ enabled: valueOfHavingSelection
+ label: 'Delete To End'
+ itemValue: doDeleteToEnd
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil deleteToEndIcon)
+ )
+ (MenuItem
+ activeHelpKey: deleteCompress
+ enabled: valueOfNotReading
+ label: 'Compress'
+ itemValue: doCompress
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil compressIcon)
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: testFindPreviousSnapshot
+ enabled: valueOfHavingSelection
+ label: 'Find Previous Snapshot'
+ itemValue: doFindSnapshot:
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil findPreviousSnapshotIcon)
+ argument: 'previous'
+ )
+ (MenuItem
+ activeHelpKey: testFindNextSnapshot
+ enabled: valueOfHavingSelection
+ label: 'Find Next Snapshot'
+ itemValue: doFindSnapshot:
+ translateLabel: true
+ isButton: true
+ labelImage: (ResourceRetriever nil findNextSnapshotIcon)
+ argument: 'next'
+ )
+ )
+ nil
+ nil
)
! !
@@ -1198,6 +1474,34 @@
"Modified: / 19.5.1998 / 20:30:13 / cg"
!
+classAndSelectorColumn
+ "returns whether the column for the category attribute of the changes is shown"
+
+ ^ClassAndSelectorColumn ? (ClassAndSelectorColumn := false)
+!
+
+classAndSelectorColumn: aBoolean
+ "sets whether the column for the category attribute of the changes is shown"
+
+ self changeColumn: #classAndSelector add: (ClassAndSelectorColumn := aBoolean)
+
+ "Modified: / 19.5.1998 / 20:30:13 / cg"
+!
+
+classNameColumn
+ "returns whether the column for the category attribute of the changes is shown"
+
+ ^ClassNameColumn ? (ClassNameColumn := false)
+!
+
+classNameColumn: aBoolean
+ "sets whether the column for the className attribute of the changes is shown"
+
+ self changeColumn: #className add: (ClassNameColumn := aBoolean)
+
+ "Modified: / 19.5.1998 / 20:30:13 / cg"
+!
+
deltaInfoColumn
"returns whether the column for the delta info attribute of the changes is shown"
@@ -1227,6 +1531,20 @@
"Modified: / 19.5.1998 / 20:30:37 / cg"
!
+selectorColumn
+ "returns whether the column for the category attribute of the changes is shown"
+
+ ^SelectorColumn ? (SelectorColumn := false)
+!
+
+selectorColumn: aBoolean
+ "sets whether the column for the category attribute of the changes is shown"
+
+ self changeColumn: #selector add: (SelectorColumn := aBoolean)
+
+ "Modified: / 19.5.1998 / 20:30:13 / cg"
+!
+
timeStampColumn
"returns whether the column for the time stamp attribute of the changes is shown"
@@ -1300,14 +1618,18 @@
|holder|
(holder := builder bindingAt:#listOfChangeColumns) isNil ifTrue:[
- builder aspectAt:#listOfChangeColumns put:(holder := List new).
- self changeColumn: nil add: true.
- self changeColumn: #change add: true.
- self categoryColumn: self categoryColumn.
- self timeStampColumn: self timeStampColumn.
- self typeColumn: self typeColumn.
+ builder aspectAt:#listOfChangeColumns put:(holder := List new).
+ self changeColumn: nil add: true.
+ self changeColumn: #change add: true.
+
+ self classNameColumn: self classNameColumn.
+ self classAndSelectorColumn: self classAndSelectorColumn.
+ self selectorColumn: self selectorColumn.
+ self categoryColumn: self categoryColumn.
+ self timeStampColumn: self timeStampColumn.
+ self typeColumn: self typeColumn.
"/ self deltaInfoColumn: self deltaInfoColumn.
- self positionsColumn: self positionsColumn.
+ self positionsColumn: self positionsColumn.
].
^ holder
@@ -1434,18 +1756,10 @@
super update:something with:aParameter from:changedObject.
- changedObject == self valueOfFilter
- ifTrue:
- [
- filterCompletionBlock value: changedObject value.
- self listOfChanges size > 0 ifTrue: [self addToHistory: changedObject value -> #doFilter:]
+ changedObject == self valueOfFilter ifTrue:[
+ filterCompletionBlock value: changedObject value.
+ self listOfChanges size > 0 ifTrue: [self addToHistory: changedObject value -> #doFilter:]
]
-
-
-
-
-
-
!
updateChannels
@@ -1504,33 +1818,32 @@
(skipSignal notNil) ifTrue:[
- self changeTextEditor highlightingErrorPosition:relPos to:relEndPos do:[
- |box|
-
- "
- start dialog - make certain cleanup is done
- "
- action := OptionBox
- request:aString
- label:'Error'
- form:(WarningBox iconBitmap)
- buttonLabels:#('cancel' 'skip' 'continue')
- values:#(#abort #skip #continue)
- default:#continue.
- ].
-
- action == #abort ifTrue:[
- Object abortSignal raise.
- ^ false
- ].
- action == #skip ifTrue:[
- skipSignal raise.
- ^ false
- ].
- ^ false
+ self changeTextEditor highlightingErrorPosition:relPos to:relEndPos do:[
+ |box|
+
+ "
+ start dialog - make certain cleanup is done
+ "
+ action := OptionBox
+ request:aString
+ label:'Error'
+ image:(WarningBox iconBitmap)
+ buttonLabels:#('cancel' 'skip' 'continue')
+ values:#(#abort #skip #continue)
+ default:#continue.
+ ].
+
+ action == #abort ifTrue:[
+ Object abortSignal raise.
+ ^ false
+ ].
+ action == #skip ifTrue:[
+ skipSignal raise.
+ ^ false
+ ].
+ ^ false
].
^self changeTextEditor error:aString position:relPos to:relEndPos from:aCompiler
-
!
warning:aString position:relPos to:relEndPos from:aCompiler
@@ -1550,6 +1863,10 @@
+!
+
+openDocumentation
+ self openHTMLDocument:'tools/cbrowser/TOP.html'.
! !
!NewChangesBrowser methodsFor:'initialization'!
@@ -1710,18 +2027,14 @@
|newListOfChangeColumns|
newListOfChangeColumns := self listOfChangeColumns asOrderedCollection.
- addOrRemove
- ifTrue:
- [
- newListOfChangeColumns add:
- ((self class tableColumnsForChangeAttributes
- collect: [:i| i decodeAsLiteralArray])
- detect: [:column| column id = aColumnId])
- ]
- ifFalse:
- [
- newListOfChangeColumns remove:
- (self listOfChangeColumns detect: [:column| column id = aColumnId] ifNone: nil) ifAbsent: nil
+ addOrRemove ifTrue:[
+ newListOfChangeColumns add:
+ ((self class tableColumnsForChangeAttributes
+ collect: [:i| i decodeAsLiteralArray])
+ detect: [:column| column id = aColumnId])
+ ] ifFalse:[
+ newListOfChangeColumns remove:
+ (self listOfChangeColumns detect: [:column| column id = aColumnId] ifNone: nil) ifAbsent: nil
].
self listOfChangeColumns contents: newListOfChangeColumns.
self autoSelectLast
@@ -2372,17 +2685,17 @@
and a list of chunk-positions (changePositions).
Starting with 2.10.3, the entries are multi-col entries;
the cols are:
- 1 delta (only if comparing)
- '+' -> new method (w.r.t. current state)
- '-' -> removed method (w.r.t. current state)
- '?' -> class does not exist currently
- '=' -> change is same as current methods source
- 2 class/selector
- 3 type of change
- doit
- method
- category change
- 4 timestamp
+ 1 delta (only if comparing)
+ '+' -> new method (w.r.t. current state)
+ '-' -> removed method (w.r.t. current state)
+ '?' -> class does not exist currently
+ '=' -> change is same as current methods source
+ 2 class/selector
+ 3 type of change
+ doit
+ method
+ category change
+ 4 timestamp
since comparing slows down startup time, it is now disabled by
default and can be enabled via a toggle."
@@ -2413,324 +2726,329 @@
v notNil ifTrue:[v label: 'Read:'; redraw].
self withReadCursorDo:[
- |myProcess myPriority|
-
- "
- this is a time consuming operation (especially, if reading an
- NFS-mounted directory; therefore lower my priority...
- "
- inBackground ifTrue:[
- myProcess := Processor activeProcess.
- myPriority := myProcess priority.
- myProcess priority:(Processor userBackgroundPriority).
- ].
-
- [
- |excla timeStampInfo lastChange|
-
- excla := aStream class chunkSeparator.
-
- [aStream atEnd] whileFalse:[
- |change changeDelta changeString changeType changeCategory
- line s l changeClass sawExcla category
- chunkText chunkPos sel oldValue|
-
- change := Change new.
- "
- get a chunk (separated by excla)
- "
- oldValue := self valueOfReadProgress value.
- self valueOfReadProgress value: (((aStream position/aStream size) * 100) rounded).
+ |myProcess myPriority|
+
+ "
+ this is a time consuming operation (especially, if reading an
+ NFS-mounted directory; therefore lower my priority...
+ "
+ inBackground ifTrue:[
+ myProcess := Processor activeProcess.
+ myPriority := myProcess priority.
+ myProcess priority:(Processor userBackgroundPriority).
+ ].
+
+ [
+ |excla timeStampInfo lastChange|
+
+ excla := aStream class chunkSeparator.
+
+ [aStream atEnd] whileFalse:[
+ |change changeDelta changeString changeType changeCategory
+ line s l changeClass sawExcla category className selector
+ chunkText chunkPos sel oldValue|
+
+ change := Change new.
+ "
+ get a chunk (separated by excla)
+ "
+ oldValue := self valueOfReadProgress value.
+ self valueOfReadProgress value: (((aStream position/aStream size) * 100) rounded).
"/ oldValue ~~ self valueOfReadProgress value
"/ ifTrue: [self readProgressIndicator redrawEdges;redraw].
- aStream skipSeparators.
- chunkPos := aStream position.
-
- sawExcla := aStream peekFor:excla.
- chunkText := aStream nextChunk.
- chunkText notNil ifTrue:[
- |index headerLine cls|
-
- (chunkText startsWith:'''---- timestamp ') ifTrue:[
- timeStampInfo := (chunkText copyFrom:16 to:(chunkText size - 6)) withoutSpaces.
- ] ifFalse:[
-
- "
- only first line is saved in changeChunks...
- "
- index := chunkText indexOf:(Character cr).
- (index ~~ 0) ifTrue:[
- chunkText := chunkText copyTo:(index - 1).
-
- "take care for comment changes - must still be a
- valid expression for classNameOfChange: to work"
-
- (chunkText endsWith:'comment:''') ifTrue:[
- chunkText := chunkText , '...'''
- ].
- (chunkText endsWith:'primitiveDefinitions:''') ifTrue:[
- sel := 'primitiveDefinitions:'.
- chunkText := chunkText copyWithoutLast:1
- ].
- (chunkText endsWith:'primitiveVariables:''') ifTrue:[
- sel := 'primitiveVariables:'.
- chunkText := chunkText copyWithoutLast:1
- ].
- (chunkText endsWith:'primitiveFunctions:''') ifTrue:[
- sel := 'primitiveFunctions:'.
- chunkText := chunkText copyWithoutLast:1
- ].
- ].
-
- change chunk: chunkText.
- change position: chunkPos.
- lastChange notNil ifTrue: [lastChange lastPosition: chunkPos - 1].
- lastChange := change.
- change timeStamp: timeStampInfo.
- change followUp: false.
- headerLine := nil.
- changeDelta := ' '.
-
- sawExcla ifFalse:[
- (chunkText startsWith:'''---- snap') ifTrue:[
- changeType := ''.
- headerLine := chunkText.
- changeString := (chunkText contractTo:maxLen).
- timeStampInfo := nil.
- ] ifFalse:[
-
- |p cls|
-
- headerLine := chunkText , ' (doIt)'.
-
- "
- first, assume doIt - then lets have a more detailed look...
- "
- ((chunkText startsWith:'''---- file')
- or:[(chunkText startsWith:'''---- check')]) ifTrue:[
- changeType := ''.
- timeStampInfo := nil.
- ] ifFalse:[
- changeType := 'doIt'.
- ].
- changeString := (chunkText contractTo:maxLen).
-
- p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
- (p notNil
- and:[p ~~ #Error
- and:[p isMessage]]) ifTrue:[
- sel := p selector.
- ].
- (sel == #removeSelector:) ifTrue:[
- p receiver isUnaryMessage ifTrue:[
- cls := p receiver receiver name.
- changeClass := (Smalltalk classNamed:cls) class.
- cls := cls , ' class'.
- ] ifFalse:[
- cls := p receiver name.
- changeClass := (Smalltalk classNamed:cls)
- ].
- sel := (p args at:1) evaluate.
-
- DeltaInfoColumn ifTrue:[
- (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[
- changeDelta := '?'
- ] ifFalse:[
- (changeClass implements:sel asSymbol) ifTrue:[
- changeDelta := '-'.
- ]
- ]
- ].
- changeType := 'remove'.
- changeString := self contractClass:cls selector:sel to:maxLen.
- ].
- (p ~~ #Error
- and:[p isMessage
- and:[p receiver isMessage
- and:[p receiver selector == #compiledMethodAt:]]]) ifTrue:[
- p receiver receiver isUnaryMessage ifTrue:[
- cls := p receiver receiver receiver name.
- changeClass := (Smalltalk classNamed:cls) class.
- cls := cls , ' class'.
- ] ifFalse:[
- cls := p receiver receiver name.
- changeClass := (Smalltalk classNamed:cls)
- ].
- (sel == #category:) ifTrue:[
- sel := (p receiver args at:1) evaluate.
- changeType := '(category change)'.
- changeString := self contractClass:cls selector:sel to:maxLen.
- ].
- (sel == #privacy:) ifTrue:[
- sel := (p receiver args at:1) evaluate.
- changeType := 'privacy change'.
- changeString := self contractClass:cls selector:sel to:maxLen.
- ].
- ].
- (#(#'subclass:'
- #'variableSubclass:'
- #'variableByteSubclass:'
- #'variableWordSubclass:'
- #'variableLongSubclass:'
- #'variableFloatSubclass:'
- #'variableDoubleSubclass:'
- #'primitiveDefinitions:'
- #'primitiveFunctions:'
- #'primitiveVariables:'
- ) includes:sel) ifTrue:[
- changeType := 'class definition'.
- ].
- ]
- ] ifTrue:[
- |done first p className cls text methodPos|
-
- "
- method definitions actually consist of
- two (or more) chunks; skip next chunk(s)
- up to an empty one.
- The system only writes one chunk,
- and we cannot handle more in this ChangesBrowser....
- "
- className := nil.
- p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
-
- (p notNil and:[p ~~ #Error]) ifTrue:[
- sel := p selector.
- (sel == #methodsFor:) ifTrue:[
- p receiver isUnaryMessage ifTrue:[
- className := p receiver receiver name.
- changeClass := (Smalltalk classNamed:className) class.
- className := className , ' class'.
- ] ifFalse:[
- className := p receiver name.
- changeClass := Smalltalk classNamed:className
- ].
- category := (p args at:1) evaluate.
- ].
- ].
-
- done := false.
- first := true.
- [done] whileFalse:[
-
- changeDelta := ' '.
- methodPos := aStream position.
-
- text := aStream nextChunk.
- text isNil ifTrue:[
- done := true
- ] ifFalse:[
- done := text isEmpty
- ].
- done ifFalse:[
- first ifFalse:[
- change := Change new.
- change chunk: chunkText.
- change string:changeString.
- change position: methodPos.
- change className: className.
- lastChange notNil ifTrue: [lastChange lastPosition: methodPos - 1].
- lastChange := change.
- change timeStamp: timeStampInfo.
- change followUp: true.
- editingClassSource := true.
- ].
-
- first := false.
- "
- try to find the selector
- "
- sel := nil.
- className notNil ifTrue:[
- p := Parser
- parseMethodSpecification:text
- in:nil
- ignoreErrors:true
- ignoreWarnings:true.
- (p notNil and:[p ~~ #Error]) ifTrue:[
- sel := p selector.
- ]
- ].
-
- sel isNil ifTrue:[
- changeString := (chunkText contractTo:maxLen).
- changeType := 'change'.
- headerLine := chunkText , ' (change)'.
- ] ifFalse:[
- changeString := self contractClass:className selector:sel to:maxLen.
- changeType := 'method definition'.
- changeCategory := category.
- headerLine := className , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
- ].
-
- DeltaInfoColumn ifTrue:[
- changeClass isNil ifFalse:[
- changeClass isMeta ifTrue:[
- cls := changeClass soleInstance
- ] ifFalse:[
- cls := changeClass
- ].
- ].
-
- (changeClass isNil or:[cls isLoaded not]) ifTrue:[
- changeDelta := '?'
- ] ifFalse:[
- (changeClass implements:sel asSymbol) ifFalse:[
- changeDelta := '+'.
- ] ifTrue:[
- |m currentText t1 t2|
-
- m := changeClass compiledMethodAt:sel asSymbol.
- currentText := m source.
- currentText notNil ifTrue:[
- text asString = currentText asString ifTrue:[
- changeDelta := '='
- ] ifFalse:[
- t1 := currentText asCollectionOfLines collect:[:s | s withTabsExpanded].
- t2 := text asCollectionOfLines collect:[:s | s withTabsExpanded].
- t1 = t2 ifTrue:[
- changeDelta := '='
- ]
- ]
- ]
- ]
- ]
- ].
- change delta:changeDelta.
- change string:changeString.
- change type:changeType.
- change category: changeCategory.
- change timeStamp:timeStampInfo.
- changes add:change.
- ].
- changeString := nil.
- headerLine := nil.
-
- ]
- ].
- changeString notNil ifTrue:[
- change delta:changeDelta.
- change string:changeString.
- change type:changeType.
- change timeStamp:timeStampInfo.
- changes add:change.
-
- ] ifFalse:[
- headerLine notNil ifTrue:[
- changes add: change.
- ]
- ]
- ]
- ].
- change lastPosition: aStream position.
- ].
- modified := false.
-
- ] valueNowOrOnUnwindDo:[
- aStream close.
- inBackground ifTrue:[myProcess priority:myPriority].
- ].
+ aStream skipSeparators.
+ chunkPos := aStream position.
+
+ sawExcla := aStream peekFor:excla.
+ chunkText := aStream nextChunk.
+ chunkText notNil ifTrue:[
+ |index headerLine cls|
+
+ (chunkText startsWith:'''---- timestamp ') ifTrue:[
+ timeStampInfo := (chunkText copyFrom:16 to:(chunkText size - 6)) withoutSpaces.
+ ] ifFalse:[
+
+ "
+ only first line is saved in changeChunks...
+ "
+ index := chunkText indexOf:(Character cr).
+ (index ~~ 0) ifTrue:[
+ chunkText := chunkText copyTo:(index - 1).
+
+ "take care for comment changes - must still be a
+ valid expression for classNameOfChange: to work"
+
+ (chunkText endsWith:'comment:''') ifTrue:[
+ chunkText := chunkText , '...'''
+ ].
+ (chunkText endsWith:'primitiveDefinitions:''') ifTrue:[
+ sel := 'primitiveDefinitions:'.
+ chunkText := chunkText copyWithoutLast:1
+ ].
+ (chunkText endsWith:'primitiveVariables:''') ifTrue:[
+ sel := 'primitiveVariables:'.
+ chunkText := chunkText copyWithoutLast:1
+ ].
+ (chunkText endsWith:'primitiveFunctions:''') ifTrue:[
+ sel := 'primitiveFunctions:'.
+ chunkText := chunkText copyWithoutLast:1
+ ].
+ ].
+
+ change chunk: chunkText.
+ change position: chunkPos.
+ lastChange notNil ifTrue: [lastChange lastPosition: chunkPos - 1].
+ lastChange := change.
+ change timeStamp: timeStampInfo.
+ change followUp: false.
+ headerLine := nil.
+ changeDelta := ' '.
+
+ sawExcla ifFalse:[
+ (chunkText startsWith:'''---- snap') ifTrue:[
+ changeType := ''.
+ headerLine := chunkText.
+ changeString := (chunkText contractTo:maxLen).
+ timeStampInfo := nil.
+ ] ifFalse:[
+
+ |p cls|
+
+ headerLine := chunkText , ' (doIt)'.
+
+ "
+ first, assume doIt - then lets have a more detailed look...
+ "
+ ((chunkText startsWith:'''---- file')
+ or:[(chunkText startsWith:'''---- check')]) ifTrue:[
+ changeType := ''.
+ timeStampInfo := nil.
+ ] ifFalse:[
+ changeType := 'doIt'.
+ ].
+ changeString := (chunkText contractTo:maxLen).
+
+ p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
+ (p notNil
+ and:[p ~~ #Error
+ and:[p isMessage]]) ifTrue:[
+ sel := p selector.
+ ].
+ (sel == #removeSelector:) ifTrue:[
+ p receiver isUnaryMessage ifTrue:[
+ cls := p receiver receiver name.
+ changeClass := (Smalltalk classNamed:cls) class.
+ cls := cls , ' class'.
+ ] ifFalse:[
+ cls := p receiver name.
+ changeClass := (Smalltalk classNamed:cls)
+ ].
+ sel := (p args at:1) evaluate.
+
+ DeltaInfoColumn ifTrue:[
+ (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[
+ changeDelta := '?'
+ ] ifFalse:[
+ (changeClass implements:sel asSymbol) ifTrue:[
+ changeDelta := '-'.
+ ]
+ ]
+ ].
+ changeType := 'remove'.
+ changeString := self contractClass:cls selector:sel to:maxLen.
+ className := cls.
+ selector := sel.
+ ].
+ (p notNil and:[p ~~ #Error
+ and:[p isMessage
+ and:[p receiver isMessage
+ and:[p receiver selector == #compiledMethodAt:]]]]) ifTrue:[
+ p receiver receiver isUnaryMessage ifTrue:[
+ cls := p receiver receiver receiver name.
+ changeClass := (Smalltalk classNamed:cls) class.
+ cls := cls , ' class'.
+ ] ifFalse:[
+ cls := p receiver receiver name.
+ changeClass := (Smalltalk classNamed:cls)
+ ].
+ (sel == #category:) ifTrue:[
+ sel := (p receiver args at:1) evaluate.
+ changeType := '(category change)'.
+ changeString := self contractClass:cls selector:sel to:maxLen.
+ ].
+ (sel == #privacy:) ifTrue:[
+ sel := (p receiver args at:1) evaluate.
+ changeType := 'privacy change'.
+ changeString := self contractClass:cls selector:sel to:maxLen.
+ ].
+ className := cls.
+ selector := sel.
+ ].
+ (#(#'subclass:'
+ #'variableSubclass:'
+ #'variableByteSubclass:'
+ #'variableWordSubclass:'
+ #'variableLongSubclass:'
+ #'variableFloatSubclass:'
+ #'variableDoubleSubclass:'
+ #'primitiveDefinitions:'
+ #'primitiveFunctions:'
+ #'primitiveVariables:'
+ ) includes:sel) ifTrue:[
+ changeType := 'class definition'.
+ ].
+ ]
+ ] ifTrue:[
+ |done first p className cls text methodPos|
+
+ "
+ method definitions actually consist of
+ two (or more) chunks; skip next chunk(s)
+ up to an empty one.
+ The system only writes one chunk,
+ and we cannot handle more in this ChangesBrowser....
+ "
+ className := nil.
+ p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
+
+ (p notNil and:[p ~~ #Error]) ifTrue:[
+ sel := p selector.
+ (sel == #methodsFor:) ifTrue:[
+ p receiver isUnaryMessage ifTrue:[
+ className := p receiver receiver name.
+ changeClass := (Smalltalk classNamed:className) class.
+ className := className , ' class'.
+ ] ifFalse:[
+ className := p receiver name.
+ changeClass := Smalltalk classNamed:className
+ ].
+ category := (p args at:1) evaluate.
+ ].
+ ].
+
+ done := false.
+ first := true.
+ [done] whileFalse:[
+
+ changeDelta := ' '.
+ methodPos := aStream position.
+
+ text := aStream nextChunk.
+ text isNil ifTrue:[
+ done := true
+ ] ifFalse:[
+ done := text isEmpty
+ ].
+ done ifFalse:[
+ first ifFalse:[
+ change := Change new.
+ change chunk: chunkText.
+ change string:changeString.
+ change position: methodPos.
+ change className: className.
+ lastChange notNil ifTrue: [lastChange lastPosition: methodPos - 1].
+ lastChange := change.
+ change timeStamp: timeStampInfo.
+ change followUp: true.
+ editingClassSource := true.
+ ].
+
+ first := false.
+ "
+ try to find the selector
+ "
+ sel := nil.
+ className notNil ifTrue:[
+ p := Parser
+ parseMethodSpecification:text
+ in:nil
+ ignoreErrors:true
+ ignoreWarnings:true.
+ (p notNil and:[p ~~ #Error]) ifTrue:[
+ sel := p selector.
+ ]
+ ].
+
+ sel isNil ifTrue:[
+ changeString := (chunkText contractTo:maxLen).
+ changeType := 'change'.
+ headerLine := chunkText , ' (change)'.
+ ] ifFalse:[
+ changeString := self contractClass:className selector:sel to:maxLen.
+ changeType := 'method definition'.
+ changeCategory := category.
+ headerLine := className , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
+ change selector:sel.
+ ].
+
+ DeltaInfoColumn ifTrue:[
+ changeClass isNil ifFalse:[
+ changeClass isMeta ifTrue:[
+ cls := changeClass soleInstance
+ ] ifFalse:[
+ cls := changeClass
+ ].
+ ].
+
+ (changeClass isNil or:[cls isLoaded not]) ifTrue:[
+ changeDelta := '?'
+ ] ifFalse:[
+ (changeClass implements:sel asSymbol) ifFalse:[
+ changeDelta := '+'.
+ ] ifTrue:[
+ |m currentText t1 t2|
+
+ m := changeClass compiledMethodAt:sel asSymbol.
+ currentText := m source.
+ currentText notNil ifTrue:[
+ text asString = currentText asString ifTrue:[
+ changeDelta := '='
+ ] ifFalse:[
+ t1 := currentText asCollectionOfLines collect:[:s | s withTabsExpanded].
+ t2 := text asCollectionOfLines collect:[:s | s withTabsExpanded].
+ t1 = t2 ifTrue:[
+ changeDelta := '='
+ ]
+ ]
+ ]
+ ]
+ ]
+ ].
+ change delta:changeDelta.
+ change string:changeString.
+ change type:changeType.
+ change category: changeCategory.
+ change timeStamp:timeStampInfo.
+ changes add:change.
+ ].
+ changeString := nil.
+ headerLine := nil.
+
+ ]
+ ].
+ changeString notNil ifTrue:[
+ change delta:changeDelta.
+ change string:changeString.
+ change type:changeType.
+ change timeStamp:timeStampInfo.
+ changes add:change.
+
+ ] ifFalse:[
+ headerLine notNil ifTrue:[
+ changes add: change.
+ ]
+ ]
+ ]
+ ].
+ change lastPosition: aStream position.
+ ].
+ modified := false.
+
+ ] valueNowOrOnUnwindDo:[
+ aStream close.
+ inBackground ifTrue:[myProcess priority:myPriority].
+ ].
].
self setChangeList.
self valueOfNotReading value: true.
@@ -2867,14 +3185,14 @@
self valueOfNotSaving value ifFalse: [^ self].
modified ifTrue:[
- (OptionBox
- request:(resources string:'Change list was modified. Exit anyway?') withCRs
- label:'Changes Browser'
- form:(WarningBox iconBitmap)
- buttonLabels:(resources array:#('Cancel' 'Discard Modifications and Exit'))
- values:#(abort ignore)
- default:#save
- ) == #abort ifTrue:[^ self].
+ (OptionBox
+ request:(resources string:'Change list was modified. Exit anyway?') withCRs
+ label:'Changes Browser'
+ image:(WarningBox iconBitmap)
+ buttonLabels:(resources array:#('Cancel' 'Discard Modifications and Exit'))
+ values:#(abort ignore)
+ default:#save
+ ) == #abort ifTrue:[^ self].
].
super closeRequest
@@ -2889,10 +3207,10 @@
builder namedComponents do:
[:aView|
- aView allSubViewsDo:
- [:v|
- v redraw
- ]
+ aView allSubViewsDo:
+ [:v|
+ v redraw
+ ]
].
autoUpdateBlock := [self checkIfFileHasChanged].
@@ -2901,39 +3219,35 @@
self filterField entryCompletionBlock:
(filterCompletionBlock := [:value|
- |filter filters i changesCopy|
- self unselectChange.
- filter := self filterField contents.
- (filters := filter asArrayOfSubstrings) size > 0 ifTrue:
- [
- i := 0.
- changesCopy := changes copy.
- filters do:
- [:filter|
- i := i + 1.
- changesCopy contents:
- (changesCopy select: [:row|
- filter match: (row string asArrayOfSubstrings at: i ifAbsent: [''''])])
- ].
- self listOfChanges contents: changesCopy
- ]
- ifFalse:
- [
- self listOfChanges contents: changes
- ].
- self autoSelectLast.
+ |filter filters i changesCopy|
+ self unselectChange.
+ filter := self filterField contents.
+ (filters := filter asArrayOfSubstrings) size > 0 ifTrue:[
+ changesCopy := changes copy.
+ i := 0.
+ filters do:[:filter|
+ i := i + 1.
+ changesCopy contents:
+ (changesCopy select: [:row|
+ filter match: (row string asArrayOfSubstrings at: i ifAbsent: [''''])])
+ ].
+ self listOfChanges contents: changesCopy
+ ] ifFalse:[
+ self listOfChanges contents: changes
+ ].
+ self autoSelectLast.
]).
Object errorSignal handle: [:ex |
- ex parameter signal == HaltSignal ifTrue:[
- ex reject
- ].
- ex parameter signal == MessageTracer breakpointSignal ifTrue:[
- ex reject
- ].
- self warn:'Error while reading changes file:\\' , ex errorString.
+ ex signal == HaltSignal ifTrue:[
+ ex reject
+ ].
+ ex signal == MessageTracer breakpointSignal ifTrue:[
+ ex reject
+ ].
+ self warn:'Error while reading changes file:\\' , ex errorString.
] do: [
- self readChangesFileInBackground:true
+ self readChangesFileInBackground:true
].
"Modified: / 30.7.1998 / 11:37:51 / cg"
@@ -3212,39 +3526,40 @@
!
doFindSnapshot: what
- "finds the last made snapshot and selects it"
+ "finds the last made snapshot and selects it. what is one of last, prvious or next"
|snapshotNr snapshotFound|
- self listOfChanges detect: [:change| change type = 'image'] ifNone: [^self warn: 'No snapshot found!!'].
+ (self listOfChanges contains: [:change| change type = 'image']) ifFalse: [
+ self warn: 'No snapshot found!!'.
+ ^ false.
+ ].
self withSelectedChangeDo:[:change|
- snapshotNr := self listOfChanges indexOf: change.
- snapshotFound := false.
- [snapshotNr > 0 and: [snapshotFound not]]
- whileTrue:
- [
- what = 'last'
- ifTrue:
- [
- snapshotNr := snapshotNr - 1.
- snapshotNr == 0 ifTrue: [snapshotNr := self listOfChanges size].
- ]
- ifFalse:
- [
- snapshotNr := snapshotNr + 1.
- snapshotNr > self listOfChanges size ifTrue: [snapshotNr := 1].
- ].
- (self listOfChanges at: snapshotNr ifAbsent: [^self autoSelectChange: (what = 'last' ifTrue: [self listOfChanges last] ifFalse: [self listOfChanges first])]) type = 'image'
- ifTrue:
- [
- snapshotFound := true.
- self autoSelectChange:(self listOfChanges at: snapshotNr)
- ]
- ]
+ what = 'last' ifTrue:[
+ snapshotNr := self listOfChanges size+1.
+ ] ifFalse:[
+ snapshotNr := self listOfChanges indexOf: change.
+ ].
+
+ snapshotFound := false.
+ [snapshotNr > 0 and: [snapshotFound not]] whileTrue:[
+ (what = 'last' or:[what = 'previous']) ifTrue:[
+ snapshotNr := snapshotNr - 1.
+ snapshotNr == 0 ifTrue: [snapshotNr := self listOfChanges size].
+ ] ifFalse:[
+ snapshotNr := snapshotNr + 1.
+ snapshotNr > self listOfChanges size ifTrue: [snapshotNr := 1].
+ ].
+ (self listOfChanges at: snapshotNr ifAbsent: [^self autoSelectChange: (what = 'last' ifTrue: [self listOfChanges last] ifFalse: [self listOfChanges first])]) type = 'image'
+ ifTrue:[
+ snapshotFound := true.
+ self autoSelectChange:(self listOfChanges at: snapshotNr)
+ ]
+ ]
].
- ^snapshotFound
+ ^ snapshotFound
!
doLoad
@@ -3463,11 +3778,9 @@
!
listColor
-
- (string at: 3) ~~ $- ifTrue:
- [
- (self type = 'class') ifTrue: [^Color gray].
- ^Color white
+ ((string size < 3) or:[(string at: 3) ~~ $-]) ifTrue:[
+ (self type = 'class') ifTrue: [^Color gray].
+ ^ Color white
].
(string includesMatchString: '---- s') ifTrue: [^Color red].
@@ -3492,6 +3805,14 @@
^position printString, ' - ', lastPosition printString
!
+selector
+ ^ selector
+!
+
+selector:something
+ selector := something.
+!
+
string
^string
@@ -3528,5 +3849,5 @@
!NewChangesBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/NewChangesBrowser.st,v 1.29 2005-04-28 17:30:04 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/NewChangesBrowser.st,v 1.30 2008-02-04 12:25:06 cg Exp $'
! !