How to add preferences (was Re: [NOTBUG] HandMorph missing menu
actions)
Ned Konz
ned at bike-nomad.com
Tue Jul 18 05:03:06 UTC 2000
Rob Withers wrote:
> Is there a way to add a preference without writing an extension method
> in the Preferences class? I would like to do the same kind of thing
> with the WorldMenu and the OpenMenu as well. Is there a way to
> dynamically add a menu item to one of those menus without writing a
> method in the HandMorph class?
My Preferences changes included a mod to doesNotUnderstand: that allows
preferences or flags to be set or returned. But it was too forgiving, I think,
in that it would allow a new flag to be defined. This version requires
that the flag or parameter be already defined:
Preferences class>>doesNotUnderstand: aMessage
"Look up the message selector as a flag or parameter. Return it
(if no arguments), or set it (if 1 argument)"
| flagName isParameter isFlag |
aMessage arguments size > 1
ifTrue: [^ super doesNotUnderstand: aMessage].
flagName _ aMessage selector asLegalSelector asSymbol.
isParameter _ Parameters includesKey: flagName.
isFlag _ FlagDictionary includesKey: flagName.
(isParameter not and: [isFlag not])
ifTrue: [^ super doesNotUnderstand: aMessage].
^ aMessage arguments isEmpty
ifTrue: [isParameter
ifTrue: [self parameterAt: flagName]
ifFalse: [self valueOfFlag: flagName]]
ifFalse: [isParameter
ifTrue: [self setParameter: flagName to: aMessage arguments first]
ifFalse: [self setPreference: flagName toValue: aMessage arguments first]]
Then you either use valueOfFlag:default: or setPreference:toValue: to set the
preference.
Look at my enhancements to Preferences to see a further extension that notifies
dependents of Preferences about changes.
--
Ned Konz
currently: Stanwood, WA
email: ned at bike-nomad.com
homepage: http://bike-nomad.com
More information about the Squeak-dev
mailing list
|