Marcel Taeumel uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-mt.326.mcz ==================== Summary ==================== Name: EToys-mt.326 Author: mt Time: 6 May 2018, 3:18:35.522836 pm UUID: 95d9813d-1659-9b4f-9cc6-d290709bf39a Ancestors: EToys-tpr.325 Supplement to refactoring in Morphic-mt.1427. =============== Diff against EToys-tpr.325 =============== Item was changed: ----- Method: AnonymousSoundMorph>>sound:interimName: (in category 'initialization') ----- sound: aSampledSound interimName: anInterimName "Establish the sound object and an interim name." | aStringMorph | self removeAllMorphs. self hResizing: #shrinkWrap; vResizing: #shrinkWrap. + self borderWidth: 2. - borderWidth := 2. self listDirection: #topToBottom. sound := aSampledSound. interimName := anInterimName. aStringMorph := StringMorph contents: interimName font: ScriptingSystem fontForEToyButtons. self addMorphBack: aStringMorph. self addButtonRow. self balloonTextSelector: #soundMorphHelpString. self setNameTo: interimName! Item was changed: ----- Method: CalendarMorph>>newButtonWithContents: (in category 'building') ----- newButtonWithContents: aByteString ^SimpleButtonMorph new label: aByteString; color: (self color mixed: 0.5 with: Color gray); + borderStyle: (BorderStyle raised width: 2)! - borderColor: #raised; - borderWidth: 2! Item was changed: ----- Method: CalendarMorph>>newDateButtonWithContents: (in category 'building') ----- newDateButtonWithContents: aByteString ^SimpleButtonMorph new label: aByteString; cornerStyle: #square; color: self color muchLighter; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; width: 30! Item was changed: ----- Method: ChessMorph>>addButtonRow (in category 'initialize') ----- addButtonRow | r m | r := AlignmentMorph newRow hResizing: #shrinkWrap; vResizing: #shrinkWrap; color: Color transparent. + r cellInset: 2. r addMorphBack: (self buttonName: ' New ' translated action: #newGame). r addMorphBack: (self buttonName: ' Help ' translated action: #findBestMove). r addMorphBack: (self buttonName: ' Play ' translated action: #thinkAndMove). r addMorphBack: (self buttonName: ' Auto ' translated action: #autoPlay). r addMorphBack: (self buttonName: ' Undo ' translated action: #undoMove). r addMorphBack: (self buttonName: ' Redo ' translated action: #redoMove). r addMorphBack: (self buttonName: ' Quit ' translated action: #delete). r disableTableLayout: true. r align: r bounds topLeft with: self layoutBounds topLeft. self addMorphFront: r. m := UpdatingStringMorph on: self selector: #statusString. m useStringFormat. m disableTableLayout: true. m align: m bounds topLeft with: r fullBounds bottomLeft. self addMorphFront: m.! Item was changed: ----- Method: ChessMorph>>buttonName:action: (in category 'initialize') ----- buttonName: aString action: aSymbol ^ SimpleButtonMorph new target: self; label: aString; actionSelector: aSymbol; color: (Color gray: 0.8); "old color" fillStyle: self buttonFillStyle; + borderWidth: 1; + borderRaised. - borderWidth: 0; - borderColor: #raised. ! Item was changed: ----- Method: ChessMorph>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor + ^ Color transparent! - "answer the default border color/fill style for the receiver" - ^ #raised! Item was added: + ----- Method: ChessMorph>>defaultBorderStyle (in category 'initialization') ----- + defaultBorderStyle + ^ BorderStyle raised! Item was changed: ----- Method: ChessMorph>>initialize (in category 'initialization') ----- initialize "initialize the state of the receiver" super initialize. "" animateMove := false. autoPlay := false. + self cornerStyle: #square. - self cornerStyle: #rounded. self layoutPolicy: TableLayout new. self listDirection: #leftToRight; wrapDirection: #bottomToTop. self addSquares. self addButtonRow. self newGame! Item was changed: ----- Method: CommandTilesMorph>>initialize (in category 'initialization') ----- initialize super initialize. self wrapCentering: #center; cellPositioning: #leftCenter. self hResizing: #shrinkWrap. + self borderWidth: 0. - borderWidth := 0. self layoutInset: 0. self extent: 5@5. "will grow to fit" ! Item was changed: ----- Method: EToyProjectHistoryMorph>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor + ^ Color transparent! - "answer the default border color/fill style for the receiver" - ^ #raised! Item was added: + ----- Method: EToyProjectHistoryMorph>>defaultBorderStyle (in category 'initialization') ----- + defaultBorderStyle + ^ BorderStyle raised! Item was changed: ----- Method: EToyProjectHistoryMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | history r1 | history := ProjectHistory currentHistory mostRecentCopy. changeCounter := ProjectHistory changeCounter. self removeAllMorphs. self rubberBandCells: false. "enable growing" r1 := self addARow: { self inAColumn: { StringMorph new contents: 'Jump...' translated; lock. }. }. r1 on: #mouseUp send: #jumpToProject to: self. history do: [ :each | ( self addARow: { (self inAColumn: { StretchyImageMorph new form: each second; minWidth: 35; minHeight: 35; lock }) vResizing: #spaceFill. self inAColumn: { StringMorph new contents: each first; lock. "StringMorph new contents: each fourth first; lock." }. (self inAColumn: { StringMorph new color: Color red; contents: 'X'; on: #mouseDown send: #confirmedDelete:evt:from: to: self withValue: each fourth first }) hResizing: #rigid. } ) color: Color paleYellow; + borderStyle: (BorderStyle raised width: 1); - borderWidth: 1; - borderColor: #raised; vResizing: #spaceFill; on: #mouseUp send: #mouseUp:in: to: self; on: #mouseDown send: #mouseDown:in: to: self; on: #mouseMove send: #mouseMove:in: to: self; on: #mouseLeave send: #mouseLeave:in: to: self; setProperty: #projectParametersTuple toValue: each; setBalloonText: (each third isEmptyOrNil ifTrue: ['not saved'] ifFalse: [each third]) ]. "--- newTuple := { aProject name. aProject thumbnail. aProject url. WeakArray with: aProject. }. ---"! Item was changed: ----- Method: FishEyeMorph>>extent: (in category 'geometry') ----- extent: aPoint "Round to a number divisible by grid. Note that the superclass has its own implementation." | g gridSize | gridSize := self gridSizeFor: aPoint. "self halt." + g := (aPoint - (2 * self borderWidth)) // gridSize. - g := (aPoint - (2 * borderWidth)) // gridSize. srcExtent := g * gridSize. gridNum := g. ^super extent: self defaultExtent! Item was changed: ----- Method: FreeCell>>buildButton:target:label:selector: (in category 'private') ----- buildButton: aButton target: aTarget label: aLabel selector: aSelector "wrap a button or switch in an alignmentMorph to provide some space around the button" | a | aButton target: aTarget; label: aLabel; actionSelector: aSelector; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; color: Color gray. a := AlignmentMorph newColumn wrapCentering: #center; cellPositioning: #topCenter; hResizing: #shrinkWrap; vResizing: #shrinkWrap; color: Color transparent; layoutInset: 1. a addMorph: aButton. ^ a ! Item was changed: ----- Method: FreeCell>>makeControlBar (in category 'initialization') ----- makeControlBar ^AlignmentMorph newRow color: self colorNearBottom; + borderStyle: (BorderStyle inset width: 2); - borderColor: #inset; - borderWidth: 2; layoutInset: 0; hResizing: #spaceFill; vResizing: #shrinkWrap; wrapCentering: #center; cellPositioning: #leftCenter; yourself.! Item was changed: ----- Method: FreeCellStatistics>>buildButton:target:label:selector: (in category 'user interface') ----- buildButton: aButton target: aTarget label: aLabel selector: aSelector "wrap a button or switch in an alignmentMorph to provide some space around the button" | a | aButton target: aTarget; label: aLabel; actionSelector: aSelector; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; color: Color gray. a := AlignmentMorph newColumn wrapCentering: #center; cellPositioning: #topCenter; hResizing: #spaceFill; vResizing: #shrinkWrap; color: Color transparent; layoutInset: 1. a addMorph: aButton. ^ a ! Item was changed: ----- Method: FreeCellStatistics>>makeControls (in category 'user interface') ----- makeControls | row | row := AlignmentMorph newRow. row wrapCentering: #center; cellPositioning: #leftCenter; hResizing: #spaceFill; vResizing: #shrinkWrap; color: self color; + borderStyle: (BorderStyle inset width: 2); - borderWidth: 2; - borderColor: #inset; addMorphBack: self makeOkButton; addMorphBack: self makeResetButton. ^row.! Item was changed: ----- Method: FreeCellStatistics>>makeStatistics (in category 'user interface') ----- makeStatistics | row | row := AlignmentMorph newRow. row wrapCentering: #center; cellPositioning: #leftCenter; hResizing: #spaceFill; vResizing: #spaceFill; color: self color; + borderStyle: (BorderStyle inset width: 2); - borderWidth: 2; - borderColor: #inset; addMorphBack: (AlignmentMorph newColumn wrapCentering: #center; cellPositioning: #topCenter; color: self color; addMorph: (statsMorph := TextMorph new contents: self statsText)). ^row.! Item was changed: ----- Method: HTTPProxyEditor>>updateWidgets (in category 'initialization') ----- updateWidgets "update the receiver's widgets" acceptWidget isNil ifFalse: ["" acceptWidget color: Color lightGreen; + borderStyle: (BorderStyle raised width: 2)]. - borderWidth: 2; - borderColor: #raised]. cancelWidget isNil ifFalse: ["" cancelWidget color: Color lightRed; + borderStyle: (BorderStyle raised width: 2)]. - borderWidth: 2; - borderColor: #raised]. "" serverNameLabelWidget isNil ifFalse: ["" serverNameLabelWidget color: self paneColor lighter; + borderStyle: (BorderStyle raised width: serverNameLabelWidget borderWidth)]. - borderColor: #raised]. portLabelWidget isNil ifFalse: ["" portLabelWidget color: self paneColor lighter; + borderStyle: (BorderStyle raised width: portLabelWidget borderWidth)]! - borderColor: #raised]! Item was changed: ----- Method: IconicButtonWithLabel>>labelGraphic:color:andLabel: (in category 'as yet unclassified') ----- labelGraphic: aForm color: nonTranslucent andLabel: aStringMorph | graphicalMorph labeledItem actualForm | labeledItem := AlignmentMorph newColumn. labeledItem hResizing: #shrinkWrap. labeledItem vResizing: #shrinkWrap. labeledItem color: nonTranslucent. labeledItem borderWidth: 0. labeledItem layoutInset: 4@0; cellPositioning: #center. self removeAllMorphs. actualForm := (Form extent: aForm extent depth: 32) fillColor: nonTranslucent. aForm displayOn: actualForm at: 0@0 rule: 34. graphicalMorph := SketchMorph withForm: actualForm. labeledItem addMorph: graphicalMorph. labeledItem addMorphBack: (Morph new extent: (4@4)) beTransparent. aStringMorph ifNotNil: [ labeledItem addMorphBack: aStringMorph ]. self addMorph: labeledItem. + self extent: submorphs first fullBounds extent + (self borderWidth + 6). - self extent: submorphs first fullBounds extent + (borderWidth + 6). labeledItem lock. ! Item was changed: ----- Method: IconicButtonWithLabel>>labelString: (in category 'as yet unclassified') ----- labelString: aString labelMorph ifNotNil: [ labelMorph contents: aString. + self extent: self firstSubmorph fullBounds extent + (self borderWidth + 6). - self extent: submorphs first fullBounds extent + (borderWidth + 6). ]. ! Item was changed: ----- Method: MidiInputMorph>>addChannelControlsFor: (in category 'as yet unclassified') ----- addChannelControlsFor: channelIndex | r divider col | r := self makeRow hResizing: #shrinkWrap; vResizing: #shrinkWrap. r addMorphBack: (self channelNumAndMuteButtonFor: channelIndex). r addMorphBack: (Morph new extent: 10@5; color: color). "spacer" r addMorphBack: (self panAndVolControlsFor: channelIndex). divider := AlignmentMorph new extent: 10@1; - borderWidth: 1; layoutInset: 0; + borderStyle: (BorderStyle raised width: 1); - borderColor: #raised; color: color; hResizing: #spaceFill; vResizing: #rigid. col := self lastSubmorph. col addMorphBack: divider. col addMorphBack: r. ! Item was changed: ----- Method: MidiInputMorph>>makeControls (in category 'as yet unclassified') ----- makeControls | bb r reverbSwitch onOffSwitch | bb := SimpleButtonMorph new target: self; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; color: color. r := AlignmentMorph newRow. r color: bb color; borderWidth: 0; layoutInset: 0. r hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 5@5. r addMorphBack: ( bb label: '<>'; actWhen: #buttonDown; actionSelector: #invokeMenu). onOffSwitch := SimpleSwitchMorph new offColor: color; onColor: (Color r: 1.0 g: 0.6 b: 0.6); borderWidth: 2; label: 'On'; actionSelector: #toggleOnOff; target: self; setSwitchState: false. r addMorphBack: onOffSwitch. reverbSwitch := SimpleSwitchMorph new offColor: color; onColor: (Color r: 1.0 g: 0.6 b: 0.6); borderWidth: 2; label: 'Reverb Disable'; actionSelector: #disableReverb:; target: self; setSwitchState: SoundPlayer isReverbOn not. r addMorphBack: reverbSwitch. ^ r ! Item was changed: ----- Method: Mines>>buildButton:target:label:selector: (in category 'initialize') ----- buildButton: aButton target: aTarget label: aLabel selector: aSelector "wrap a button or switch in an alignmentMorph to allow a row of buttons to fill space" | a | aButton target: aTarget; label: aLabel; actionSelector: aSelector; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; color: color. a := AlignmentMorph newColumn wrapCentering: #center; cellPositioning: #topCenter; hResizing: #spaceFill; vResizing: #shrinkWrap; color: color. a addMorph: aButton. ^ a ! Item was changed: ----- Method: Mines>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor + ^ Color transparent! - "answer the default border color/fill style for the receiver" - ^ #raised! Item was added: + ----- Method: Mines>>defaultBorderStyle (in category 'initialization') ----- + defaultBorderStyle + ^ BorderStyle raised! Item was changed: ----- Method: Mines>>makeControls (in category 'initialize') ----- makeControls | row | row := AlignmentMorph newRow color: color; borderWidth: 2; layoutInset: 3. + row borderStyle: BorderStyle inset. - row borderColor: #inset. row hResizing: #spaceFill; vResizing: #shrinkWrap; wrapCentering: #center; cellPositioning: #leftCenter; extent: 5 @ 5. row addMorph: (self buildButton: SimpleSwitchMorph new target: self label: ' Help ' translated selector: #help:). row addMorph: (self buildButton: SimpleButtonMorph new target: self label: ' Quit ' translated selector: #delete). "row addMorph: (self buildButton: SimpleButtonMorph new target: self label: ' Hint ' translated selector: #hint)." row addMorph: (self buildButton: SimpleButtonMorph new target: self label: ' New game ' translated selector: #newGame). minesDisplay := LedMorph new digits: 2; extent: 2 * 10 @ 15. row addMorph: (self wrapPanel: minesDisplay label: 'Mines:' translated). timeDisplay := LedTimerMorph new digits: 3; extent: 3 * 10 @ 15. row addMorph: (self wrapPanel: timeDisplay label: 'Time:' translated). ^ row! Item was changed: ----- Method: MinesBoard>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor + ^ Color transparent! - "answer the default border color/fill style for the receiver" - ^ #inset! Item was added: + ----- Method: MinesBoard>>defaultBorderStyle (in category 'initialization') ----- + defaultBorderStyle + ^ BorderStyle inset! Item was changed: ----- Method: MinesTile>>drawOn: (in category 'drawing') ----- drawOn: aCanvas "Draw a rectangle with a solid, inset, or raised border. Note: the raised border color *and* the inset border color are generated from the receiver's own color, instead of having the inset border color generated from the owner's color, as in BorderedMorph." | font rct | + super drawOn: aCanvas. + + self borderStyle style == #inset ifTrue: [ - - borderWidth = 0 ifTrue: [ "no border" - aCanvas fillRectangle: bounds color: color. - ^ self.]. - - borderColor == #raised ifTrue: [ - ^ aCanvas frameAndFillRectangle: bounds - fillColor: color - borderWidth: borderWidth - topLeftColor: color lighter lighter - bottomRightColor: color darker darker darker]. - - borderColor == #inset ifTrue: [ - aCanvas frameAndFillRectangle: bounds - fillColor: color - borderWidth: 1 " borderWidth" - topLeftColor: (color darker darker darker) - bottomRightColor: color lighter. self isMine ifTrue: [ font := StrikeFont familyName: 'Atlanta' size: 22 emphasized: 1. + rct := self bounds insetBy: ((self bounds width) - (font widthOfString: '*'))/2@0. - rct := bounds insetBy: ((bounds width) - (font widthOfString: '*'))/2@0. rct := rct top: rct top + 1. aCanvas drawString: '*' in: (rct translateBy: 1@1) font: font color: Color black. ^ aCanvas drawString: '*' in: rct font: font color: Color red .]. self nearMines > 0 ifTrue: [ font := StrikeFont familyName: 'ComicBold' size: 22 emphasized: 1. + rct := self bounds insetBy: ((self bounds width) - (font widthOfString: nearMines asString))/2@0. - rct := bounds insetBy: ((bounds width) - (font widthOfString: nearMines asString))/2@0. rct := rct top: rct top + 1. aCanvas drawString: nearMines asString in: (rct translateBy: 1@1) font: font color: Color black. + ^ aCanvas drawString: nearMines asString in: rct font: font color: ((palette at: nearMines) ) .]].! - ^ aCanvas drawString: nearMines asString in: rct font: font color: ((palette at: nearMines) ) .]. - ^self. ]. - - "solid color border" - aCanvas frameAndFillRectangle: bounds - fillColor: color - borderWidth: borderWidth - borderColor: borderColor.! Item was changed: ----- Method: MinesTile>>switchState: (in category 'accessing') ----- switchState: aBoolean switchState := aBoolean. disabled ifFalse: [switchState ifTrue:[ "flag ifTrue: [self setFlag]." "if this is a flagged tile, unflag it." + self borderStyle: (BorderStyle inset width: 1). - self borderColor: #inset. self color: onColor] ifFalse:[ + self borderStyle: (BorderStyle raised width: 3). - self borderColor: #raised. self color: offColor]]! Item was changed: ----- Method: NewVariableDialogMorph>>buildDecimalPlacesButton (in category 'build') ----- buildDecimalPlacesButton | button | button := SimpleButtonMorph new labelString: self decimalPlaces asString font: Preferences standardEToysButtonFont; color: (Color r: 0.806 g: 1.0 b: 0.645); target: self; actionSelector: #chooseDecimalPlaces; extent: 200 @ (TextStyle defaultFont height + 10); cornerStyle: #square; + borderStyle: BorderStyle raised; - borderColor: #raised; yourself. self addArrowsOn: button. ^ button ! Item was changed: ----- Method: NewVariableDialogMorph>>buildVarTypeButton (in category 'build') ----- buildVarTypeButton | button | button := SimpleButtonMorph new labelString: self varType translated font: Preferences standardEToysButtonFont; color: (Color r: 0.806 g: 1.0 b: 0.645); target: self; actionSelector: #chooseType; extent: 200 @ (TextStyle defaultFont height + 10); cornerStyle: #square; + borderStyle: BorderStyle raised; - borderColor: #raised; yourself. self addArrowsOn: button. ^ button ! Item was changed: ----- Method: PDAClockMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas + aCanvas frameAndFillRectangle: self bounds fillColor: backgroundColor + borderWidth: self borderWidth borderColor: self borderColor. - aCanvas frameAndFillRectangle: bounds fillColor: backgroundColor - borderWidth: 1 borderColor: borderColor. super drawOn: aCanvas. ! Item was changed: ----- Method: PlayingCardDeck>>initialize (in category 'initialization') ----- initialize super initialize. self cellPositioning: #topLeft. self reverseTableCells: true. self layout: #grid. self hResizing: #shrinkWrap. self vResizing: #shrinkWrap. + self borderWidth: 0. - borderWidth := 0. self layoutInset: 0. stackingPolicy := #stagger. stackingOrder := #ascending. emptyDropPolicy := #any. self newSeed. ^self! Item was changed: ----- Method: RecordingControls>>initialize (in category 'initialization') ----- initialize "Initialize the receiver." | r full | super initialize. self hResizing: #shrinkWrap; vResizing: #shrinkWrap. + self borderWidth: 2. - borderWidth := 2. self listDirection: #topToBottom. recorder := SoundRecorder new. recordingSaved := false. full := self addButtonRows. self changeCodec: OggSpeexCodec name: 'Speex'. "self addRecordLevelSliderIn: full." "Doesn't work in most or maybe even all platforms..." r := AlignmentMorph newRow vResizing: #shrinkWrap. r addMorphBack: (self makeRecordMeterIn: full). self addMorphBack: r. self extent: 10@10. "make minimum size" self setButtonEnablement ! Item was changed: ----- Method: RulerMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas | s | super drawOn: aCanvas. s := self width printString, 'x', self height printString. + aCanvas drawString: s in: (self bounds insetBy: self borderWidth + 5) font: nil color: Color red. - aCanvas drawString: s in: (bounds insetBy: borderWidth + 5) font: nil color: Color red. ! Item was changed: ----- Method: SameGame>>buildButton:target:label:selector: (in category 'initialization') ----- buildButton: aButton target: aTarget label: aLabel selector: aSelector "wrap a button or switch in an alignmentMorph to allow a row of buttons to fill space" | a | aButton target: aTarget; label: aLabel; actionSelector: aSelector; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; color: color. a := AlignmentMorph newColumn wrapCentering: #center; cellPositioning: #topCenter; hResizing: #spaceFill; vResizing: #shrinkWrap; color: color. a addMorph: aButton. ^ a ! Item was changed: ----- Method: SameGameTile>>setSwitchState: (in category 'accessing') ----- setSwitchState: aBoolean switchState := aBoolean. disabled ifFalse: [switchState ifTrue: + [self borderInset. - [self borderColor: #inset. self color: onColor] ifFalse: + [self borderRaised. - [self borderColor: #raised. self color: offColor]]! Item was changed: ----- Method: ScriptEditorMorph>>extent: (in category 'other') ----- extent: x | newExtent tw menu | newExtent := x max: self minWidth @ self minHeight. (tw := self findA: TwoWayScrollPane) ifNil: ["This was the old behavior" ^ super extent: newExtent]. (self hasProperty: #autoFitContents) ifTrue: [ menu := MenuMorph new defaultTarget: self. menu addUpdating: #autoFitString target: self action: #autoFitOnOff. menu addTitle: 'To resize the script, uncheck the box below' translated. menu popUpEvent: nil in: self world . ^ self]. "Allow the user to resize to any size" tw extent: ((newExtent x max: self firstSubmorph width) + @ (newExtent y - self firstSubmorph height)) - (self borderWidth * 2) + (-4 @ -4). "inset?" - @ (newExtent y - self firstSubmorph height)) - (borderWidth * 2) + (-4 @ -4). "inset?" ^ super extent: newExtent! Item was changed: ----- Method: ScriptableButton>>label: (in category 'accessing') ----- label: aString "Set the receiver's label as indicated" | aLabel | (aLabel := self findA: StringMorph) ifNotNil: [aLabel contents: aString] ifNil: [aLabel := StringMorph contents: aString font: Preferences standardEToysButtonFont. self addMorph: aLabel]. + self extent: aLabel extent + (self borderWidth + 6). - self extent: aLabel extent + (borderWidth + 6). aLabel position: self center - (aLabel extent // 2). aLabel lock! Item was changed: ----- Method: StackMorph>>formatList: (in category 'menu') ----- formatList: pl | rr ff | "Turn this plugglable list into a good looking morph." pl color: Color transparent; borderWidth: 0. pl font: ((TextStyle named: #Palatino) fontOfSize: 14). pl toggleCornerRounding; width: 252; retractableOrNot; hResizing: #spaceFill. rr := (RectangleMorph new) toggleCornerRounding; extent: pl extent + (30@30). rr color: self currentPage color; fillStyle: (ff := self currentPage fillStyle copy). ff isGradientFill ifTrue: [ rr fillStyle direction: (ff direction * self currentPage extent / rr extent) rounded. rr fillStyle origin: rr bounds origin]. rr addMorph: pl. rr layoutPolicy: TableLayout new. rr layoutInset: 10@15; cellInset: 10@15; wrapDirection: #leftToRight. + rr listCentering: #center; borderStyle: (BorderStyle raised width: 5). - rr listCentering: #center; borderWidth: 5; borderColor: #raised. "Up and down buttons on left with arrows in a holder." "lb := (RectangleMorph new) color: transparent; borderWidth: 0." ^ rr! Item was changed: ----- Method: StandardViewer>>addHeaderMorphWithBarHeight:includeDismissButton: (in category 'initialization') ----- addHeaderMorphWithBarHeight: anInteger includeDismissButton: aBoolean "Add the header morph to the receiver, using anInteger as a guide for its height, and if aBoolean is true, include a dismiss buton for it" | header aButton aTextMorph nail wrpr costs headWrapper | header := AlignmentMorph newRow color: Color transparent; wrapCentering: #center; cellPositioning: #leftCenter. aBoolean ifTrue: [aButton := self tanOButton. header addMorph: aButton. aButton actionSelector: #dismiss; setBalloonText: 'remove this entire Viewer from the screen don''t worry -- nothing will be lost!!.' translated. header addTransparentSpacerOfSize: 3]. costs := scriptedPlayer costumes. costs ifNotNil: [(costs size > 1 or: [costs size = 1 and: [costs first ~~ scriptedPlayer costume]]) ifTrue: [header addUpDownArrowsFor: self. "addArrowsOn: adds the box with two arrow at the front." (wrpr := header submorphs first) submorphs second setBalloonText: 'switch to previous costume' translated. wrpr submorphs first setBalloonText: 'switch to next costume' translated]. header addTransparentSpacerOfSize: 3]. self viewsMorph ifTrue: [scriptedPlayer costume assureExternalName]. aTextMorph := UpdatingStringMorph new useStringFormat; target: scriptedPlayer; getSelector: #nameForViewer; setNameTo: 'name'; font: ScriptingSystem fontForNameEditingInScriptor. self viewsMorph ifTrue: [aTextMorph putSelector: #setName:. aTextMorph setProperty: #okToTextEdit toValue: true]. aTextMorph step. header addMorphBack: aTextMorph. aTextMorph setBalloonText: 'Click here to edit the player''s name.' translated. header addMorphBack: ((self transparentSpacerOfSize: 0) hResizing: #spaceFill; color: Color red). aButton := ThreePhaseButtonMorph labelSymbol: #AddInstanceVariable target: scriptedPlayer actionSelector: #addInstanceVariable arguments: #(). aButton setBalloonText: 'click here to add a variable to this object.' translated. header addMorphBack: aButton. header addTransparentSpacerOfSize: 3. nail := (self hasProperty: #noInteriorThumbnail) ifFalse: [ThumbnailMorph new objectToView: scriptedPlayer viewSelector: #costume] ifTrue: [ImageMorph new image: (ScriptingSystem formAtKey: #MenuIcon)]. nail on: #mouseDown send: #offerViewerMenuForEvt:morph: to: scriptedPlayer. header addMorphBack: nail. nail setBalloonText: 'click here to get a menu that will allow you to locate this object, tear off a tile, etc..' translated. (self hasProperty: #noInteriorThumbnail) ifFalse: + [nail borderStyle: (BorderStyle raised width: 3)]. - [nail borderWidth: 3; borderColor: #raised]. header addTransparentSpacerOfSize: 3. aButton := ThreePhaseButtonMorph labelSymbol: #AddCategoryViewer. aButton actWhen: #buttonUp; target: self; actionSelector: #addCategoryViewer; setBalloonText: 'click here to add another category pane' translated. header addMorphBack: aButton. header beSticky. anInteger > 0 ifTrue: [headWrapper := AlignmentMorph newColumn color: self color. headWrapper addTransparentSpacerOfSize: (0 @ anInteger). headWrapper addMorphBack: header. self addMorph: headWrapper] ifFalse: [self addMorph: header]! Item was changed: ----- Method: SyntaxMorph>>borderColor: (in category 'accessing') ----- borderColor: colorOrSymbolOrNil + self borderColor = colorOrSymbolOrNil ifFalse: [ + super borderColor: colorOrSymbolOrNil. - borderColor = colorOrSymbolOrNil ifFalse: [ - borderColor := colorOrSymbolOrNil. self bounds area < 40000 ifTrue: [self invalidRect: self bounds] ifFalse: [(self bounds areasOutside: (self bounds insetBy: self borderWidth)) do: [:r | self invalidRect: r]]]. ! Item was changed: ----- Method: SyntaxMorph>>select (in category 'selection') ----- select self deselect. "Outer block is not colored and has no popup" (owner isSyntaxMorph and: [owner nodeClassIs: MethodNode]) ifTrue: [self setDeselectedColor "normal"] ifFalse: [self color: Color lightBrown]. + self borderStyle: (BorderStyle raised width: self borderWidth). - self borderColor: #raised. self offerPopUp.! Item was changed: ----- Method: SyntaxMorph>>trackDropZones (in category 'insertion drop zones') ----- trackDropZones | hand i localPt insertion insHt ii prevBot nxtHt d c1 c2 ht2 spacer1 spacer2 wid ht1 dc each | hand := self primaryHand. ("hand lastEvent redButtonPressed &" hand hasSubmorphs and: [(self hasOwner: hand) not]) ifFalse: [^ self]. insertion := hand firstSubmorph renderedMorph. insertion isSyntaxMorph ifFalse: [^ self]. insertion isNoun ifFalse: [(insertion nodeClassIs: CommentNode) ifFalse: [^ self]]. localPt := self globalPointToLocal: hand position. insHt := insertion height. "**just use standard line height here" self removeDropZones. "Maybe first check if in right place, then just tweak heights." i := (ii := self indexOfMorphAbove: localPt) min: submorphs size-1. prevBot := i <= 0 ifTrue: [(self innerBounds) top] ifFalse: [(self submorphs at: i) bottom]. nxtHt := (submorphs isEmpty ifTrue: [insertion] ifFalse: [self submorphs at: i+1]) height. d := ii > i ifTrue: [nxtHt "for consistent behavior at bottom"] ifFalse: [0 max: (localPt y - prevBot min: nxtHt)]. "Top and bottom spacer heights cause continuous motion..." c1 := Color transparent. c2 := Color transparent. ht2 := d*insHt//nxtHt. ht1 := insHt - ht2. + wid := self width - (2*self borderWidth) - (2*self layoutInset). - wid := self width - (2*borderWidth) - (2*self layoutInset). wid isPoint ifTrue: [wid := wid x]. (spacer1 := BorderedMorph newBounds: (0@0 extent: wid@ht1) color: (ht1 > (insHt//2) ifTrue: [c1] ifFalse: [c2])) borderWidth: 1; borderColor: spacer1 color. self privateAddMorph: spacer1 atIndex: (i+1 max: 1). (spacer2 := BorderedMorph newBounds: (0@0 extent: wid@ht2) color: (ht2 > (insHt//2+1) ifTrue: [c1] ifFalse: [c2])) borderWidth: 1; borderColor: spacer2 color. spacer1 setProperty: #dropZone toValue: true. spacer2 setProperty: #dropZone toValue: true. self privateAddMorph: spacer2 atIndex: (i+3 min: submorphs size+1). self fullBounds. "Force layout prior to testing for cursor containment" "Maintain the drop target highlight -- highlight spacer if hand is in it." {spacer1. spacer2} do: [:spacer | (spacer containsPoint: localPt) ifTrue: [spacer color: self dropColor. "Ignore border color. Maybe do it later. self borderColor = self dropColor ifTrue: [self borderColor: self stdBorderColor]"]]. "If no submorph (incl spacers) highlighted, then re-highlight the block." "Ignore border color. Maybe do it later. ((self wantsDroppedMorph: insertion event: hand lastEvent) and: [(self submorphs anySatisfy: [:m | m containsPoint: localPt]) not]) ifTrue: [self borderColor: self dropColor]. " "Dragging a tile within a Block, if beside a tile, color it a dropzone" "Transcript show: localPt y printString; space; show: submorphs first top printString; space; show: submorphs last top printString; cr." dc := self dropColor. 1 to: ((ii+4 min: submorphs size) max: 1) do: [:ind | each := submorphs at: ind. each isSyntaxMorph ifTrue: [ localPt y >= each top ifTrue: ["in this one or beyond" (localPt y < each bottom) ifTrue: [(each submorphs anySatisfy: [:m | m containsPoint: localPt]) ifTrue: [each setDeselectedColor] ifFalse: [each color: dc]] ifFalse: [each color = dc ifTrue: [each setDeselectedColor]]] ifFalse: [each color = dc ifTrue: [each setDeselectedColor]]]]. ! Item was changed: ----- Method: SyntaxMorph>>unhighlight (in category 'highlighting') ----- unhighlight + self setDeselectedColor.! - self setDeselectedColor. - - - false ifTrue: [ - self currentSelectionDo: [:innerMorph :mouseDownLoc :outerMorph | - self color: ( false - "(self == outerMorph or: [owner notNil and: [owner isSyntaxMorph not]])" - ifTrue: [self valueOfProperty: #deselectedBorderColor ifAbsent: [#raised]] - ifFalse: [self color: Color transparent] - ) - ]]. - ! Item was changed: ----- Method: SyntaxMorph>>unhighlightBorder (in category 'highlighting') ----- unhighlightBorder self currentSelectionDo: [:innerMorph :mouseDownLoc :outerMorph | self borderColor: ( (self == outerMorph or: [owner notNil and: [owner isSyntaxMorph not]]) + ifFalse: [self borderColor: self stdBorderColor] + ifTrue: [ + (self hasProperty: #deselectedBorderColor) + ifTrue: [self borderColor: (self valueOfProperty: #deselectedBorderColor)] + ifFalse: [self borderStyle: (BorderStyle raised width: self borderWidth)]] )].! - ifTrue: [self valueOfProperty: #deselectedBorderColor ifAbsent: [#raised]] - ifFalse: [self stdBorderColor] - ) - ] - ! Item was changed: ----- Method: Tetris>>buildButtonTarget:label:selector:help: (in category 'initialization') ----- buildButtonTarget: aTarget label: aLabel selector: aSelector help: aString ^self rowForButtons addMorph: ( SimpleButtonMorph new target: aTarget; label: aLabel; actionSelector: aSelector; + borderStyle: (BorderStyle raised width: 2); - borderColor: #raised; - borderWidth: 2; color: color ) ! Item was changed: ----- Method: TileMorph>>typeColor: (in category 'misc') ----- typeColor: aColor "Set the receiver's typeColor" + self borderColor: ScriptingSystem standardTileBorderColor. + - borderColor := ScriptingSystem standardTileBorderColor. typeColor := aColor. color := ScriptingSystem uniformTileInteriorColor ! Item was changed: ----- Method: WatchMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas "Draw the watch on the given canvas" | pHour pMin pSec time centerColor | time := Time now. pHour := self radius: 0.6 hourAngle: time hours + (time minutes/60.0). pMin := self radius: 0.72 hourAngle: (time minutes / 5.0). pSec := self radius: 0.8 hourAngle: (time seconds / 5.0). centerColor := cColor ifNil: [Color transparent] ifNotNil: [time hours < 12 ifTrue: [cColor muchLighter] ifFalse: [cColor]]. antialias ifTrue: [aCanvas asBalloonCanvas aaLevel: 4; + drawOval: (self bounds insetBy: self borderWidth // 2 + 1) color: self fillStyle + borderWidth: self borderWidth borderColor: self borderColor; + drawOval: (self bounds insetBy: self extent*0.35) color: centerColor - drawOval: (bounds insetBy: borderWidth // 2 + 1) color: self fillStyle - borderWidth: borderWidth borderColor: borderColor; - drawOval: (bounds insetBy: self extent*0.35) color: centerColor borderWidth: 0 borderColor: Color black; drawPolygon: {self center. pHour} color: Color transparent borderWidth: 3 borderColor: handsColor; drawPolygon: {self center. pMin} color: Color transparent borderWidth: 2 borderColor: handsColor; drawPolygon: {self center. pSec} color: Color transparent borderWidth: 1 borderColor: handsColor] ifFalse: [super drawOn: aCanvas. aCanvas + fillOval: (self bounds insetBy: self extent*0.35) color: centerColor; - fillOval: (bounds insetBy: self extent*0.35) color: centerColor; line: self center to: pHour width: 3 color: handsColor; line: self center to: pMin width: 2 color: handsColor; line: self center to: pSec width: 1 color: handsColor] ! |
Free forum by Nabble | Edit this page |