'From Squeak3.1alpha of 5 February 2001 [latest update: #3736] on 26 February 2001 at 5:38:18 pm'! "Change Set: syntax4 Date: 26 February 2001 Author: Bob Arning fix scollbars that hide in one position and reappear in the same position even if window has moved"! !SyntaxMorph methodsFor: 'menus' stamp: 'RAA 2/26/2001 17:37'! addToken: aString type: aColorOrSymbol on: aNode | sMorph modifiedString noiseWord col | self flag: #emphasis:. "who needs it. who doesn't" noiseWord _ nil. sMorph _ self addString: (modifiedString _ aString). self specialBlockFormatting ifTrue: [ (self shouldBeBrokenIntoWords: aColorOrSymbol) ifTrue: [ modifiedString _ self substituteKeywordFor: aString. sMorph setProperty: #syntacticallyCorrectContents toValue: aString; contents: modifiedString. ]. (#(keyword2 upArrow) includes: aColorOrSymbol) ifTrue: [ sMorph font: (self fontToUseForSpecialWord: modifiedString) "emphasis: 1"; color: (self colorForKeywords: aString and: modifiedString). ]. aColorOrSymbol == #binary ifTrue: [sMorph color: self colorForBinaries]. ]. self alansTest1 ifTrue: [ aColorOrSymbol == #blockarg1 ifTrue: [ noiseWord _ nil. ]. (aColorOrSymbol == #variable or: [aColorOrSymbol == #tempVariable]) ifTrue: [ aString = 'self' ifTrue: [ sMorph setProperty: #wordyVariantOfSelf toValue: true. ]. noiseWord _ self noiseWordBeforeVariableNode: aNode string: aString. ]. ]. col _ (self addRow: aColorOrSymbol on: aNode) layoutInset: 1. noiseWord ifNotNil: [ col addMorphBack: (self noiseStringMorph: noiseWord); addMorphBack: (self transparentSpacerOfSize: 3@1) ]. col addMorphBack: sMorph. ^col! ! !SyntaxMorph methodsFor: 'node to morph' stamp: 'RAA 2/26/2001 17:12'! methodNodeInner: aNode selectorOrFalse: selectorOrFalse precedence: precedence arguments: arguments temporaries: temporaries primitive: primitive block: block | header selNode | selNode _ selectorOrFalse class == SelectorNode ifTrue: [selectorOrFalse] ifFalse: [SelectorNode new key: selectorOrFalse code: nil]. header _ self addRow: Color white on: selNode. precedence = 1 ifTrue: [header addToken: aNode selector type: #methodHeader1 on: selNode] ifFalse: [aNode selector keywords with: arguments do: [:kwd :arg | header addToken: kwd type: #methodHeader2 on: selNode. (arg asMorphicSyntaxIn: header) color: #blockarg2]]. aNode addCommentToMorph: self. self addTemporaries: temporaries. (primitive > 0 and: [(primitive between: 255 and: 519) not]) ifTrue: ["Dont decompile for, eg, ^ self " self addTextRow: (String streamContents: [ :strm | aNode printPrimitiveOn: strm])]. block asMorphicSyntaxIn: self. ^ self ! ! !SyntaxMorph methodsFor: 'alans styles' stamp: 'RAA 2/26/2001 17:25'! shouldBeBrokenIntoWords: aSymbol ^#(methodHeader1 methodHeader1 keyword2 upArrow tempVariable tempVariableDeclaration blockarg2) includes: aSymbol! ! !TwoWayScrollPane methodsFor: 'retractable scroll bar' stamp: 'RAA 2/26/2001 17:04'! hideOrShowScrollBar: scrollBar forRange: range (self hasProperty: #hideUnneededScrollbars) ifFalse: [^ self]. (submorphs includes: scrollBar) ifTrue: [range <= 0 ifTrue: [scrollBar model: nil; delete]] ifFalse: [range > 0 ifTrue: [scrollBar model: self. self resizeScrollBar; addMorph: scrollBar]] ! !