NewChangesBrowser.st
changeset 7957 55841733ff69
parent 6288 4767ba5caf5b
child 9179 20f04cffb483
equal deleted inserted replaced
7956:da199a336d8f 7957:55841733ff69
     2 
     2 
     3 ToolApplicationModel subclass:#NewChangesBrowser
     3 ToolApplicationModel subclass:#NewChangesBrowser
     4 	instanceVariableNames:'changes changeFileName skipSignal changeFileTimestamp
     4 	instanceVariableNames:'changes changeFileName skipSignal changeFileTimestamp
     5 		autoUpdateBlock filterCompletionBlock editingClassSource modified'
     5 		autoUpdateBlock filterCompletionBlock editingClassSource modified'
     6 	classVariableNames:'AutoUpdate CompressSnapshotInfo CategoryColumn DeltaInfoColumn
     6 	classVariableNames:'AutoUpdate CompressSnapshotInfo CategoryColumn DeltaInfoColumn
     7 		TypeColumn TimeStampColumn PositionsColumn PrivateAsSeparate'
     7 		TypeColumn TimeStampColumn PositionsColumn PrivateAsSeparate
       
     8 		ClassNameColumn ClassAndSelectorColumn SelectorColumn'
     8 	poolDictionaries:''
     9 	poolDictionaries:''
     9 	category:'Interface-Browsers'
    10 	category:'Interface-Browsers'
    10 !
    11 !
    11 
    12 
    12 Object subclass:#Change
    13 Object subclass:#Change
    13 	instanceVariableNames:'delta string type timeStamp category chunk lastPosition position
    14 	instanceVariableNames:'delta string type timeStamp category chunk lastPosition position
    14 		className followUp'
    15 		className selector followUp'
    15 	classVariableNames:''
    16 	classVariableNames:''
    16 	poolDictionaries:''
    17 	poolDictionaries:''
    17 	privateIn:NewChangesBrowser
    18 	privateIn:NewChangesBrowser
    18 !
    19 !
    19 
    20 
    22 documentation
    23 documentation
    23 "
    24 "
    24     The future Changes Browser.
    25     The future Changes Browser.
    25 
    26 
    26     [start with:]
    27     [start with:]
    27 	NewChangesBrowser open
    28         NewChangesBrowser open
    28 	NewChangesBrowser openOnFile:aFileName
    29         NewChangesBrowser openOnFile:aFileName
    29 
    30 
    30     [author:]
    31     [author:]
    31 	Thomas Zwick, eXept Software AG
    32         Thomas Zwick, eXept Software AG
       
    33         enhanced by Felix Madrid, eXept Software AG
    32 "
    34 "
    33 
       
    34 
       
    35 ! !
    35 ! !
    36 
    36 
    37 !NewChangesBrowser class methodsFor:'instance creation'!
    37 !NewChangesBrowser class methodsFor:'instance creation'!
    38 
    38 
    39 openOn:aFileName
    39 openOn:aFileName
    70     ^'Changes Browser'
    70     ^'Changes Browser'
    71 ! !
    71 ! !
    72 
    72 
    73 !NewChangesBrowser class methodsFor:'help specs'!
    73 !NewChangesBrowser class methodsFor:'help specs'!
    74 
    74 
       
    75 flyByHelpSpec
       
    76     "This resource specification was automatically generated
       
    77      by the UIHelpTool of ST/X."
       
    78 
       
    79     "Do not manually edit this!! If it is corrupted,
       
    80      the UIHelpTool may not be able to read the specification."
       
    81 
       
    82     "
       
    83      UIHelpTool openOnClass:NewChangesBrowser
       
    84     "
       
    85 
       
    86     <resource: #help>
       
    87 
       
    88     ^super flyByHelpSpec addPairsFrom:#(
       
    89 
       
    90 #applyAll
       
    91 'Apply all changes.'
       
    92 
       
    93 #applyForClassToEnd
       
    94 'Apply changes which affect this class to the end.'
       
    95 
       
    96 #applyFromLastSnapshot
       
    97 'Apply changes from the last snapshot to the end.'
       
    98 
       
    99 #applyLine
       
   100 'Apply the selected change.'
       
   101 
       
   102 #applyToEnd
       
   103 'Apply all changes from the selected one to the end.'
       
   104 
       
   105 #deleteAll
       
   106 'Deletes all changes.'
       
   107 
       
   108 #deleteCompress
       
   109 'Deletes all obsolete changes.'
       
   110 
       
   111 #deleteCompressForClass
       
   112 'Deletes obsolete changes for this class, leaving the last one.'
       
   113 
       
   114 #deleteForClassToEnd
       
   115 'Deletes changes for this class from the selection to the end.'
       
   116 
       
   117 #deleteLine
       
   118 'Deletes the selected change.'
       
   119 
       
   120 #deleteToEnd
       
   121 'Deletes changes from the selected one to the end.'
       
   122 
       
   123 #fileLoad
       
   124 'Opens a dialog for selecting and loading another changes file.'
       
   125 
       
   126 #fileReload
       
   127 'Reloads the changes file (undo your modifications).'
       
   128 
       
   129 #fileSave
       
   130 'Saves the list of changes into the current changes file.'
       
   131 
       
   132 #filterField
       
   133 'Matching patterns filtering the changes (separate patterns by blanks).'
       
   134 
       
   135 #settingsAutoUpdate
       
   136 'Toggle automatic update.'
       
   137 
       
   138 #settingsColumns
       
   139 'Configure which columns are shown in the list.'
       
   140 
       
   141 #settingsColumnsCategory
       
   142 'Toggle display of the changes category in the list.'
       
   143 
       
   144 #settingsColumnsDeltaInfo
       
   145 'Toggle display of the delta-info in the list.'
       
   146 
       
   147 #settingsColumnsPosition
       
   148 'Togle display of the changes file-position in the list.'
       
   149 
       
   150 #settingsColumnsTimeStamp
       
   151 'Toggle display of the changes time stamp in the list.'
       
   152 
       
   153 #settingsColumnsType
       
   154 'Toggle display of the change-type in the list.'
       
   155 
       
   156 #settingsPrivateAsSeparate
       
   157 'Toggle if changes for private private are included when applying, deleting, or compressing for a class.'
       
   158 
       
   159 #testCompareWithCurrentVersion
       
   160 'Opens a info dialog showing the difference between the changes code and the method current code.'
       
   161 
       
   162 #testFindLastSnapshot
       
   163 'Searches backward for the previous snapshot entry.'
       
   164 
       
   165 #testFindNextSnapshot
       
   166 'Searches forward for the next snapshot entry.'
       
   167 
       
   168 )
       
   169 
       
   170     "Modified: / 19.5.1998 / 17:59:39 / cg"
       
   171 !
       
   172 
    75 helpSpec
   173 helpSpec
    76     "This resource specification was automatically generated
   174     "This resource specification was automatically generated
    77      by the UIHelpTool of ST/X."
   175      by the UIHelpTool of ST/X."
    78 
   176 
    79     "Do not manually edit this!! If it is corrupted,
   177     "Do not manually edit this!! If it is corrupted,
    80      the UIHelpTool may not be able to read the specification."
   178      the UIHelpTool may not be able to read the specification."
    81 
   179 
    82     "
   180     "
    83      UIHelpTool openOnClass:NewChangesBrowser
   181      UIHelpTool openOnClass:NewChangesBrowser    
    84     "
   182     "
    85 
   183 
    86     <resource: #help>
   184     <resource: #help>
    87 
   185 
    88     ^super helpSpec addPairsFrom:#(
   186     ^ super helpSpec addPairsFrom:#(
    89 
   187 
    90 #applyAll
   188 #applyAll
    91 'Apply all changes.'
   189 'Apply all changes.'
    92 
   190 
    93 #applyForClassToEnd
   191 #applyForClassToEnd
   139 'Configure which columns are shown in the list.'
   237 'Configure which columns are shown in the list.'
   140 
   238 
   141 #settingsColumnsCategory
   239 #settingsColumnsCategory
   142 'Toggle display of the changes category in the list.'
   240 'Toggle display of the changes category in the list.'
   143 
   241 
       
   242 #settingsColumnsClassName
       
   243 'Toggle display of the className in the list.'
       
   244 
   144 #settingsColumnsDeltaInfo
   245 #settingsColumnsDeltaInfo
   145 'Toggle display of the delta-info in the list.'
   246 'Toggle display of the delta-info in the list.'
   146 
   247 
   147 #settingsColumnsPosition
   248 #settingsColumnsPosition
   148 'Togle display of the changes file-position in the list.'
   249 'Togle display of the changes file-position in the list.'
   158 
   259 
   159 #testCompareWithCurrentVersion
   260 #testCompareWithCurrentVersion
   160 'Opens a info dialog showing the difference between the changes code and the method current code.'
   261 'Opens a info dialog showing the difference between the changes code and the method current code.'
   161 
   262 
   162 #testFindLastSnapshot
   263 #testFindLastSnapshot
   163 'Searches backward for the latest snapshot entry.'
   264 'Searches backward for the previous snapshot entry.'
   164 
   265 
   165 #testFindNextSnapshot
   266 #testFindNextSnapshot
   166 'Searches forward for the next snapshot entry.'
   267 'Searches forward for the next snapshot entry.'
   167 
   268 
   168 )
   269 )
   169 
       
   170     "Modified: / 19.5.1998 / 17:59:39 / cg"
       
   171 ! !
   270 ! !
   172 
   271 
   173 !NewChangesBrowser class methodsFor:'image specs'!
   272 !NewChangesBrowser class methodsFor:'image specs'!
   174 
   273 
   175 applyFromLastSnapshotIcon
   274 applyFromLastSnapshotIcon
       
   275     ^ self applyFromLastSnapshotIcon2
       
   276 !
       
   277 
       
   278 applyFromLastSnapshotIcon1
   176     "This resource specification was automatically generated
   279     "This resource specification was automatically generated
   177      by the ImageEditor of ST/X."
   280      by the ImageEditor of ST/X."
   178 
   281 
   179     "Do not manually edit this!! If it is corrupted,
   282     "Do not manually edit this!! If it is corrupted,
   180      the ImageEditor may not be able to read the specification."
   283      the ImageEditor may not be able to read the specification."
   181 
   284 
   182     "
   285     "
       
   286      self applyFromLastSnapshotIcon inspect
   183      ImageEditor openOnClass:self andSelector:#applyFromLastSnapshotIcon
   287      ImageEditor openOnClass:self andSelector:#applyFromLastSnapshotIcon
       
   288      Icon flushCachedIcons
   184     "
   289     "
   185 
   290 
   186     <resource: #image>
   291     <resource: #image>
   187 
   292 
   188     ^Icon
   293     ^Icon
   189 	constantNamed:#'NewChangesBrowser applyFromLastSnapshotIcon'
   294         constantNamed:#'NewChangesBrowser class applyFromLastSnapshotIcon'
   190 	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]
   295         ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   191 !
   296 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH"H"H@@@@@@@@@H"H"H @@@@@@@@@@@@@B@@@@@@
   192 
   297 @@;.;.; H@@@@@@@C.;.;.@@@@@@@@@@@@@@8@@N@@@@C?????C @@@N@@@O????<@@@8@@@@@@@@@C0@@@@8@@O????<O@@C @@@@?????0@@@@C @@@@@@
   193 applyIcon
   298 @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]
       
   299 !
       
   300 
       
   301 applyFromLastSnapshotIcon2
   194     "This resource specification was automatically generated
   302     "This resource specification was automatically generated
   195      by the ImageEditor of ST/X."
   303      by the ImageEditor of ST/X."
   196 
   304 
   197     "Do not manually edit this!! If it is corrupted,
   305     "Do not manually edit this!! If it is corrupted,
   198      the ImageEditor may not be able to read the specification."
   306      the ImageEditor may not be able to read the specification."
   199 
   307 
   200     "
   308     "
       
   309      self applyFromLastSnapshotIcon1 inspect
       
   310      ImageEditor openOnClass:self andSelector:#applyFromLastSnapshotIcon1
       
   311      Icon flushCachedIcons
       
   312     "
       
   313 
       
   314     <resource: #image>
       
   315 
       
   316     ^Icon
       
   317         constantNamed:#'NewChangesBrowser class applyFromLastSnapshotIcon1'
       
   318         ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(4)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
       
   319 @@@BH@@@@@@QDQ<@@BH @@@@@AH"H@@@H"@@@@@@D"H H H"@@@@@@@RH"@"H"@@@@@@@AH"H@H"H@@@@@@@<@@@@BH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   320 @@;.;.; @@@@@@@@C.;.;.@@@@@@@@@@@@@@8@@N@@@@C?????C @@@N@@@O????<@@@8@@@@@@@@@C0@@@@8@@O????<O@@C @@@@?????0@@@@C @@@@@@
       
   321 @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]
       
   322 !
       
   323 
       
   324 applyIcon
       
   325     ^ self applyIcon2
       
   326 !
       
   327 
       
   328 applyIcon1
       
   329     "This resource specification was automatically generated
       
   330      by the ImageEditor of ST/X."
       
   331 
       
   332     "Do not manually edit this!! If it is corrupted,
       
   333      the ImageEditor may not be able to read the specification."
       
   334 
       
   335     "
       
   336      self applyIcon inspect
   201      ImageEditor openOnClass:self andSelector:#applyIcon
   337      ImageEditor openOnClass:self andSelector:#applyIcon
       
   338      Icon flushCachedIcons
   202     "
   339     "
   203 
   340 
   204     <resource: #image>
   341     <resource: #image>
   205 
   342 
   206     ^Icon
   343     ^Icon
   207 	constantNamed:#'NewChangesBrowser applyIcon'
   344         constantNamed:#'NewChangesBrowser class applyIcon'
   208 	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]
   345         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
       
   346 UUUUUUUPUUUUUU?PUUUUUU?[UUUUUW=PP@@@@C<QQUUU=_4PQUUU?_4VQ**U_?TPQUUUW?TPQUUUW=TXQ***U=TPQ**UUUTPQ*****TPQ***%UTPQ****)TP
       
   347 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:'
       
   348 @@@@@@@8@@@8@@A0_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   349 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   350 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   351 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   352 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   353 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
       
   354 !
       
   355 
       
   356 applyIcon2
       
   357     "This resource specification was automatically generated
       
   358      by the ImageEditor of ST/X."
       
   359 
       
   360     "Do not manually edit this!! If it is corrupted,
       
   361      the ImageEditor may not be able to read the specification."
       
   362 
       
   363     "
       
   364      self applyIcon2 inspect
       
   365      ImageEditor openOnClass:self andSelector:#applyIcon2
       
   366      Icon flushCachedIcons
       
   367     "
       
   368 
       
   369     <resource: #image>
       
   370 
       
   371     ^Icon
       
   372         constantNamed:#'NewChangesBrowser class applyIcon2'
       
   373         ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
       
   374 DQDQDQDQDQDQP3PQDQDQDQDQDQECMADQDQDQDQDQECMADQDQDQEDPQDTL4DP@@@@@DL4@DL4@Q@QDQDQP3MAP3PADADQDQDTL3P3PPDPD"H"HQECL3MA@Q@Q
       
   375 DQDQDQP3MADADADQDQDQDTL4DPDPD"H"H"HQEDDQ@Q@RH"H!!DQDQDQDADAH"H"H"H"H"DPDPD"H"H"H!!DQDQ@Q@RH"H"H"H"HQDADADQDQDQDQDQDPDPDQDQ
       
   376 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:'
       
   377 @@@<@@@<@@A8@C!!8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8_??8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   378 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   379 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   380 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   381 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
       
   382 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
   209 !
   383 !
   210 
   384 
   211 applyToEndIcon
   385 applyToEndIcon
   212     "This resource specification was automatically generated
   386     "This resource specification was automatically generated
   213      by the ImageEditor of ST/X."
   387      by the ImageEditor of ST/X."
   214 
   388 
   215     "Do not manually edit this!! If it is corrupted,
   389     "Do not manually edit this!! If it is corrupted,
   216      the ImageEditor may not be able to read the specification."
   390      the ImageEditor may not be able to read the specification."
   217 
   391 
   218     "
   392     "
       
   393      self applyToEndIcon inspect
   219      ImageEditor openOnClass:self andSelector:#applyToEndIcon
   394      ImageEditor openOnClass:self andSelector:#applyToEndIcon
       
   395      Icon flushCachedIcons
   220     "
   396     "
   221 
   397 
   222     <resource: #image>
   398     <resource: #image>
   223 
   399 
   224     ^Icon
   400     ^Icon
   225 	constantNamed:#'NewChangesBrowser applyToEndIcon'
   401         constantNamed:#'NewChangesBrowser class applyToEndIcon'
   226 	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]
   402         ifAbsentPut:[(Depth4Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[4]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
       
   403 @@@DP@@@@@@@@@@@@DQ@@@@@@@@@@@@@QD@@@"H"H"@@Q@QD@@@BH"H"H@ADQD@@@@@@@@@ @@QDP@@BH"H"HB@@@DP@@@H"H"H @@@@@@@@@@@@@B@@@@@@
       
   404 @@L3L3L0H@@@@@@@@3L3L3@@@@@@@@@@@@@@L@@B@@@@@3L3L3@0@@@B@@@CL3L3L@@@H@@@@@@@@@@0@@@@H@@ADQDQDC@@@ @@@@DQDQDP@@@@@ @@@@@@
       
   405 @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]
   227 !
   406 !
   228 
   407 
   229 compressIcon
   408 compressIcon
   230     "This resource specification was automatically generated
   409     "This resource specification was automatically generated
   231      by the ImageEditor of ST/X."
   410      by the ImageEditor of ST/X."
   312     <resource: #image>
   491     <resource: #image>
   313 
   492 
   314     ^Icon
   493     ^Icon
   315 	constantNamed:#'NewChangesBrowser findNextSnapshotIcon'
   494 	constantNamed:#'NewChangesBrowser findNextSnapshotIcon'
   316 	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]
   495 	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]
       
   496 !
       
   497 
       
   498 findPreviousForClassIcon
       
   499     "This resource specification was automatically generated
       
   500      by the ImageEditor of ST/X."
       
   501 
       
   502     "Do not manually edit this!! If it is corrupted,
       
   503      the ImageEditor may not be able to read the specification."
       
   504 
       
   505     "
       
   506      self findPreviousForClassIcon inspect
       
   507      ImageEditor openOnClass:self andSelector:#findPreviousForClassIcon
       
   508      Icon flushCachedIcons
       
   509     "
       
   510 
       
   511     <resource: #image>
       
   512 
       
   513     ^Icon
       
   514         constantNamed:#'NewChangesBrowser class findPreviousForClassIcon'
       
   515         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
       
   516 @EUUUW@A@G???<@@@G???<@@@G???<@@@G???<@@@G???<@@@G???<@@@G???<@A@G???<@M@G???<@H@G???<@@@G???<@@@G???<@I@L@@@@@@@@@@@@@A
       
   517 @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]
       
   518 !
       
   519 
       
   520 findPreviousSnapshotIcon
       
   521     "This resource specification was automatically generated
       
   522      by the ImageEditor of ST/X."
       
   523 
       
   524     "Do not manually edit this!! If it is corrupted,
       
   525      the ImageEditor may not be able to read the specification."
       
   526 
       
   527     "
       
   528      self findPreviousSnapshotIcon inspect
       
   529      ImageEditor openOnClass:self andSelector:#findPreviousSnapshotIcon
       
   530      Icon flushCachedIcons
       
   531     "
       
   532 
       
   533     <resource: #image>
       
   534 
       
   535     ^Icon
       
   536         constantNamed:#'NewChangesBrowser class findPreviousSnapshotIcon'
       
   537         ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
       
   538 @EUUUW@A@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@@@F***(@A@F***(@M@F***(@H@F***(@@@F***(@@@F***(@I@L@@@@@@@@@@@@@A
       
   539 @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]
   317 ! !
   540 ! !
   318 
   541 
   319 !NewChangesBrowser class methodsFor:'interface specs'!
   542 !NewChangesBrowser class methodsFor:'interface specs'!
   320 
   543 
   321 windowSpec
   544 windowSpec
   551      DataSetBuilder new openOnClass:NewChangesBrowser andSelector:#tableColumnsForChangeAttributes
   774      DataSetBuilder new openOnClass:NewChangesBrowser andSelector:#tableColumnsForChangeAttributes
   552     "
   775     "
   553 
   776 
   554     <resource: #tableColumns>
   777     <resource: #tableColumns>
   555 
   778 
   556 
   779     ^#(
   557     ^ #(
   780       (DataSetColumnSpec
   558 	#(#DataSetColumnSpec
   781          labelButtonType: Button
   559 	   #rendererType: #rowSelector
   782          rendererType: rowSelector
   560 	   #backgroundSelector: #listColor
   783          backgroundSelector: listColor
   561 	   #showSelectionHighLighted: false
   784          showSelectionHighLighted: false
   562        )
   785        )
   563 	#(#DataSetColumnSpec
   786       (DataSetColumnSpec
   564 	   #label: 'Change'
   787          label: 'Change'
   565 	   #id: #change
   788          id: change
   566 	   #translateLabel: true
   789          labelAlignment: left
   567 	   #labelAlignment: #left
   790          labelButtonType: Button
   568 	   #model: #string
   791          model: string
   569 	   #canSelect: false
   792          canSelect: false
   570        )
   793        )
   571 	#(#DataSetColumnSpec
   794       (DataSetColumnSpec
   572 	   #label: 'Category'
   795          label: 'Class'
   573 	   #id: #category
   796          id: 'className'
   574 	   #translateLabel: true
   797          labelAlignment: left
   575 	   #labelAlignment: #left
   798          activeHelpKey: ''
   576 	   #model: #category
   799          labelButtonType: Button
   577 	   #canSelect: false
   800          model: className
       
   801          canSelect: false
   578        )
   802        )
   579 	#(#DataSetColumnSpec
   803       (DataSetColumnSpec
   580 	   #label: 'Delta Info'
   804          label: 'Selector'
   581 	   #id: #deltaInfo
   805          id: 'selector'
   582 	   #translateLabel: true
   806          labelAlignment: left
   583 	   #labelAlignment: #left
   807          activeHelpKey: ''
   584 	   #model: #delta
   808          labelButtonType: Button
   585 	   #canSelect: false
   809          model: selector
       
   810          canSelect: false
   586        )
   811        )
   587 	#(#DataSetColumnSpec
   812       (DataSetColumnSpec
   588 	   #label: 'Time Stamp'
   813          label: 'Category'
   589 	   #id: #timeStamp
   814          id: category
   590 	   #translateLabel: true
   815          labelAlignment: left
   591 	   #labelAlignment: #left
   816          labelButtonType: Button
   592 	   #model: #timeStamp
   817          model: category
   593 	   #canSelect: false
   818          canSelect: false
   594        )
   819        )
   595 	#(#DataSetColumnSpec
   820       (DataSetColumnSpec
   596 	   #label: 'Type'
   821          label: 'Delta Info'
   597 	   #id: #type
   822          id: deltaInfo
   598 	   #translateLabel: true
   823          labelAlignment: left
   599 	   #labelAlignment: #left
   824          labelButtonType: Button
   600 	   #model: #type
   825          model: delta
   601 	   #canSelect: false
   826          canSelect: false
   602        )
   827        )
   603 	#(#DataSetColumnSpec
   828       (DataSetColumnSpec
   604 	   #label: 'Position'
   829          label: 'Time Stamp'
   605 	   #id: #position
   830          id: timeStamp
   606 	   #translateLabel: true
   831          labelAlignment: left
   607 	   #labelAlignment: #left
   832          labelButtonType: Button
   608 	   #model: #positions
   833          model: timeStamp
   609 	   #canSelect: false
   834          canSelect: false
   610        )
   835        )
   611      )
   836       (DataSetColumnSpec
       
   837          label: 'Type'
       
   838          id: type
       
   839          labelAlignment: left
       
   840          labelButtonType: Button
       
   841          model: type
       
   842          canSelect: false
       
   843        )
       
   844       (DataSetColumnSpec
       
   845          label: 'Position'
       
   846          id: position
       
   847          labelAlignment: left
       
   848          labelButtonType: Button
       
   849          model: positions
       
   850          canSelect: false
       
   851        )
       
   852       )
       
   853     
   612 ! !
   854 ! !
   613 
   855 
   614 !NewChangesBrowser class methodsFor:'menu specs'!
   856 !NewChangesBrowser class methodsFor:'menu specs'!
   615 
   857 
   616 menu
   858 menu
   625      (Menu new fromLiteralArrayEncoding:(NewChangesBrowser menu)) startUp
   867      (Menu new fromLiteralArrayEncoding:(NewChangesBrowser menu)) startUp
   626     "
   868     "
   627 
   869 
   628     <resource: #menu>
   870     <resource: #menu>
   629 
   871 
   630     ^
   872     ^ 
   631 
   873      #(Menu
   632        #(#Menu
   874         (
   633 
   875          (MenuItem
   634 	   #(
   876             activeHelpKey: file
   635 	     #(#MenuItem
   877             label: 'File'
   636 		#label: 'About'
   878             translateLabel: true
   637 		#translateLabel: true
   879             submenu: 
   638 		#activeHelpKey: #about
   880            (Menu
   639 		#labelImage: #(#ResourceRetriever nil #menuIcon)
   881               (
   640 		#submenuChannel: #menuAbout
   882                (MenuItem
   641 	    )
   883                   activeHelpKey: fileReload
   642 	     #(#MenuItem
   884                   enabled: valueOfNotReading
   643 		#label: 'File'
   885                   label: 'Reload'
   644 		#translateLabel: true
   886                   itemValue: doReload
   645 		#activeHelpKey: #file
   887                   translateLabel: true
   646 		#submenu:
   888                 )
   647 		 #(#Menu
   889                (MenuItem
   648 
   890                   label: '-'
   649 		     #(
   891                 )
   650 		       #(#MenuItem
   892                (MenuItem
   651 			  #label: 'Reload'
   893                   activeHelpKey: fileLoad
   652 			  #translateLabel: true
   894                   enabled: valueOfNotSaving
   653 			  #value: #doReload
   895                   label: 'Load...'
   654 			  #activeHelpKey: #fileReload
   896                   itemValue: doLoad
   655 			  #enabled: #valueOfNotReading
   897                   translateLabel: true
   656 		      )
   898                 )
   657 		       #(#MenuItem
   899                (MenuItem
   658 			  #label: '-'
   900                   label: '-'
   659 		      )
   901                 )
   660 		       #(#MenuItem
   902                (MenuItem
   661 			  #label: 'Load...'
   903                   activeHelpKey: fileSave
   662 			  #translateLabel: true
   904                   enabled: valueOfNotReading
   663 			  #value: #doLoad
   905                   label: 'Save'
   664 			  #activeHelpKey: #fileLoad
   906                   itemValue: doSave
   665 			  #enabled: #valueOfNotSaving
   907                   translateLabel: true
   666 		      )
   908                 )
   667 		       #(#MenuItem
   909                (MenuItem
   668 			  #label: '-'
   910                   label: '-'
   669 		      )
   911                 )
   670 		       #(#MenuItem
   912                (MenuItem
   671 			  #label: 'Save'
   913                   activeHelpKey: fileBrowseClass
   672 			  #translateLabel: true
   914                   enabled: valueOfHavingChangeSelection
   673 			  #value: #doSave
   915                   label: 'Browse Class'
   674 			  #activeHelpKey: #fileSave
   916                   itemValue: doBrowseClass
   675 			  #enabled: #valueOfNotReading
   917                   translateLabel: true
   676 		      )
   918                 )
   677 		       #(#MenuItem
   919                (MenuItem
   678 			  #label: '-'
   920                   label: '-'
   679 		      )
   921                 )
   680 		       #(#MenuItem
   922                (MenuItem
   681 			  #label: 'Browse Class'
   923                   activeHelpKey: fileExit
   682 			  #translateLabel: true
   924                   enabled: valueOfNotSaving
   683 			  #value: #doBrowseClass
   925                   label: 'Exit'
   684 			  #activeHelpKey: #fileBrowseClass
   926                   itemValue: closeRequest
   685 			  #enabled: #valueOfHavingChangeSelection
   927                   translateLabel: true
   686 		      )
   928                 )
   687 		       #(#MenuItem
   929                )
   688 			  #label: '-'
   930               nil
   689 		      )
   931               nil
   690 		       #(#MenuItem
   932             )
   691 			  #label: 'Exit'
   933           )
   692 			  #translateLabel: true
   934          (MenuItem
   693 			  #value: #closeRequest
   935             label: 'Apply'
   694 			  #activeHelpKey: #fileExit
   936             translateLabel: true
   695 			  #enabled: #valueOfNotSaving
   937             submenu: 
   696 		      )
   938            (Menu
   697 		    ) nil
   939               (
   698 		    nil
   940                (MenuItem
   699 		)
   941                   activeHelpKey: applyLine
   700 	    )
   942                   enabled: valueOfHavingChangeSelection
   701 	     #(#MenuItem
   943                   label: 'Change'
   702 		#label: 'Apply'
   944                   itemValue: doApply
   703 		#translateLabel: true
   945                   translateLabel: true
   704 		#submenu:
   946                 )
   705 		 #(#Menu
   947                (MenuItem
   706 
   948                   label: '-'
   707 		     #(
   949                 )
   708 		       #(#MenuItem
   950                (MenuItem
   709 			  #label: 'Change'
   951                   activeHelpKey: applyAll
   710 			  #translateLabel: true
   952                   enabled: valueOfNotReading
   711 			  #value: #doApply
   953                   label: 'All'
   712 			  #activeHelpKey: #applyLine
   954                   itemValue: doApplyAll
   713 			  #enabled: #valueOfHavingChangeSelection
   955                   translateLabel: true
   714 		      )
   956                 )
   715 		       #(#MenuItem
   957                (MenuItem
   716 			  #label: '-'
   958                   activeHelpKey: applyToEnd
   717 		      )
   959                   enabled: valueOfHavingSelection
   718 		       #(#MenuItem
   960                   label: 'To End'
   719 			  #label: 'All'
   961                   itemValue: doApplyToEnd
   720 			  #translateLabel: true
   962                   translateLabel: true
   721 			  #value: #doApplyAll
   963                 )
   722 			  #activeHelpKey: #applyAll
   964                (MenuItem
   723 			  #enabled: #valueOfNotReading
   965                   activeHelpKey: applyForClassToEnd
   724 		      )
   966                   enabled: valueOfHavingChangeSelection
   725 		       #(#MenuItem
   967                   label: 'All for Class'
   726 			  #label: 'To End'
   968                   itemValue: doApplyAllForClass
   727 			  #translateLabel: true
   969                   translateLabel: true
   728 			  #value: #doApplyToEnd
   970                 )
   729 			  #activeHelpKey: #applyToEnd
   971                (MenuItem
   730 			  #enabled: #valueOfHavingSelection
   972                   activeHelpKey: applyForClassToEnd
   731 		      )
   973                   enabled: valueOfHavingChangeSelection
   732 		       #(#MenuItem
   974                   label: 'For Class to End'
   733 			  #label: 'All for Class'
   975                   itemValue: doApplyForClassToEnd
   734 			  #translateLabel: true
   976                   translateLabel: true
   735 			  #value: #doApplyAllForClass
   977                 )
   736 			  #activeHelpKey: #applyForClassToEnd
   978                (MenuItem
   737 			  #enabled: #valueOfHavingChangeSelection
   979                   label: '-'
   738 		      )
   980                 )
   739 		       #(#MenuItem
   981                (MenuItem
   740 			  #label: 'For Class to End'
   982                   activeHelpKey: applyFromLastSnapshot
   741 			  #translateLabel: true
   983                   enabled: valueOfNotReading
   742 			  #value: #doApplyForClassToEnd
   984                   label: 'From Last Snapshot'
   743 			  #activeHelpKey: #applyForClassToEnd
   985                   itemValue: doApplyFromLastSnapshot
   744 			  #enabled: #valueOfHavingChangeSelection
   986                   translateLabel: true
   745 		      )
   987                 )
   746 		       #(#MenuItem
   988                )
   747 			  #label: '-'
   989               nil
   748 		      )
   990               nil
   749 		       #(#MenuItem
   991             )
   750 			  #label: 'From last Snapshot'
   992           )
   751 			  #translateLabel: true
   993          (MenuItem
   752 			  #value: #doApplyFromLastSnapshot
   994             activeHelpKey: edit
   753 			  #activeHelpKey: #applyFromLastSnapshot
   995             label: 'Delete'
   754 			  #enabled: #valueOfNotReading
   996             translateLabel: true
   755 		      )
   997             submenu: 
   756 		    ) nil
   998            (Menu
   757 		    nil
   999               (
   758 		)
  1000                (MenuItem
   759 	    )
  1001                   activeHelpKey: deleteLine
   760 	     #(#MenuItem
  1002                   enabled: valueOfHavingSelection
   761 		#label: 'Delete'
  1003                   label: 'Change'
   762 		#translateLabel: true
  1004                   itemValue: doDelete
   763 		#activeHelpKey: #edit
  1005                   translateLabel: true
   764 		#submenu:
  1006                 )
   765 		 #(#Menu
  1007                (MenuItem
   766 
  1008                   label: '-'
   767 		     #(
  1009                 )
   768 		       #(#MenuItem
  1010                (MenuItem
   769 			  #label: 'Change'
  1011                   activeHelpKey: deleteAll
   770 			  #translateLabel: true
  1012                   enabled: valueOfNotReading
   771 			  #value: #doDelete
  1013                   label: 'All'
   772 			  #activeHelpKey: #deleteLine
  1014                   itemValue: doDeleteAll
   773 			  #enabled: #valueOfHavingSelection
  1015                   translateLabel: true
   774 		      )
  1016                 )
   775 		       #(#MenuItem
  1017                (MenuItem
   776 			  #label: '-'
  1018                   activeHelpKey: deleteToEnd
   777 		      )
  1019                   enabled: valueOfHavingSelection
   778 		       #(#MenuItem
  1020                   label: 'To End'
   779 			  #label: 'All'
  1021                   itemValue: doDeleteToEnd
   780 			  #translateLabel: true
  1022                   translateLabel: true
   781 			  #value: #doDeleteAll
  1023                 )
   782 			  #activeHelpKey: #deleteAll
  1024                (MenuItem
   783 			  #enabled: #valueOfNotReading
  1025                   activeHelpKey: applyForClassToEnd
   784 		      )
  1026                   enabled: valueOfHavingChangeSelection
   785 		       #(#MenuItem
  1027                   label: 'All for Class'
   786 			  #label: 'To End'
  1028                   itemValue: doDeleteAllForClass
   787 			  #translateLabel: true
  1029                   translateLabel: true
   788 			  #value: #doDeleteToEnd
  1030                 )
   789 			  #activeHelpKey: #deleteToEnd
  1031                (MenuItem
   790 			  #enabled: #valueOfHavingSelection
  1032                   activeHelpKey: deleteForClassToEnd
   791 		      )
  1033                   enabled: valueOfHavingChangeSelection
   792 		       #(#MenuItem
  1034                   label: 'For Class to End'
   793 			  #label: 'All for Class'
  1035                   itemValue: doDeleteForClassToEnd
   794 			  #translateLabel: true
  1036                   translateLabel: true
   795 			  #value: #doDeleteAllForClass
  1037                 )
   796 			  #activeHelpKey: #applyForClassToEnd
  1038                (MenuItem
   797 			  #enabled: #valueOfHavingChangeSelection
  1039                   label: '-'
   798 		      )
  1040                 )
   799 		       #(#MenuItem
  1041                (MenuItem
   800 			  #label: 'For Class to End'
  1042                   activeHelpKey: deleteCompress
   801 			  #translateLabel: true
  1043                   enabled: valueOfNotReading
   802 			  #value: #doDeleteForClassToEnd
  1044                   label: 'Compress'
   803 			  #activeHelpKey: #deleteForClassToEnd
  1045                   itemValue: doCompress
   804 			  #enabled: #valueOfHavingChangeSelection
  1046                   translateLabel: true
   805 		      )
  1047                 )
   806 		       #(#MenuItem
  1048                (MenuItem
   807 			  #label: '-'
  1049                   activeHelpKey: deleteCompressForClass
   808 		      )
  1050                   enabled: valueOfHavingChangeSelection
   809 		       #(#MenuItem
  1051                   label: 'Compress for Class'
   810 			  #label: 'Compress'
  1052                   itemValue: doCompressForClass
   811 			  #translateLabel: true
  1053                   translateLabel: true
   812 			  #value: #doCompress
  1054                 )
   813 			  #activeHelpKey: #deleteCompress
  1055                )
   814 			  #enabled: #valueOfNotReading
  1056               nil
   815 		      )
  1057               nil
   816 		       #(#MenuItem
  1058             )
   817 			  #label: 'Compress for Class'
  1059           )
   818 			  #translateLabel: true
  1060          (MenuItem
   819 			  #value: #doCompressForClass
  1061             activeHelpKey: test
   820 			  #activeHelpKey: #deleteCompressForClass
  1062             label: 'Search'
   821 			  #enabled: #valueOfHavingChangeSelection
  1063             translateLabel: true
   822 		      )
  1064             submenu: 
   823 		    ) nil
  1065            (Menu
   824 		    nil
  1066               (
   825 		)
  1067                (MenuItem
   826 	    )
  1068                   activeHelpKey: testFindPreviousSnapshot
   827 	     #(#MenuItem
  1069                   enabled: valueOfHavingSelection
   828 		#label: 'Test'
  1070                   label: 'Find Previous Snapshot'
   829 		#translateLabel: true
  1071                   itemValue: doFindSnapshot:
   830 		#activeHelpKey: #test
  1072                   translateLabel: true
   831 		#submenu:
  1073                   argument: 'previous'
   832 		 #(#Menu
  1074                 )
   833 
  1075                (MenuItem
   834 		     #(
  1076                   activeHelpKey: testFindNextSnapshot
   835 		       #(#MenuItem
  1077                   enabled: valueOfHavingSelection
   836 			  #label: 'Find last Snapshot'
  1078                   label: 'Find Next Snapshot'
   837 			  #translateLabel: true
  1079                   itemValue: doFindSnapshot:
   838 			  #value: #doFindSnapshot:
  1080                   translateLabel: true
   839 			  #activeHelpKey: #testFindLastSnapshot
  1081                   argument: 'next'
   840 			  #enabled: #valueOfHavingSelection
  1082                 )
   841 			  #argument: 'last'
  1083                (MenuItem
   842 		      )
  1084                   activeHelpKey: testFindLastSnapshot
   843 		       #(#MenuItem
  1085                   enabled: valueOfHavingSelection
   844 			  #label: 'Find next Snapshot'
  1086                   label: 'Find Last Snapshot'
   845 			  #translateLabel: true
  1087                   itemValue: doFindSnapshot:
   846 			  #value: #doFindSnapshot:
  1088                   translateLabel: true
   847 			  #activeHelpKey: #testFindNextSnapshot
  1089                   argument: 'last'
   848 			  #enabled: #valueOfHavingSelection
  1090                 )
   849 			  #argument: 'next'
  1091                )
   850 		      )
  1092               nil
   851 		       #(#MenuItem
  1093               nil
   852 			  #label: '-'
  1094             )
   853 		      )
  1095           )
   854 		       #(#MenuItem
  1096          (MenuItem
   855 			  #label: 'Compare with Current Version'
  1097             activeHelpKey: test
   856 			  #translateLabel: true
  1098             label: 'Test'
   857 			  #value: #doCompare
  1099             translateLabel: true
   858 			  #activeHelpKey: #testCompareWithCurrentVersion
  1100             submenu: 
   859 			  #enabled: #valueOfHavingChangeSelection
  1101            (Menu
   860 		      )
  1102               (
   861 		    ) nil
  1103                (MenuItem
   862 		    nil
  1104                   activeHelpKey: testCompareWithCurrentVersion
   863 		)
  1105                   enabled: valueOfHavingChangeSelection
   864 	    )
  1106                   label: 'Compare with Current Version'
   865 	     #(#MenuItem
  1107                   itemValue: doCompare
   866 		#label: 'Settings'
  1108                   translateLabel: true
   867 		#translateLabel: true
  1109                 )
   868 		#activeHelpKey: #settings
  1110                )
   869 		#submenu:
  1111               nil
   870 		 #(#Menu
  1112               nil
   871 
  1113             )
   872 		     #(
  1114           )
   873 		       #(#MenuItem
  1115          (MenuItem
   874 			  #label: 'Auto Update'
  1116             activeHelpKey: settings
   875 			  #translateLabel: true
  1117             label: 'Settings'
   876 			  #activeHelpKey: #settingsAutoUpdate
  1118             translateLabel: true
   877 			  #enabled: #valueOfNotReading
  1119             submenu: 
   878 			  #indication: #autoUpdateMode:
  1120            (Menu
   879 		      )
  1121               (
   880 		       #(#MenuItem
  1122                (MenuItem
   881 			  #label: '-'
  1123                   activeHelpKey: settingsAutoUpdate
   882 		      )
  1124                   enabled: valueOfNotReading
   883 		       #(#MenuItem
  1125                   label: 'Auto Update'
   884 			  #label: 'Private Classes as Separate'
  1126                   translateLabel: true
   885 			  #translateLabel: true
  1127                   indication: autoUpdateMode:
   886 			  #activeHelpKey: #settingsPrivateAsSeparate
  1128                 )
   887 			  #enabled: #valueOfNotReading
  1129                (MenuItem
   888 			  #indication: #privateAsSeparate:
  1130                   label: '-'
   889 		      )
  1131                 )
   890 		       #(#MenuItem
  1132                (MenuItem
   891 			  #label: '-'
  1133                   activeHelpKey: settingsPrivateAsSeparate
   892 		      )
  1134                   enabled: valueOfNotReading
   893 		       #(#MenuItem
  1135                   label: 'Private Classes as Separate'
   894 			  #label: 'Columns'
  1136                   translateLabel: true
   895 			  #translateLabel: true
  1137                   indication: privateAsSeparate:
   896 			  #activeHelpKey: #settingsColumns
  1138                 )
   897 			  #submenu:
  1139                (MenuItem
   898 			   #(#Menu
  1140                   label: '-'
   899 
  1141                 )
   900 			       #(
  1142                (MenuItem
   901 				 #(#MenuItem
  1143                   activeHelpKey: settingsColumns
   902 				    #label: 'Category'
  1144                   label: 'Columns'
   903 				    #activeHelpKey: #settingsColumnsCategory
  1145                   translateLabel: true
   904 				    #indication: #categoryColumn:
  1146                   submenu: 
   905 				)
  1147                  (Menu
   906 				 #(#MenuItem
  1148                     (
   907 				    #label: 'Delta Info'
  1149                      (MenuItem
   908 				    #activeHelpKey: #settingsColumnsDeltaInfo
  1150                         activeHelpKey: settingsColumnsClassName
   909 				    #indication: #deltaInfoColumn:
  1151                         label: 'Class'
   910 				)
  1152                         translateLabel: true
   911 				 #(#MenuItem
  1153                         isVisible: false
   912 				    #label: 'Type'
  1154                         hideMenuOnActivated: false
   913 				    #activeHelpKey: #settingsColumnsType
  1155                         indication: classNameColumn:
   914 				    #indication: #typeColumn:
  1156                       )
   915 				)
  1157                      (MenuItem
   916 				 #(#MenuItem
  1158                         activeHelpKey: settingsColumnsCategory
   917 				    #label: 'Time Stamp'
  1159                         label: 'Selector'
   918 				    #activeHelpKey: #settingsColumnsTimeStamp
  1160                         translateLabel: true
   919 				    #indication: #timeStampColumn:
  1161                         isVisible: false
   920 				)
  1162                         hideMenuOnActivated: false
   921 				 #(#MenuItem
  1163                         indication: selectorColumn:
   922 				    #label: 'Positions'
  1164                       )
   923 				    #activeHelpKey: #settingsColumnsPosition
  1165                      (MenuItem
   924 				    #indication: #positionsColumn:
  1166                         activeHelpKey: settingsColumnsCategory
   925 				)
  1167                         label: 'Category'
   926 			      ) nil
  1168                         translateLabel: true
   927 			      nil
  1169                         hideMenuOnActivated: false
   928 			  )
  1170                         indication: categoryColumn:
   929 		      )
  1171                       )
   930 		       #(#MenuItem
  1172                      (MenuItem
   931 			  #label: '-'
  1173                         activeHelpKey: settingsColumnsDeltaInfo
   932 		      )
  1174                         label: 'Delta Info'
   933 		       #(#MenuItem
  1175                         translateLabel: true
   934 			  #label: 'Fonts'
  1176                         hideMenuOnActivated: false
   935 			  #translateLabel: true
  1177                         indication: deltaInfoColumn:
   936 			  #enabled: #valueOfNotReading
  1178                       )
   937 			  #submenuChannel: #menuFont
  1179                      (MenuItem
   938 		      )
  1180                         activeHelpKey: settingsColumnsType
   939 		    ) nil
  1181                         label: 'Type'
   940 		    nil
  1182                         translateLabel: true
   941 		)
  1183                         hideMenuOnActivated: false
   942 	    )
  1184                         indication: typeColumn:
   943 	     #(#MenuItem
  1185                       )
   944 		#label: 'History'
  1186                      (MenuItem
   945 		#translateLabel: true
  1187                         activeHelpKey: settingsColumnsTimeStamp
   946 		#submenuChannel: #menuHistory
  1188                         label: 'Time Stamp'
   947 	    )
  1189                         translateLabel: true
   948 	     #(#MenuItem
  1190                         hideMenuOnActivated: false
   949 		#label: 'Help'
  1191                         indication: timeStampColumn:
   950 		#translateLabel: true
  1192                       )
   951 		#startGroup: #right
  1193                      (MenuItem
   952 		#activeHelpKey: #help
  1194                         activeHelpKey: settingsColumnsPosition
   953 		#submenuChannel: #menuHelp
  1195                         label: 'Positions'
   954 	    )
  1196                         translateLabel: true
   955 	  ) nil
  1197                         hideMenuOnActivated: false
   956 	  nil
  1198                         indication: positionsColumn:
       
  1199                       )
       
  1200                      )
       
  1201                     nil
       
  1202                     nil
       
  1203                   )
       
  1204                 )
       
  1205                (MenuItem
       
  1206                   label: '-'
       
  1207                 )
       
  1208                (MenuItem
       
  1209                   enabled: valueOfNotReading
       
  1210                   label: 'Fonts'
       
  1211                   translateLabel: true
       
  1212                   submenuChannel: menuFont
       
  1213                 )
       
  1214                )
       
  1215               nil
       
  1216               nil
       
  1217             )
       
  1218           )
       
  1219          (MenuItem
       
  1220             activeHelpKey: help
       
  1221             label: 'MENU_Help'
       
  1222             translateLabel: true
       
  1223             startGroup: conditionalRight
       
  1224             submenuChannel: menuHelp
       
  1225           )
       
  1226          )
       
  1227         nil
       
  1228         nil
   957       )
  1229       )
   958 
       
   959     "Modified: / 19.5.1998 / 18:17:27 / cg"
       
   960 !
  1230 !
   961 
  1231 
   962 menuTable
  1232 menuTable
   963     "This resource specification was automatically generated
  1233     "This resource specification was automatically generated
   964      by the MenuEditor of ST/X."
  1234      by the MenuEditor of ST/X."
  1076      (Menu new fromLiteralArrayEncoding:(NewChangesBrowser menuToolbar)) startUp
  1346      (Menu new fromLiteralArrayEncoding:(NewChangesBrowser menuToolbar)) startUp
  1077     "
  1347     "
  1078 
  1348 
  1079     <resource: #menu>
  1349     <resource: #menu>
  1080 
  1350 
  1081     ^
  1351     ^ 
  1082 
  1352      #(Menu
  1083        #(#Menu
  1353         (
  1084 
  1354          (MenuItem
  1085 	   #(
  1355             activeHelpKey: fileLoad
  1086 	     #(#MenuItem
  1356             enabled: valueOfNotReading
  1087 		#label: 'Load'
  1357             label: 'Load'
  1088 		#isButton: true
  1358             itemValue: doLoad
  1089 		#value: #doLoad
  1359             translateLabel: true
  1090 		#activeHelpKey: #fileLoad
  1360             isButton: true
  1091 		#enabled: #valueOfNotReading
  1361             labelImage: (ResourceRetriever XPToolbarIconLibrary loadFromFileIcon)
  1092 		#labelImage: #(#ResourceRetriever #Icon #loadIcon)
  1362           )
  1093 	    )
  1363          (MenuItem
  1094 	     #(#MenuItem
  1364             activeHelpKey: fileSave
  1095 		#label: 'Save'
  1365             enabled: valueOfNotSaving
  1096 		#isButton: true
  1366             label: 'Save'
  1097 		#value: #doSave
  1367             itemValue: doSave
  1098 		#activeHelpKey: #fileSave
  1368             translateLabel: true
  1099 		#enabled: #valueOfNotSaving
  1369             isButton: true
  1100 		#labelImage: #(#ResourceRetriever #Icon #saveIcon)
  1370             labelImage: (ResourceRetriever XPToolbarIconLibrary saveToFileIcon)
  1101 	    )
  1371           )
  1102 	     #(#MenuItem
  1372          (MenuItem
  1103 		#label: ''
  1373             label: '-'
  1104 	    )
  1374           )
  1105 	     #(#MenuItem
  1375          (MenuItem
  1106 		#label: 'Compress'
  1376             activeHelpKey: applyLine
  1107 		#isButton: true
  1377             enabled: valueOfHavingChangeSelection
  1108 		#value: #doCompress
  1378             label: 'Apply'
  1109 		#activeHelpKey: #deleteCompress
  1379             itemValue: doApply
  1110 		#enabled: #valueOfNotReading
  1380             translateLabel: true
  1111 		#labelImage: #(#ResourceRetriever nil #compressIcon)
  1381             isButton: true
  1112 	    )
  1382             labelImage: (ResourceRetriever nil applyIcon)
  1113 	     #(#MenuItem
  1383           )
  1114 		#label: ''
  1384          (MenuItem
  1115 	    )
  1385             activeHelpKey: applyToEnd
  1116 	     #(#MenuItem
  1386             enabled: valueOfHavingSelection
  1117 		#label: 'Apply'
  1387             label: 'Apply To End'
  1118 		#isButton: true
  1388             itemValue: doApplyToEnd
  1119 		#value: #doApply
  1389             translateLabel: true
  1120 		#activeHelpKey: #applyLine
  1390             isButton: true
  1121 		#enabled: #valueOfHavingChangeSelection
  1391             labelImage: (ResourceRetriever nil applyToEndIcon)
  1122 		#labelImage: #(#ResourceRetriever nil #applyIcon)
  1392           )
  1123 	    )
  1393          (MenuItem
  1124 	     #(#MenuItem
  1394             activeHelpKey: applyFromLastSnapshot
  1125 		#label: 'Apply To End'
  1395             enabled: valueOfNotReading
  1126 		#isButton: true
  1396             label: 'Apply From Last Snapshot'
  1127 		#value: #doApplyToEnd
  1397             itemValue: doApplyFromLastSnapshot
  1128 		#activeHelpKey: #applyToEnd
  1398             translateLabel: true
  1129 		#enabled: #valueOfHavingSelection
  1399             isButton: true
  1130 		#labelImage: #(#ResourceRetriever nil #applyToEndIcon)
  1400             labelImage: (ResourceRetriever nil applyFromLastSnapshotIcon)
  1131 	    )
  1401           )
  1132 	     #(#MenuItem
  1402          (MenuItem
  1133 		#label: 'Apply From Last Snapshot'
  1403             label: '-'
  1134 		#isButton: true
  1404           )
  1135 		#value: #doApplyFromLastSnapshot
  1405          (MenuItem
  1136 		#activeHelpKey: #applyFromLastSnapshot
  1406             activeHelpKey: deleteLine
  1137 		#enabled: #valueOfNotReading
  1407             enabled: valueOfHavingSelection
  1138 		#labelImage: #(#ResourceRetriever nil #applyFromLastSnapshotIcon)
  1408             label: 'Delete'
  1139 	    )
  1409             itemValue: doDelete
  1140 	     #(#MenuItem
  1410             translateLabel: true
  1141 		#label: ''
  1411             isButton: true
  1142 	    )
  1412             labelImage: (ResourceRetriever nil deleteIcon)
  1143 	     #(#MenuItem
  1413           )
  1144 		#label: 'Delete'
  1414          (MenuItem
  1145 		#isButton: true
  1415             activeHelpKey: deleteToEnd
  1146 		#value: #doDelete
  1416             enabled: valueOfHavingSelection
  1147 		#activeHelpKey: #deleteLine
  1417             label: 'Delete To End'
  1148 		#enabled: #valueOfHavingSelection
  1418             itemValue: doDeleteToEnd
  1149 		#labelImage: #(#ResourceRetriever nil #deleteIcon)
  1419             translateLabel: true
  1150 	    )
  1420             isButton: true
  1151 	     #(#MenuItem
  1421             labelImage: (ResourceRetriever nil deleteToEndIcon)
  1152 		#label: 'Delete To End'
  1422           )
  1153 		#isButton: true
  1423          (MenuItem
  1154 		#value: #doDeleteToEnd
  1424             activeHelpKey: deleteCompress
  1155 		#activeHelpKey: #deleteToEnd
  1425             enabled: valueOfNotReading
  1156 		#enabled: #valueOfHavingSelection
  1426             label: 'Compress'
  1157 		#labelImage: #(#ResourceRetriever nil #deleteToEndIcon)
  1427             itemValue: doCompress
  1158 	    )
  1428             translateLabel: true
  1159 	     #(#MenuItem
  1429             isButton: true
  1160 		#label: ''
  1430             labelImage: (ResourceRetriever nil compressIcon)
  1161 	    )
  1431           )
  1162 	     #(#MenuItem
  1432          (MenuItem
  1163 		#label: 'Find Last Snapshot'
  1433             label: '-'
  1164 		#isButton: true
  1434           )
  1165 		#value: #doFindSnapshot:
  1435          (MenuItem
  1166 		#activeHelpKey: #testFindLastSnapshot
  1436             activeHelpKey: testFindPreviousSnapshot
  1167 		#enabled: #valueOfHavingSelection
  1437             enabled: valueOfHavingSelection
  1168 		#argument: 'last'
  1438             label: 'Find Previous Snapshot'
  1169 		#labelImage: #(#ResourceRetriever nil #findLastSnapshotIcon)
  1439             itemValue: doFindSnapshot:
  1170 	    )
  1440             translateLabel: true
  1171 	     #(#MenuItem
  1441             isButton: true
  1172 		#label: 'Find Next Snapshot'
  1442             labelImage: (ResourceRetriever nil findPreviousSnapshotIcon)
  1173 		#isButton: true
  1443             argument: 'previous'
  1174 		#value: #doFindSnapshot:
  1444           )
  1175 		#activeHelpKey: #testFindNextSnapshot
  1445          (MenuItem
  1176 		#enabled: #valueOfHavingSelection
  1446             activeHelpKey: testFindNextSnapshot
  1177 		#argument: 'next'
  1447             enabled: valueOfHavingSelection
  1178 		#labelImage: #(#ResourceRetriever nil #findNextSnapshotIcon)
  1448             label: 'Find Next Snapshot'
  1179 	    )
  1449             itemValue: doFindSnapshot:
  1180 	  ) nil
  1450             translateLabel: true
  1181 	  nil
  1451             isButton: true
       
  1452             labelImage: (ResourceRetriever nil findNextSnapshotIcon)
       
  1453             argument: 'next'
       
  1454           )
       
  1455          )
       
  1456         nil
       
  1457         nil
  1182       )
  1458       )
  1183 ! !
  1459 ! !
  1184 
  1460 
  1185 !NewChangesBrowser methodsFor:'accesssing - columns'!
  1461 !NewChangesBrowser methodsFor:'accesssing - columns'!
  1186 
  1462 
  1196     self changeColumn: #category add: (CategoryColumn := aBoolean)
  1472     self changeColumn: #category add: (CategoryColumn := aBoolean)
  1197 
  1473 
  1198     "Modified: / 19.5.1998 / 20:30:13 / cg"
  1474     "Modified: / 19.5.1998 / 20:30:13 / cg"
  1199 !
  1475 !
  1200 
  1476 
       
  1477 classAndSelectorColumn
       
  1478     "returns whether the column for the category attribute of the changes is shown"
       
  1479 
       
  1480     ^ClassAndSelectorColumn ? (ClassAndSelectorColumn := false)
       
  1481 !
       
  1482 
       
  1483 classAndSelectorColumn: aBoolean
       
  1484     "sets whether the column for the category attribute of the changes is shown"
       
  1485 
       
  1486     self changeColumn: #classAndSelector add: (ClassAndSelectorColumn := aBoolean)
       
  1487 
       
  1488     "Modified: / 19.5.1998 / 20:30:13 / cg"
       
  1489 !
       
  1490 
       
  1491 classNameColumn
       
  1492     "returns whether the column for the category attribute of the changes is shown"
       
  1493 
       
  1494     ^ClassNameColumn ? (ClassNameColumn := false)
       
  1495 !
       
  1496 
       
  1497 classNameColumn: aBoolean
       
  1498     "sets whether the column for the className attribute of the changes is shown"
       
  1499 
       
  1500     self changeColumn: #className add: (ClassNameColumn := aBoolean)
       
  1501 
       
  1502     "Modified: / 19.5.1998 / 20:30:13 / cg"
       
  1503 !
       
  1504 
  1201 deltaInfoColumn
  1505 deltaInfoColumn
  1202     "returns whether the column for the delta info attribute of the changes is shown"
  1506     "returns whether the column for the delta info attribute of the changes is shown"
  1203 
  1507 
  1204     ^DeltaInfoColumn ? (DeltaInfoColumn := false)
  1508     ^DeltaInfoColumn ? (DeltaInfoColumn := false)
  1205 !
  1509 !
  1225     self changeColumn: #position add: (PositionsColumn := aBoolean)
  1529     self changeColumn: #position add: (PositionsColumn := aBoolean)
  1226 
  1530 
  1227     "Modified: / 19.5.1998 / 20:30:37 / cg"
  1531     "Modified: / 19.5.1998 / 20:30:37 / cg"
  1228 !
  1532 !
  1229 
  1533 
       
  1534 selectorColumn
       
  1535     "returns whether the column for the category attribute of the changes is shown"
       
  1536 
       
  1537     ^SelectorColumn ? (SelectorColumn := false)
       
  1538 !
       
  1539 
       
  1540 selectorColumn: aBoolean
       
  1541     "sets whether the column for the category attribute of the changes is shown"
       
  1542 
       
  1543     self changeColumn: #selector add: (SelectorColumn := aBoolean)
       
  1544 
       
  1545     "Modified: / 19.5.1998 / 20:30:13 / cg"
       
  1546 !
       
  1547 
  1230 timeStampColumn
  1548 timeStampColumn
  1231     "returns whether the column for the time stamp attribute of the changes is shown"
  1549     "returns whether the column for the time stamp attribute of the changes is shown"
  1232 
  1550 
  1233     ^TimeStampColumn ? (TimeStampColumn := false)
  1551     ^TimeStampColumn ? (TimeStampColumn := false)
  1234 !
  1552 !
  1298 listOfChangeColumns
  1616 listOfChangeColumns
  1299     "initializes (during the startup) and returns the value holder for the columns"
  1617     "initializes (during the startup) and returns the value holder for the columns"
  1300 
  1618 
  1301     |holder|
  1619     |holder|
  1302     (holder := builder bindingAt:#listOfChangeColumns) isNil ifTrue:[
  1620     (holder := builder bindingAt:#listOfChangeColumns) isNil ifTrue:[
  1303 	builder aspectAt:#listOfChangeColumns put:(holder := List new).
  1621         builder aspectAt:#listOfChangeColumns put:(holder := List new).
  1304 	self changeColumn: nil add: true.
  1622         self changeColumn: nil add: true.
  1305 	self changeColumn: #change add: true.
  1623         self changeColumn: #change add: true.
  1306 	self categoryColumn: self categoryColumn.
  1624 
  1307 	self timeStampColumn: self timeStampColumn.
  1625         self classNameColumn: self classNameColumn.
  1308 	self typeColumn: self typeColumn.
  1626         self classAndSelectorColumn: self classAndSelectorColumn.
       
  1627         self selectorColumn: self selectorColumn.
       
  1628         self categoryColumn: self categoryColumn.
       
  1629         self timeStampColumn: self timeStampColumn.
       
  1630         self typeColumn: self typeColumn.
  1309 "/        self deltaInfoColumn: self deltaInfoColumn.
  1631 "/        self deltaInfoColumn: self deltaInfoColumn.
  1310 	self positionsColumn: self positionsColumn.
  1632         self positionsColumn: self positionsColumn.
  1311     ].
  1633     ].
  1312     ^ holder
  1634     ^ holder
  1313 
  1635 
  1314     "Modified: / 19.5.1998 / 20:30:31 / cg"
  1636     "Modified: / 19.5.1998 / 20:30:31 / cg"
  1315 !
  1637 !
  1432 update:something with:aParameter from:changedObject
  1754 update:something with:aParameter from:changedObject
  1433     "evaluates the filterCompletionBlock after returning the filter string"
  1755     "evaluates the filterCompletionBlock after returning the filter string"
  1434 
  1756 
  1435     super update:something with:aParameter from:changedObject.
  1757     super update:something with:aParameter from:changedObject.
  1436 
  1758 
  1437     changedObject == self valueOfFilter
  1759     changedObject == self valueOfFilter ifTrue:[
  1438     ifTrue:
  1760         filterCompletionBlock value: changedObject value.
  1439     [
  1761         self listOfChanges size > 0 ifTrue: [self addToHistory: changedObject value -> #doFilter:]
  1440 	filterCompletionBlock value: changedObject value.
       
  1441 	self listOfChanges size > 0 ifTrue: [self addToHistory: changedObject value -> #doFilter:]
       
  1442     ]
  1762     ]
  1443 
       
  1444 
       
  1445 
       
  1446 
       
  1447 
       
  1448 
       
  1449 !
  1763 !
  1450 
  1764 
  1451 updateChannels
  1765 updateChannels
  1452     "updates my channels"
  1766     "updates my channels"
  1453 
  1767 
  1502 
  1816 
  1503     |action|
  1817     |action|
  1504 
  1818 
  1505     (skipSignal notNil) ifTrue:[
  1819     (skipSignal notNil) ifTrue:[
  1506 
  1820 
  1507 	self changeTextEditor highlightingErrorPosition:relPos to:relEndPos do:[
  1821         self changeTextEditor highlightingErrorPosition:relPos to:relEndPos do:[
  1508 	    |box|
  1822             |box|
  1509 
  1823 
  1510 	    "
  1824             "
  1511 	     start dialog - make certain cleanup is done
  1825              start dialog - make certain cleanup is done
  1512 	    "
  1826             "
  1513 	    action := OptionBox
  1827             action := OptionBox
  1514 			  request:aString
  1828                           request:aString
  1515 			  label:'Error'
  1829                           label:'Error'
  1516 			  form:(WarningBox iconBitmap)
  1830                           image:(WarningBox iconBitmap)
  1517 			  buttonLabels:#('cancel' 'skip' 'continue')
  1831                           buttonLabels:#('cancel' 'skip' 'continue')
  1518 			  values:#(#abort #skip #continue)
  1832                           values:#(#abort #skip #continue)
  1519 			  default:#continue.
  1833                           default:#continue.
  1520 	].
  1834         ].
  1521 
  1835 
  1522 	action == #abort ifTrue:[
  1836         action == #abort ifTrue:[
  1523 	    Object abortSignal raise.
  1837             Object abortSignal raise.
  1524 	    ^ false
  1838             ^ false
  1525 	].
  1839         ].
  1526 	action == #skip ifTrue:[
  1840         action == #skip ifTrue:[
  1527 	    skipSignal raise.
  1841             skipSignal raise.
  1528 	    ^ false
  1842             ^ false
  1529 	].
  1843         ].
  1530 	^  false
  1844         ^  false
  1531     ].
  1845     ].
  1532     ^self changeTextEditor error:aString position:relPos to:relEndPos from:aCompiler
  1846     ^self changeTextEditor error:aString position:relPos to:relEndPos from:aCompiler
  1533 
       
  1534 !
  1847 !
  1535 
  1848 
  1536 warning:aString position:relPos to:relEndPos from:aCompiler
  1849 warning:aString position:relPos to:relEndPos from:aCompiler
  1537     "compiler notifys us of a warning - ignore it"
  1850     "compiler notifys us of a warning - ignore it"
  1538 
  1851 
  1548     changeFileName asFilename exists ifTrue: [^changeFileName].
  1861     changeFileName asFilename exists ifTrue: [^changeFileName].
  1549     ^'No change file name defined.'
  1862     ^'No change file name defined.'
  1550 
  1863 
  1551 
  1864 
  1552 
  1865 
       
  1866 !
       
  1867 
       
  1868 openDocumentation
       
  1869    self openHTMLDocument:'tools/cbrowser/TOP.html'.
  1553 ! !
  1870 ! !
  1554 
  1871 
  1555 !NewChangesBrowser methodsFor:'initialization'!
  1872 !NewChangesBrowser methodsFor:'initialization'!
  1556 
  1873 
  1557 initialize
  1874 initialize
  1708     "adds or removes a attribute column to the table"
  2025     "adds or removes a attribute column to the table"
  1709 
  2026 
  1710     |newListOfChangeColumns|
  2027     |newListOfChangeColumns|
  1711 
  2028 
  1712     newListOfChangeColumns := self listOfChangeColumns asOrderedCollection.
  2029     newListOfChangeColumns := self listOfChangeColumns asOrderedCollection.
  1713     addOrRemove
  2030     addOrRemove ifTrue:[
  1714     ifTrue:
  2031         newListOfChangeColumns add:
  1715     [
  2032             ((self class tableColumnsForChangeAttributes
  1716 	newListOfChangeColumns add:
  2033                 collect: [:i| i decodeAsLiteralArray])
  1717 	    ((self class tableColumnsForChangeAttributes
  2034                     detect: [:column| column id = aColumnId])
  1718 		collect: [:i| i decodeAsLiteralArray])
  2035     ] ifFalse:[
  1719 		    detect: [:column| column id = aColumnId])
  2036         newListOfChangeColumns remove:
  1720     ]
  2037             (self listOfChangeColumns detect: [:column| column id = aColumnId] ifNone: nil) ifAbsent: nil
  1721     ifFalse:
       
  1722     [
       
  1723 	newListOfChangeColumns remove:
       
  1724 	    (self listOfChangeColumns detect: [:column| column id = aColumnId] ifNone: nil) ifAbsent: nil
       
  1725     ].
  2038     ].
  1726     self listOfChangeColumns contents: newListOfChangeColumns.
  2039     self listOfChangeColumns contents: newListOfChangeColumns.
  1727     self autoSelectLast
  2040     self autoSelectLast
  1728 
  2041 
  1729     "Modified: / 19.5.1998 / 20:32:53 / cg"
  2042     "Modified: / 19.5.1998 / 20:32:53 / cg"
  2370 readChangesFileInBackground:inBackground
  2683 readChangesFileInBackground:inBackground
  2371     "reads the changes file, creates a list of header-lines (changeChunks)
  2684     "reads the changes file, creates a list of header-lines (changeChunks)
  2372      and a list of chunk-positions (changePositions).
  2685      and a list of chunk-positions (changePositions).
  2373      Starting with 2.10.3, the entries are multi-col entries;
  2686      Starting with 2.10.3, the entries are multi-col entries;
  2374      the cols are:
  2687      the cols are:
  2375 	1   delta (only if comparing)
  2688         1   delta (only if comparing)
  2376 		'+' -> new method (w.r.t. current state)
  2689                 '+' -> new method (w.r.t. current state)
  2377 		'-' -> removed method (w.r.t. current state)
  2690                 '-' -> removed method (w.r.t. current state)
  2378 		'?' -> class does not exist currently
  2691                 '?' -> class does not exist currently
  2379 		'=' -> change is same as current methods source
  2692                 '=' -> change is same as current methods source
  2380 	2   class/selector
  2693         2   class/selector
  2381 	3   type of change
  2694         3   type of change
  2382 		doit
  2695                 doit
  2383 		method
  2696                 method
  2384 		category change
  2697                 category change
  2385 	4   timestamp
  2698         4   timestamp
  2386 
  2699 
  2387      since comparing slows down startup time, it is now disabled by
  2700      since comparing slows down startup time, it is now disabled by
  2388      default and can be enabled via a toggle."
  2701      default and can be enabled via a toggle."
  2389 
  2702 
  2390     |aStream maxLen i f v|
  2703     |aStream maxLen i f v|
  2411     v notNil ifTrue:[v raise].
  2724     v notNil ifTrue:[v raise].
  2412     v := self filterLabel.
  2725     v := self filterLabel.
  2413     v notNil ifTrue:[v label: 'Read:'; redraw].
  2726     v notNil ifTrue:[v label: 'Read:'; redraw].
  2414 
  2727 
  2415     self withReadCursorDo:[
  2728     self withReadCursorDo:[
  2416 	|myProcess myPriority|
  2729         |myProcess myPriority|
  2417 
  2730 
  2418 	"
  2731         "
  2419 	 this is a time consuming operation (especially, if reading an
  2732          this is a time consuming operation (especially, if reading an
  2420 	 NFS-mounted directory; therefore lower my priority...
  2733          NFS-mounted directory; therefore lower my priority...
  2421 	"
  2734         "
  2422 	inBackground ifTrue:[
  2735         inBackground ifTrue:[
  2423 	    myProcess := Processor activeProcess.
  2736             myProcess := Processor activeProcess.
  2424 	    myPriority := myProcess priority.
  2737             myPriority := myProcess priority.
  2425 	    myProcess priority:(Processor userBackgroundPriority).
  2738             myProcess priority:(Processor userBackgroundPriority).
  2426 	].
  2739         ].
  2427 
  2740 
  2428 	[
  2741         [
  2429 	    |excla timeStampInfo lastChange|
  2742             |excla timeStampInfo lastChange|
  2430 
  2743 
  2431 	    excla := aStream class chunkSeparator.
  2744             excla := aStream class chunkSeparator.
  2432 
  2745 
  2433 	    [aStream atEnd] whileFalse:[
  2746             [aStream atEnd] whileFalse:[
  2434 		|change changeDelta changeString changeType changeCategory
  2747                 |change changeDelta changeString changeType changeCategory
  2435 		 line s l changeClass sawExcla category
  2748                  line s l changeClass sawExcla category className selector
  2436 		 chunkText chunkPos sel oldValue|
  2749                  chunkText chunkPos sel oldValue|
  2437 
  2750 
  2438 		change := Change new.
  2751                 change := Change new.
  2439 		"
  2752                 "
  2440 		 get a chunk (separated by excla)
  2753                  get a chunk (separated by excla)
  2441 		"
  2754                 "
  2442 		oldValue := self valueOfReadProgress value.
  2755                 oldValue := self valueOfReadProgress value.
  2443 		self valueOfReadProgress value: (((aStream position/aStream size) * 100) rounded).
  2756                 self valueOfReadProgress value: (((aStream position/aStream size) * 100) rounded).
  2444 "/                oldValue ~~ self valueOfReadProgress value
  2757 "/                oldValue ~~ self valueOfReadProgress value
  2445 "/                    ifTrue: [self readProgressIndicator redrawEdges;redraw].
  2758 "/                    ifTrue: [self readProgressIndicator redrawEdges;redraw].
  2446 
  2759 
  2447 		aStream skipSeparators.
  2760                 aStream skipSeparators.
  2448 		chunkPos := aStream position.
  2761                 chunkPos := aStream position.
  2449 
  2762 
  2450 		sawExcla := aStream peekFor:excla.
  2763                 sawExcla := aStream peekFor:excla.
  2451 		chunkText := aStream nextChunk.
  2764                 chunkText := aStream nextChunk.
  2452 		chunkText notNil ifTrue:[
  2765                 chunkText notNil ifTrue:[
  2453 		    |index headerLine cls|
  2766                     |index headerLine cls|
  2454 
  2767 
  2455 		    (chunkText startsWith:'''---- timestamp ') ifTrue:[
  2768                     (chunkText startsWith:'''---- timestamp ') ifTrue:[
  2456 			timeStampInfo := (chunkText copyFrom:16 to:(chunkText size - 6)) withoutSpaces.
  2769                         timeStampInfo := (chunkText copyFrom:16 to:(chunkText size - 6)) withoutSpaces.
  2457 		    ] ifFalse:[
  2770                     ] ifFalse:[
  2458 
  2771 
  2459 			"
  2772                         "
  2460 			 only first line is saved in changeChunks...
  2773                          only first line is saved in changeChunks...
  2461 			"
  2774                         "
  2462 			index := chunkText indexOf:(Character cr).
  2775                         index := chunkText indexOf:(Character cr).
  2463 			(index ~~ 0) ifTrue:[
  2776                         (index ~~ 0) ifTrue:[
  2464 			    chunkText := chunkText copyTo:(index - 1).
  2777                             chunkText := chunkText copyTo:(index - 1).
  2465 
  2778 
  2466 			    "take care for comment changes - must still be a
  2779                             "take care for comment changes - must still be a
  2467 			     valid expression for classNameOfChange: to work"
  2780                              valid expression for classNameOfChange: to work"
  2468 
  2781 
  2469 			    (chunkText endsWith:'comment:''') ifTrue:[
  2782                             (chunkText endsWith:'comment:''') ifTrue:[
  2470 				chunkText := chunkText , '...'''
  2783                                 chunkText := chunkText , '...'''
  2471 			    ].
  2784                             ].
  2472 			    (chunkText endsWith:'primitiveDefinitions:''') ifTrue:[
  2785                             (chunkText endsWith:'primitiveDefinitions:''') ifTrue:[
  2473 				sel := 'primitiveDefinitions:'.
  2786                                 sel := 'primitiveDefinitions:'.
  2474 				chunkText := chunkText copyWithoutLast:1
  2787                                 chunkText := chunkText copyWithoutLast:1
  2475 			    ].
  2788                             ].
  2476 			    (chunkText endsWith:'primitiveVariables:''') ifTrue:[
  2789                             (chunkText endsWith:'primitiveVariables:''') ifTrue:[
  2477 				sel := 'primitiveVariables:'.
  2790                                 sel := 'primitiveVariables:'.
  2478 				chunkText := chunkText copyWithoutLast:1
  2791                                 chunkText := chunkText copyWithoutLast:1
  2479 			    ].
  2792                             ].
  2480 			    (chunkText endsWith:'primitiveFunctions:''') ifTrue:[
  2793                             (chunkText endsWith:'primitiveFunctions:''') ifTrue:[
  2481 				sel := 'primitiveFunctions:'.
  2794                                 sel := 'primitiveFunctions:'.
  2482 				chunkText := chunkText copyWithoutLast:1
  2795                                 chunkText := chunkText copyWithoutLast:1
  2483 			    ].
  2796                             ].
  2484 			].
  2797                         ].
  2485 
  2798 
  2486 			change chunk: chunkText.
  2799                         change chunk: chunkText.
  2487 			change position: chunkPos.
  2800                         change position: chunkPos.
  2488 			lastChange notNil ifTrue: [lastChange lastPosition: chunkPos - 1].
  2801                         lastChange notNil ifTrue: [lastChange lastPosition: chunkPos - 1].
  2489 			lastChange := change.
  2802                         lastChange := change.
  2490 			change timeStamp: timeStampInfo.
  2803                         change timeStamp: timeStampInfo.
  2491 			change followUp: false.
  2804                         change followUp: false.
  2492 			headerLine := nil.
  2805                         headerLine := nil.
  2493 			changeDelta := ' '.
  2806                         changeDelta := ' '.
  2494 
  2807 
  2495 			sawExcla ifFalse:[
  2808                         sawExcla ifFalse:[
  2496 			    (chunkText startsWith:'''---- snap') ifTrue:[
  2809                             (chunkText startsWith:'''---- snap') ifTrue:[
  2497 				changeType := ''.
  2810                                 changeType := ''.
  2498 				headerLine := chunkText.
  2811                                 headerLine := chunkText.
  2499 				changeString := (chunkText contractTo:maxLen).
  2812                                 changeString := (chunkText contractTo:maxLen).
  2500 				timeStampInfo := nil.
  2813                                 timeStampInfo := nil.
  2501 			    ] ifFalse:[
  2814                             ] ifFalse:[
  2502 
  2815 
  2503 				|p cls|
  2816                                 |p cls|
  2504 
  2817 
  2505 				headerLine := chunkText , ' (doIt)'.
  2818                                 headerLine := chunkText , ' (doIt)'.
  2506 
  2819 
  2507 				"
  2820                                 "
  2508 				 first, assume doIt - then lets have a more detailed look...
  2821                                  first, assume doIt - then lets have a more detailed look...
  2509 				"
  2822                                 "
  2510 				((chunkText startsWith:'''---- file')
  2823                                 ((chunkText startsWith:'''---- file')
  2511 				or:[(chunkText startsWith:'''---- check')]) ifTrue:[
  2824                                 or:[(chunkText startsWith:'''---- check')]) ifTrue:[
  2512 				    changeType := ''.
  2825                                     changeType := ''.
  2513 				    timeStampInfo := nil.
  2826                                     timeStampInfo := nil.
  2514 				] ifFalse:[
  2827                                 ] ifFalse:[
  2515 				    changeType := 'doIt'.
  2828                                     changeType := 'doIt'.
  2516 				].
  2829                                 ].
  2517 				changeString := (chunkText contractTo:maxLen).
  2830                                 changeString := (chunkText contractTo:maxLen).
  2518 
  2831 
  2519 				p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2832                                 p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2520 				(p notNil
  2833                                 (p notNil
  2521 				 and:[p ~~ #Error
  2834                                  and:[p ~~ #Error
  2522 				 and:[p isMessage]]) ifTrue:[
  2835                                  and:[p isMessage]]) ifTrue:[
  2523 				    sel := p selector.
  2836                                     sel := p selector.
  2524 				].
  2837                                 ].
  2525 				(sel == #removeSelector:) ifTrue:[
  2838                                 (sel == #removeSelector:) ifTrue:[
  2526 				    p receiver isUnaryMessage ifTrue:[
  2839                                     p receiver isUnaryMessage ifTrue:[
  2527 					cls := p receiver receiver name.
  2840                                         cls := p receiver receiver name.
  2528 					changeClass := (Smalltalk classNamed:cls) class.
  2841                                         changeClass := (Smalltalk classNamed:cls) class.
  2529 					cls := cls , ' class'.
  2842                                         cls := cls , ' class'.
  2530 				    ] ifFalse:[
  2843                                     ] ifFalse:[
  2531 					cls := p receiver name.
  2844                                         cls := p receiver name.
  2532 					changeClass := (Smalltalk classNamed:cls)
  2845                                         changeClass := (Smalltalk classNamed:cls)
  2533 				    ].
  2846                                     ].
  2534 				    sel := (p args at:1) evaluate.
  2847                                     sel := (p args at:1) evaluate.
  2535 
  2848 
  2536 				    DeltaInfoColumn ifTrue:[
  2849                                     DeltaInfoColumn ifTrue:[
  2537 					(changeClass isNil or:[changeClass isLoaded not]) ifTrue:[
  2850                                         (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[
  2538 					    changeDelta := '?'
  2851                                             changeDelta := '?'
  2539 					] ifFalse:[
  2852                                         ] ifFalse:[
  2540 					    (changeClass implements:sel asSymbol) ifTrue:[
  2853                                             (changeClass implements:sel asSymbol) ifTrue:[
  2541 						changeDelta := '-'.
  2854                                                 changeDelta := '-'.
  2542 					    ]
  2855                                             ]
  2543 					]
  2856                                         ]
  2544 				    ].
  2857                                     ].
  2545 				    changeType := 'remove'.
  2858                                     changeType := 'remove'.
  2546 				    changeString := self contractClass:cls selector:sel to:maxLen.
  2859                                     changeString := self contractClass:cls selector:sel to:maxLen.
  2547 				].
  2860                                     className := cls.
  2548 				(p ~~ #Error
  2861                                     selector := sel.
  2549 				and:[p isMessage
  2862                                 ].
  2550 				and:[p receiver isMessage
  2863                                 (p notNil and:[p ~~ #Error
  2551 				and:[p receiver selector == #compiledMethodAt:]]]) ifTrue:[
  2864                                 and:[p isMessage
  2552 				    p receiver receiver isUnaryMessage ifTrue:[
  2865                                 and:[p receiver isMessage
  2553 					cls := p receiver receiver receiver name.
  2866                                 and:[p receiver selector == #compiledMethodAt:]]]]) ifTrue:[
  2554 					changeClass := (Smalltalk classNamed:cls) class.
  2867                                     p receiver receiver isUnaryMessage ifTrue:[
  2555 					cls := cls , ' class'.
  2868                                         cls := p receiver receiver receiver name.
  2556 				    ] ifFalse:[
  2869                                         changeClass := (Smalltalk classNamed:cls) class.
  2557 					cls := p receiver receiver name.
  2870                                         cls := cls , ' class'.
  2558 					changeClass := (Smalltalk classNamed:cls)
  2871                                     ] ifFalse:[
  2559 				    ].
  2872                                         cls := p receiver receiver name.
  2560 				    (sel == #category:) ifTrue:[
  2873                                         changeClass := (Smalltalk classNamed:cls)
  2561 					sel := (p receiver args at:1) evaluate.
  2874                                     ].
  2562 					changeType := '(category change)'.
  2875                                     (sel == #category:) ifTrue:[
  2563 					changeString := self contractClass:cls selector:sel to:maxLen.
  2876                                         sel := (p receiver args at:1) evaluate.
  2564 				    ].
  2877                                         changeType := '(category change)'.
  2565 				    (sel == #privacy:) ifTrue:[
  2878                                         changeString := self contractClass:cls selector:sel to:maxLen.
  2566 					sel := (p receiver args at:1) evaluate.
  2879                                     ].
  2567 					changeType := 'privacy change'.
  2880                                     (sel == #privacy:) ifTrue:[
  2568 					changeString := self contractClass:cls selector:sel to:maxLen.
  2881                                         sel := (p receiver args at:1) evaluate.
  2569 				    ].
  2882                                         changeType := 'privacy change'.
  2570 				].
  2883                                         changeString := self contractClass:cls selector:sel to:maxLen.
  2571 				(#(#'subclass:'
  2884                                     ].
  2572 				  #'variableSubclass:'
  2885                                     className := cls.
  2573 				  #'variableByteSubclass:'
  2886                                     selector := sel.
  2574 				  #'variableWordSubclass:'
  2887                                 ].
  2575 				  #'variableLongSubclass:'
  2888                                 (#(#'subclass:'
  2576 				  #'variableFloatSubclass:'
  2889                                   #'variableSubclass:'
  2577 				  #'variableDoubleSubclass:'
  2890                                   #'variableByteSubclass:'
  2578 				  #'primitiveDefinitions:'
  2891                                   #'variableWordSubclass:'
  2579 				  #'primitiveFunctions:'
  2892                                   #'variableLongSubclass:'
  2580 				  #'primitiveVariables:'
  2893                                   #'variableFloatSubclass:'
  2581 				 ) includes:sel) ifTrue:[
  2894                                   #'variableDoubleSubclass:'
  2582 				    changeType := 'class definition'.
  2895                                   #'primitiveDefinitions:'
  2583 				].
  2896                                   #'primitiveFunctions:'
  2584 			    ]
  2897                                   #'primitiveVariables:'
  2585 			] ifTrue:[
  2898                                  ) includes:sel) ifTrue:[
  2586 			    |done first p className cls text methodPos|
  2899                                     changeType := 'class definition'.
  2587 
  2900                                 ].
  2588 			    "
  2901                             ]
  2589 			     method definitions actually consist of
  2902                         ] ifTrue:[
  2590 			     two (or more) chunks; skip next chunk(s)
  2903                             |done first p className cls text methodPos|
  2591 			     up to an empty one.
  2904 
  2592 			     The system only writes one chunk,
  2905                             "
  2593 			     and we cannot handle more in this ChangesBrowser....
  2906                              method definitions actually consist of
  2594 			    "
  2907                              two (or more) chunks; skip next chunk(s)
  2595 			    className := nil.
  2908                              up to an empty one.
  2596 			    p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2909                              The system only writes one chunk,
  2597 
  2910                              and we cannot handle more in this ChangesBrowser....
  2598 			    (p notNil and:[p ~~ #Error]) ifTrue:[
  2911                             "
  2599 				sel := p selector.
  2912                             className := nil.
  2600 				(sel == #methodsFor:) ifTrue:[
  2913                             p := Parser parseExpression:chunkText inNameSpace:Smalltalk.
  2601 				    p receiver isUnaryMessage ifTrue:[
  2914 
  2602 					className := p receiver receiver name.
  2915                             (p notNil and:[p ~~ #Error]) ifTrue:[
  2603 					changeClass := (Smalltalk classNamed:className) class.
  2916                                 sel := p selector.
  2604 					className := className , ' class'.
  2917                                 (sel == #methodsFor:) ifTrue:[
  2605 				    ] ifFalse:[
  2918                                     p receiver isUnaryMessage ifTrue:[
  2606 					className := p receiver name.
  2919                                         className := p receiver receiver name.
  2607 					changeClass := Smalltalk classNamed:className
  2920                                         changeClass := (Smalltalk classNamed:className) class.
  2608 				    ].
  2921                                         className := className , ' class'.
  2609 				    category := (p args at:1) evaluate.
  2922                                     ] ifFalse:[
  2610 				].
  2923                                         className := p receiver name.
  2611 			    ].
  2924                                         changeClass := Smalltalk classNamed:className
  2612 
  2925                                     ].
  2613 			    done := false.
  2926                                     category := (p args at:1) evaluate.
  2614 			    first := true.
  2927                                 ].
  2615 			    [done] whileFalse:[
  2928                             ].
  2616 
  2929 
  2617 				changeDelta := ' '.
  2930                             done := false.
  2618 				methodPos := aStream position.
  2931                             first := true.
  2619 
  2932                             [done] whileFalse:[
  2620 				text := aStream nextChunk.
  2933 
  2621 				text isNil ifTrue:[
  2934                                 changeDelta := ' '.
  2622 				    done := true
  2935                                 methodPos := aStream position.
  2623 				] ifFalse:[
  2936 
  2624 				    done := text isEmpty
  2937                                 text := aStream nextChunk.
  2625 				].
  2938                                 text isNil ifTrue:[
  2626 				done ifFalse:[
  2939                                     done := true
  2627 				    first ifFalse:[
  2940                                 ] ifFalse:[
  2628 					change := Change new.
  2941                                     done := text isEmpty
  2629 					change chunk: chunkText.
  2942                                 ].
  2630 					change string:changeString.
  2943                                 done ifFalse:[
  2631 					change position: methodPos.
  2944                                     first ifFalse:[
  2632 					change className: className.
  2945                                         change := Change new.
  2633 					lastChange notNil ifTrue: [lastChange lastPosition: methodPos - 1].
  2946                                         change chunk: chunkText.
  2634 					lastChange := change.
  2947                                         change string:changeString.
  2635 					change timeStamp: timeStampInfo.
  2948                                         change position: methodPos.
  2636 					change followUp: true.
  2949                                         change className: className.
  2637 					editingClassSource := true.
  2950                                         lastChange notNil ifTrue: [lastChange lastPosition: methodPos - 1].
  2638 				    ].
  2951                                         lastChange := change.
  2639 
  2952                                         change timeStamp: timeStampInfo.
  2640 				    first := false.
  2953                                         change followUp: true.
  2641 				    "
  2954                                         editingClassSource := true.
  2642 				     try to find the selector
  2955                                     ].
  2643 				    "
  2956 
  2644 				    sel := nil.
  2957                                     first := false.
  2645 				    className notNil ifTrue:[
  2958                                     "
  2646 					p := Parser
  2959                                      try to find the selector
  2647 						 parseMethodSpecification:text
  2960                                     "
  2648 						 in:nil
  2961                                     sel := nil.
  2649 						 ignoreErrors:true
  2962                                     className notNil ifTrue:[
  2650 						 ignoreWarnings:true.
  2963                                         p := Parser
  2651 					(p notNil and:[p ~~ #Error]) ifTrue:[
  2964                                                  parseMethodSpecification:text
  2652 					    sel := p selector.
  2965                                                  in:nil
  2653 					]
  2966                                                  ignoreErrors:true
  2654 				    ].
  2967                                                  ignoreWarnings:true.
  2655 
  2968                                         (p notNil and:[p ~~ #Error]) ifTrue:[
  2656 				    sel isNil ifTrue:[
  2969                                             sel := p selector.
  2657 					changeString := (chunkText contractTo:maxLen).
  2970                                         ]
  2658 					changeType := 'change'.
  2971                                     ].
  2659 					headerLine := chunkText , ' (change)'.
  2972 
  2660 				    ] ifFalse:[
  2973                                     sel isNil ifTrue:[
  2661 					changeString :=  self contractClass:className selector:sel to:maxLen.
  2974                                         changeString := (chunkText contractTo:maxLen).
  2662 					changeType := 'method definition'.
  2975                                         changeType := 'change'.
  2663 					changeCategory := category.
  2976                                         headerLine := chunkText , ' (change)'.
  2664 					headerLine := className , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
  2977                                     ] ifFalse:[
  2665 				    ].
  2978                                         changeString :=  self contractClass:className selector:sel to:maxLen.
  2666 
  2979                                         changeType := 'method definition'.
  2667 				    DeltaInfoColumn ifTrue:[
  2980                                         changeCategory := category.
  2668 					changeClass isNil ifFalse:[
  2981                                         headerLine := className , ' ' , sel , ' ' , '(change category: ''' , category , ''')'.
  2669 					    changeClass isMeta ifTrue:[
  2982                                         change selector:sel.
  2670 						cls := changeClass soleInstance
  2983                                     ].
  2671 					    ] ifFalse:[
  2984 
  2672 						cls := changeClass
  2985                                     DeltaInfoColumn ifTrue:[
  2673 					    ].
  2986                                         changeClass isNil ifFalse:[
  2674 					].
  2987                                             changeClass isMeta ifTrue:[
  2675 
  2988                                                 cls := changeClass soleInstance
  2676 					(changeClass isNil or:[cls isLoaded not]) ifTrue:[
  2989                                             ] ifFalse:[
  2677 					    changeDelta := '?'
  2990                                                 cls := changeClass
  2678 					] ifFalse:[
  2991                                             ].
  2679 					    (changeClass implements:sel asSymbol) ifFalse:[
  2992                                         ].
  2680 						changeDelta := '+'.
  2993 
  2681 					    ] ifTrue:[
  2994                                         (changeClass isNil or:[cls isLoaded not]) ifTrue:[
  2682 						|m currentText t1 t2|
  2995                                             changeDelta := '?'
  2683 
  2996                                         ] ifFalse:[
  2684 						m := changeClass compiledMethodAt:sel asSymbol.
  2997                                             (changeClass implements:sel asSymbol) ifFalse:[
  2685 						currentText := m source.
  2998                                                 changeDelta := '+'.
  2686 						currentText notNil ifTrue:[
  2999                                             ] ifTrue:[
  2687 						    text asString = currentText asString ifTrue:[
  3000                                                 |m currentText t1 t2|
  2688 							changeDelta := '='
  3001 
  2689 						    ] ifFalse:[
  3002                                                 m := changeClass compiledMethodAt:sel asSymbol.
  2690 							t1 := currentText asCollectionOfLines collect:[:s | s withTabsExpanded].
  3003                                                 currentText := m source.
  2691 							t2 := text asCollectionOfLines collect:[:s | s withTabsExpanded].
  3004                                                 currentText notNil ifTrue:[
  2692 							t1 = t2 ifTrue:[
  3005                                                     text asString = currentText asString ifTrue:[
  2693 							    changeDelta := '='
  3006                                                         changeDelta := '='
  2694 							]
  3007                                                     ] ifFalse:[
  2695 						    ]
  3008                                                         t1 := currentText asCollectionOfLines collect:[:s | s withTabsExpanded].
  2696 						]
  3009                                                         t2 := text asCollectionOfLines collect:[:s | s withTabsExpanded].
  2697 					    ]
  3010                                                         t1 = t2 ifTrue:[
  2698 					]
  3011                                                             changeDelta := '='
  2699 				    ].
  3012                                                         ]
  2700 				    change delta:changeDelta.
  3013                                                     ]
  2701 				    change string:changeString.
  3014                                                 ]
  2702 				    change type:changeType.
  3015                                             ]
  2703 				    change category: changeCategory.
  3016                                         ]
  2704 				    change timeStamp:timeStampInfo.
  3017                                     ].
  2705 				    changes add:change.
  3018                                     change delta:changeDelta.
  2706 				].
  3019                                     change string:changeString.
  2707 				changeString := nil.
  3020                                     change type:changeType.
  2708 				headerLine := nil.
  3021                                     change category: changeCategory.
  2709 
  3022                                     change timeStamp:timeStampInfo.
  2710 			    ]
  3023                                     changes add:change.
  2711 			].
  3024                                 ].
  2712 			changeString notNil ifTrue:[
  3025                                 changeString := nil.
  2713 			    change delta:changeDelta.
  3026                                 headerLine := nil.
  2714 			    change string:changeString.
  3027 
  2715 			    change type:changeType.
  3028                             ]
  2716 			    change timeStamp:timeStampInfo.
  3029                         ].
  2717 			    changes add:change.
  3030                         changeString notNil ifTrue:[
  2718 
  3031                             change delta:changeDelta.
  2719 			] ifFalse:[
  3032                             change string:changeString.
  2720 			    headerLine notNil ifTrue:[
  3033                             change type:changeType.
  2721 				changes add: change.
  3034                             change timeStamp:timeStampInfo.
  2722 			    ]
  3035                             changes add:change.
  2723 			]
  3036 
  2724 		    ]
  3037                         ] ifFalse:[
  2725 		].
  3038                             headerLine notNil ifTrue:[
  2726 		change lastPosition: aStream position.
  3039                                 changes add: change.
  2727 	    ].
  3040                             ]
  2728 	    modified := false.
  3041                         ]
  2729 
  3042                     ]
  2730 	] valueNowOrOnUnwindDo:[
  3043                 ].
  2731 	    aStream close.
  3044                 change lastPosition: aStream position.
  2732 	    inBackground ifTrue:[myProcess priority:myPriority].
  3045             ].
  2733 	].
  3046             modified := false.
       
  3047 
       
  3048         ] valueNowOrOnUnwindDo:[
       
  3049             aStream close.
       
  3050             inBackground ifTrue:[myProcess priority:myPriority].
       
  3051         ].
  2734     ].
  3052     ].
  2735     self setChangeList.
  3053     self setChangeList.
  2736     self valueOfNotReading value: true.
  3054     self valueOfNotReading value: true.
  2737     self filterField raise.
  3055     self filterField raise.
  2738     self filterLabel label: 'Filter:'.
  3056     self filterLabel label: 'Filter:'.
  2865     "asks for saving before closing"
  3183     "asks for saving before closing"
  2866 
  3184 
  2867     self valueOfNotSaving value ifFalse: [^ self].
  3185     self valueOfNotSaving value ifFalse: [^ self].
  2868 
  3186 
  2869     modified ifTrue:[
  3187     modified ifTrue:[
  2870 	(OptionBox
  3188         (OptionBox
  2871 	      request:(resources string:'Change list was modified. Exit anyway?') withCRs
  3189               request:(resources string:'Change list was modified. Exit anyway?') withCRs
  2872 	      label:'Changes Browser'
  3190               label:'Changes Browser'
  2873 	      form:(WarningBox iconBitmap)
  3191               image:(WarningBox iconBitmap)
  2874 	      buttonLabels:(resources array:#('Cancel' 'Discard Modifications and Exit'))
  3192               buttonLabels:(resources array:#('Cancel' 'Discard Modifications and Exit'))
  2875 	      values:#(abort ignore)
  3193               values:#(abort ignore)
  2876 	      default:#save
  3194               default:#save
  2877 	) == #abort ifTrue:[^ self].
  3195         ) == #abort ifTrue:[^ self].
  2878     ].
  3196     ].
  2879     super closeRequest
  3197     super closeRequest
  2880 
  3198 
  2881     "Modified: / 20.5.1998 / 03:53:47 / cg"
  3199     "Modified: / 20.5.1998 / 03:53:47 / cg"
  2882 !
  3200 !
  2887 
  3205 
  2888     super postOpenWith:aBuilder.
  3206     super postOpenWith:aBuilder.
  2889 
  3207 
  2890     builder namedComponents do:
  3208     builder namedComponents do:
  2891     [:aView|
  3209     [:aView|
  2892 	aView allSubViewsDo:
  3210         aView allSubViewsDo:
  2893 	[:v|
  3211         [:v|
  2894 	    v redraw
  3212             v redraw
  2895 	]
  3213         ]
  2896     ].
  3214     ].
  2897 
  3215 
  2898     autoUpdateBlock := [self checkIfFileHasChanged].
  3216     autoUpdateBlock := [self checkIfFileHasChanged].
  2899     Processor addTimedBlock:autoUpdateBlock afterSeconds:5.
  3217     Processor addTimedBlock:autoUpdateBlock afterSeconds:5.
  2900     self updateInfoLabel.
  3218     self updateInfoLabel.
  2901 
  3219 
  2902     self filterField entryCompletionBlock:
  3220     self filterField entryCompletionBlock:
  2903     (filterCompletionBlock := [:value|
  3221     (filterCompletionBlock := [:value|
  2904 	|filter filters i changesCopy|
  3222         |filter filters i changesCopy|
  2905 	self unselectChange.
  3223         self unselectChange.
  2906 	filter := self filterField contents.
  3224         filter := self filterField contents.
  2907 	(filters := filter asArrayOfSubstrings) size > 0 ifTrue:
  3225         (filters := filter asArrayOfSubstrings) size > 0 ifTrue:[
  2908 	[
  3226             changesCopy := changes copy.
  2909 	    i := 0.
  3227             i := 0.
  2910 	    changesCopy := changes copy.
  3228             filters do:[:filter|
  2911 	    filters do:
  3229                 i := i + 1.
  2912 	    [:filter|
  3230                 changesCopy contents:
  2913 		i := i + 1.
  3231                     (changesCopy select: [:row|
  2914 		changesCopy contents:
  3232                         filter match: (row string asArrayOfSubstrings at: i ifAbsent: [''''])])
  2915 		    (changesCopy select: [:row|
  3233             ].
  2916 			filter match: (row string asArrayOfSubstrings at: i ifAbsent: [''''])])
  3234             self listOfChanges contents: changesCopy
  2917 	    ].
  3235         ] ifFalse:[
  2918 	    self listOfChanges contents: changesCopy
  3236             self listOfChanges contents: changes
  2919 	]
  3237         ].
  2920 	ifFalse:
  3238         self autoSelectLast.
  2921 	[
       
  2922 	    self listOfChanges contents: changes
       
  2923 	].
       
  2924 	self autoSelectLast.
       
  2925     ]).
  3239     ]).
  2926 
  3240 
  2927     Object errorSignal handle: [:ex |
  3241     Object errorSignal handle: [:ex |
  2928 	ex parameter signal == HaltSignal ifTrue:[
  3242         ex signal == HaltSignal ifTrue:[
  2929 	    ex reject
  3243             ex reject
  2930 	].
  3244         ].
  2931 	ex parameter signal == MessageTracer breakpointSignal ifTrue:[
  3245         ex signal == MessageTracer breakpointSignal ifTrue:[
  2932 	    ex reject
  3246             ex reject
  2933 	].
  3247         ].
  2934 	self warn:'Error while reading changes file:\\' , ex errorString.
  3248         self warn:'Error while reading changes file:\\' , ex errorString.
  2935     ] do: [
  3249     ] do: [
  2936 	self readChangesFileInBackground:true
  3250         self readChangesFileInBackground:true
  2937     ].
  3251     ].
  2938 
  3252 
  2939     "Modified: / 30.7.1998 / 11:37:51 / cg"
  3253     "Modified: / 30.7.1998 / 11:37:51 / cg"
  2940 !
  3254 !
  2941 
  3255 
  3210     self autoSelectLast
  3524     self autoSelectLast
  3211 
  3525 
  3212 !
  3526 !
  3213 
  3527 
  3214 doFindSnapshot: what
  3528 doFindSnapshot: what
  3215     "finds the last made snapshot and selects it"
  3529     "finds the last made snapshot and selects it. what is one of last, prvious or next"
  3216 
  3530 
  3217     |snapshotNr snapshotFound|
  3531     |snapshotNr snapshotFound|
  3218 
  3532 
  3219     self listOfChanges detect: [:change| change type = 'image'] ifNone: [^self warn: 'No snapshot found!!'].
  3533     (self listOfChanges contains: [:change| change type = 'image']) ifFalse: [
       
  3534         self warn: 'No snapshot found!!'.
       
  3535         ^ false.
       
  3536     ].
  3220 
  3537 
  3221     self withSelectedChangeDo:[:change|
  3538     self withSelectedChangeDo:[:change|
  3222 	snapshotNr := self listOfChanges indexOf: change.
  3539         what = 'last' ifTrue:[            
  3223 	snapshotFound := false.
  3540             snapshotNr := self listOfChanges size+1.
  3224 	[snapshotNr > 0 and: [snapshotFound not]]
  3541         ] ifFalse:[
  3225 	whileTrue:
  3542             snapshotNr := self listOfChanges indexOf: change.
  3226 	[
  3543         ].
  3227 	    what = 'last'
  3544 
  3228 	    ifTrue:
  3545         snapshotFound := false.
  3229 	    [
  3546         [snapshotNr > 0 and: [snapshotFound not]] whileTrue:[
  3230 		snapshotNr := snapshotNr - 1.
  3547             (what = 'last' or:[what = 'previous']) ifTrue:[
  3231 		snapshotNr == 0 ifTrue: [snapshotNr := self listOfChanges size].
  3548                 snapshotNr := snapshotNr - 1.
  3232 	    ]
  3549                 snapshotNr == 0 ifTrue: [snapshotNr := self listOfChanges size].
  3233 	    ifFalse:
  3550             ] ifFalse:[
  3234 	    [
  3551                 snapshotNr := snapshotNr + 1.
  3235 		snapshotNr := snapshotNr + 1.
  3552                 snapshotNr > self listOfChanges size ifTrue: [snapshotNr := 1].
  3236 		snapshotNr > self listOfChanges size ifTrue: [snapshotNr := 1].
  3553             ].
  3237 	    ].
  3554             (self listOfChanges at: snapshotNr ifAbsent: [^self autoSelectChange: (what = 'last' ifTrue: [self listOfChanges last] ifFalse: [self listOfChanges first])]) type = 'image'
  3238 	    (self listOfChanges at: snapshotNr ifAbsent: [^self autoSelectChange: (what = 'last' ifTrue: [self listOfChanges last] ifFalse: [self listOfChanges first])]) type = 'image'
  3555             ifTrue:[
  3239 	    ifTrue:
  3556                 snapshotFound := true.
  3240 	    [
  3557                 self autoSelectChange:(self listOfChanges at: snapshotNr)
  3241 		snapshotFound := true.
  3558             ]
  3242 		self autoSelectChange:(self listOfChanges at: snapshotNr)
  3559         ]
  3243 	    ]
  3560     ].
  3244 	]
  3561 
  3245     ].
  3562     ^ snapshotFound
  3246 
       
  3247     ^snapshotFound
       
  3248 !
  3563 !
  3249 
  3564 
  3250 doLoad
  3565 doLoad
  3251     "opens a dialog for loading changes from a file"
  3566     "opens a dialog for loading changes from a file"
  3252 
  3567 
  3461 
  3776 
  3462     lastPosition := aValue
  3777     lastPosition := aValue
  3463 !
  3778 !
  3464 
  3779 
  3465 listColor
  3780 listColor
  3466 
  3781     ((string size < 3) or:[(string at: 3) ~~ $-]) ifTrue:[
  3467     (string at: 3) ~~ $- ifTrue:
  3782         (self type = 'class') ifTrue: [^Color gray].
  3468     [
  3783         ^ Color white
  3469 	(self type = 'class') ifTrue: [^Color gray].
       
  3470 	^Color white
       
  3471     ].
  3784     ].
  3472 
  3785 
  3473     (string includesMatchString: '---- s') ifTrue: [^Color red].
  3786     (string includesMatchString: '---- s') ifTrue: [^Color red].
  3474     (string includesMatchString: '---- f') ifTrue: [^Color cyan: 100 magenta: 20 yellow: 20].
  3787     (string includesMatchString: '---- f') ifTrue: [^Color cyan: 100 magenta: 20 yellow: 20].
  3475     (string includesMatchString: '---- c') ifTrue: [^Color blue].
  3788     (string includesMatchString: '---- c') ifTrue: [^Color blue].
  3488 !
  3801 !
  3489 
  3802 
  3490 positions
  3803 positions
  3491 
  3804 
  3492     ^position printString, ' - ', lastPosition printString
  3805     ^position printString, ' - ', lastPosition printString
       
  3806 !
       
  3807 
       
  3808 selector
       
  3809     ^ selector
       
  3810 !
       
  3811 
       
  3812 selector:something
       
  3813     selector := something.
  3493 !
  3814 !
  3494 
  3815 
  3495 string
  3816 string
  3496 
  3817 
  3497     ^string
  3818     ^string
  3526 ! !
  3847 ! !
  3527 
  3848 
  3528 !NewChangesBrowser class methodsFor:'documentation'!
  3849 !NewChangesBrowser class methodsFor:'documentation'!
  3529 
  3850 
  3530 version
  3851 version
  3531     ^ '$Header: /cvs/stx/stx/libtool/NewChangesBrowser.st,v 1.29 2005-04-28 17:30:04 cg Exp $'
  3852     ^ '$Header: /cvs/stx/stx/libtool/NewChangesBrowser.st,v 1.30 2008-02-04 12:25:06 cg Exp $'
  3532 ! !
  3853 ! !