Argh, I forgot to say that, for one preference, only one method must be written. example for gradientButtonLook:
UIPreferences>>gradientButtonLook
<preference>
^ GradientButtonLook
ifNil: [GradientButtonLook := PreferenceValue
name: 'Gradient look for buttons'
description: 'Gradient look for buttons'
parent: #uiPreferenceNode
type: #Boolean
default: false]You can note the use of a minimal pragma form. We finally prefered objects over flat pragma declaration.This allow the use of a composite pattern for the tree and for one-to-many preference declaration.
As an example:
UIPreferences>>themePreference
<preference>
^ ThemePreference
ifNil: [ThemePreference := MultiplePreferenceValue
name: 'UITheme'
description: 'The theme to use for UI look and feel'
parent: #uiPreferenceNode
type: #UITheme
default: UIThemeWatery2
values: {
FixedPreferenceValue
name: 'Standard Squeak'
description: 'Standard Squeak style'
type: #UITheme
value: UIThemeStandardSqueak.
FixedPreferenceValue
name: 'Watery 2'
description: 'Similar to a nice OS'
type: #UITheme
value: UIThemeWatery2}]
You can also have range:
FreeTypePreferences>>glyphContrast
<preference>
^ GlyphContrast
ifNil: [GlyphContrast := RangePreferenceValue
name: 'Glyph contrast'
description: 'Change the contrast level for
glyphs. This is an integer between 1 and 100. (the default value is 50)'
parent: #freeTypePreferenceNode
type: #Integer
default: 50
range: (1 to: 100)]
Multiple and range preference value are not so easy to describe well if
we only make use of literals (pragma constraint).
Other point, how to use preferences. Example of a preference reading and changing: gradientLook := UIPreferences gradientButtonLook value. UIPreferences gradientButtonLook value: true.Last but not least point is that it provides system level preference change notification. to see it in action, load PrefListener2 package (the version I have attached to this mail, previous version was not ok)
Cheers alain Alain Plantec a écrit :
Hi all, Here is a Preference engine based on pragma. please, check it and tell me if it is ok or not. If you prefer squeak version, no problem but tell me that I stop working on this. The set of system preferences constitutes a tree of preferences. The model for the tree is implemented by the PreferenceNode hierarchy. (see PrefCore2). This is the only mandatory part. The tree can be visualized with a PreferenceTree UI built on top of PrefCore2 (see PrefTool2 and snapshot). Examples of preference declaration are given in PrefProvider2. in order to open the tree: PreferenceTree open. Thank to Gary for its help. cheers alain------------------------------------------------------------------------ ------------------------------------------------------------------------ _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
PrefListener2-alain_plantec.5.mcz
Description: Binary data
_______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
