# HG changeset patch # User Merge Script # Date 1462510508 -7200 # Node ID 85d703589d3403d075383adaf4a19a628c95b614 # Parent 6bc184e74f9cc51e45f3ca439e7f49ef948a4426# Parent d94f4a87e7477a25ef0175f42caed6481cfd4ef6 Merge diff -r 6bc184e74f9c -r 85d703589d34 AbstractLauncherApplication.st --- a/AbstractLauncherApplication.st Thu May 05 06:48:38 2016 +0200 +++ b/AbstractLauncherApplication.st Fri May 06 06:55:08 2016 +0200 @@ -2200,10 +2200,11 @@ bringWindow:aWindow intoBounds:bounds "shift & resize a view to be completely inside bounds." - |oldOrg newOrg oldCorner newCorner delta| + |topView oldOrg newOrg oldCorner newCorner delta| - oldOrg := newOrg := aWindow topView origin. - oldCorner := newCorner := aWindow topView corner. + topView := aWindow topView. + oldOrg := newOrg := topView origin. + oldCorner := newCorner := topView corner. (bounds containsPoint:oldOrg) ifFalse:[ newOrg := bounds origin + (10@10). @@ -2220,25 +2221,28 @@ ]. ]. ]. - aWindow topView + topView raiseDeiconified; origin:newOrg corner:newCorner. ! -bringWindowOntoScreen:aWindow +bringWindowOntoScreen:aWindow "shift & resize a view to be visible. If there are multiple screens,bring them all onto the screen where the launcher is" - - |allBounds bounds| - - allBounds := self device monitorBoundsAt:aWindow center. - allBounds size > 0 ifTrue:[ - bounds := allBounds detect:[:bounds | bounds containsPoint:self window center] ifNone:nil. + + |allBounds bounds myDevice| + + myDevice := self device. + allBounds := myDevice monitorBoundsAt:aWindow center. + allBounds notEmptyOrNil ifTrue:[ + bounds := allBounds + detect:[:bounds | bounds containsPoint:self window center ] + ifNone:[ nil ]. ]. bounds isNil ifTrue:[ - bounds := 0@0 extent:self device usableExtent. - ]. - self bringWindow:aWindow intoBounds:bounds. + bounds := 0@0 extent:myDevice usableExtent. + ]. + self bringWindow:aWindow intoBounds:bounds ! deIconifyAllWindows @@ -2310,18 +2314,16 @@ fullScreenHardcopy "after a second (to allow redraw of views under menu ...), save the contents of the whole screen." - - self window sensor ctrlDown ifTrue:[ + + |mySensor| + + mySensor := self window sensor. + mySensor ctrlDown ifTrue:[ ^ self fullScreenHardcopyUngrabbed ]. - - Processor - addTimedBlock:[ - self - saveScreenImage:(Image fromScreen) - defaultName:'screen' - ] - afterSeconds:(self window sensor shiftDown ifTrue:5 ifFalse:1) + Processor + addTimedBlock:[ self saveScreenImage:(Image fromScreen) defaultName:'screen' ] + afterSeconds:(mySensor shiftDown ifTrue:5 ifFalse:1) ! fullScreenHardcopyUngrabbed @@ -2541,7 +2543,8 @@ ! viewBrowse - "let user pick a view and browse its Application class. Only smalltalk views are allowed" + "let user pick a view and browse its Application class. + Of course, only smalltalk views are allowed" |v app appClass browser| @@ -2608,18 +2611,19 @@ ! viewInspect - "let user pick a view and inspect it. Only smalltalk views are allowed" + "let user pick a view and inspect it. + Of course, only smalltalk views are allowed" |v| (v := self pickAView) notNil ifTrue:[ v inspect ] - ! viewMigrate - "let user pick a view and migrate it to some other display" + "let user pick a view and migrate it to some other display. + Only smalltalk views are allowed" |v| @@ -2631,7 +2635,7 @@ viewSelectAndShrink "let user pick a view and shrink it to a reasonable size Added for stupid mac, to get windows back onto the screen, - which have their resize handle hidden." + which have their resize handle hidden or unreachable." |v| @@ -2647,12 +2651,13 @@ let user specify a widget and save its contents." Processor - addTimedBlock:[ - |v| - (v := Screen current viewFromUser) notNil ifTrue:[ - self saveScreenImage:(Image fromView:v) defaultName:'hardcopy' - ] - ] + addTimedBlock: + [ + |v| + (v := Screen current viewFromUser) notNil ifTrue:[ + self saveScreenImage:(Image fromView:v) defaultName:'hardcopy' + ] + ] afterSeconds:(self window sensor shiftDown ifTrue:5 ifFalse:1) "Created: / 21.8.1998 / 20:44:12 / cg" diff -r 6bc184e74f9c -r 85d703589d34 Make.proto --- a/Make.proto Thu May 05 06:48:38 2016 +0200 +++ b/Make.proto Fri May 06 06:55:08 2016 +0200 @@ -334,7 +334,7 @@ $(OUTDIR)Tools__HierarchicalChangeList.$(O) Tools__HierarchicalChangeList.$(C) Tools__HierarchicalChangeList.$(H): Tools__HierarchicalChangeList.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BrowserList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BrowserListWithFilter.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__ChangeList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NavigatorModel.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR) $(OUTDIR)Tools__HierarchicalPackageFilterList.$(O) Tools__HierarchicalPackageFilterList.$(C) Tools__HierarchicalPackageFilterList.$(H): Tools__HierarchicalPackageFilterList.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BrowserList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__HierarchicalProjectList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NavigatorModel.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__ProjectList.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItemWithLabel.$(H) $(STCHDR) $(OUTDIR)Tools__InheritanceClassList.$(O) Tools__InheritanceClassList.$(C) Tools__InheritanceClassList.$(H): Tools__InheritanceClassList.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__BrowserList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__ClassList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__HierarchicalClassList.$(H) $(INCLUDE_TOP)/stx/libtool/Tools__NavigatorModel.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR) -$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/AbstractTime.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Autoload.$(H) $(INCLUDE_TOP)/stx/libbasic/Bag.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Block.$(H) $(INCLUDE_TOP)/stx/libbasic/Boolean.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Character.$(H) $(INCLUDE_TOP)/stx/libbasic/CharacterArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Class.$(H) $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/Date.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Filename.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Geometric.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Integer.$(H) $(INCLUDE_TOP)/stx/libbasic/Interval.$(H) $(INCLUDE_TOP)/stx/libbasic/KeyedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/LimitedPrecisionReal.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Method.$(H) $(INCLUDE_TOP)/stx/libbasic/MethodDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/NameSpace.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Point.$(H) $(INCLUDE_TOP)/stx/libbasic/ProgrammingLanguage.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadOnlySequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Rectangle.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(INCLUDE_TOP)/stx/libbasic/SmallInteger.$(H) $(INCLUDE_TOP)/stx/libbasic/Smalltalk.$(H) $(INCLUDE_TOP)/stx/libbasic/SmalltalkLanguage.$(H) $(INCLUDE_TOP)/stx/libbasic/StandaloneStartup.$(H) $(INCLUDE_TOP)/stx/libbasic/String.$(H) $(INCLUDE_TOP)/stx/libbasic/StringCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Symbol.$(H) $(INCLUDE_TOP)/stx/libbasic/Timestamp.$(H) $(INCLUDE_TOP)/stx/libbasic/UndefinedObject.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(INCLUDE_TOP)/stx/libbasic/Warning.$(H) $(INCLUDE_TOP)/stx/libbasic2/Iterator.$(H) $(INCLUDE_TOP)/stx/libbasic2/RunArray.$(H) $(INCLUDE_TOP)/stx/libbasic2/SocketAddress.$(H) $(INCLUDE_TOP)/stx/libbasic2/Text.$(H) $(INCLUDE_TOP)/stx/libbasic2/UUID.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ChangeSet.$(H) $(INCLUDE_TOP)/stx/libbasic3/CompositeChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/ProfileTree.$(H) $(INCLUDE_TOP)/stx/libcomp/AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)/stx/libcomp/Breakpoint.$(H) $(INCLUDE_TOP)/stx/libcomp/BreakpointDescription.$(H) $(INCLUDE_TOP)/stx/libcomp/Explainer.$(H) $(INCLUDE_TOP)/stx/libcomp/Parser.$(H) $(INCLUDE_TOP)/stx/libcomp/Scanner.$(H) $(INCLUDE_TOP)/stx/libview/Color.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/Form.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/Image.$(H) $(INCLUDE_TOP)/stx/libview/PopUpView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/MultiImage.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libwidg/MenuView.$(H) $(INCLUDE_TOP)/stx/libwidg/PopUpMenu.$(H) $(INCLUDE_TOP)/stx/libwidg/SelectionInListView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg2/ListModelView.$(H) $(INCLUDE_TOP)/stx/libwidg2/SelectionInListModelView.$(H) $(STCHDR) +$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/AbstractTime.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Autoload.$(H) $(INCLUDE_TOP)/stx/libbasic/Bag.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Block.$(H) $(INCLUDE_TOP)/stx/libbasic/Boolean.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Character.$(H) $(INCLUDE_TOP)/stx/libbasic/CharacterArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Class.$(H) $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/Date.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Filename.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Geometric.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Integer.$(H) $(INCLUDE_TOP)/stx/libbasic/Interval.$(H) $(INCLUDE_TOP)/stx/libbasic/KeyedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/LimitedPrecisionReal.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Method.$(H) $(INCLUDE_TOP)/stx/libbasic/MethodDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/NameSpace.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Point.$(H) $(INCLUDE_TOP)/stx/libbasic/ProgrammingLanguage.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadOnlySequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Rectangle.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(INCLUDE_TOP)/stx/libbasic/SmallInteger.$(H) $(INCLUDE_TOP)/stx/libbasic/Smalltalk.$(H) $(INCLUDE_TOP)/stx/libbasic/SmalltalkLanguage.$(H) $(INCLUDE_TOP)/stx/libbasic/StandaloneStartup.$(H) $(INCLUDE_TOP)/stx/libbasic/String.$(H) $(INCLUDE_TOP)/stx/libbasic/StringCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Symbol.$(H) $(INCLUDE_TOP)/stx/libbasic/Timestamp.$(H) $(INCLUDE_TOP)/stx/libbasic/UndefinedObject.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(INCLUDE_TOP)/stx/libbasic/Warning.$(H) $(INCLUDE_TOP)/stx/libbasic2/Iterator.$(H) $(INCLUDE_TOP)/stx/libbasic2/RunArray.$(H) $(INCLUDE_TOP)/stx/libbasic2/SocketAddress.$(H) $(INCLUDE_TOP)/stx/libbasic2/Text.$(H) $(INCLUDE_TOP)/stx/libbasic2/UUID.$(H) $(INCLUDE_TOP)/stx/libbasic3/Change.$(H) $(INCLUDE_TOP)/stx/libbasic3/ChangeSet.$(H) $(INCLUDE_TOP)/stx/libbasic3/CompositeChange.$(H) $(INCLUDE_TOP)/stx/libbasic3/ProfileTree.$(H) $(INCLUDE_TOP)/stx/libcomp/AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)/stx/libcomp/Breakpoint.$(H) $(INCLUDE_TOP)/stx/libcomp/BreakpointDescription.$(H) $(INCLUDE_TOP)/stx/libcomp/Parser.$(H) $(INCLUDE_TOP)/stx/libcomp/Scanner.$(H) $(INCLUDE_TOP)/stx/libview/Color.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/Form.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/Image.$(H) $(INCLUDE_TOP)/stx/libview/PopUpView.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/TopView.$(H) $(INCLUDE_TOP)/stx/libview/View.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(INCLUDE_TOP)/stx/libview2/MultiImage.$(H) $(INCLUDE_TOP)/stx/libwidg/EditTextView.$(H) $(INCLUDE_TOP)/stx/libwidg/GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)/stx/libwidg/ListView.$(H) $(INCLUDE_TOP)/stx/libwidg/MenuView.$(H) $(INCLUDE_TOP)/stx/libwidg/PopUpMenu.$(H) $(INCLUDE_TOP)/stx/libwidg/SelectionInListView.$(H) $(INCLUDE_TOP)/stx/libwidg/TextView.$(H) $(INCLUDE_TOP)/stx/libwidg2/ListModelView.$(H) $(INCLUDE_TOP)/stx/libwidg2/SelectionInListModelView.$(H) $(STCHDR) # ENDMAKEDEPEND --- do not remove this line diff -r 6bc184e74f9c -r 85d703589d34 SystemBrowser.st --- a/SystemBrowser.st Thu May 05 06:48:38 2016 +0200 +++ b/SystemBrowser.st Fri May 06 06:55:08 2016 +0200 @@ -2594,7 +2594,9 @@ !SystemBrowser class methodsFor:'special search startup'! allCallsOn:aSelectorString - "return a collection of methods which send aSelector." + "return a collection of methods which send aSelector. + This takes some time, because source code is parsed to see + if there is really a message send inside (and not just a symbol reference)" ^ self allCallsOn:aSelectorString @@ -2603,7 +2605,9 @@ match:false " - SystemBrowser allCallsOn:#at:put: + Time millisecondsToRun:[ + SystemBrowser allCallsOn:#at:put: + ]. " "Created: 24.1.1997 / 19:42:57 / cg" @@ -5666,103 +5670,100 @@ "Modified: / 24-07-2011 / 09:50:30 / cg" ! -searchBlockForString:aString ignoreCase:ignoreCase match:doMatch +searchBlockForString:aString ignoreCase:ignoreCase match:doMatchArg "return a block to search for a string." - |searchBlock s lcString| - - (doMatch and:[ aString includesMatchCharacters ]) ifTrue:[ - s := '*' , aString , '*'. + |checkBlock pattern doMatch| + + doMatch := doMatchArg. + aString includesMatchCharacters ifFalse:[ + doMatch := false. + ]. + doMatch ifTrue:[ "a matchString" - searchBlock := [:c :m :sel | - |src| - src := m source. - src isNil ifTrue:[ - ('Browser [info]: no source for ' , m printString) infoPrintCR. - false - ] ifFalse:[ - s match:src caseSensitive:ignoreCase not - ] - ] + pattern := aString. + aString first == $* ifFalse:[ + pattern := '*',pattern + ]. + aString last == $* ifFalse:[ + pattern := pattern,'*' + ]. + ignoreCase ifTrue:[ + checkBlock := [:src | pattern match:src caseSensitive:false] + ] ifFalse:[ + checkBlock := [:src | pattern match:src caseSensitive:true] + ] ] ifFalse:[ ignoreCase ifTrue:[ - lcString := aString asLowercase. - searchBlock := - [:c :m :sel | - |src| - - src := m source. - src isNil ifTrue:[ - ('Browser [info]: no source for ' , m printString) infoPrintCR. - false - ] ifFalse:[ - (src asLowercase findString:lcString caseSensitive:true) ~~ 0 - ] - ] + checkBlock := [:src | src includesString:aString caseSensitive:false] ] ifFalse:[ - searchBlock := - [:c :m :sel | - |src| - - src := m source. - src isNil ifTrue:[ - ('Browser [info]: no source for ' , m printString) infoPrintCR. - false - ] ifFalse:[ - (src findString:aString caseSensitive:ignoreCase not) ~~ 0 - ] - ] - ]. + checkBlock := [:src | src includesString:aString caseSensitive:true] + ]. ]. - ^ searchBlock. + ^ [:cls :mthd :sel | + |src| + + src := mthd source. + src isNil ifTrue:[ + ('Browser [info]: no source for ' , mthd printString) infoPrintCR. + false + ] ifFalse:[ + checkBlock value:src + ] + ] " SystemBrowser findString:'should' in:(Array with:Object) ignoreCase:false " ! -searchBlockForStringLiteral:aString ignoreCase:ignoreCase match:doMatch +searchBlockForStringLiteral:aString ignoreCase:ignoreCase match:doMatchArg "return a block to search for a string-literal." - |searchBlock s| - - (doMatch and:[ aString includesMatchCharacters]) ifTrue:[ - s := '*' , aString , '*'. + |pattern s doMatch checkLiteral| + + aString isEmpty ifTrue:[^ [:cls :mthd :sel | true ]]. + + doMatch := doMatchArg. + (aString includesMatchCharacters) ifFalse:[ + doMatch := false + ]. + doMatch ifTrue:[ "a matchString" - searchBlock := [:c :m :sel | - |lits| - lits := m literals ? #(). - lits contains:[:lit | - lit isString - and:[lit isSymbol not - and:[s match:lit caseSensitive:ignoreCase not]] - ] - ] + pattern := aString. + aString first == $* ifFalse:[ + pattern := '*',pattern + ]. + aString last == $* ifFalse:[ + pattern := pattern,'*' + ]. + checkLiteral := + [:lit | + lit isString + and:[lit isSymbol not + and:[s match:lit caseSensitive:ignoreCase not]] + ] ] ifFalse:[ ignoreCase ifTrue:[ - s := aString asLowercase. - searchBlock := [:c :m :sel | - |lits| - lits := m literals ? #(). - lits contains:[:lit | - lit isString - and:[lit isSymbol not - and:[s = lit asLowercase]] - ] - ] + checkLiteral := + [:lit | + lit isString + and:[lit isSymbol not + and:[lit includesString:aString caseSensitive:true]] + ] ] ifFalse:[ - searchBlock := [:c :m :sel | - |lits| - lits := m literals ? #(). - lits contains:[:lit | - lit isString - and:[lit isSymbol not - and:[s = lit]] - ] - ] - ]. + checkLiteral := + [:lit | + lit isString + and:[lit isSymbol not + and:[lit includesString:aString]] + ] + ]. ]. - ^ searchBlock. + + ^ [:cls :mthd :sel | + (mthd literalsDetect:checkLiteral ifNone:[nil]) notNil + ] " SystemBrowser findStringLiteral:'error' in:(Array with:Object) ignoreCase:true match:true @@ -6280,7 +6281,8 @@ "return all instance- (if wantInst is true) and/or classmethods (if wantClass is true) from classes in aCollectionOfClasses, where aBlock evaluates to true." - |list checkedClasses checkBlock nClasses nClassesDone oldPercentage newPercentage| + |list checkedClasses checkBlock nClasses + nClassesDone oldPercentage newPercentage nClassesSinceLastPercentage bulkSize| checkedClasses := IdentitySet new. list := OrderedCollection new. @@ -6311,9 +6313,13 @@ nClasses := aCollectionOfClasses size. nClassesDone := 0. oldPercentage := 0. + nClassesSinceLastPercentage := 0. + bulkSize := (nClasses // 30) max:10. "/ roughly every 3%. aCollectionOfClasses do:[:aClass | (aClass notNil and:[aClass isObsolete not]) ifTrue:[ + nClassesSinceLastPercentage := nClassesSinceLastPercentage + 1. + " output disabled - it slows down things too much (when searching for implementors or senders) @@ -6326,13 +6332,14 @@ "/ Transcript show:'searching '; show:aClass class name; showCR:' ...'; endEntry. checkBlock value:(aClass class) ]. - nClassesDone > 5 ifTrue:[ + nClassesSinceLastPercentage > bulkSize ifTrue:[ "/ Processor yield newPercentage := nClassesDone * 100 // nClasses. newPercentage ~= oldPercentage ifTrue:[ ProgressNotification progressPercentage:newPercentage. oldPercentage := newPercentage. ]. + nClassesSinceLastPercentage := 0. ]. ]. nClassesDone := nClassesDone + 1. diff -r 6bc184e74f9c -r 85d703589d34 Tools__NewSystemBrowser.st --- a/Tools__NewSystemBrowser.st Thu May 05 06:48:38 2016 +0200 +++ b/Tools__NewSystemBrowser.st Fri May 06 06:55:08 2016 +0200 @@ -6001,7 +6001,7 @@ - ^ + ^ #(Menu ( (MenuItem @@ -6031,7 +6031,7 @@ ) (MenuItem label: 'Classes' - submenu: + submenu: (Menu ( (MenuItem @@ -6174,6 +6174,17 @@ label: '-' ) (MenuItem + label: 'Pick a View, Browse its Application Class' + itemValue: pickViewAndBrowseApplicationClass + ) + (MenuItem + label: 'Pick a View, Browse Widget''s Class' + itemValue: pickViewAndBrowseViewClass + ) + (MenuItem + label: '-' + ) + (MenuItem label: 'Special' submenuChannel: specialBrowseMenu ) @@ -6228,7 +6239,7 @@ ) (MenuItem label: 'Methods' - submenu: + submenu: (Menu ( (MenuItem @@ -26305,7 +26316,8 @@ self askForMethodAndSpawnSearchTitle:'String to Search for in Sources:' browserLabel:'Methods containing "%1"' - searchWith:#( #'findString:in:ignoreCase:match:' #'findString:inMethods:ignoreCase:match:' ) + searchWith:#( #'findString:in:ignoreCase:match:' #'findString:inMethods:ignoreCase:match:' + #'findStringLiteral:in:ignoreCase:match:' #'findStringLiteral:inMethods:ignoreCase:match:' ) searchWhat:#string searchArea:whereDefault withCaseIgnore:true @@ -27200,6 +27212,34 @@ ^ classes asOrderedCollection ! +pickViewAndBrowseApplicationClass + "let user click on a view, then browse its appliction class" + + |view app| + + view := Screen current viewFromUser. + view isNil ifTrue:[^ self]. + (app := view application) isNil ifTrue:[ + (app := view topView application) isNil ifTrue:[ + Dialog information:'Neither widget nor its topview have an application'. + ^ self + ]. + ]. + self createBuffer. + self switchToClass:app class selector:nil updateHistory:false. +! + +pickViewAndBrowseWidgetClass + "let user click on a view, then browse its class" + + |view| + + view := Screen current viewFromUser. + view isNil ifTrue:[^ self]. + self createBuffer. + self switchToClass:view class selector:nil updateHistory:false. +! + spawnClassDocumentationBrowserIn:where "browse documentation; where is: #newBrowser - open a new browser @@ -37660,7 +37700,7 @@ ! codeMenuFormat - "format (prettyPrint) the selected method(s)" + "format (prettyPrint) the selected method(s) and accept" |modifiedBefore| @@ -38749,7 +38789,8 @@ ! formatCode - "format (prettyPrint) the selected method's code" + "format (prettyPrint) the selected method's code. + Does not accept, so caller can decide" |tree newText mthd codeView| @@ -38775,7 +38816,8 @@ codeView undoableDo:[ codeView replaceContentsWith:newText ] info:'Format'. - codeView modified:true. + "/ codeView modified:true. + navigationState modified:true. navigationState realModifiedState:true. ^ newText. ! @@ -49214,7 +49256,7 @@ |label| self withSearchCursorDo:[ - |cachedList newBrowser theSingleSelector searchBlock| + |cachedList newBrowser theSingleSelector searchBlock answer| aSelectorCollection size == 1 ifTrue:[ theSingleSelector := aSelectorCollection first. @@ -49223,36 +49265,40 @@ label := resources string:labelPrefix. ]. - searchBlock := [ - |l| - - cachedList notNil ifTrue:[ - l := cachedList. - cachedList := nil - ] ifFalse:[ - l := IdentitySet new. - aSelectorCollection do:[:aSelector | - l addAll:(self class - findSendersOf:aSelector - in:setOfClasses - ignoreCase:false - match:false - ) - ]. - l := l asOrderedCollection - ]. - l - ]. + searchBlock := + [ + |l| + + cachedList notNil ifTrue:[ + l := cachedList. + cachedList := nil + ] ifFalse:[ + l := IdentitySet new. + aSelectorCollection do:[:aSelector | + l addAll:(self class + findSendersOf:aSelector in:setOfClasses + ignoreCase:false match:false + ) + ]. + l := l asOrderedCollection + ]. + l + ]. theSingleSelector notNil ifTrue:[ cachedList := searchBlock value. cachedList size == 0 ifTrue:[ - (Dialog - confirm:(label , (resources string:' - none found')) - yesLabel:(resources string:'Show Implementors') noLabel:'OK' - initialAnswer:false - ) ifTrue:[ - self spawnMethodImplementorsBrowserFor:aSelectorCollection in:openHow + answer := Dialog + confirmWithCancel:(label , (resources string:' - none found')) + labels:(resources array: #('Cancel' 'Search String' 'Show Implementors')) + values:#(nil #string #implementors) + default:nil. + (answer == #string) ifTrue:[ + self spawnMethodStringSearchBrowserFor:aSelectorCollection in:openHow + ] ifFalse:[ + (answer == #implementors) ifTrue:[ + self spawnMethodImplementorsBrowserFor:aSelectorCollection in:openHow + ]. ]. ^ self ]. @@ -49278,6 +49324,73 @@ "Created: / 05-09-2006 / 10:43:21 / cg" ! +spawnMethodStringSearchBrowserFor:aStringCollection in:openHow + "open a new browser or add a buffer showing the selected methods only" + + ^ self + spawnMethodStringSearchBrowserFor:aStringCollection + match:false + in:openHow + classes:environment allClasses + label:'string search' +! + +spawnMethodStringSearchBrowserFor:aStringCollection match:doMatch in:openHow classes:classes label:labelPrefix + "open a new browser or add a buffer showing the selected methods only" + + self withSearchCursorDo:[ + |newBrowser label impls searchBlock cachedList theSingleString| + + aStringCollection size == 1 ifTrue:[ + theSingleString := aStringCollection first. + label := resources string:(labelPrefix,' with %1') with:(theSingleString allBold) + ] ifFalse:[ + label := resources string:labelPrefix. + ]. + + searchBlock := + [ + |list| + + (list := cachedList) notNil ifTrue:[ + cachedList := nil + ] ifFalse:[ + list := IdentitySet new. + aStringCollection do:[:eachString | + list addAll:(self class + findString:eachString + in:classes + ignoreCase:false + match:doMatch + ) + ]. + list := list asOrderedCollection + ]. + list + ]. + + cachedList := searchBlock value. + (cachedList size == 1 and:[cachedList first == self theSingleSelectedMethod]) ifTrue:[ + (Dialog + confirm:label,' - ',(resources stringWithCRs:'only the selected method found.\\Browse anyway?') + initialAnswer:false + ) ifFalse:[ + ^ self + ] + ]. + + newBrowser := self + spawnMethodBrowserForSearch:searchBlock + sortBy:nil + in:openHow + label:label. + + newBrowser autoSearchPattern:(aStringCollection asStringWith:'|') ignoreCase:false. + newBrowser sortBy value:#classes. + newBrowser + ] +! + spawnProjectExtensionsBrowserFor:aMethodCollection in:openHow "open a new browser or add a buffer showing the selected methods senders only" @@ -55649,7 +55762,7 @@ ! askForMethodAndSpawnSearchTitle:title browserLabel:labelHolderOrBlock - searchWith:aSelectorOrBlock searchWhat:searchWhat searchArea:whereDefault + searchWith:searchWithSpec searchWhat:searchWhat searchArea:whereDefault withCaseIgnore:withCaseIgnore withTextEntry:withTextEntry withMatch:withMatch withMethodList:withMethodList setSearchPattern:setSearchPatternAction @@ -55675,11 +55788,28 @@ searchWhat is a symbol such as #selector, #code etc. " - |dialog| - + |dialog selectorOrBlockOrSelectorPair literalStringSearchSelectors| + + selectorOrBlockOrSelectorPair := searchWithSpec. + dialog := SearchDialog new initialText:aString; - showMetaFilter:true; + showMetaFilter:true. + + "/ hack... + searchWhat == #string ifTrue:[ + selectorOrBlockOrSelectorPair size == 4 ifTrue:[ + "/ the first two are for a string search, + "/ the last two for a string-in-literal search. + "/ need to clean that ugly interface up... + literalStringSearchSelectors := selectorOrBlockOrSelectorPair copyFrom:3. + selectorOrBlockOrSelectorPair := selectorOrBlockOrSelectorPair copyTo:2. + + dialog withSearchStringInLiterals:true. + ]. + ]. + + dialog setupToAskForMethodSearchTitle:title forBrowser:self searchWhat:searchWhat @@ -55691,7 +55821,7 @@ allowBuffer:true allowBrowser:true withTextEntry:withTextEntry. - + [:restart| dialog askThenDo:[ |classes string ignoreCase openHow match methods isMethod searchAction @@ -55711,38 +55841,46 @@ self withSearchCursorDo:[ |initialList list newBrowser numFound label - selector entities arguments numArgs answer - alternativeSelector question altArguments t| - - aSelectorOrBlock isArray ifTrue:[ + selectorList selector entities arguments numArgs answer + alternativeSelector question altArguments t extraStringMsg| + + (literalStringSearchSelectors notNil and:[dialog searchStringInLiterals]) ifTrue:[ + selectorList := literalStringSearchSelectors. + extraStringMsg := ' (in String literals)'. + ] ifFalse:[ + selectorList := selectorOrBlockOrSelectorPair. + extraStringMsg := ''. + ]. + + selectorList isArray ifTrue:[ classes notNil ifTrue:[ - selector := aSelectorOrBlock first. + selector := selectorList first. entities := classes. ] ifFalse:[ - selector := aSelectorOrBlock second. + selector := selectorList second. entities := methods. ]. numArgs := selector numArgs. ] ifFalse:[ entities := classes. - aSelectorOrBlock isSymbol ifTrue:[ - selector := aSelectorOrBlock. + selectorList isSymbol ifTrue:[ + selector := selectorList. ] ifFalse:[ selector := nil ]. - numArgs := aSelectorOrBlock numArgs. + numArgs := selectorList numArgs. ]. (selector notNil and:[ (selector numArgs == 1) and:[ (selector endsWith:'In:') or:[ selector endsWith:'inMethods:' ]]]) ifTrue:[ arguments := Array with:entities ] ifFalse:[ - arguments := (Array - with:string - with:entities - with:((selector notNil and:[selector endsWith:'isMethod:']) ifTrue:[isMethod] ifFalse:[ignoreCase]) - with:match - ) copyTo:numArgs. + arguments := { string . + entities . + ((selector notNil and:[selector endsWith:'isMethod:']) + ifTrue:[isMethod] ifFalse:[ignoreCase]) . + match + } copyTo:numArgs. ]. searchAction := @@ -55760,17 +55898,17 @@ selector notNil ifTrue:[ result := self class perform:selector withArguments:arguments. ] ifFalse:[ - result := aSelectorOrBlock valueWithArguments:arguments + result := selectorList valueWithArguments:arguments ]. "/ sorry for this special case: when searching in a package, "/ also search extensionMethods dialog searchAreaSelected == #currentPackage ifTrue:[ - aSelectorOrBlock isArray ifTrue:[ + selectorList isArray ifTrue:[ "/ findSendersOf:inMethods:ignoreCase:match: extensionMethods := environment allExtensionsForPackage:(dialog currentPackage). arguments2 := arguments copy. arguments2 at:2 put:extensionMethods. - moreResults := self class perform:(aSelectorOrBlock at:2) withArguments:arguments2. + moreResults := self class perform:(selectorList at:2) withArguments:arguments2. result := result , moreResults. ] ]. @@ -55803,7 +55941,11 @@ numFound := initialList size. numFound == 0 ifTrue:[ - question := resources stringWithCRs:label with:((string ? '') allBold colorizeAllWith:Color red darkened). + question := resources + stringWithCRs:label,extraStringMsg + with:((string ? '') + allBold + colorizeAllWith:Color red darkened). question := question , (resources string:' - none found.'). ((selector == #findImplementors:in:ignoreCase:match:) @@ -58161,7 +58303,7 @@ ! getMethodInfoForMethod:aMethod - "get something about aMethod + "get some info about aMethod to be shown in the info line at the bottom" |msg msg2 method wrapper| diff -r 6bc184e74f9c -r 85d703589d34 Tools__SearchDialog.st --- a/Tools__SearchDialog.st Thu May 05 06:48:38 2016 +0200 +++ b/Tools__SearchDialog.st Fri May 06 06:55:08 2016 +0200 @@ -22,7 +22,8 @@ allowBuffer allowBrowser searchWhat searchClassProtocolHolder searchInstanceProtocolHolder selectorOrCode selectionList listHolder matchProcess inputField showMetaFilter - metaclassesOnlyHolder classesOnlyHolder initialText' + metaclassesOnlyHolder classesOnlyHolder initialText + withSearchStringInLiterals searchStringInLiteralsHolder' classVariableNames:'LastCodeSearched LastCodeSearchWasMethod LastGlobalSearched LastStringSearched LastSearchWasMatch LastSearchWasCaseSensitive LastStringSearchArea LastCodeSearchArea AREA_LISTOFMETHODS @@ -63,6 +64,99 @@ "Created: / 19-11-2010 / 12:11:50 / cg" ! ! +!SearchDialog class methodsFor:'help'! + +helpSpec + ^ Dictionary new addPairsFrom:#( +#listOfChangedClasses +'Search only in changed classes' + +#listOfChangedMethods +'Search only in changed methods' + +#currentClassesNameSpace +'Search in the namespace(s) of the selected class(es)' + +#currentClassesPackage +'Search in the package(s) of the selected class(es)' + +#currentNameSpace +'Search in the current selected or selected classes namespace' + +#currentPackage +'Search in the current selected or selected classes package' + +#currentClassesPackage +'Search in the current selected classes package' + +#currentPackageAndSubPackages +'Search in the current (selected) package and subpackages.\(disabled if there are no subpackages)' + +#everywhere +'Search everywhere (all loaded classes)' + +#listOfMethods +'Search only in the list of (shown) methods' + +#ownersWithPrivateClasses +'Search in class and the owning and private classes.\(disabled if there are none)' + +#ownersHierarchiesWithPrivateClasses +'Search in class, owners, private classes and all subclasses.\(disabled if there are none)' + +#classes +'Search in selected class(es) only' + +#classesWithPrivateClasses +'Search in selected class(es) and any private classes.\(disabled if there are no private classes)' + +#classHierarchies +'Search in selected class(es) and down all subclasses.\(disabled if there are no subclasses)' + +#classHierarchiesWithPrivateClasses +'Search in selected class(es), down all subclasses and all of their private classes.\(disabled if there are none)' + +#classesAndSuperclasses +'Search in selected class(es) and up all super classes.\(disabled if there are none)' + +#classCategories +'Search in selected class category(s)' + +#listOfSelectedMethodClasses +'Search in class(es) of selected method(s)' + +#listOfSelectedMethodPackages +'Search in package(es) of selected method(s)' + +#listOfSelectedMethods +'Search in selected method(s)' + +#selectedPackages +'Search in selected package(s)' + +#searchPatternField +'The searched string or name. Does completion on TAB-key' + +#codeEntryField +'Code fragment to match against in the search.\Press "pattern-help" to learn more about code searches' + +#nonMetaClassesOnly +'Search only in instance methods (non-meta classes)' + +#metaClassesOnly +'Search only in class methods (meta classes)' + +#searchStringInLiterals +'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)' + +#caseSensitive +'Perform a case sensitive search (default is to ignore case differences)' +) +! ! + !SearchDialog class methodsFor:'queries'! lastCodeSearchArea @@ -87,13 +181,25 @@ initialText := aString. ! -showMetaFilter:something - showMetaFilter := something. +showMetaFilter:aBoolean + "enable another checkbox, to allow searching in meta/non-meta" + + showMetaFilter := aBoolean. +! + +withSearchStringInLiterals:aBoolean + "enable another checkbox, to allow searching for a string + in the literals only" + + withSearchStringInLiterals := aBoolean. ! ! !SearchDialog methodsFor:'accessing-entered values'! classesOnly + "the value of the corresponding check toggle; + if on, only search in non-metaclasses" + ^ (classesOnlyHolder ? false) value "Created: / 20-08-2012 / 13:25:26 / cg" @@ -112,6 +218,9 @@ ! metaclassesOnly + "the value of the corresponding check toggle; + if on, only search in metaclasses" + ^ (metaclassesOnlyHolder ? false) value "Created: / 20-08-2012 / 13:17:12 / cg" @@ -122,10 +231,16 @@ ! openHow + "the value of the corresponding button pressed to close the dialog; + a symbol describing what to do (newBrowser/newBuffer/find)" + ^ openHow. ! searchAreaSelected + "the value of the corresponding radio button; + a symbol describing where to search" + ^ whereRadioGroup value. ! @@ -134,10 +249,24 @@ ! searchIsCaseSensitive + "the value of the corresponding check toggle; + if on, search is case sensitive; otherwise ignore case" + ^ (caseHolder value ? false) ! +searchStringInLiterals + "the value of the corresponding check toggle; + if on, only literal strings should be searched; + otherwise, the sourcecode is searched" + + ^ searchStringInLiteralsHolder value ? false. +! + searchWithMatch + "the value of the corresponding check toggle; + if on, do a GLOB match; otherwise an exact search" + ^ matchHolder value ? false. ! @@ -145,6 +274,21 @@ ^ selectorOrCode. ! ! +!SearchDialog methodsFor:'help'! + +flyByHelpTextFor:aComponent + |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. + ]. + ]. + ^ nil +! ! + !SearchDialog methodsFor:'obsolete'! addCheckBoxForClassMethodSearch @@ -232,18 +376,20 @@ (searchWhat ~~ #resource) ifTrue:[ initialCaseSensitive := (LastSearchWasCaseSensitive ? false) ]. - self + (self addCheckBox:(resources string:'Case Sensitive') - on:(caseHolder := initialCaseSensitive asValue). + on:(caseHolder := initialCaseSensitive asValue)) + helpKey:#caseSensitive. ]. withMatch ifTrue:[ initialMatch := true. (searchWhat ~~ #resource) ifTrue:[ initialMatch := (LastSearchWasMatch ? true) ]. - self + (self addCheckBox:(resources string:'Match') - on:(matchHolder := initialMatch asValue). + on:(matchHolder := initialMatch asValue)) + helpKey:#match. "/ (isSelector and:[ sel notNil. ]) ifTrue:[ "/ sel includesMatchCharacters ifTrue:[ "/ matchHolder value:false. @@ -379,6 +525,10 @@ withMethodList:withMethodList allowFind:allowFindArg allowBuffer:allowBufferArg allowBrowser:allowBrowserArg withTextEntry:withTextEntryArg + "the real construction of the box is done here. + Any additional parameters (metaOnly, searchLiterals etc. must have been done + already." + "searchWhat: one of:#selector searchArea: @@ -422,16 +572,16 @@ self addTextEntryWithCaseIgnore:withCaseIgnore withMatch:withMatch. ]. - searchAreas := OrderedCollection new. - - self addHorizontalLine. - "/ self addVerticalSpace. - (showMetaFilter ? false) ifTrue:[ currentPanel := self. self addCheckBoxForMetaClassesOnly. ]. - + (withSearchStringInLiterals ? false) ifTrue:[ + currentPanel := self. + self addCheckBoxForSearchInLiteralsOnly + ]. + + self addHorizontalLine. hPanel := HorizontalPanelView "SimpleView" new. hPanel verticalLayout:#top. @@ -443,6 +593,7 @@ (self addTextLabel:(resources string:'Search in:')) adjust:#left. + searchAreas := OrderedCollection new. whereRadioGroup := RadioButtonGroup new. self addCheckBoxForEverywhere. @@ -636,16 +787,22 @@ !SearchDialog methodsFor:'setup'! addCheckBox:b forSearchArea:area + self addCheckBox:b forSearchArea:area helpKey:area +! + +addCheckBox:b forSearchArea:area helpKey:symbolicHelpKey currentPanel add:b. whereRadioGroup add:b value:area. searchAreas add:area. self makeTabable:b. + symbolicHelpKey notNil ifTrue:[ b helpKey:symbolicHelpKey ]. ! addCheckBoxForChangedClassesList |b| b := RadioButton "CheckBox" label:(resources string:'Changed Classes'). + self addCheckBox:b forSearchArea:#listOfChangedClasses. ChangeSet current changedClasses isEmpty ifTrue:[ b disable @@ -657,6 +814,7 @@ |b| b := RadioButton "CheckBox" label:(resources string:'Changed Methods'). + self addCheckBox:b forSearchArea:#listOfChangedMethods. ChangeSet current changeSelectors isEmpty ifTrue:[ b disable @@ -739,12 +897,14 @@ b := CheckBox label:(resources string:'Metaclasses Only') in:p. b model:(metaclassesOnlyHolder := false asValue). + b helpKey:#metaClassesOnly. metaclassesOnlyHolder onChangeEvaluate:[metaclassesOnlyHolder value ifTrue:[classesOnlyHolder value:false]]. self makeTabable:b. b := CheckBox label:(resources string:'Classes Only') in:p. b left:0.5. b model:(classesOnlyHolder := false asValue). + b helpKey:#nonMetaClassesOnly. classesOnlyHolder onChangeEvaluate:[classesOnlyHolder value ifTrue:[metaclassesOnlyHolder value:false]]. self makeTabable:b. @@ -798,6 +958,20 @@ ^ b. ! +addCheckBoxForSearchInLiteralsOnly + |p b| + + p := View new. + + b := CheckBox label:(resources string:'Search Literals Only') in:p. + b model:(searchStringInLiteralsHolder := false asValue). + p helpKey:#searchStringInLiterals. + self makeTabable:b. + + currentPanel add:p. + ^ nil. +! + addCheckBoxForSelectedClass |b lbl arg| @@ -973,15 +1147,15 @@ addCheckBoxForSelectedPackage |b lbl arg| - currentClassCategory notNil ifTrue:[ - lbl := 'Class category ("%1")'. - arg := currentClassCategory. + currentPackage notNil ifTrue:[ + lbl := 'Class package ("%1")'. + arg := currentPackage. ] ifFalse:[ - lbl := 'Selected classes categories (%1)'. - arg := selectedCategories size. + lbl := 'Selected classes packages (%1)'. + arg := selectedPackages size. ]. b := RadioButton "CheckBox" label:(resources string:lbl with:arg). - self addCheckBox:b forSearchArea:#classCategories. + self addCheckBox:b forSearchArea:#selectedPackages. ^ b. ! @@ -990,10 +1164,12 @@ y := self yPosition. b1 := self addCheckBox:(resources string:'Instance Protocol') on:(self searchInstanceProtocolHolder). + b1 helpKey:#classesOnly. "/ b1 width:0.5. "/ self yPosition:y. b2 := self addCheckBox:(resources string:'Class Protocol') on:(self searchClassProtocolHolder). + b2 helpKey:#metaClassesOnly. "/ b2 left:0.5; width:0.5. "Created: / 06-12-2011 / 11:24:11 / cg" @@ -1072,6 +1248,7 @@ inputField selectAllInitially. inputField immediateAccept:true. inputField takeFocus. + inputField helpKey:#searchPatternField. searchWhat == #string ifFalse:[ inputField @@ -1113,6 +1290,7 @@ box := View new. box extent:(600 @ 200). + box helpKey:#codeEntryField. panel := VariableHorizontalPanel in:box. panel origin:0.0@0.0 corner:(1.0@1.0). diff -r 6bc184e74f9c -r 85d703589d34 bc.mak --- a/bc.mak Thu May 05 06:48:38 2016 +0200 +++ b/bc.mak Fri May 06 06:55:08 2016 +0200 @@ -262,7 +262,7 @@ $(OUTDIR)Tools__HierarchicalChangeList.$(O) Tools__HierarchicalChangeList.$(C) Tools__HierarchicalChangeList.$(H): Tools__HierarchicalChangeList.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BrowserList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BrowserListWithFilter.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__ChangeList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NavigatorModel.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR) $(OUTDIR)Tools__HierarchicalPackageFilterList.$(O) Tools__HierarchicalPackageFilterList.$(C) Tools__HierarchicalPackageFilterList.$(H): Tools__HierarchicalPackageFilterList.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BrowserList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__HierarchicalProjectList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NavigatorModel.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__ProjectList.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItemWithLabel.$(H) $(STCHDR) $(OUTDIR)Tools__InheritanceClassList.$(O) Tools__InheritanceClassList.$(C) Tools__InheritanceClassList.$(H): Tools__InheritanceClassList.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__BrowserList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__ClassList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__HierarchicalClassList.$(H) $(INCLUDE_TOP)\stx\libtool\Tools__NavigatorModel.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR) -$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\AbstractTime.$(H) $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Autoload.$(H) $(INCLUDE_TOP)\stx\libbasic\Bag.$(H) $(INCLUDE_TOP)\stx\libbasic\Behavior.$(H) $(INCLUDE_TOP)\stx\libbasic\Block.$(H) $(INCLUDE_TOP)\stx\libbasic\Boolean.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Character.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Class.$(H) $(INCLUDE_TOP)\stx\libbasic\ClassDescription.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\Date.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Filename.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Geometric.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Integer.$(H) $(INCLUDE_TOP)\stx\libbasic\Interval.$(H) $(INCLUDE_TOP)\stx\libbasic\KeyedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\LimitedPrecisionReal.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\MethodDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\NameSpace.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Point.$(H) $(INCLUDE_TOP)\stx\libbasic\ProgrammingLanguage.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadOnlySequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Rectangle.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(INCLUDE_TOP)\stx\libbasic\SmallInteger.$(H) $(INCLUDE_TOP)\stx\libbasic\Smalltalk.$(H) $(INCLUDE_TOP)\stx\libbasic\SmalltalkLanguage.$(H) $(INCLUDE_TOP)\stx\libbasic\StandaloneStartup.$(H) $(INCLUDE_TOP)\stx\libbasic\String.$(H) $(INCLUDE_TOP)\stx\libbasic\StringCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Symbol.$(H) $(INCLUDE_TOP)\stx\libbasic\Timestamp.$(H) $(INCLUDE_TOP)\stx\libbasic\UndefinedObject.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(INCLUDE_TOP)\stx\libbasic\Warning.$(H) $(INCLUDE_TOP)\stx\libbasic2\Iterator.$(H) $(INCLUDE_TOP)\stx\libbasic2\RunArray.$(H) $(INCLUDE_TOP)\stx\libbasic2\SocketAddress.$(H) $(INCLUDE_TOP)\stx\libbasic2\Text.$(H) $(INCLUDE_TOP)\stx\libbasic2\UUID.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ChangeSet.$(H) $(INCLUDE_TOP)\stx\libbasic3\CompositeChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\ProfileTree.$(H) $(INCLUDE_TOP)\stx\libcomp\AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)\stx\libcomp\Breakpoint.$(H) $(INCLUDE_TOP)\stx\libcomp\BreakpointDescription.$(H) $(INCLUDE_TOP)\stx\libcomp\Explainer.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(INCLUDE_TOP)\stx\libview\Color.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\Form.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\Image.$(H) $(INCLUDE_TOP)\stx\libview\PopUpView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\MultiImage.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libwidg\MenuView.$(H) $(INCLUDE_TOP)\stx\libwidg\PopUpMenu.$(H) $(INCLUDE_TOP)\stx\libwidg\SelectionInListView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg2\ListModelView.$(H) $(INCLUDE_TOP)\stx\libwidg2\SelectionInListModelView.$(H) $(STCHDR) +$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\AbstractTime.$(H) $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Autoload.$(H) $(INCLUDE_TOP)\stx\libbasic\Bag.$(H) $(INCLUDE_TOP)\stx\libbasic\Behavior.$(H) $(INCLUDE_TOP)\stx\libbasic\Block.$(H) $(INCLUDE_TOP)\stx\libbasic\Boolean.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Character.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Class.$(H) $(INCLUDE_TOP)\stx\libbasic\ClassDescription.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\Date.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Filename.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Geometric.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Integer.$(H) $(INCLUDE_TOP)\stx\libbasic\Interval.$(H) $(INCLUDE_TOP)\stx\libbasic\KeyedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\LimitedPrecisionReal.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\MethodDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\NameSpace.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Point.$(H) $(INCLUDE_TOP)\stx\libbasic\ProgrammingLanguage.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadOnlySequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Rectangle.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(INCLUDE_TOP)\stx\libbasic\SmallInteger.$(H) $(INCLUDE_TOP)\stx\libbasic\Smalltalk.$(H) $(INCLUDE_TOP)\stx\libbasic\SmalltalkLanguage.$(H) $(INCLUDE_TOP)\stx\libbasic\StandaloneStartup.$(H) $(INCLUDE_TOP)\stx\libbasic\String.$(H) $(INCLUDE_TOP)\stx\libbasic\StringCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Symbol.$(H) $(INCLUDE_TOP)\stx\libbasic\Timestamp.$(H) $(INCLUDE_TOP)\stx\libbasic\UndefinedObject.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(INCLUDE_TOP)\stx\libbasic\Warning.$(H) $(INCLUDE_TOP)\stx\libbasic2\Iterator.$(H) $(INCLUDE_TOP)\stx\libbasic2\RunArray.$(H) $(INCLUDE_TOP)\stx\libbasic2\SocketAddress.$(H) $(INCLUDE_TOP)\stx\libbasic2\Text.$(H) $(INCLUDE_TOP)\stx\libbasic2\UUID.$(H) $(INCLUDE_TOP)\stx\libbasic3\Change.$(H) $(INCLUDE_TOP)\stx\libbasic3\ChangeSet.$(H) $(INCLUDE_TOP)\stx\libbasic3\CompositeChange.$(H) $(INCLUDE_TOP)\stx\libbasic3\ProfileTree.$(H) $(INCLUDE_TOP)\stx\libcomp\AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)\stx\libcomp\Breakpoint.$(H) $(INCLUDE_TOP)\stx\libcomp\BreakpointDescription.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(INCLUDE_TOP)\stx\libview\Color.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\Form.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\Image.$(H) $(INCLUDE_TOP)\stx\libview\PopUpView.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\TopView.$(H) $(INCLUDE_TOP)\stx\libview\View.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(INCLUDE_TOP)\stx\libview2\MultiImage.$(H) $(INCLUDE_TOP)\stx\libwidg\EditTextView.$(H) $(INCLUDE_TOP)\stx\libwidg\GenericToolbarIconLibrary.$(H) $(INCLUDE_TOP)\stx\libwidg\ListView.$(H) $(INCLUDE_TOP)\stx\libwidg\MenuView.$(H) $(INCLUDE_TOP)\stx\libwidg\PopUpMenu.$(H) $(INCLUDE_TOP)\stx\libwidg\SelectionInListView.$(H) $(INCLUDE_TOP)\stx\libwidg\TextView.$(H) $(INCLUDE_TOP)\stx\libwidg2\ListModelView.$(H) $(INCLUDE_TOP)\stx\libwidg2\SelectionInListModelView.$(H) $(STCHDR) # ENDMAKEDEPEND --- do not remove this line diff -r 6bc184e74f9c -r 85d703589d34 libtool.rc --- a/libtool.rc Thu May 05 06:48:38 2016 +0200 +++ b/libtool.rc Fri May 06 06:55:08 2016 +0200 @@ -3,7 +3,7 @@ // automagically generated from the projectDefinition: stx_libtool. // VS_VERSION_INFO VERSIONINFO - FILEVERSION 6,2,1,139 + FILEVERSION 6,2,1,140 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.139\0" + VALUE "FileVersion", "6.2.1.140\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", "Wed, 04 May 2016 07:23:08 GMT\0" + VALUE "ProductDate", "Fri, 06 May 2016 03:00:19 GMT\0" END END diff -r 6bc184e74f9c -r 85d703589d34 stx_libtool.st --- a/stx_libtool.st Thu May 05 06:48:38 2016 +0200 +++ b/stx_libtool.st Fri May 06 06:55:08 2016 +0200 @@ -421,8 +421,10 @@ ! extensionMethodNames - "list class/selector pairs of extensions. - A correponding method with real names must be present in my concrete subclasses" + "lists the extension methods which are to be included in the project. + Entries are 2-element array literals, consisting of class-name and selector. + A correponding method with real names must be present in my concrete subclasses + if it has extensions." ^ #( ApplicationModel inspectorExtraAttributes @@ -579,11 +581,6 @@ 'Collection class' iconInBrowserSymbol 'Date class' iconInBrowserSymbol 'Error class' iconInBrowserSymbol - 'Explainer class' infoStringForClasses:withPrefix: - 'Explainer class' methodImplementorsInfoFor:inEnvironment: - 'Explainer class' methodInheritanceInfoFor: - 'Explainer class' methodRedefinitionInfoFor: - 'Explainer class' methodSpecialInfoFor: 'GenericException class' iconInBrowserSymbol 'GenericToolbarIconLibrary class' bookmarks22x22 'GenericToolbarIconLibrary class' bug16x16Icon