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