--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FontMenu.st Wed Jun 04 13:37:29 1997 +0200
@@ -0,0 +1,325 @@
+MenuPanel subclass:#FontMenu
+ instanceVariableNames:'model enabledChannel fontFamily fontFace fontStyle fontSize'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Interface-UIPainter'
+!
+
+!FontMenu class methodsFor:'documentation'!
+
+documentation
+"
+ FontMenu used by UIPainter
+
+ [see also:]
+ UIPainter
+ FontMenuSpec
+"
+
+
+!
+
+examples
+"
+ simple example
+ [exBegin]
+ |top|
+
+ top := StandardSystemView new.
+ top extent:250@30.
+ self origin:0.0@0.0 corner:1.0@1.0 in:top.
+ top open.
+ [exEnd]
+"
+! !
+
+!FontMenu class methodsFor:'menu spec'!
+
+menu
+
+ ^ #(#Menu #(
+ (#MenuItem
+ #'label:' ''
+ #'indication:' false
+ )
+ (#MenuItem
+ #'label:' 'family'
+ #'value:' #fontFamily:
+ #'submenu:'
+ #(#Menu #( #(#MenuItem #'label:' 'helvetica' value:#helvetica )
+ #(#MenuItem #'label:' 'courier' value:#courier )
+ #(#MenuItem #'label:' 'times' value:#times )
+ #(#MenuItem #'label:' 'clean' value:#clean )
+ #(#MenuItem #'label:' 'fixed' value:#fixed )
+ #(#MenuItem #'label:' 'lucida' value:#lucida )
+ )
+ nil
+ nil
+ )
+ )
+ (#MenuItem
+ #'label:' 'face'
+ #'value:' #fontFace:
+ #'submenu:'
+ #(#Menu #( #(#MenuItem #label: 'bold' value:#bold )
+ #(#MenuItem #label: 'medium' value:#medium )
+ )
+ nil
+ nil
+ )
+ )
+ (#MenuItem
+ #'label:' 'style'
+ #'value:' #fontStyle:
+ #'submenu:'
+ #(#Menu #( #(#MenuItem #label: 'roman' value:#roman )
+ #(#MenuItem #label: 'italic' value:#italic )
+ #(#MenuItem #label: 'oblique' value:#oblique )
+ )
+ nil
+ nil
+ )
+ )
+ (#MenuItem
+ #'label:' 'size'
+ #'value:' #fontSize:
+ #'submenu:'
+ #(#Menu #( #(#MenuItem #label: '6' value:#6 )
+ #(#MenuItem #label: '8' value:#8 )
+ #(#MenuItem #label: '10' value:#10 )
+ #(#MenuItem #label: '12' value:#12 )
+ #(#MenuItem #label: '14' value:#14 )
+ #(#MenuItem #label: '16' value:#16 )
+ #(#MenuItem #label: '18' value:#18 )
+ #(#MenuItem #label: 'other ...' value:#size)
+ )
+ nil
+ nil
+ )
+ )
+ )
+ #( 1 )
+ nil
+ ) decodeAsLiteralArray
+! !
+
+!FontMenu methodsFor:'accept'!
+
+accept:anItem
+ "accept current selected item
+ "
+ |item selector arg|
+
+ selector := self selection value.
+
+ (item := super accept:anItem) isNil ifTrue:[
+ ^ self
+ ].
+
+ (arg := item value) isNil ifTrue:[
+ model notNil ifTrue:[
+ enabledChannel value ifTrue:[
+ arg := self fontDescription
+ ].
+ model value:arg
+ ].
+ ^ self
+ ].
+
+ (arg == #size and:[(arg := self readSize) isNil]) ifTrue:[
+ ^ self
+ ].
+
+ (self perform:selector with:arg) ifTrue:[
+ model notNil ifTrue:[model value:(self fontDescription)]
+ ]
+!
+
+readSize
+ "read a size; in case of cancel nil is returned otherwise a number.
+ "
+ |size string|
+
+ string := EnterBox request:'size: '.
+
+ string size ~~ 0 ifTrue:[
+ size := SmallInteger readFrom:string onError:nil.
+
+ (size notNil and:[size >= 6 and:[size <= 48]]) ifTrue:[
+ ^ size
+ ]
+ ].
+ ^ nil
+! !
+
+!FontMenu methodsFor:'accessing'!
+
+fontDescription
+ "get font description
+ "
+ ^ FontDescription family:fontFamily face:fontFace style:fontStyle size:fontSize
+!
+
+fontDescription:aFontDesc
+ "set font description
+ "
+ |desc|
+
+ aFontDesc isNil ifTrue:[
+ enabledChannel value:false.
+ ] ifFalse:[
+ self disabledRedrawDo:[
+ enabledChannel value:true.
+
+ self fontFamily:(aFontDesc family).
+ self fontFace:(aFontDesc face).
+ self fontStyle:(aFontDesc style).
+ self fontSize:(aFontDesc size).
+ ]
+ ]
+!
+
+fontFace
+ "get face, a string
+ "
+ ^ fontFace
+!
+
+fontFace:aFace
+ "set face, a string; update item.
+ if the face changed true is returned otherwise nil
+ "
+ (aFace notNil and:[aFace ~= fontFace]) ifTrue:[
+ (self itemAt:#fontFace:) label:(fontFace := aFace).
+ ^ true
+ ].
+ ^ false
+!
+
+fontFamily
+ "get family, a string
+ "
+ ^ fontFamily
+!
+
+fontFamily:aFamily
+ "set family, a string; update item
+ if the family changed true is returned otherwise nil
+ "
+ (aFamily notNil and:[aFamily ~= fontFamily]) ifTrue:[
+ (self itemAt:#fontFamily:) label:(fontFamily := aFamily).
+ ^ true
+ ].
+ ^ false
+
+!
+
+fontSize
+ "get size, a number
+ "
+ ^ fontSize
+!
+
+fontSize:aSize
+ "set size, a number; update item
+ if the size changed true is returned otherwise nil
+ "
+ |label|
+
+ (aSize notNil and:[aSize ~= fontSize]) ifTrue:[
+ fontSize := aSize.
+ (self itemAt:#fontSize:) label:(aSize printString).
+ ^ true
+ ].
+ ^ false
+!
+
+fontStyle
+ "get style, a string
+ "
+ ^ fontStyle
+
+!
+
+fontStyle:aStyle
+ "set style, a string; update item
+ if the style changed true is returned otherwise nil
+ "
+ (aStyle notNil and:[aStyle ~= fontStyle]) ifTrue:[
+ (self itemAt:#fontStyle:) label:(fontStyle := aStyle).
+ ^ true
+ ].
+ ^ false
+! !
+
+!FontMenu methodsFor:'accessing channels'!
+
+model
+ "get my model
+ "
+ ^ model
+!
+
+model:aValueHolder
+ "set my model
+ "
+ model notNil ifTrue:[
+ model removeDependent:self.
+ ].
+ model := aValueHolder.
+
+ model notNil ifTrue:[
+ model addDependent:self.
+ self fontDescription:(model value)
+ ].
+! !
+
+!FontMenu methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+ "one of my models changed its value
+ "
+ changedObject == model ifTrue:[
+ ^ self fontDescription:(model value)
+ ].
+ super update:something with:aParameter from:changedObject
+
+! !
+
+!FontMenu methodsFor:'initialization'!
+
+destroy
+ "release dependencies
+ "
+ self model:nil.
+ super destroy.
+
+!
+
+initialize
+ "setup menu
+ "
+ super initialize.
+ self verticalLayout:false.
+ self fitFirstPanel:false.
+ self menu:(self class menu).
+ enabledChannel := false asValue.
+
+ self fontDescription:(self font).
+
+ self do:[:anItem|
+ anItem hasIndication ifFalse:[
+ anItem enabled:enabledChannel
+ ] ifTrue:[
+ anItem indication:enabledChannel
+ ]
+ ].
+
+
+! !
+
+!FontMenu class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libwidg2/FontMenu.st,v 1.1 1997-06-04 11:37:29 ca Exp $'
+! !