--- a/AbstractSettingsApplication.st Fri May 06 06:55:08 2016 +0200
+++ b/AbstractSettingsApplication.st Mon May 09 21:47:57 2016 +0200
@@ -8552,7 +8552,7 @@
BRIDGE::SmalltalkBridge notNil ifTrue:[
BRIDGE::SmalltalkBridge verbose ~= (self smalltalkBridgeVerbose value) ifTrue:[^ true].
- BRIDGE::SmalltalkBridge singletonInstanceOrNil notNil ifTrue:[
+ BRIDGE::SmalltalkBridge defaultInstanceOrNil notNil ifTrue:[
(self smalltalkBridgeEnabled value) ifFalse:[^ true].
] ifFalse:[
(self smalltalkBridgeEnabled value) ifTrue:[^ true].
--- a/ChangesBrowser.st Fri May 06 06:55:08 2016 +0200
+++ b/ChangesBrowser.st Mon May 09 21:47:57 2016 +0200
@@ -23,7 +23,7 @@
showingDiffs diffViewBox autoloadAsRequired
classesNotToBeAutoloaded encodingIfKnown
ignorePublicPrivateCategories changeListSelectionHolder
- defaultApplicationForVAGEClasses'
+ defaultApplicationForVAGEClasses infoHolder'
classVariableNames:'CompressSnapshotInfo NoColoring ShowWarningDialogs
DefaultAutoCompare DefaultShowingDiffs LastEnforcedNameSpace
KeepEnforcedNameSpace'
@@ -211,34 +211,29 @@
(
(MenuItem
label: 'File'
- translateLabel: true
submenu:
(Menu
(
(MenuItem
label: 'Compress'
itemValue: doCompress
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
enabled: hasSingleSelection
label: 'Compress for Class'
itemValue: doCompressClass
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
enabled: hasSingleSelection
label: 'Compress for Class && Selector'
itemValue: doCompressSelector
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
label: 'Compare and Compress'
itemValue: doCompareAndCompress
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
@@ -249,14 +244,12 @@
enabled: hasSingleSelection
label: 'Fileout && Delete all Changes for Class'
itemValue: doFileoutAndDeleteClassAll
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
enabled: hasSelection
label: 'CheckIn && Delete all Changes for Class'
itemValue: doCheckinAndDeleteClassAll
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
@@ -267,25 +260,21 @@
enabled: hasSelection
label: 'Save In...'
itemValue: doSave
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Save to End In...'
itemValue: doSaveRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Save for Class to End In...'
itemValue: doSaveClassRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Save all for Class In...'
itemValue: doSaveClassAll
- translateLabel: true
)
(MenuItem
label: '-'
@@ -293,13 +282,11 @@
(MenuItem
label: 'Writeback ClassFile'
itemValue: doWriteBack
- translateLabel: true
isVisible: editingClassSource
)
(MenuItem
label: 'Writeback ChangeFile'
itemValue: doWriteBack
- translateLabel: true
isVisible: notEditingClassSource
)
(MenuItem
@@ -308,7 +295,6 @@
(MenuItem
label: 'Update'
itemValue: doUpdate
- translateLabel: true
)
(MenuItem
label: '-'
@@ -316,7 +302,6 @@
(MenuItem
label: 'Exit'
itemValue: menuExit
- translateLabel: true
)
)
nil
@@ -325,7 +310,6 @@
)
(MenuItem
label: 'CHANGE'
- translateLabel: true
submenu:
(Menu
(
@@ -333,43 +317,36 @@
enabled: hasSelection
label: 'Apply'
itemValue: doApply
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply to End'
itemValue: doApplyRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply from Begin'
itemValue: doApplyFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply for Class to End'
itemValue: doApplyClassRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply for Class from Begin'
itemValue: doApplyClassFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasNoSelection
label: 'Apply All'
itemValue: doApplyAll
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Apply to Conflict or End'
itemValue: doApplyToConflictOrEnd
- translateLabel: true
)
(MenuItem
label: '-'
@@ -378,64 +355,54 @@
enabled: hasSelection
label: 'Delete'
itemValue: doDelete
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete to End'
itemValue: doDeleteRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete from Begin'
itemValue: doDeleteFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete for Class to End'
itemValue: doDeleteClassRest
- translateLabel: true
)
(MenuItem
enabled: hasSingleSelection
label: 'Delete for Class from Begin'
itemValue: doDeleteClassFromBeginning
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Class'
itemValue: doDeleteClassAll
- translateLabel: true
isVisible: hasNoMultiSelection
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Class && its Private Classes'
itemValue: doDeleteClassAndPrivateClassesAll
- translateLabel: true
isVisible: hasNoMultiSelection
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Namespace'
itemValue: doDeleteAllForNamespace
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Classes'
itemValue: doDeleteClassAll
- translateLabel: true
isVisible: hasMultiSelection
)
(MenuItem
enabled: hasSelection
label: 'Delete all for Classes && their Private Classes'
itemValue: doDeleteClassAndPrivateClassesAll
- translateLabel: true
isVisible: hasMultiSelection
)
(MenuItem
@@ -443,16 +410,26 @@
)
(MenuItem
enabled: hasSelection
+ label: 'Delete older Versions of Selected Method'
+ itemValue: doDeleteClassSelectorOlder
+ isVisible: hasNoMultiSelectionHolder
+ )
+ (MenuItem
+ enabled: hasSelection
+ label: 'Delete older Versions of all Selected Methods'
+ itemValue: doDeleteClassSelectorOlder
+ isVisible: hasMultiSelectionHolder
+ )
+ (MenuItem
+ enabled: hasSelection
label: 'Delete all Versions of Selected Method'
itemValue: doDeleteClassSelectorAll
- translateLabel: true
isVisible: hasNoMultiSelectionHolder
)
(MenuItem
enabled: hasSelection
label: 'Delete all Versions of all Selected Methods'
itemValue: doDeleteClassSelectorAll
- translateLabel: true
isVisible: hasMultiSelectionHolder
)
(MenuItem
@@ -462,7 +439,6 @@
enabled: hasSingleSelection
label: 'Compare with Current'
itemValue: doCompare
- translateLabel: true
)
(MenuItem
label: '-'
@@ -471,7 +447,6 @@
enabled: hasSelection
label: 'Make Change a Patch'
itemValue: doMakePatch
- translateLabel: true
)
)
nil
@@ -480,38 +455,32 @@
)
(MenuItem
label: 'Search'
- translateLabel: true
submenu:
(Menu
(
(MenuItem
label: 'Class...'
itemValue: findClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'First for Class'
itemValue: findFirstForClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Previous for Class'
itemValue: findPreviousForClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next for Class'
itemValue: findNextForClass
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Last for Class'
itemValue: findLastForClass
- translateLabel: true
)
(MenuItem
label: '-'
@@ -519,19 +488,16 @@
(MenuItem
label: 'Selector...'
itemValue: findSelector
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Previous for Selector'
itemValue: findPreviousForSelector
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next for Selector'
itemValue: findNextForSelector
- translateLabel: true
)
(MenuItem
label: '-'
@@ -539,19 +505,16 @@
(MenuItem
label: 'String...'
itemValue: findString
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Previous with String'
itemValue: findPreviousForString
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next with String'
itemValue: findNextForString
- translateLabel: true
)
(MenuItem
label: '-'
@@ -560,13 +523,11 @@
enabled: hasSelection
label: 'Previous Difference'
itemValue: findPreviousDifference
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next Difference'
itemValue: findNextDifference
- translateLabel: true
)
(MenuItem
label: '-'
@@ -575,18 +536,15 @@
enabled: hasSelection
label: 'Previous Snapshot'
itemValue: findPreviousSnapshot
- translateLabel: true
)
(MenuItem
enabled: hasSelection
label: 'Next Snapshot'
itemValue: findNextSnapshot
- translateLabel: true
)
(MenuItem
label: 'Last Snapshot'
itemValue: findLastSnapshot
- translateLabel: true
)
)
nil
@@ -595,7 +553,6 @@
)
(MenuItem
label: 'Browse'
- translateLabel: true
submenu:
(Menu
(
@@ -603,7 +560,6 @@
enabled: hasSingleSelection
label: 'Class'
itemValue: doBrowse
- translateLabel: true
)
(MenuItem
label: '-'
@@ -611,12 +567,10 @@
(MenuItem
label: 'Senders...'
itemValue: doBrowseSenders
- translateLabel: true
)
(MenuItem
label: 'Implementors...'
itemValue: doBrowseImplementors
- translateLabel: true
)
)
nil
@@ -625,28 +579,23 @@
)
(MenuItem
label: 'Settings'
- translateLabel: true
submenu:
(Menu
(
(MenuItem
label: 'Auto Compare'
- translateLabel: true
indication: autoCompare
)
(MenuItem
label: 'Autoload As Required'
- translateLabel: true
indication: autoloadAsRequired
)
(MenuItem
label: 'Show Diffs'
- translateLabel: true
indication: showingDiffs
)
(MenuItem
label: 'Auto Update'
- translateLabel: true
indication: autoUpdate
)
(MenuItem
@@ -654,14 +603,13 @@
)
(MenuItem
label: 'Add to ChangeSet when Applying'
- translateLabel: true
indication: updateChangeSet
)
(MenuItem
- label: 'Ignore public/private categories (Dolphin code)'
+ label: 'Ignore Public/Private in Categories (Dolphin code)'
itemValue: ignorePublicPrivateCategories:
- translateLabel: true
indication: ignorePublicPrivateCategories
+ isVisible: false
)
(MenuItem
label: '-'
@@ -669,12 +617,10 @@
(MenuItem
label: 'Apply into Package...'
itemValue: setEnforcedPackage
- translateLabel: true
)
(MenuItem
label: 'Apply into NameSpace...'
itemValue: setEnforcedNameSpace
- translateLabel: true
)
(MenuItem
label: '-'
@@ -682,7 +628,6 @@
(MenuItem
label: 'Settings...'
itemValue: openSettingsDialog
- translateLabel: true
)
)
nil
@@ -691,7 +636,6 @@
)
(MenuItem
label: 'MENU_Help'
- translateLabel: true
startGroup: conditionalRight
submenu:
(Menu
@@ -699,7 +643,6 @@
(MenuItem
label: 'ChangesBrowser Documentation'
itemValue: openHTMLDocument:
- translateLabel: true
argument: 'tools/cbrowser/TOP.html'
)
(MenuItem
@@ -708,7 +651,6 @@
(MenuItem
label: 'About ChangesBrowser...'
itemValue: openAboutThisApplication
- translateLabel: true
)
)
nil
@@ -719,8 +661,6 @@
nil
nil
)
-
- "Modified: / 25-12-2011 / 11:21:56 / cg"
!
toolbarMenuSpec
@@ -1415,7 +1355,7 @@
!
initialize
- |panel v upperFrame buttonPanel menuPanel mH toolbarMenu tmH
+ |panel infoLabel v upperFrame buttonPanel menuPanel mH toolbarMenu tmH
checkBox oldStyle codeViewBox lbl applyInOriginal|
"/ oldStyle := true.
@@ -1479,11 +1419,27 @@
mH := 0.0
].
- panel := VariableVerticalPanel origin:(0.0 @ mH)
- corner:(1.0 @ 1.0)
- borderWidth:0
- in:self.
-
+ panel := VariableVerticalPanel in:self.
+ "/ panel origin:(0.0 @ mH) corner:(1.0 @ 1.0)
+ panel layout:(LayoutFrame
+ leftFraction:0.0 offset:0
+ rightFraction:1.0 offset:0
+ topFraction:0.0 offset:mH
+ bottomFraction:1.0 offset:-30).
+ panel borderWidth:0.
+
+ infoLabel := Label in:self.
+ infoLabel layout:(LayoutFrame
+ leftFraction:0.0 offset:0
+ rightFraction:1.0 offset:0
+ topFraction:1.0 offset:-28
+ bottomFraction:1.0 offset:-2).
+ infoLabel borderWidth:0.
+ infoLabel sizeFixed:true.
+ infoLabel level:-1.
+ infoLabel adjust:#left.
+ infoLabel labelChannel:(infoHolder := '' asValue).
+
upperFrame := panel.
oldStyle ifTrue:[
upperFrame := VariableHorizontalPanel origin:(0.0 @ 0.0) corner:(1.0 @ 0.3) in:panel.
@@ -1590,7 +1546,7 @@
self setupTabSpec.
self readChangesFileInBackground:true.
self setChangeList.
- changeListView action:[:lineNr | self changeSelection:lineNr].
+ changeListView action:[:lineNrOrCollection | self changeSelection:lineNrOrCollection].
Processor addTimedBlock:checkBlock afterSeconds:5.
"Created: 24.7.1997 / 18:06:12 / cg"
@@ -2064,35 +2020,37 @@
|rangeEnd rangeStart firstDeleted|
changeListView selection size <= 5 ifTrue:[
- self withSelectedChangesReverseDo:[:changeNr |
- self deleteChange:changeNr.
- self autoSelectOrEnd:changeNr
- ].
- ^ self
+ self withSelectedChangesReverseDo:[:changeNr |
+ self deleteChange:changeNr.
+ self autoSelectOrEnd:changeNr
+ ].
+ self showNumberOfChanges.
+ ^ self
].
self withSelectedChangesReverseDo:[:changeNr |
- rangeEnd isNil ifTrue:[
- rangeEnd := rangeStart := changeNr
- ] ifFalse:[
- (changeNr = (rangeEnd + 1)) ifTrue:[
- rangeEnd := changeNr
- ] ifFalse:[
- (changeNr = (rangeStart - 1)) ifTrue:[
- rangeStart := changeNr
- ] ifFalse:[
- self deleteChangesFrom:rangeStart to:rangeEnd.
- firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
- rangeStart := rangeEnd := nil.
- ].
- ].
- ].
+ rangeEnd isNil ifTrue:[
+ rangeEnd := rangeStart := changeNr
+ ] ifFalse:[
+ (changeNr = (rangeEnd + 1)) ifTrue:[
+ rangeEnd := changeNr
+ ] ifFalse:[
+ (changeNr = (rangeStart - 1)) ifTrue:[
+ rangeStart := changeNr
+ ] ifFalse:[
+ self deleteChangesFrom:rangeStart to:rangeEnd.
+ firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+ rangeStart := rangeEnd := nil.
+ ].
+ ].
+ ].
].
rangeStart notNil ifTrue:[
- self deleteChangesFrom:rangeStart to:rangeEnd.
- firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
- ].
- self autoSelectOrEnd:firstDeleted
+ self deleteChangesFrom:rangeStart to:rangeEnd.
+ firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+ ].
+ self autoSelectOrEnd:firstDeleted.
+ self showNumberOfChanges
!
doDeleteAllForNamespace
@@ -2134,16 +2092,21 @@
].
self setChangeList.
- self autoSelectOrEnd:lastChangeNr
+ self autoSelectOrEnd:lastChangeNr.
!
doDeleteAndSelectPrevious
"delete currently selected change(s)"
self withSelectedChangesReverseDo:[:changeNr |
- self deleteChange:changeNr.
- self autoSelectOrEnd:changeNr-1
- ]
+ self deleteChange:changeNr.
+ self autoSelectOrEnd:changeNr-1
+ ].
+
+ "/mh - don't we need a
+ "/ self setChangeList
+ "/ here?
+ self showNumberOfChanges
!
doDeleteClassAll
@@ -2154,36 +2117,36 @@
lastChangeNr := -1.
classNamesToDelete := Set new.
self withSelectedChangesDo:[:changeNr |
- |classNameToDelete|
-
- classNameToDelete := self classNameOfChange:changeNr.
- classNameToDelete notNil ifTrue:[
- classNamesToDelete add:classNameToDelete.
- ].
- lastChangeNr := lastChangeNr max:changeNr.
+ |classNameToDelete|
+
+ classNameToDelete := self classNameOfChange:changeNr.
+ classNameToDelete notNil ifTrue:[
+ classNamesToDelete add:classNameToDelete.
+ ].
+ lastChangeNr := lastChangeNr max:changeNr.
].
overAllNumDeletedBefore := 0.
changeListView setSelection:nil.
self withExecuteCursorDo:[
- classNamesToDelete do:[:classNameToDelete |
- |numDeletedBefore|
-
- self silentDeleteChangesFor:classNameToDelete
- from:lastChangeNr
- to:(self numberOfChanges).
- numDeletedBefore := self
- silentDeleteChangesFor:classNameToDelete
- from:1
- to:(lastChangeNr-1).
- lastChangeNr := lastChangeNr - numDeletedBefore.
- overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
- ].
+ classNamesToDelete do:[:classNameToDelete |
+ |numDeletedBefore|
+
+ self silentDeleteChangesFor:classNameToDelete
+ from:lastChangeNr
+ to:(self numberOfChanges).
+ numDeletedBefore := self
+ silentDeleteChangesFor:classNameToDelete
+ from:1
+ to:(lastChangeNr-1).
+ lastChangeNr := lastChangeNr - numDeletedBefore.
+ overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+ ].
].
self setChangeList.
- self autoSelectOrEnd:lastChangeNr
+ self autoSelectOrEnd:lastChangeNr.
"Created: / 13.12.1995 / 16:07:14 / cg"
"Modified: / 28.1.1998 / 20:42:14 / cg"
@@ -2198,38 +2161,38 @@
lastChangeNr := -1.
classNamesToDelete := Set new.
self withSelectedChangesDo:[:changeNr |
- |classNameToDelete|
-
- classNameToDelete := self ownerClassNameOfChange:changeNr.
- classNameToDelete notNil ifTrue:[
- classNamesToDelete add:classNameToDelete.
- ].
- lastChangeNr := lastChangeNr max:changeNr.
+ |classNameToDelete|
+
+ classNameToDelete := self ownerClassNameOfChange:changeNr.
+ classNameToDelete notNil ifTrue:[
+ classNamesToDelete add:classNameToDelete.
+ ].
+ lastChangeNr := lastChangeNr max:changeNr.
].
overAllNumDeletedBefore := 0.
changeListView setSelection:nil.
self withExecuteCursorDo:[
- classNamesToDelete do:[:classNameToDelete |
- | changeNr numDeletedBefore|
-
- classNameToDelete notNil ifTrue:[
- changeListView setSelection:nil.
- self silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
- from:lastChangeNr
- to:(self numberOfChanges).
- numDeletedBefore := self
- silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
- from:1
- to:(lastChangeNr-1).
- lastChangeNr := lastChangeNr - numDeletedBefore.
- overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
- ]
- ]
+ classNamesToDelete do:[:classNameToDelete |
+ | changeNr numDeletedBefore|
+
+ classNameToDelete notNil ifTrue:[
+ changeListView setSelection:nil.
+ self silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
+ from:lastChangeNr
+ to:(self numberOfChanges).
+ numDeletedBefore := self
+ silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
+ from:1
+ to:(lastChangeNr-1).
+ lastChangeNr := lastChangeNr - numDeletedBefore.
+ overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+ ]
+ ]
].
self setChangeList.
- self autoSelectOrEnd:lastChangeNr
+ self autoSelectOrEnd:lastChangeNr.
"Created: / 13.12.1995 / 16:07:14 / cg"
"Modified: / 28.1.1998 / 20:42:14 / cg"
@@ -2328,6 +2291,54 @@
"Modified: / 28.1.1998 / 20:42:14 / cg"
!
+doDeleteClassSelectorOlder
+ "delete older changes with same class and selector as currently selected change(s)"
+
+ |classNameSelectorPairsToDelete upToPerClassAndSelector lastChangeNr overAllNumDeletedBefore|
+
+ lastChangeNr := -1.
+ classNameSelectorPairsToDelete := Set new.
+ upToPerClassAndSelector := Dictionary new.
+
+ "/ collect what is to be deleted
+ self withSelectedChangesDo:[:changeNr |
+ |className selector|
+
+ className := self classNameOfChange:changeNr.
+ selector := self selectorOfMethodChange:changeNr.
+ selector notNil ifTrue:[
+ (className notNil and:[selector notNil]) ifTrue:[
+ classNameSelectorPairsToDelete add:(className -> selector).
+ upToPerClassAndSelector at:(className -> selector) put:changeNr.
+ ]
+ ].
+ lastChangeNr := lastChangeNr max:changeNr.
+ ].
+
+ overAllNumDeletedBefore := 0.
+ changeListView setSelection:nil.
+
+ self withExecuteCursorDo:[
+ classNameSelectorPairsToDelete do:[:pair |
+ |numDeletedBefore className selector lastToDelete|
+
+ className := pair key.
+ selector := pair value.
+ lastToDelete := (upToPerClassAndSelector at:pair) - 1.
+
+ numDeletedBefore := self
+ silentDeleteChangesFor:className selector:selector
+ from:1
+ to:lastToDelete.
+ lastChangeNr := lastChangeNr - numDeletedBefore.
+ overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+ ].
+ ].
+
+ self setChangeList.
+ self autoSelectOrEnd:lastChangeNr
+!
+
doDeleteFromBeginning
"delete all changes from 1 to the current"
@@ -3503,15 +3514,16 @@
!
setChangeList
- "extract type-information from changes and stuff into top selection
- view"
+ "update the selection-list;
+ called after the changeList has been modified"
|headerList|
headerList := changeInfoList collect:[:info | info headerLine].
changeListView setList:headerList expandTabs:false redraw:false.
changeListView invalidate.
-
+ self showNumberOfChanges.
+
"/ changeListView deselect.
"Modified: / 01-05-2016 / 19:27:35 / cg"
@@ -3534,6 +3546,10 @@
"Modified: / 29.4.1999 / 22:36:54 / cg"
!
+showNumberOfChanges
+ infoHolder value:(resources string:'%1 changes.' with:changeInfoList size).
+!
+
sourceOfChange:changeNr
|aStream sawExcla chunk|
@@ -4100,7 +4116,8 @@
!
selectorOfMethodChange:changeNr
- "return a method-changes selector, or nil if it's not a methodChange"
+ "return a method-changes selector,
+ or nil if it's not a methodChange"
|sel |
@@ -4298,17 +4315,13 @@
reader tabSpec:tabSpec.
reader inStream:inStream.
reader noColoring:(NoColoring == true).
+
reader readChangesFile.
editingClassSource := reader thisIsAClassSource.
changeInfoList := reader changeInfo.
-"/ changeChunks := reader changeChunks.
-"/ changeClassNames := reader changeClassNames.
-"/ changeHeaderLines := reader changeHeaderLines.
-"/ changePositions := reader changePositions.
-"/ changeTimeStamps := reader changeTimeStamps.
-"/ changeIsFollowupMethodChange := reader changeIsFollowupMethodChange.
-
+
+ self showNumberOfChanges.
anyChanges := false.
] ensure:[
inStream close.
@@ -5826,14 +5839,21 @@
].
self changeListSelectionHolder value:lineNumbers.
-
+
lineNr isNil ifTrue:[
codeView contents:nil.
codeView initializeDoITAction.
changeNrShown := nil.
+ infoHolder value:nil.
^ self
].
+ changeNrShown := lineNr.
+ self sensor
+ enqueueMessage:#updateSourceCodeAfterChangedSelection for:self arguments:nil;
+ enqueueMessage:#updateInfoAfterChangedSelection for:self arguments:nil.
+^ self.
+
"/ display the changes code
chunk := self sourceOfChange:lineNr.
chunk isNil ifTrue:[
@@ -6000,6 +6020,151 @@
self halt:'should not be here'
"Created: / 03-01-2012 / 15:26:36 / cg"
+!
+
+updateInfoAfterChangedSelection
+ "update the info label"
+
+ |selection lineNr className nonMetaClassName metaClassName
+ nClassChanges nMethodChanges uniqueSelectors
+ lastLineNr firstLineNr countBeforeCurrent countAfterLast moreInfo|
+
+ selection := lineNr := changeListView selection.
+ selection isNumber ifFalse:[
+ lineNr := nil.
+ selection notEmptyOrNil ifTrue:[
+ lineNr := selection first
+ ].
+ ].
+
+ lineNr isNil ifTrue:[
+ infoHolder value:nil.
+ ^ self
+ ].
+
+ "/
+ "/ now, this info is computed so fast,
+ "/ we can do it each time the selection changes
+ "/ (can we?)
+ className := self realClassNameOfChange:lineNr.
+ className isNil ifTrue:[
+ infoHolder value:nil.
+ ^ self
+ ].
+
+ nonMetaClassName := (className endsWith:' class')
+ ifTrue:[ className copyButLast:' class' size ]
+ ifFalse:[ className ].
+ metaClassName := nonMetaClassName,' class'.
+
+ nClassChanges := nMethodChanges := 0.
+ uniqueSelectors := Set new.
+ lastLineNr := firstLineNr := nil.
+ countAfterLast := 0.
+ countBeforeCurrent := 0.
+
+ "/ count them all
+ 1 to:changeInfoList size do:[:i |
+ |sel nameOfChange|
+
+ nameOfChange := self realClassNameOfChange:i.
+ ((nameOfChange = nonMetaClassName) or:[nameOfChange = metaClassName]) ifTrue:[
+ lastLineNr := i.
+ firstLineNr := firstLineNr ? i.
+ i > lineNr
+ ifTrue:[ countAfterLast := countAfterLast + 1 ]
+ ifFalse:[
+ i < lineNr ifTrue:[
+ countBeforeCurrent := countBeforeCurrent + 1
+ ]
+ ].
+ nClassChanges := nClassChanges + 1.
+ (sel := self selectorOfMethodChange:i) notNil ifTrue:[
+ uniqueSelectors add:sel.
+ nMethodChanges := nMethodChanges + 1.
+ ].
+ ].
+ ].
+ lastLineNr == lineNr ifTrue:[
+ firstLineNr == lineNr ifTrue:[
+ moreInfo := resources string:'. This is the only one for this class '.
+ ] ifFalse:[
+ moreInfo := resources string:'. This is the last for this class '.
+ ]
+ ] ifFalse:[
+ firstLineNr == lineNr ifTrue:[
+ moreInfo := resources string:'. This is the first for this class'.
+ ].
+ countAfterLast > 0 ifTrue:[
+ moreInfo := (moreInfo ? ''),(resources string:'. %1 more for this class ' with:countAfterLast).
+ ].
+ ].
+
+ infoHolder value:(resources
+ string:'%1 changes. %2 for %3 (%4 methods / %5 selectors)%6'
+ with:(changeInfoList size)
+ with:nClassChanges
+ with:className
+ with:nMethodChanges
+ with:uniqueSelectors size
+ with:moreInfo).
+!
+
+updateSourceCodeAfterChangedSelection
+ "show a change in the codeView"
+
+ |selection lineNr chunk|
+
+ selection := lineNr := changeListView selection.
+ selection isNumber ifFalse:[
+ lineNr := nil.
+ selection notEmptyOrNil ifTrue:[
+ lineNr := selection first
+ ].
+ ].
+
+ lineNr isNil ifTrue:[
+ ^ self
+ ].
+
+ "/ display the changes code
+ chunk := self sourceOfChange:lineNr.
+ chunk isNil ifTrue:[
+ codeView initializeDoITAction.
+ ^ self
+ ].
+
+ codeView contents:chunk.
+ codeView acceptAction:[:theCode | self doApply "noChangesAllowed"].
+ codeView doItAction:[:theCode |
+ |clsName cls|
+
+ clsName := self classNameOfChange:lineNr.
+ clsName notNil ifTrue:[
+ clsName := clsName asSymbolIfInterned.
+ clsName notNil ifTrue:[
+ cls := Smalltalk at:clsName ifAbsent:nil.
+ ]
+ ].
+ Compiler
+ evaluate:theCode
+ in:nil
+ receiver:cls
+ notifying:self
+ logged:true
+ ifFail:nil
+ ].
+
+
+ changeNrShown := lineNr.
+
+ self showingDiffs value ifTrue:[
+ self withWaitCursorDo:[
+ AbortOperationRequest catch:[
+ self updateDiffViewFor:changeNrShown.
+ ]
+ ]
+ ].
! !
!ChangesBrowser::ChangeFileReader methodsFor:'accessing'!
--- a/ContextInspectorView.st Fri May 06 06:55:08 2016 +0200
+++ b/ContextInspectorView.st Mon May 09 21:47:57 2016 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1993 by Claus Gittinger
All Rights Reserved
@@ -641,12 +639,15 @@
]
].
+
varIdx > values size ifTrue:[
|wsIndex|
- wsIndex := varIdx - values size - 1.
- wsIndex <= workspaceVariableNamesInDoIts size ifTrue:[
- ^ Workspace workspaceVariableAt:(workspaceVariableNamesInDoIts at:wsIndex).
+ workspaceVariableNamesInDoIts notNil ifTrue:[
+ wsIndex := varIdx - values size - 1.
+ wsIndex <= workspaceVariableNamesInDoIts size ifTrue:[
+ ^ Workspace workspaceVariableAt:(workspaceVariableNamesInDoIts at:wsIndex).
+ ].
].
^ '** oops - could not find value **'
].
@@ -749,10 +750,10 @@
!ContextInspectorView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.98 2015-04-22 17:50:00 stefan Exp $'
+ ^ '$Header$'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.98 2015-04-22 17:50:00 stefan Exp $'
+ ^ '$Header$'
! !
--- a/FileDialog.st Fri May 06 06:55:08 2016 +0200
+++ b/FileDialog.st Mon May 09 21:47:57 2016 +0200
@@ -1767,7 +1767,12 @@
self warn:'Cannot open drive %1' with:newFile asFilename volume.
].
- newDrive := curSel notEmpty ifTrue:[ curSel first volume ] ifFalse:[ 'C:' ].
+ newDrive := curSel notEmpty
+ ifTrue:[ curSel first volume ]
+ ifFalse:[
+ OperatingSystem isMSWINDOWSlike ifTrue:['C:'] ifFalse:['/']
+ "/ Filename defaultVolumeName.
+ ].
self selectedDeviceDrive value:newDrive.
!
--- a/FindFileApplication.st Fri May 06 06:55:08 2016 +0200
+++ b/FindFileApplication.st Mon May 09 21:47:57 2016 +0200
@@ -1538,7 +1538,7 @@
realFile := f linkInfo linkTargetPath asFilename.
(realFile exists and:[realFile isReadable]) ifFalse:[
showUnreadableFilesAndDirectoriesHolder value ifTrue:[
- resultList add: (('*** "',f pathName,'"->"',realFile PathName,'" skipped - unreadable or bad symbolic link destination ***') colorizeAllWith:(Color red darkened)).
+ resultList add: (('*** "',f pathName,'"->"',realFile pathName,'" skipped - unreadable or bad symbolic link destination ***') colorizeAllWith:(Color red darkened)).
].
contentsMatches := false.
isBadFile := true.
--- a/SettingsDialog.st Fri May 06 06:55:08 2016 +0200
+++ b/SettingsDialog.st Mon May 09 21:47:57 2016 +0200
@@ -374,7 +374,7 @@
label: 'Settings Dialog'
name: 'Settings Dialog'
min: (Point 10 10)
- bounds: (Rectangle 0 0 789 642)
+ bounds: (Rectangle 0 0 850 656)
menu: mainMenu
icon: defaultIcon
)
@@ -543,6 +543,15 @@
extent: (Point 161 22)
)
(ActionButtonSpec
+ label: 'Close'
+ name: 'Button4'
+ translateLabel: true
+ model: closeRequest
+ extent: (Point 145 22)
+ isVisible: closeButtonVisible
+ activeHelpKey: closeRequest
+ )
+ (ActionButtonSpec
label: 'Discard'
name: 'Reload'
activeHelpKey: discardChangedSettings
@@ -1468,6 +1477,10 @@
^ applicationList.
!
+closeButtonVisibleHolder
+ ^ builder valueAspectFor:#'closeButtonVisibleHolder' initialValue:false
+!
+
enableHelp
enableHelp isNil ifTrue:[
enableHelp := true asValue.
@@ -1722,6 +1735,13 @@
aWidget keepClientView:true.
!
+postBuildWith:aBuilder
+ super postBuildWith:aBuilder.
+"/ self window isModal ifFalse:[
+"/ self closeButtonVisibleHolder value:true
+"/ ].
+!
+
postOpenWith:aBuilder
|items|
--- a/SystemBrowser.st Fri May 06 06:55:08 2016 +0200
+++ b/SystemBrowser.st Mon May 09 21:47:57 2016 +0200
@@ -2896,7 +2896,7 @@
"/ s := s copyTo:(s indexOf:$:)
"/ ].
"/ browser autoSearch:s
- browser autoSearchSelector:aSelectorString ignoreCase:ignoreCase doMatch:true.
+ browser setSearchSelector:aSelectorString ignoreCase:ignoreCase doMatch:true.
].
^ browser
@@ -3127,6 +3127,7 @@
!
browseForString:aString
+ <resource: #obsolete>
"launch a browser for all methods containing a string in their source.
This may be slow, since source-code has to be scanned."
@@ -3136,6 +3137,7 @@
!
browseForString:aString in:aCollectionOfClasses
+ <resource: #obsolete>
"launch a browser for all methods in aCollectionOfClasses
containing a string in their source.
This may be slow, since source-code has to be scanned."
@@ -3156,6 +3158,7 @@
!
browseForString:aString in:aCollectionOfClasses ignoreCase:ignoreCase
+ <resource: #obsolete>
"launch a browser for all methods in aCollectionOfClasses
containing a string in their source.
This may be slow, since source-code has to be scanned."
@@ -5169,7 +5172,7 @@
(these operations are executed a zillion times in an inner loop,
therefore, the speedup is noticable)"
- |doMatch sel lcString quickSearch idx|
+ |doMatch sel quickSearch idx|
doMatch := doMatchArg.
(doMatch and:[aSelectorString = '*']) ifTrue:[
@@ -5184,12 +5187,6 @@
(doMatch or:[ignoreCase]) ifTrue:[
"/ a matchString or ignoreCase - need string matching procedure
- ignoreCase ifTrue:[
- lcString := aSelectorString asLowercase.
- ] ifFalse:[
- lcString := aSelectorString.
- ].
-
quickSearch := aSelectorString.
(quickSearch startsWith:'*') ifTrue:[
quickSearch := quickSearch copyButFirst
@@ -5207,7 +5204,7 @@
(ignoreCase and:[quickSearch includesMatchCharacters not]) ifTrue:[
doMatch ifFalse:[
^ [:class :methodArg :s |
- |method src inLiterals lcQuickSearch skip|
+ |method src inLiterals skip|
inLiterals := skip := false.
method := methodArg originalMethodIfWrapped.
@@ -5220,11 +5217,12 @@
].
].
skip ifFalse:[
- inLiterals := (method
- literalsDetect:[:aLiteral|
- (aLiteral isMemberOf:Symbol)
- and:[(aLiteral sameAs:aSelectorString)]]
- ifNone:nil) notNil
+ inLiterals :=
+ (method
+ literalsDetect:[:aLiteral|
+ (aLiteral isMemberOf:Symbol)
+ and:[(aLiteral sameAs:aSelectorString)]]
+ ifNone:nil) notNil
].
inLiterals
@@ -5235,7 +5233,7 @@
].
^ [:class :methodArg :s |
- |method src inLiterals lcQuickSearch skip|
+ |method src inLiterals skip|
inLiterals := skip := false.
method := methodArg originalMethodIfWrapped.
@@ -5248,17 +5246,19 @@
].
].
skip ifFalse:[
- inLiterals := (method
- literalsDetect:[:aLiteral|
- (aLiteral isMemberOf:Symbol)
- and:[(aLiteral includesString:quickSearch caseSensitive:false)
- and:[(lcString match:aLiteral caseSensitive:false)]]]
- ifNone:nil) notNil
+ inLiterals :=
+ (method
+ literalsDetect:[:aLiteral|
+ (aLiteral isMemberOf:Symbol)
+ and:[(aLiteral includesString:quickSearch caseSensitive:false)
+ and:[(aSelectorString match:aLiteral caseSensitive:false)]]]
+ ifNone:nil) notNil
].
inLiterals
and:[
- method messagesSent contains:[:sel | aSelectorString match:aSelectorString caseSensitive:false]
+ method messagesSent
+ contains:[:sel | aSelectorString match:aSelectorString caseSensitive:false]
]
].
].
@@ -5278,12 +5278,13 @@
].
].
skip ifFalse:[
- inLiterals := (method
- literalsDetect:[:aLiteral|
- (aLiteral isMemberOf:Symbol)
- and:[(lcString includesString:quickSearch)
- and:[(lcString match:aLiteral)]]]
- ifNone:nil) notNil
+ inLiterals :=
+ (method
+ literalsDetect:[:aLiteral|
+ (aLiteral isMemberOf:Symbol)
+ and:[(aLiteral includesString:quickSearch)
+ and:[(aSelectorString match:aLiteral)]]]
+ ifNone:nil) notNil
].
inLiterals and:[ method messagesSent includes:aSelectorString]
].
@@ -5303,11 +5304,11 @@
].
].
skip ifFalse:[
- inLiterals := (method literalsDetect:[:aLiteral|
- (aLiteral isMemberOf:Symbol)
- and:[(ignoreCase and:[lcString match:aLiteral asLowercase])
- or:[ignoreCase not and:[lcString match:aLiteral]]]]
- ifNone:nil) notNil
+ inLiterals :=
+ (method literalsDetect:[:aLiteral|
+ (aLiteral isMemberOf:Symbol)
+ and:[ aSelectorString match:aLiteral asLowercase caseSensitive:ignoreCase not]
+ ] ifNone:nil) notNil
].
inLiterals
and:[
@@ -5673,7 +5674,8 @@
searchBlockForString:aString ignoreCase:ignoreCase match:doMatchArg
"return a block to search for a string."
- |checkBlock pattern doMatch|
+ |checkBlock lineCheckBlock pattern doMatch
+ quickCheckString firstMatchIndex lastMatchIndex|
doMatch := doMatchArg.
aString includesMatchCharacters ifFalse:[
@@ -5681,18 +5683,48 @@
].
doMatch ifTrue:[
"a matchString"
- pattern := aString.
+ pattern := aString.
+
+ firstMatchIndex := aString indexOfAny:'*#['.
+ lastMatchIndex := aString lastIndexOfAny:'*#['.
+ "/ which is longer - left or right part
+ firstMatchIndex-1 "nleft" > (aString size-lastMatchIndex) "nright" ifTrue:[
+ "/ use left part as quickSearch
+ quickCheckString := aString copyTo:firstMatchIndex-1
+ ] ifFalse:[
+ "/ use right part as quickSearch
+ quickCheckString := aString copyFrom:lastMatchIndex+1
+ ].
+
aString first == $* ifFalse:[
pattern := '*',pattern
].
aString last == $* ifFalse:[
pattern := pattern,'*'
].
+ "/ when doing a match, be careful to not match acrosss lines
ignoreCase ifTrue:[
- checkBlock := [:src | pattern match:src caseSensitive:false]
+ lineCheckBlock := [:line | pattern match:line caseSensitive:false]
] ifFalse:[
- checkBlock := [:src | pattern match:src caseSensitive:true]
- ]
+ lineCheckBlock := [:line | pattern match:line caseSensitive:true]
+ ].
+ quickCheckString size > 1 ifTrue:[
+ ignoreCase ifTrue:[
+ checkBlock := [:src |
+ (src includesString:quickCheckString caseSensitive:false)
+ and:[ (lineCheckBlock value:src)
+ and:[ src asStringCollection contains:lineCheckBlock ]]].
+ ] ifFalse:[
+ checkBlock := [:src |
+ (src includesString:quickCheckString caseSensitive:true)
+ and:[ (lineCheckBlock value:src)
+ and:[ src asStringCollection contains:lineCheckBlock ]]].
+ ]
+ ] ifFalse:[
+ checkBlock := [:src |
+ (lineCheckBlock value:src)
+ and:[ src asStringCollection contains:lineCheckBlock ]].
+ ].
] ifFalse:[
ignoreCase ifTrue:[
checkBlock := [:src | src includesString:aString caseSensitive:false]
@@ -5720,7 +5752,8 @@
searchBlockForStringLiteral:aString ignoreCase:ignoreCase match:doMatchArg
"return a block to search for a string-literal."
- |pattern s doMatch checkLiteral|
+ |pattern doMatch checkLiteral checkSource
+ quickCheckString firstMatchIndex lastMatchIndex|
aString isEmpty ifTrue:[^ [:cls :mthd :sel | true ]].
@@ -5737,32 +5770,70 @@
aString last == $* ifFalse:[
pattern := pattern,'*'
].
- checkLiteral :=
- [:lit |
- lit isString
- and:[lit isSymbol not
- and:[s match:lit caseSensitive:ignoreCase not]]
- ]
+ checkLiteral := [:lit | pattern match:lit caseSensitive:ignoreCase not].
+ firstMatchIndex := aString indexOfAny:'*#['.
+ lastMatchIndex := aString lastIndexOfAny:'*#['.
+ "/ which is longer - left or right part?
+ firstMatchIndex-1 "nleft" > (aString size-lastMatchIndex) "nright" ifTrue:[
+ "/ use left part as quickSearch
+ quickCheckString := aString copyTo:firstMatchIndex-1
+ ] ifFalse:[
+ "/ use right part as quickSearch
+ quickCheckString := aString copyFrom:lastMatchIndex+1
+ ].
+ quickCheckString size > 1 ifTrue:[
+ checkSource := [:src | src includesString:quickCheckString caseSensitive:ignoreCase not]
+ ] ifFalse:[
+ checkSource := [:src | true]. "/ not worth the effort
+ ].
] ifFalse:[
ignoreCase ifTrue:[
- checkLiteral :=
- [:lit |
- lit isString
- and:[lit isSymbol not
- and:[lit includesString:aString caseSensitive:true]]
- ]
+ checkLiteral := [:lit | lit includesString:aString caseSensitive:true].
+ checkSource := [:src | src includesString:aString caseSensitive:true].
] ifFalse:[
- checkLiteral :=
- [:lit |
- lit isString
- and:[lit isSymbol not
- and:[lit includesString:aString]]
- ]
+ checkLiteral := [:lit | lit includesString:aString].
+ checkSource := [:src | src includesString:aString].
].
].
- ^ [:cls :mthd :sel |
- (mthd literalsDetect:checkLiteral ifNone:[nil]) notNil
+ ^ [:cls :methodArg :sel |
+ "/ sorry: the following does not work, because stc does not place string-constants
+ "/ into the literals.
+ "/ (mthd literalsDetect:[:lit |
+ "/ lit isString
+ "/ and:[ lit isSymbol not
+ "/ and:[ checkLiteral value:lit ]]
+ "/ ] ifNone:[nil])
+ "/ notNil
+ "/ so we must parse here (sigh)
+
+ |method src skip tree found|
+
+ skip := found := false.
+ method := methodArg originalMethodIfWrapped.
+ method isLazyMethod ifTrue:[
+ src := method source.
+ (src notNil) ifTrue:[
+ method makeRealMethod.
+ ] ifFalse:[
+ skip := true
+ ].
+ ].
+ skip ifFalse:[
+ src := method source.
+ (src includes:$') ifTrue:[ "/ eliminates many
+ (checkSource value:src) ifTrue:[
+ tree := cls parseTreeFor:sel.
+ "/ walk
+ found :=
+ tree usedLiterals contains:[:lit |
+ lit isString
+ and:[ lit isSymbol not
+ and:[ checkLiteral value:lit ]]]
+ ].
+ ].
+ ].
+ found
]
"
--- a/Tools__FontSettingsApplication.st Fri May 06 06:55:08 2016 +0200
+++ b/Tools__FontSettingsApplication.st Mon May 09 21:47:57 2016 +0200
@@ -22,7 +22,7 @@
inputFieldDef inputFieldFontLabelHolder otherLabel
linuxFontWorkaround otherDef tooltipDef tooltipFontLabelHolder
tooltipLabel useXftFontsOnly fontSizeSelectionHolder
- lookSelectionHolder'
+ lookSelectionHolder useXFontsOnly'
classVariableNames:''
poolDictionaries:''
category:'Interface-Smalltalk'
@@ -131,7 +131,11 @@
'Change settings for a VisualAge-like look with bold variable code fonts'
#useXftFontsOnly
-'Don''t try to use and don''t offer non-Xft fonts in font selection dialogs (XWindow only)'
+'Don''t try to use and don''t offer non-Xft fonts in font selection dialogs (XWindow only).\If checked, ST/X will use the much nicer looking, but sometimes slower Xft fonts.'
+
+#useXFontsOnly
+'Don''t try to use and don''t offer Xft fonts in font selection dialogs (XWindow only).\Check this, if you are working with remote displays via a slow communication line,\to suppress any Xft font usage.\(Xft font rendering requires a much higher bandwidth.)'
+
)
"Created: / 17-03-2012 / 11:37:51 / cg"
@@ -554,14 +558,25 @@
extent: (Point 637 45)
)
(CheckBoxSpec
- label: 'Only Use Xft Fonts (Unix Only)'
+ label: 'Only Use Xft Fonts / Suppress Ugly X-Fonts (Unix Only)'
name: 'CheckBox1'
activeHelpKey: useXftFontsOnly
visibilityChannel: useXftFontsOnlyVisible
+ enableChannel: useXftFontsOnlyEnabled
model: useXftFontsOnly
translateLabel: true
extent: (Point 637 30)
)
+ (CheckBoxSpec
+ label: 'Only Use X Fonts / Suppress Slow Xft-Fonts (Unix Only)'
+ name: 'CheckBox2'
+ activeHelpKey: useXFontsOnly
+ visibilityChannel: useXFontsOnlyVisible
+ enableChannel: useXFontsOnlyEnabled
+ model: useXFontsOnly
+ translateLabel: true
+ extent: (Point 637 30)
+ )
(DividerSpec
name: 'Separator12'
visibilityChannel: linuxFontWorkaroundVisible
@@ -668,6 +683,7 @@
|prefs readFont sz lookIdx idx defaultTextFont|
self useXftFontsOnly value:(UserPreferences current useXftFontsOnly).
+ self useXFontsOnly value:(UserPreferences current useXFontsOnly).
prefs := UserPreferences current fontPreferences.
prefs isNil ifTrue:[
@@ -733,8 +749,9 @@
!
basicSaveSettings
- self writeAspects: #(useXftFontsOnly) to: currentUserPrefs.
+ "/ |fn|
+ self writeAspects: #( useXftFontsOnly useXFontsOnly) to: currentUserPrefs.
UserPreferences current fontPreferences:
(
Dictionary new
@@ -1259,17 +1276,56 @@
^ tooltipFontLabelHolder.
!
+useXFontsOnly
+ useXFontsOnly isNil ifTrue:[
+ useXFontsOnly := false asValue.
+ useXFontsOnly onChangeSend:#useXftSettingsChanged to:self
+ ].
+ ^ useXFontsOnly.
+!
+
+useXFontsOnlyEnabled
+ ^ builder valueAspectFor:#useXFontsOnlyEnabled initialValue:true
+!
+
+useXFontsOnlyVisible
+
+ ^ Screen platformName == #X11
+!
+
useXftFontsOnly
useXftFontsOnly isNil ifTrue:[
useXftFontsOnly := false asValue.
- useXftFontsOnly onChangeSend:#updateModifiedChannel to:self
+ useXftFontsOnly onChangeSend:#useXftSettingsChanged to:self
].
^ useXftFontsOnly.
!
+useXftFontsOnlyEnabled
+ ^ builder valueAspectFor:#useXftFontsOnlyEnabled initialValue:true
+!
+
useXftFontsOnlyVisible
^ Screen platformName == #X11
+!
+
+useXftSettingsChanged
+ |enableUseXft enableUseX|
+
+ self updateModifiedChannel.
+
+ enableUseXft := enableUseX := true.
+
+ self useXftFontsOnly value ifTrue:[
+ enableUseX := false
+ ].
+ self useXFontsOnly value ifTrue:[
+ enableUseXft := false
+ ].
+
+ self useXFontsOnlyEnabled value:enableUseX.
+ self useXftFontsOnlyEnabled value:enableUseXft
! !
!FontSettingsApplication methodsFor:'change & update'!
--- a/Tools__NavigationState.st Fri May 06 06:55:08 2016 +0200
+++ b/Tools__NavigationState.st Mon May 09 21:47:57 2016 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 2000 by eXept Software AG
All Rights Reserved
@@ -26,21 +24,22 @@
selectedProtocols selectedClasses selectedCategories
selectedProjects selectedNamespaces selectedLintRules
variableFilter filterClassVars sortBy noAllItem autoSearchPattern
- autoSearchIgnoreCase autoSearchAction realModifiedStateHolder
- methodInfo versionDiffApplication selectorListGeneratorArray
- selectedMethodsArray infoLabelHolder packageLabelHolder
- cursorLineLabelHolder cursorColLabelHolder modeLabelHolder
- sortVariablesBy editModeHolder scrollableCodeView specialEditors
- selectedEditorNoteBookTabIndexHolder editorNoteBookListHolder
- editorNoteBookCanvasHolder codeView stringSearchToolView
- noteBookView inheritanceView documentationView languageHolder
- messageSpecHolder messageHolder progressHolder tabContentView
- messagePaneView codePaneAndPluginView
- codePaneAndPluginViewRelativeCorners pluginVisibleHolder
- bookmarkHolder worker packageInfoBackgroundColorHolder
- packageInfoButton showMethodTemplate lastMethodShownInCodeView
- showingParseError navigationHistory lintRuleListGenerator
- profilerStatistics inlineMessageApplication'
+ autoSearchIgnoreCase autoSearchIsMatch autoSearchAction
+ realModifiedStateHolder methodInfo versionDiffApplication
+ selectorListGeneratorArray selectedMethodsArray infoLabelHolder
+ packageLabelHolder cursorLineLabelHolder cursorColLabelHolder
+ modeLabelHolder sortVariablesBy editModeHolder scrollableCodeView
+ specialEditors selectedEditorNoteBookTabIndexHolder
+ editorNoteBookListHolder editorNoteBookCanvasHolder codeView
+ stringSearchToolView noteBookView inheritanceView
+ documentationView languageHolder messageSpecHolder messageHolder
+ progressHolder tabContentView messagePaneView
+ codePaneAndPluginView codePaneAndPluginViewRelativeCorners
+ pluginVisibleHolder bookmarkHolder worker
+ packageInfoBackgroundColorHolder packageInfoButton
+ showMethodTemplate lastMethodShownInCodeView showingParseError
+ navigationHistory lintRuleListGenerator profilerStatistics
+ inlineMessageApplication'
classVariableNames:'CodeAspectTranslations'
poolDictionaries:''
category:'Interface-Browsers-New'
@@ -85,32 +84,60 @@
^ autoSearchAction
!
-autoSearchAction:something
- autoSearchAction := something.
+autoSearchAction:aBlock
+ "define an autosearch action (for semantic searches)"
+
+ autoSearchAction := aBlock.
!
autoSearchIgnoreCase
- "return true if the autSearch is to be case-insensitive"
+ "return true if the autoSearch is case-insensitive"
^ autoSearchIgnoreCase
!
autoSearchIgnoreCase:aBoolean
- "change the autSearches case-insensitivenes"
+ "define the autoSearches case-insensitivenes"
autoSearchIgnoreCase := aBoolean
!
+autoSearchIsMatch
+ "return true if the autoSearch is a match search"
+
+ ^ autoSearchIsMatch
+!
+
+autoSearchIsMatch:aBoolean
+ "define the automatic search pattern matching behavior"
+
+ autoSearchIsMatch := aBoolean.
+!
+
autoSearchPattern
- "return the automatic search pattern"
+ "return the automatic search pattern.
+ The codeView will search for this automatically,
+ whenever the navigation is changing the shown method."
^ autoSearchPattern
!
-autoSearchPattern:aPattern
- "change the automatic search pattern"
+autoSearchPattern:aStringOrPattern
+ "define the automatic search pattern.
+ The codeView will search for this automatically,
+ whenever the navigation is changing the shown method."
+
+ autoSearchPattern := aStringOrPattern.
+!
- autoSearchPattern := aPattern.
+autoSearchPattern:aStringOrPattern ignoreCase:ignoreCaseBoolean match:isMatchBoolean
+ "define the automatic search pattern.
+ The codeView will search for this automatically,
+ whenever the navigation is changing the shown method."
+
+ autoSearchPattern := aStringOrPattern.
+ autoSearchIsMatch := isMatchBoolean.
+ autoSearchIgnoreCase := ignoreCaseBoolean.
!
browserLabel
--- a/Tools__NewSystemBrowser.st Fri May 06 06:55:08 2016 +0200
+++ b/Tools__NewSystemBrowser.st Mon May 09 21:47:57 2016 +0200
@@ -49,7 +49,7 @@
LastClassSearchBoxShowedFullName CachedTagToRevisionMapping
CachedMethodsImplemented LastCypressDirectory
LastClassSearchBoxShowedJavaOnly LastRemoteRepository
- LastClassDocDirectory DefaultShowCoverage'
+ LastClassDocDirectory DefaultShowCoverage LastLintedPackage'
poolDictionaries:''
category:'Interface-Browsers-New'
!
@@ -7314,6 +7314,12 @@
itemValue: debugMenuOpenCallGraphForClasses
showBusyCursorWhilePerforming: true
)
+ (MenuItem
+ enabled: hasRBLintRuleClassSelected
+ label: 'Run this Rule On...'
+ itemValue: debugMenuRunLintRuleOn
+ showBusyCursorWhilePerforming: true
+ )
)
nil
nil
@@ -23930,7 +23936,7 @@
or:[navigationState isMethodBrowser]]) ifFalse:[
filteredVariables := self variableFilter value.
filteredVariables size > 0 ifTrue:[
- self searchVariables:filteredVariables readers:true writers:true asAutoSearch:false.
+ self setupToSearchVariables:filteredVariables readers:true writers:true asAutoSearch:false.
"/ codeView notNil ifTrue:[codeView searchFwd]
] ifFalse:[
self autoSearchPattern:nil
@@ -24012,12 +24018,14 @@
] ifFalse:[
searchPattern := navigationState autoSearchPattern.
searchPattern notNil ifTrue:[
+ "/ check if user did some other search in the meantime
searchPattern = codeView searchPattern ifTrue:[
codeView
cursorHome;
cursorRight; "/ to avoid finding the selector
searchFwd:searchPattern
ignoreCase:(navigationState autoSearchIgnoreCase)
+ match:(navigationState autoSearchIsMatch)
ifAbsent:[codeView cursorHome].
].
].
@@ -26324,7 +26332,7 @@
withTextEntry:true
withMethodList:true
setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
- brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+ brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
]
"Modified: / 28-02-2012 / 16:40:11 / cg"
@@ -26349,7 +26357,7 @@
searchArea:whereDefault
withCaseIgnore:true
setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
- brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+ brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
]
"Modified: / 28-02-2012 / 16:40:37 / cg"
@@ -26374,7 +26382,7 @@
searchArea:whereDefault
withCaseIgnore:true
setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
- brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+ brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
]
"Modified: / 28-02-2012 / 16:40:54 / cg"
@@ -26404,7 +26412,7 @@
withTextEntry:true
withMethodList:true
setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
- brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+ brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
]
!
@@ -26828,7 +26836,7 @@
searchArea:(self defaultSearchArea)
withCaseIgnore:false
setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
- brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+ brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
]
"Modified: / 25-11-2010 / 11:41:10 / cg"
@@ -27122,7 +27130,7 @@
withTextEntry:true
withMethodList:true
setSearchPattern:[:brwsr :selector :ignoreCase :doMatch|
- brwsr autoSearchSelector:selector ignoreCase:ignoreCase doMatch:doMatch.
+ brwsr setSearchSelector:selector ignoreCase:ignoreCase doMatch:doMatch.
]
"Modified: / 20-08-2012 / 14:28:30 / cg"
@@ -27134,7 +27142,7 @@
selectors := self selectedMethodsValue collect:[:each | each selector].
false ifTrue:[
-self autoSearchSelector:selectors ignoreCase:false doMatch:true.
+self setSearchSelector:selectors ignoreCase:false doMatch:true.
].
^ self
askForMethodAndSpawnSearchTitle:'Browse Senders of (any in selected):'
@@ -27151,7 +27159,7 @@
withTextEntry:false
withMethodList:false
setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
- brwsr autoSearchSelector:selectors ignoreCase:ignoreCase doMatch:doMatch.
+ brwsr setSearchSelector:selectors ignoreCase:ignoreCase doMatch:doMatch.
]
"Modified: / 28-02-2012 / 16:15:36 / cg"
@@ -28682,7 +28690,7 @@
THis is called from a background worker - see smallLintRun:onEnvironment:
"
- | rules checker numOverAll count|
+ | rules checker numOverAll count lastPercentage|
"/ avoid this reference (for project-dependencies). Should this method be an extension, maybe
"/ checker := SmalllintChecker.
@@ -28692,7 +28700,8 @@
aBrowserEnvironment cacheClasses.
numOverAll := aBrowserEnvironment numberClasses * 2 "tests class AND metaclass" * rules size.
count := 0.
-
+ lastPercentage := nil.
+
rules withIndexDo:[:rule :index|
|t ruleName ruleClassName|
@@ -28709,14 +28718,24 @@
runRule: rule
onEnvironment: aBrowserEnvironment
progressFeedBackInto:[:classBeingChecked |
+ |msg percentage|
+
count := count + 1.
- ProgressNotification new
- messageText: (('Checking: ' withColor:Color grey)
- , ruleName
- , ((' (',ruleClassName,')')withColor:Color grey)
- , ' in ',classBeingChecked name);
- parameter: ((count-1) / numOverAll * 100);
- raiseRequest.
+ percentage := ((count-1) / numOverAll * 100).
+ lastPercentage ~= percentage ifTrue:[
+ msg := ('Checking: ' withColor:Color grey)
+ , ruleName
+ , ((' (',ruleClassName,')')withColor:Color grey).
+
+ rules size < 50 ifTrue:[
+ msg := msg , ' in ',classBeingChecked name.
+ ].
+ ProgressNotification new
+ messageText: msg;
+ parameter: percentage;
+ raiseRequest.
+ lastPercentage := percentage.
+ ].
].
] value. "/ benchmark: rule name, ': '.
].
@@ -38769,7 +38788,7 @@
values:#(nil #browse #rewrite)
default:3.
- answer == nil ifTrue:[
+ answer isNil ifTrue:[
"/ cancel
^ false
].
@@ -38780,7 +38799,10 @@
label:'Senders of ' , selector
perMethodInfo:nil
sortBy:#class.
- brwsr autoSearchPattern:selector.
+ "/ WRONG: must do a more intelligent autosearch here.
+ "/ brwsr autoSearchPattern:selector.
+ brwsr setSearchSelector:selector ignoreCase:false doMatch:false.
+
^ false
].
^ true
@@ -39521,6 +39543,50 @@
self commonTraceHelperWith:#clearBreakPoint with:nil clear:false.
!
+debugMenuRunLintRuleOn
+ "apply the selected rule(s) on a chosen set of classes"
+
+ |package packagesInChangeSet ruleset env packages|
+
+ packagesInChangeSet :=
+ (ChangeSet current
+ collect:[:chg | |cls| (cls := chg changeClass) notNil ifTrue:[cls package] ]
+ thenSelect:[:pkg | pkg notNil])
+ asSet asOrderedCollection sort.
+
+ package := Dialog
+ requestProject:'Run rule on package:'
+ initialAnswer: (LastLintedPackage ? 'stx:libbasic')
+ suggestions: #( '* all *' ) , packagesInChangeSet.
+
+ package isNil ifTrue:[^ self].
+
+ ruleset := RBLintRuleSet new.
+ self selectedClasses value do:[:each |
+ |cls|
+
+ cls := each theNonMetaclass.
+ (cls isSubclassOf:RBLintRule) ifTrue:[
+ (cls isBroken
+ or:[ cls isVisible not ]) ifFalse:[
+ ruleset addRule:(cls new).
+ ].
+ ].
+ ].
+ package = '* all *' ifTrue:[
+ packages := Smalltalk allPackageIDs
+ ] ifFalse:[
+ packages := { package }
+ ].
+
+ env := PackageEnvironment new
+ packageNames:packages;
+ label:('package ' , package);
+ yourself.
+
+ self smalllintRun:ruleset onEnvironment:env.
+!
+
debugMenuStartCounting
"set a countpoint on the current method"
@@ -49317,7 +49383,7 @@
label:label.
theSingleSelector notNil ifTrue:[
- newBrowser autoSearchSelector:theSingleSelector ignoreCase:false doMatch:false.
+ newBrowser setSearchSelector:theSingleSelector ignoreCase:false doMatch:false.
].
]
@@ -49385,7 +49451,7 @@
in:openHow
label:label.
- newBrowser autoSearchPattern:(aStringCollection asStringWith:'|') ignoreCase:false.
+ newBrowser autoSearchPattern:(aStringCollection asStringWith:'|') ignoreCase:false match:doMatch.
newBrowser sortBy value:#classes.
newBrowser
]
@@ -49736,7 +49802,7 @@
brwsr variableFilter value:varNameList.
- self autoSearchVariables:varNameList readers:(accessType ~~ #write) writers:(accessType ~~ #read).
+ brwsr autoSearchVariables:varNameList readers:(accessType ~~ #write) writers:(accessType ~~ #read).
!
findClassesOfVariable:aVariableName accessWith:aSelector in:collectionOfClasses
@@ -51336,7 +51402,7 @@
label:[:chg |
|lbl|
"/ lbl := chg printString
- lbl := (chg className ? '???') , ' » ' , (chg selector ? '???') allBold.
+ lbl := (chg className ? '???') , ' ' , (chg selector ? '???') allBold.
(chg isMethodChange and:[chg changeMethod isNil]) ifTrue:[
lbl := lbl asText allStrikedOut,' ','(removed)' allItalic.
].
@@ -54344,34 +54410,18 @@
]
!
+autoSearchPattern:aString ignoreCase:doIgnoreCaseBoolean match:doMatchBoolean
+ aString notNil ifTrue:[
+ self navigationState
+ autoSearchPattern:aString ignoreCase:doIgnoreCaseBoolean match:doMatchBoolean.
+ self codeView
+ setSearchPattern:aString ignoreCase:doIgnoreCaseBoolean match:doMatchBoolean.
+ ]
+!
+
autoSearchSelector:aSelectorOrCollectionOfSelectors ignoreCase:doIgnoreCase doMatch:doMatch
- |searchAction|
-
- aSelectorOrCollectionOfSelectors notNil ifTrue:[
-
- searchAction :=
- [:direction :startLine :startCol :foundBlock :notFoundBlock|
- |codeView|
-
- codeView := self codeView.
- self
- searchForSelector:aSelectorOrCollectionOfSelectors direction:direction
- startLine:(startLine ? codeView cursorLine) startCol:(startCol ? codeView cursorCol)
- ignoreCase:doIgnoreCase doMatch:doMatch
- ifFound:
- [:charPos1 :charPos2 |
- codeView
- cursorToCharacterPosition:charPos1;
- selectFromCharacterPosition:charPos1 to:charPos2
- ]
- ifNotFound:notFoundBlock
- ].
-
- self navigationState autoSearchAction:searchAction.
- self codeView
- clearSearchAction; "/ searchAction
- setSearchPattern:nil.
- ]
+ <resource: #obsolete>
+ self setSearchSelector:aSelectorOrCollectionOfSelectors ignoreCase:doIgnoreCase doMatch:doMatch
!
autoSearchVariable:aVariable
@@ -54383,7 +54433,7 @@
!
autoSearchVariables:aCollectionOfVariables readers:doReaders writers:doWriters
- self searchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:true.
+ self setupToSearchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:true.
!
classDefinitionStringFor:aClass
@@ -54477,6 +54527,9 @@
searchForCodePattern:codePattern direction:direction startLine:startLine startCol:startCol
ifFound:foundBlock ifNotFound:notFoundBlock
+ "used as autosearchAction, if showing the result of a code-pattern search.
+ Does a language-aware search."
+
^ self
searchForCodePatterns:(Array with:codePattern)
direction:direction startLine:startLine startCol:startCol
@@ -54486,6 +54539,9 @@
searchForCodePatterns:codePatterns direction:direction
startLine:startLine startCol:startCol
ifFound:foundBlock ifNotFound:notFoundBlock
+ "used as autosearchAction, if showing the result of a code-pattern search.
+ Does a language-aware search."
+
|searcher|
self parseTreeSearcherAvailable ifFalse:[ ^ self ].
@@ -54506,6 +54562,9 @@
startLine:startLine startCol:startCol
ignoreCase:ignoreCase doMatch:doMatch
ifFound:foundBlock ifNotFound:notFoundBlock
+ "used as autosearchAction, if showing the result of a senders-search.
+ Does a language-aware search."
+
|searcher|
self parseTreeSearcherAvailable ifFalse:[ ^ self ].
@@ -54534,6 +54593,9 @@
startLine:startLine startCol:startCol
readers:searchReaders writers:searchWriters
ifFound:foundBlock ifNotFound:notFoundBlock
+ "used as autosearchAction, if showing the result of a variable-search.
+ Does a language-aware search."
+
|searcher namesWithAndWithoutNameSpace|
self parseTreeSearcherAvailable ifFalse:[ ^ self ].
@@ -54558,14 +54620,18 @@
self error:'missing search criteria'
].
].
- ^ self searchUsingSearcher:searcher direction:direction
- startLine:startLine startCol:startCol
- ifFound:foundBlock ifNotFound:notFoundBlock.
+ ^ self
+ searchUsingSearcher:searcher direction:direction
+ startLine:startLine startCol:startCol
+ ifFound:foundBlock ifNotFound:notFoundBlock.
!
searchUsingSearcher:searcher direction:direction
startLine:startLine startCol:startCol
ifFound:foundBlock ifNotFound:notFoundBlock
+ "common helper, used by autosearchAction.
+ Does a language-aware search."
+
|codeTree nodes searchStartPos prevNode|
RBParser isNil ifTrue:[^ self].
@@ -54608,10 +54674,44 @@
notFoundBlock value
!
-searchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:asAutoSearch
+setSearchSelector:aSelectorOrCollectionOfSelectors ignoreCase:doIgnoreCase doMatch:doMatch
+ "setup the codeView so it auto-searches for a message send"
+
|searchAction|
- aCollectionOfVariables size > 0 ifTrue:[
+ aSelectorOrCollectionOfSelectors notNil ifTrue:[
+
+ searchAction :=
+ [:direction :startLine :startCol :foundBlock :notFoundBlock|
+ |codeView|
+
+ codeView := self codeView.
+ self
+ searchForSelector:aSelectorOrCollectionOfSelectors direction:direction
+ startLine:(startLine ? codeView cursorLine) startCol:(startCol ? codeView cursorCol)
+ ignoreCase:doIgnoreCase doMatch:doMatch
+ ifFound:
+ [:charPos1 :charPos2 |
+ codeView
+ cursorToCharacterPosition:charPos1;
+ selectFromCharacterPosition:charPos1 to:charPos2
+ ]
+ ifNotFound:notFoundBlock
+ ].
+
+ self navigationState autoSearchAction:searchAction.
+ self codeView
+ clearSearchAction; "/ searchAction
+ setSearchPattern:nil.
+ ]
+!
+
+setupToSearchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:asAutoSearch
+ "setup the search action to search for a variable or setof variables"
+
+ |searchAction|
+
+ aCollectionOfVariables notEmptyOrNil ifTrue:[
searchAction :=
[:direction :startLine :startCol :foundBlock :notFoundBlock|
|codeView|
--- a/Tools__SearchDialog.st Fri May 06 06:55:08 2016 +0200
+++ b/Tools__SearchDialog.st Mon May 09 21:47:57 2016 +0200
@@ -150,7 +150,7 @@
'Search string in literal constants; not in source code'
#match
-'Perform a pattern match search, as oposed to an exact string search.\Pattern is a simple GLOB pattern (as in filenames)'
+'Perform a pattern match search, as opposed to an exact string search.\Pattern is a simple GLOB pattern (as in filenames)'
#caseSensitive
'Perform a case sensitive search (default is to ignore case differences)'
@@ -280,7 +280,6 @@
|symbolicHelpKey text|
(symbolicHelpKey := aComponent helpKey) notNil ifTrue:[
- Transcript showCR:symbolicHelpKey.
text := self class helpSpec at:symbolicHelpKey ifAbsent:[ nil ].
text notNil ifTrue:[
^ NewSystemBrowser classResources stringWithCRs:text.
@@ -963,7 +962,7 @@
p := View new.
- b := CheckBox label:(resources string:'Search Literals Only') in:p.
+ b := CheckBox label:(resources string:'Search String-Constants (Literals) Only') in:p.
b model:(searchStringInLiteralsHolder := false asValue).
p helpKey:#searchStringInLiterals.
self makeTabable:b.
--- a/WorkspaceApplication.st Fri May 06 06:55:08 2016 +0200
+++ b/WorkspaceApplication.st Mon May 09 21:47:57 2016 +0200
@@ -3469,11 +3469,15 @@
!
addStopWatch
- |v clock|
+ |v clockViewClass clock|
v := View new.
v viewBackground:Color white.
- clock := ClockView in:v.
+ "/ avoid making stx:libwidg3 a prerequisite.
+ Smalltalk loadPackage:#'stx:libwidg3'. "/ ClockView package
+ clockViewClass := Smalltalk at:#ClockView.
+
+ clock := clockViewClass in:v.
clock beStopWatch.
clock
--- a/libtool.rc Fri May 06 06:55:08 2016 +0200
+++ b/libtool.rc Mon May 09 21:47:57 2016 +0200
@@ -3,7 +3,7 @@
// automagically generated from the projectDefinition: stx_libtool.
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 6,2,1,140
+ FILEVERSION 6,2,1,141
PRODUCTVERSION 6,2,5,0
#if (__BORLANDC__)
FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
@@ -20,12 +20,12 @@
BEGIN
VALUE "CompanyName", "eXept Software AG\0"
VALUE "FileDescription", "Smalltalk/X Tools (LIB)\0"
- VALUE "FileVersion", "6.2.1.140\0"
+ VALUE "FileVersion", "6.2.1.141\0"
VALUE "InternalName", "stx:libtool\0"
VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 2012\0"
VALUE "ProductName", "Smalltalk/X\0"
VALUE "ProductVersion", "6.2.5.0\0"
- VALUE "ProductDate", "Fri, 06 May 2016 03:00:19 GMT\0"
+ VALUE "ProductDate", "Sun, 08 May 2016 17:31:24 GMT\0"
END
END
--- a/resources/de.rs Fri May 06 06:55:08 2016 +0200
+++ b/resources/de.rs Mon May 09 21:47:57 2016 +0200
@@ -154,6 +154,7 @@
'Add breakpoint on method' 'Haltepunkt auf Methode setzen'
'Add buffer' 'Seite hinzufügen'
'Add to ChangeSet when Applying' 'Bei Ãœbernehmen auch ins ChangeSet eintragen'
+'Ignore Public/Private in Category' 'Public/Private in Kategorie ignorieren (Dolphin Code)'
'Add/Apply' 'Eintragen'
'After 5 Seconds' 'Nach 5 Sekunden'
'Against which repository version' 'Gegen welche Version im Repository'
@@ -855,7 +856,9 @@
'Delete Selected Files' 'Ausgewählte Dateien löschen'
'Delete all Files' 'Alle Dateien löschen'
'Delete all Versions of Selected Method' 'Entfernen - alle Versionen dieser Methode'
-'Delete all Versions of all Selected Methods' 'Entfernen - alle Versionen der ausgewählten Methoden'
+'Delete all Versions of all Selected Methods' 'Entfernen - alle Versionen aller ausgewählten Methoden'
+'Delete older Versions of Selected Method' 'Entfernen - ältere Versionen dieser Methode'
+'Delete older Versions of all Selected Methods' 'Entfernen - ältere Versionen aller ausgewählten Methoden'
'Delete all for Class' 'Entfernen - alles für diese Klasse'
'Delete all for Class & its Private Classes' 'Entfernen - alles für diese Klasse & private Klassen'
'Delete all for Class & its private Classes' 'Entfernen - alles für diese Klasse & private Klassen'
@@ -865,6 +868,7 @@
'Delete all for Classes & their Private Classes' 'Entfernen - alles für diese Klassen & private Klassen'
'Delete all for Classes & their private Classes' 'Entfernen - alles für diese Klassen & private Klassen'
'Delete all for Classes && their private Classes' 'Entfernen - alles für diese Klassen && private Klassen'
+'Delete all for Namespace' 'Entfernen - alles für diesen Namensraum'
'Delete file' 'Datei löschen'
'Delete for Class from Begin' 'Entfernen - vom Anfang für diese Klasse'
'Delete for Class to End' 'Entfernen - bis Ende für diese Klasse'
@@ -1013,6 +1017,8 @@
'Exit Smalltalk' 'Smalltalk beenden'
'Exit Smalltalk (No Confirmation)' 'Smalltalk beenden (ohne Bestätigung)'
'Exiting ST/X' 'ST/X verlassen'
+'Show Search Field' 'Suchfeld einblenden'
+'Quick Search' 'Schnellsuche'
'Expand All' 'Alle aufklappen'
'Expand Arrays in "all xxx"-Lists' 'Arrayelemente in "all xxx"-Listen expandiert zeigen'
'Export' 'Exportieren'
@@ -1687,6 +1693,8 @@
'Next Difference' 'Nächster Unterschied'
'Next Snapshot' 'Nächste Sicherung (snapshot)'
'Next for Class' 'Nächste Änderung zu dieser Klasse'
+'First for Class' 'Erste Änderung zu dieser Klasse'
+'Last for Class' 'Letzte Änderung zu dieser Klasse'
'Next for Selector' 'Nächste Änderung mit diesem Selektor'
'Next with String' 'Nächste Änderung mit dieser Zeichenkette'
'No Sniplets to Manage' 'Keine Schnipsel zum verwalten'
@@ -2202,6 +2210,7 @@
'Search for documentation string' 'Dokumentationstext suchen'
'Search for methods which contain a\particular resource specification' 'Methoden suchen,\die eine bestimmte Ressourcespezifikation beinhalten'
'Search in' 'Suchen in'
+'Search String-Constants (Literals) Only' 'Nur in Stringkonstanten (Literalen) suchen'
'SearchBox is Modal' 'Textsuchdialog ist Modal'
'Searchbar' 'Suchleiste'
'Select' 'auswählen'