[squeak-dev] The Trunk: MorphicExtras-nice.63.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Dec 26 22:24:03 UTC 2009
Nicolas Cellier uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-nice.63.mcz
==================== Summary ====================
Name: MorphicExtras-nice.63
Author: nice
Time: 26 December 2009, 11:23:15 am
UUID: 0e933dab-d4cf-4f19-8102-6a8f95283c9b
Ancestors: MorphicExtras-ar.62
Cosmetic: puch a few temps inside closures
=============== Diff against MorphicExtras-ar.62 ===============
Item was changed:
----- Method: PartsBin>>listDirection:quadList:buttonClass: (in category 'initialization') -----
listDirection: aListDirection quadList: quadList buttonClass: buttonClass
"Initialize the receiver to run horizontally or vertically, obtaining its elements from the list of tuples of the form:
(<receiver> <selector> <label> <balloonHelp>)
Used by external package Connectors."
- | aButton aClass |
self layoutPolicy: TableLayout new.
self listDirection: aListDirection.
self wrapCentering: #topLeft.
self layoutInset: 2.
self cellPositioning: #bottomCenter.
aListDirection == #leftToRight
ifTrue:
[self vResizing: #rigid.
self hResizing: #spaceFill.
self wrapDirection: #topToBottom]
ifFalse:
[self hResizing: #rigid.
self vResizing: #spaceFill.
self wrapDirection: #leftToRight].
quadList do:
[:tuple |
+ | aButton aClass |
aClass := Smalltalk at: tuple first.
aButton := buttonClass new initializeWithThumbnail: (self class thumbnailForQuad: tuple color: self color) withLabel: tuple third andColor: self color andSend: tuple second to: aClass.
(tuple size > 3 and: [tuple fourth isEmptyOrNil not]) ifTrue:
[aButton setBalloonText: tuple fourth].
self addMorphBack: aButton]!
Item was changed:
----- Method: WaveEditor>>chooseLoopStart (in category 'menu') -----
chooseLoopStart
+ | bestLoops choice start labels values |
- | bestLoops secs choice start labels values |
possibleLoopStarts ifNil: [
Utilities
informUser: 'Finding possible loop points...' translated
during: [possibleLoopStarts := self findPossibleLoopStartsFrom: graph cursor]].
bestLoops := possibleLoopStarts copyFrom: 1 to: (100 min: possibleLoopStarts size).
labels := OrderedCollection new.
values := OrderedCollection new.
bestLoops do: [:entry |
+ | secs |
secs := ((loopEnd - entry first) asFloat / self samplingRate) roundTo: 0.01.
labels add: ('{1} cycles; {2} secs' translated format:{entry third. secs}).
values add: entry].
choice := UIManager default chooseFrom: labels values: values.
choice ifNil: [^ self].
loopCycles := choice third.
start := self fractionalLoopStartAt: choice first.
self loopLength: (loopEnd asFloat - start) + 1.0.
!
Item was changed:
----- Method: PartsBin class>>thumbnailForInstanceOf: (in category 'thumbnail cache') -----
thumbnailForInstanceOf: aMorphClass
"Answer a thumbnail for a stand-alone instance of the given class, creating it if necessary. If it is created afresh, it will also be cached at this time"
- | aThumbnail |
^ Thumbnails at: aMorphClass name ifAbsent:
+ [| aThumbnail |
+ aThumbnail := Thumbnail new makeThumbnailFromForm: aMorphClass newStandAlone imageForm.
- [aThumbnail := Thumbnail new makeThumbnailFromForm: aMorphClass newStandAlone imageForm.
self cacheThumbnail: aThumbnail forSymbol: aMorphClass name.
^ aThumbnail]
"PartsBin initialize"!
Item was changed:
----- Method: PostscriptEncoder class>>mapMacStringToPS: (in category 'configuring') -----
mapMacStringToPS: aString
+ | copy |
- | copy val newVal |
MacToPSCharacterMappings ifNil: [
MacToPSCharacterMappings := Array new: 256.
self macToPSCharacterChart do: [ :pair |
pair second = 999 ifFalse: [MacToPSCharacterMappings at: pair first put: pair second]
].
].
copy := aString copy.
copy withIndexDo: [ :ch :index |
+ | val |
(val := ch asciiValue) > 127 ifTrue: [
+ | newVal |
(newVal := MacToPSCharacterMappings at: val) ifNotNil: [
copy at: index put: newVal asCharacter
].
].
].
^copy!
Item was changed:
----- Method: SoundLoopMorph>>buildSound (in category 'as yet unclassified') -----
buildSound
"Build a compound sound for the next iteration of the loop."
+ | mixer soundMorphs |
- | mixer soundMorphs startTime pan |
mixer := MixedSound new.
mixer add: (RestSound dur: (self width - (2 * borderWidth)) / 128.0).
soundMorphs := self submorphs select: [:m | m respondsTo: #sound].
soundMorphs do: [:m |
+ | startTime pan |
startTime := (m position x - (self left + borderWidth)) / 128.0.
pan := (m position y - (self top + borderWidth)) asFloat / (self height - (2 * borderWidth) - m height).
mixer add: ((RestSound dur: startTime), m sound copy) pan: pan].
^ mixer
!
Item was changed:
----- Method: FunctionComponent>>headerString (in category 'as yet unclassified') -----
headerString
- | ps |
^ String streamContents:
+ [:s |
+ | ps |
+ s nextPutAll: self knownName.
- [:s | s nextPutAll: self knownName.
2 to: pinSpecs size do:
[:i | ps := pinSpecs at: i.
s nextPutAll: ps pinName , ': ';
nextPutAll: ps pinName , ' '].
s cr; tab; nextPutAll: '^ ']!
Item was changed:
----- Method: DSCPostscriptCanvasToDisk class>>morphAsPostscript:rotated:offsetBy:specs: (in category 'as yet unclassified') -----
morphAsPostscript: aMorph rotated: rotateFlag offsetBy: offset specs: specsOrNil
- | newFileName stream |
^[
(self new morphAsPostscript: aMorph rotated: rotateFlag offsetBy: offset) close
]
on: PickAFileToWriteNotification
do: [ :ex |
+ | newFileName stream |
newFileName := UIManager default
request: 'Name of file to write:' translated
initialAnswer: 'xxx',Time millisecondClockValue printString, self defaultExtension.
newFileName isEmptyOrNil ifFalse: [
stream := FileStream fileNamed: newFileName.
stream ifNotNil: [ex resume: stream].
].
].
!
Item was changed:
----- Method: ObjectsTool>>showCategory:fromButton: (in category 'categories') -----
showCategory: aCategoryName fromButton: aButton
"Project items from the given category into my lower pane"
+
- | quads |
"self partsBin removeAllMorphs. IMHO is redundant, "
-
Cursor wait
+ showWhile: [
+ | quads |
+ quads := OrderedCollection new.
- showWhile: [quads := OrderedCollection new.
Morph withAllSubclasses
do: [:aClass | aClass theNonMetaClass
addPartsDescriptorQuadsTo: quads
if: [:aDescription | aDescription translatedCategories includes: aCategoryName]].
quads := quads
asSortedCollection: [:q1 :q2 | q1 third <= q2 third].
self installQuads: quads fromButton: aButton]!
Item was changed:
----- Method: PostscriptCanvas>>preserveStateDuring: (in category 'drawing-support') -----
preserveStateDuring: aBlock
+ ^target preserveStateDuring: [ :innerTarget |
+ | retval saveClip saveTransform |
- | retval saveClip saveTransform |
- target preserveStateDuring: [ :innerTarget |
saveClip := clipRect.
saveTransform := currentTransformation.
gstateStack addLast: currentFont.
gstateStack addLast: currentColor.
gstateStack addLast: shadowColor.
retval := aBlock value: self.
shadowColor := gstateStack removeLast.
currentColor := gstateStack removeLast.
currentFont := gstateStack removeLast.
clipRect := saveClip.
currentTransformation := saveTransform.
+ retval
+ ].!
- ].
- ^ retval
- !
Item was changed:
----- Method: PostscriptCanvas>>transformBy:clippingTo:during:smoothing: (in category 'drawing-support') -----
transformBy: aDisplayTransform clippingTo: aClipRect during: aBlock smoothing: cellSize
| retval oldShadow |
oldShadow := shadowColor.
self comment: 'drawing clipped ' with: aClipRect.
self comment: 'drawing transformed ' with: aDisplayTransform.
+ retval := self
- self
preserveStateDuring: [:inner |
currentTransformation
ifNil: [currentTransformation := aDisplayTransform]
ifNotNil: [currentTransformation := currentTransformation composedWithLocal: aDisplayTransform].
aClipRect
ifNotNil: [clipRect := aDisplayTransform
globalBoundsToLocal: (clipRect intersect: aClipRect).
inner rect: aClipRect;
clip].
inner transformBy: aDisplayTransform.
+ aBlock value: inner].
- retval := aBlock value: inner].
self comment: 'end of drawing clipped ' with: aClipRect.
shadowColor := oldShadow.
^ retval!
Item was changed:
----- Method: ObjectsTool>>alphabeticTabs (in category 'alphabetic') -----
alphabeticTabs
"Answer a list of buttons which, when hit, will trigger the choice of a morphic category"
+ | buttonList tabLabels |
- | buttonList aButton tabLabels |
self flag: #todo. "includes non-english characters"
tabLabels := (($a to: $z) collect: [:ch | ch asString]) asOrderedCollection.
buttonList := tabLabels collect:
[:catName |
+ | aButton |
aButton := SimpleButtonMorph new label: catName.
aButton actWhen: #buttonDown.
aButton target: self; actionSelector: #showAlphabeticCategory:fromButton:; arguments: {catName. aButton}].
^ buttonList
"ObjectsTool new tabsForMorphicCategories"!
Item was changed:
----- Method: Command>>veryDeepFixupWith: (in category 'copying') -----
veryDeepFixupWith: deepCopier
- | old |
"ALL inst vars were weakly copied. If they were in the tree being copied, fix them up, otherwise point to the originals!!!!"
+ super veryDeepFixupWith: deepCopier.
+ 1 to: self class instSize do:
+ [:ii |
+ | old |
+ old := self instVarAt: ii.
+ self instVarAt: ii put: (deepCopier references at: old ifAbsent: [old])].!
-
- super veryDeepFixupWith: deepCopier.
- 1 to: self class instSize do:
- [:ii | old := self instVarAt: ii.
- self instVarAt: ii put: (deepCopier references at: old ifAbsent: [old])].
-
- !
Item was changed:
----- Method: SketchEditorMorph>>fill: (in category 'actions & preps') -----
fill: evt
"Find the area that is the same color as where you clicked. Fill it with
the current paint color."
- | box |
evt isMouseUp
ifFalse: [^ self].
"Only fill upon mouseUp"
"would like to only invalidate the area changed, but can't find out what it is."
Cursor execute
showWhile: [
+ | box |
box := paintingForm
floodFill: (self getColorFor: evt)
at: evt cursorPoint - bounds origin.
self render: (box translateBy: bounds origin)]!
Item was changed:
----- Method: PostscriptCanvas>>definePathProcIn:during: (in category 'drawing-support') -----
definePathProcIn: pathBlock during: duringBlock
"Bracket the output of pathBlock (which is passed the receiver) in
gsave
newpath
<pathBlock>
closepath
<duringBlock>
grestore
"
+ ^self
- | retval |
- self
preserveStateDuring: [:tgt |
+ | retval |
self comment: 'begin pathProc path block'.
target newpath.
pathBlock value: tgt.
target closepath.
self comment: 'begin pathProc during block'.
retval := duringBlock value: tgt.
+ self comment: 'end pathProc'.
+ retval].!
- self comment: 'end pathProc'].
- ^ retval!
Item was changed:
----- Method: Command class>>undoRedoButtons (in category 'dog simple ui') -----
undoRedoButtons
"Answer a morph that offers undo and redo buttons"
+ | wrapper |
- | aButton wrapper |
"self currentHand attachMorph: Command undoRedoButtons"
wrapper := AlignmentMorph newColumn.
wrapper color: Color veryVeryLightGray lighter;
borderWidth: 0;
layoutInset: 0;
vResizing: #shrinkWrap;
hResizing: #shrinkWrap.
#((CrudeUndo undoLastCommand 'undo last command done' undoEnabled CrudeUndoDisabled CrudeUndoDisabled)
(CrudeRedo redoNextCommand 'redo last undone command' redoEnabled CrudeRedoDisabled CrudeRedoDisabled)) do:
[:tuple |
+ | aButton |
wrapper addTransparentSpacerOfSize: (8 at 0).
aButton := UpdatingThreePhaseButtonMorph new.
aButton
onImage: (ScriptingSystem formAtKey: tuple first);
offImage: (ScriptingSystem formAtKey: tuple fifth);
pressedImage: (ScriptingSystem formAtKey: tuple sixth);
getSelector: tuple fourth;
color: Color transparent;
target: self;
actionSelector: tuple second;
setNameTo: tuple second;
setBalloonText: tuple third;
extent: aButton onImage extent.
wrapper addMorphBack: aButton.
wrapper addTransparentSpacerOfSize: (8 at 0)].
^ wrapper!
Item was changed:
----- Method: StringMorph>>handsWithMeForKeyboardFocus (in category '*MorphicExtras-accessing') -----
handsWithMeForKeyboardFocus
- | foc |
"Answer the hands that have me as their keyboard focus"
hasFocus ifFalse: [^ #()].
^ self currentWorld hands select:
+ [:aHand |
+ | foc |
+ (foc := aHand keyboardFocus) notNil and: [foc owner == self]]!
- [:aHand | (foc := aHand keyboardFocus) notNil and: [foc owner == self]]!
Item was changed:
----- Method: FatBitsPaint>>fill (in category 'menu') -----
fill
| fillPt |
Cursor blank show.
+ fillPt := Cursor crossHair showWhile:
+ [Sensor waitButton - self position].
- Cursor crossHair showWhile:
- [fillPt := Sensor waitButton - self position].
originalForm shapeFill: brushColor interiorPoint: fillPt.
self changed.
!
Item was changed:
----- Method: ZoomAndScrollControllerMorph>>targetScriptDictionary (in category 'as yet unclassified') -----
targetScriptDictionary
- | scriptDict |
target ifNil: [^Dictionary new].
^target
valueOfProperty: #namedCameraScripts
ifAbsent: [
+ | scriptDict |
scriptDict := Dictionary new.
target setProperty: #namedCameraScripts toValue: scriptDict.
scriptDict
].
!
Item was changed:
----- Method: ObjectsTool>>modeTabs (in category 'major modes') -----
modeTabs
"Answer a list of buttons which, when hit, will trigger the choice of mode of the receiver"
+ | buttonList tupleList |
- | buttonList aButton tupleList |
tupleList := #(
('alphabetic' alphabetic showAlphabeticTabs 'A separate tab for each letter of the alphabet')
('find' search showSearchPane 'Provides a type-in pane allowing you to match')
('categories' categories showCategories 'Grouped by category')
"('standard' standard showStandardPane 'Standard Squeak tools supplies for building')"
).
buttonList := tupleList collect:
[:tuple |
+ | aButton |
aButton := SimpleButtonMorph new label: tuple first translated.
aButton actWhen: #buttonUp.
aButton setProperty: #modeSymbol toValue: tuple second.
aButton target: self; actionSelector: tuple third.
aButton setBalloonText: tuple fourth translated.
aButton borderWidth: 0.
aButton].
^ buttonList
"ObjectsTool new modeTabs"!
Item was changed:
----- Method: Flaps class>>addIndividualGlobalFlapItemsTo: (in category 'menu support') -----
addIndividualGlobalFlapItemsTo: aMenu
"Add items governing the enablement of specific global flaps to aMenu"
- | anItem |
self globalFlapTabsIfAny do:
[:aFlapTab |
+ | anItem |
+ anItem := aMenu addUpdating: #globalFlapWithIDEnabledString: enablementSelector: #showSharedFlaps target: self selector: #enableDisableGlobalFlapWithID: argumentList: {aFlapTab flapID}.
- anItem _ aMenu addUpdating: #globalFlapWithIDEnabledString: enablementSelector: #showSharedFlaps target: self selector: #enableDisableGlobalFlapWithID: argumentList: {aFlapTab flapID}.
anItem wordingArgument: aFlapTab flapID.
anItem setBalloonText: aFlapTab balloonTextForFlapsMenu].!
Item was changed:
----- Method: FunctionComponent>>getText (in category 'model access') -----
getText
- | ps |
^ ('"type a function of' ,
(String streamContents:
+ [:s |
+ | ps |
+ 2 to: pinSpecs size do:
- [:s | 2 to: pinSpecs size do:
[:i | ps := pinSpecs at: i.
(i>2 and: [i = pinSpecs size]) ifTrue: [s nextPutAll: ' and'].
s nextPutAll: ' ', ps pinName]]) ,
'"') asText!
Item was changed:
----- Method: ObjectsTool>>tabsForCategories (in category 'categories') -----
tabsForCategories
"Answer a list of buttons which, when hit, will trigger the choice of a category"
+ | buttonList classes categoryList basic |
- | buttonList aButton classes categoryList basic |
classes := Morph withAllSubclasses.
categoryList := Set new.
classes do: [:aClass |
(aClass class includesSelector: #descriptionForPartsBin) ifTrue:
[categoryList addAll: aClass descriptionForPartsBin translatedCategories].
(aClass class includesSelector: #supplementaryPartsDescriptions) ifTrue:
[aClass supplementaryPartsDescriptions do:
[:aDescription | categoryList addAll: aDescription translatedCategories]]].
categoryList := OrderedCollection withAll: (categoryList asSortedArray).
basic := categoryList remove: ' Basic' translated ifAbsent: [ ].
basic ifNotNil: [ categoryList addFirst: basic ].
basic := categoryList remove: 'Basic' translated ifAbsent: [ ].
basic ifNotNil: [ categoryList addFirst: basic ].
buttonList := categoryList collect:
[:catName |
+ | aButton |
aButton := SimpleButtonMorph new label: catName.
aButton actWhen: #buttonDown.
aButton target: self; actionSelector: #showCategory:fromButton:; arguments: {catName. aButton}].
^ buttonList
"ObjectsTool new tabsForCategories"!
Item was changed:
----- Method: ObjectsTool>>showAlphabeticCategory:fromButton: (in category 'submorph access') -----
showAlphabeticCategory: aString fromButton: aButton
"Blast items beginning with a given letter into my lower pane"
- | eligibleClasses quads uc |
self partsBin removeAllMorphs.
- uc := aString asUppercase asCharacter.
Cursor wait
+ showWhile: [
+ | eligibleClasses quads uc |
+ uc := aString asUppercase asCharacter.
+ eligibleClasses := Morph withAllSubclasses.
- showWhile: [eligibleClasses := Morph withAllSubclasses.
quads := OrderedCollection new.
eligibleClasses
do: [:aClass | aClass theNonMetaClass
addPartsDescriptorQuadsTo: quads
if: [:info | info formalName translated asUppercase first = uc]].
self installQuads: quads fromButton: aButton]!
Item was changed:
----- Method: ObjectsTool>>showMorphsMatchingSearchString (in category 'search') -----
showMorphsMatchingSearchString
"Put items matching the search string into my lower pane"
- | quads |
self setSearchStringFromSearchPane.
self partsBin removeAllMorphs.
Cursor wait
+ showWhile: [
+ | quads |
+ quads := OrderedCollection new.
- showWhile: [quads := OrderedCollection new.
Morph withAllSubclasses
do: [:aClass | aClass
addPartsDescriptorQuadsTo: quads
if: [:info | info formalName translated includesSubstring: searchString caseSensitive: false]].
self installQuads: quads fromButton: nil]!
Item was changed:
----- Method: PartsBin class>>thumbnailForPartsDescription: (in category 'thumbnail cache') -----
thumbnailForPartsDescription: aPartsDescription
"Answer a thumbnail for the given parts description creating it if necessary. If it is created afresh, it will also be cached at this time"
+ | aSymbol |
- | aThumbnail aSymbol |
aSymbol := aPartsDescription formalName asSymbol.
^ Thumbnails at: aSymbol ifAbsent:
+ [| aThumbnail |
+ aThumbnail := Thumbnail new makeThumbnailFromForm: aPartsDescription sampleImageForm.
- [aThumbnail := Thumbnail new makeThumbnailFromForm: aPartsDescription sampleImageForm.
self cacheThumbnail: aThumbnail forSymbol: aSymbol.
^ aThumbnail]
"PartsBin initialize"!
Item was changed:
----- Method: BouncingAtomsMorph>>addAtoms: (in category 'other') -----
addAtoms: n
"Add a bunch of new atoms."
- | a |
n timesRepeat: [
+ | a |
a := AtomMorph new.
a randomPositionIn: bounds maxVelocity: 10.
self addMorph: a].
self stopStepping.
!
More information about the Squeak-dev
mailing list
|