[squeak-dev] The Trunk: Tools-mt.617.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 3 10:08:52 UTC 2015
Marcel Taeumel uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-mt.617.mcz
==================== Summary ====================
Name: Tools-mt.617
Author: mt
Time: 3 May 2015, 12:08:33.481 pm
UUID: 550a7de0-db51-154d-873a-d2569c50c8a6
Ancestors: Tools-mt.616
"Message Names" tool refactored.
=============== Diff against Tools-mt.616 ===============
Item was changed:
MessageSet subclass: #MessageNames
+ instanceVariableNames: 'searchString selectorList selectorListIndex'
- instanceVariableNames: 'searchString selectorList selectorListIndex searchPane'
classVariableNames: ''
poolDictionaries: ''
category: 'Tools-Browser'!
Item was changed:
----- Method: MessageNames>>buildSearchPaneWith: (in category 'toolbuilder') -----
buildSearchPaneWith: builder
+
+ | panelSpec textSpec buttonSpec |
+ panelSpec := builder pluggablePanelSpec new
+ layout: #horizontal;
+ children: OrderedCollection new;
+ yourself.
+
- | textSpec |
textSpec := builder pluggableInputFieldSpec new.
textSpec
+ model: searchString;
+ help: 'Type here, then hit Search.' translated;
+ getText: #contents;
+ setText: #contents:.
+ panelSpec children add: textSpec.
+
+ buttonSpec := builder pluggableActionButtonSpec new.
+ buttonSpec
model: self;
+ label: 'Search';
+ action: #doSearch;
+ horizontalResizing: #shrinkWrap.
+ panelSpec children add: buttonSpec.
+
+ ^ panelSpec!
- name: #search;
- getText: #searchString;
- setText: #searchString:notifying:.
- ^textSpec!
Item was changed:
----- Method: MessageNames>>buildWith: (in category 'toolbuilder') -----
buildWith: builder
"ToolBuilder open: MessageNames new"
+
+ | windowSpec max searchHeight |
- | windowSpec max buttonSpec result |
max := self wantsOptionalButtons ifTrue:[0.42] ifFalse:[0.5].
+ searchHeight := Preferences standardDefaultTextFont height * 2.
+
windowSpec := self buildWindowWith: builder specs: {
+ (self topConstantHeightFrame: searchHeight fromLeft: 0 width: 0.5) -> [self buildSearchPaneWith: builder].
+ (self frameOffsetFromTop: searchHeight fromLeft: 0 width: 0.5 bottomFraction: max) -> [self buildSelectorListWith: builder].
- (0.15 at 0 corner: 0.5 at 0.08) -> [self buildSearchPaneWith: builder].
- (0 at 0.08 corner: 0.5 at max) -> [self buildSelectorListWith: builder].
(0.5 at 0.0 corner: 1.0 at max) -> [self buildMessageListWith: builder].
(0 at max corner: 1 at 1) -> [self buildCodePaneWith: builder].
}.
+ ^ builder build: windowSpec!
- buttonSpec := builder pluggableActionButtonSpec new.
- buttonSpec
- model: self;
- label: 'Search';
- action: [self doSearchFrom: searchPane];
- frame: (0.0 at 0 corner: 0.15 at 0.08).
- windowSpec children add: buttonSpec.
-
- result := builder build: windowSpec.
- searchPane := builder widgetAt: #search.
- ^result!
Item was added:
+ ----- Method: MessageNames>>computeMessageList (in category 'search') -----
+ computeMessageList
+
+ ^ selectorListIndex = 0
+ ifTrue: [#()]
+ ifFalse: [self systemNavigation
+ allImplementorsOf: (selectorList at: selectorListIndex)]!
Item was added:
+ ----- Method: MessageNames>>computeSelectorListFrom: (in category 'search') -----
+ computeSelectorListFrom: searchString
+ "Compute selector list from search string. The searchString is a list of expressions separated by ;. Each expression is matched individually. An expression can be a simple string (same as *expression*), a string with double quotes (exact match) or a match expression (see String >> #match:)."
+
+ ^ (Array streamContents: [ :stream |
+ (searchString findBetweenSubStrs: ';') do: [ :selPat |
+ (selPat first = $" and: [ selPat last = $" and: [ selPat size > 2 ] ])
+ ifTrue: [
+ Symbol
+ hasInterned: (selPat copyFrom: 2 to: selPat size - 1)
+ ifTrue: [ :sym | stream nextPut: sym ] ]
+ ifFalse: [
+ | raw n m |
+ n := selPat occurrencesOf: $*.
+ m := selPat occurrencesOf: $#.
+ raw := ((n > 0 or: [ m > 0 ]) and: [ selPat size > (n + m) ])
+ ifTrue: [ Symbol selectorsMatching: selPat ]
+ ifFalse: [ Symbol selectorsContaining: selPat ].
+ stream nextPutAll: raw ] ] ])
+ sort: [ :x :y | x caseInsensitiveLessOrEqual: y ]!
Item was removed:
- ----- Method: MessageNames>>computeSelectorListFromSearchString (in category 'search') -----
- computeSelectorListFromSearchString
- "Compute selector list from search string. The searchString is a list of expressions separated by ;. Each expression is matched individually. An expression can be a simple string (same as *expression*), a string with double quotes (exact match) or a match expression (see String >> #match:)."
-
- searchString := searchString asString copyWithout: $ . "?dubious?"
- ^selectorList := Cursor wait showWhile: [
- (Array streamContents: [ :stream |
- (searchString findBetweenSubStrs: ';') do: [ :selPat |
- (selPat first = $" and: [ selPat last = $" and: [ selPat size > 2 ] ])
- ifTrue: [
- Symbol
- hasInterned: (selPat copyFrom: 2 to: selPat size - 1)
- ifTrue: [ :sym | stream nextPut: sym ] ]
- ifFalse: [
- | raw n m |
- n := selPat occurrencesOf: $*.
- m := selPat occurrencesOf: $#.
- raw := ((n > 0 or: [ m > 0 ]) and: [ selPat size > (n + m) ])
- ifTrue: [ Symbol selectorsMatching: selPat ]
- ifFalse: [ Symbol selectorsContaining: selPat ].
- stream nextPutAll: raw ] ] ])
- sort: [ :x :y | x caseInsensitiveLessOrEqual: y ] ]!
Item was removed:
- ----- Method: MessageNames>>defaultBrowserTitle (in category 'initialization') -----
- defaultBrowserTitle
- ^ 'Message Names'!
Item was added:
+ ----- Method: MessageNames>>doSearch (in category 'search') -----
+ doSearch
+ "The user hit the Search button -- treat it as a synonym for the user having hit the Return or Enter (or cmd-s) in the type-in pane"
+
+ searchString changed: #acceptChanges.!
Item was added:
+ ----- Method: MessageNames>>doSearch: (in category 'search') -----
+ doSearch: aSearchString
+
+ | normalizedSearchString |
+ normalizedSearchString := aSearchString asString copyWithout: Character space.
+
+ Cursor wait showWhile: [
+ self selectorList: (self computeSelectorListFrom: normalizedSearchString)].
+
+ ^ true!
Item was removed:
- ----- Method: MessageNames>>doSearchFrom: (in category 'search') -----
- doSearchFrom: aPane
- "The user hit the Search button -- treat it as a synonym for the user having hit the Return or Enter (or cmd-s) in the type-in pane"
-
- aPane accept.
- aPane selectAll!
Item was added:
+ ----- Method: MessageNames>>frameOffsetFromTop:fromLeft:width:bottomFraction: (in category 'toolbuilder') -----
+ frameOffsetFromTop: height fromLeft: leftFraction width: rightFraction bottomFraction: bottomFraction
+ ^LayoutFrame new
+ topFraction: 0 offset: height;
+ leftFraction: leftFraction offset: 0;
+ rightFraction: (leftFraction + rightFraction) offset: 0;
+ bottomFraction: bottomFraction offset: 0;
+ yourself.!
Item was added:
+ ----- Method: MessageNames>>initialize (in category 'initialization') -----
+ initialize
+
+ super initialize.
+
+ searchString := ValueHolder new contents: ''.
+ searchString addDependent: self.
+
+ selectorList := #().
+ selectorListIndex := 0.!
Item was added:
+ ----- Method: MessageNames>>labelString (in category 'initialization') -----
+ labelString
+
+ ^ self searchString
+ ifEmpty: ['Message Names']
+ ifNotEmpty: [:s | 'Message names containing "', s asString asLowercase, '"']!
Item was removed:
- ----- Method: MessageNames>>messageList (in category 'selector list') -----
- messageList
- "Answer the receiver's message list, computing it if necessary. The way
- to force a recomputation is to set the messageList to nil"
- messageList
- ifNil: [messageList := selectorListIndex = 0
- ifTrue: [#()]
- ifFalse: [self systemNavigation
- allImplementorsOf: (selectorList at: selectorListIndex)].
- self
- messageListIndex: (messageList size > 0
- ifTrue: [1]
- ifFalse: [0])].
- ^ messageList!
Item was added:
+ ----- Method: MessageNames>>messageList: (in category 'message list') -----
+ messageList: someObjects
+
+ messageList := someObjects.
+ self changed: #messageList.
+
+ self messageListIndex: (messageList size > 0
+ ifTrue: [1]
+ ifFalse: [0]).!
Item was changed:
----- Method: MessageNames>>searchString (in category 'search') -----
searchString
- "Answer the current searchString, initializing it if need be"
+ ^ searchString contents!
- | pane |
- searchString isEmptyOrNil ifTrue:
- [searchString := 'type here, then hit Search'.
- pane := self containingWindow findDeepSubmorphThat:
- [:m | m knownName = 'Search'] ifAbsent: ["this happens during window creation" ^ searchString].
- pane setText: searchString.
- pane setTextMorphToSelectAllOnMouseEnter.
- pane selectAll].
- ^ searchString!
Item was changed:
----- Method: MessageNames>>searchString: (in category 'search') -----
searchString: aString
+
+ searchString contents: aString.!
- "Set the current searchString"
- self searchString: aString notifying: nil!
Item was removed:
- ----- Method: MessageNames>>searchString:notifying: (in category 'search') -----
- searchString: aString notifying: aController
- "Take what the user typed and find all selectors containing it"
-
- searchString := aString asString copyWithout: $ .
- self containingWindow ifNotNil:[:w| w setLabel: 'Message names containing "', searchString asLowercase, '"'].
- selectorList := nil.
- self changed: #selectorList.
- self changed: #messageList.
- ^ true!
Item was changed:
+ ----- Method: MessageNames>>selectedMessageName (in category 'message list') -----
- ----- Method: MessageNames>>selectedMessageName (in category 'selection') -----
selectedMessageName
selectorList basicSize = 0 ifTrue: [^ nil]. "Deals with selectorList nil or empty"
^selectorList at: (selectorListIndex max: 1) ifAbsent: [nil] "If no selection we can still find a selector"!
Item was changed:
----- Method: MessageNames>>selectorList (in category 'selector list') -----
selectorList
- "Answer the selectorList"
- selectorList ifNil:
- [self computeSelectorListFromSearchString.
- selectorListIndex := selectorList size > 0
- ifTrue: [1]
- ifFalse: [0].
- messageList := nil].
^ selectorList!
Item was added:
+ ----- Method: MessageNames>>selectorList: (in category 'selector list') -----
+ selectorList: someObjects
+ "Answer the selectorList"
+
+ selectorList := someObjects.
+ self changed: #selectorList.
+
+ "Select first result if any."
+ self selectorListIndex: (selectorList size > 0
+ ifTrue: [1]
+ ifFalse: [0]).!
Item was changed:
----- Method: MessageNames>>selectorListIndex: (in category 'selector list') -----
selectorListIndex: anInteger
"Set the selectorListIndex as specified, and propagate consequences"
selectorListIndex := anInteger.
- selectorListIndex = 0
- ifTrue: [^ self].
- messageList := nil.
self changed: #selectorListIndex.
+
+ messageList := self computeMessageList.
+ self changed: #messageList.!
- self changed: #messageList!
Item was changed:
+ ----- Method: MessageNames>>selectorListKey:from: (in category 'selector list') -----
- ----- Method: MessageNames>>selectorListKey:from: (in category 'initialization') -----
selectorListKey: aChar from: view
"Respond to a Command key in the message-list pane."
aChar == $n ifTrue: [^ self browseSenders].
aChar == $c ifTrue: [^ self copyName].
aChar == $b ifTrue: [^ self browseMethodFull].
!
Item was changed:
----- Method: MessageNames>>showOnlyImplementedSelectors (in category 'search') -----
showOnlyImplementedSelectors
"Caution -- can be slow!! Filter my selector list down such that it only
shows selectors that are actually implemented somewhere in the system."
+ self okToChange ifFalse: [^ self].
+
+ Cursor wait showWhile: [
+ self selectorList: (self systemNavigation allSelectorsWithAnyImplementorsIn: selectorList)].!
- self okToChange
- ifTrue: [Cursor wait
- showWhile: [selectorList := self systemNavigation allSelectorsWithAnyImplementorsIn: selectorList.
- self changed: #selectorList.
- self changed: #messageList]]!
Item was changed:
+ ----- Method: MessageNames>>topConstantHeightFrame:fromLeft:width: (in category 'toolbuilder') -----
- ----- Method: MessageNames>>topConstantHeightFrame:fromLeft:width: (in category 'as yet unclassified') -----
topConstantHeightFrame: height fromLeft: leftFraction width: rightFraction
^LayoutFrame new
topFraction: 0 offset: 0;
leftFraction: leftFraction offset: 0;
rightFraction: (leftFraction + rightFraction) offset: 0;
bottomFraction: 0 offset: height;
yourself.!
Item was added:
+ ----- Method: MessageNames>>update: (in category 'updating') -----
+ update: aspect
+
+ aspect == #contents
+ ifTrue: [
+ self changed: #labelString.
+ self doSearch: self searchString].
+
+ super update: aspect.!
More information about the Squeak-dev
mailing list
|