[squeak-dev] [ANN] Preference pragmas

Andreas Raab andreas.raab at gmx.de
Wed Mar 4 07:03:19 UTC 2009


Folks -

I wanted to make the property whether to show individual processes in 
MessageTally a preference and couldn't recall any of the three gazillion 
methods to create one ;-) So I decided enough is enough and added the 
ability to register a preference via Pragma. In other words, you specify 
two class side accessors (using MessageTally as example):

showProcesses
	"Indicates whether to show each process separately or cumulatively."
	<preference: 'Show Processes in MessageTally'
		category: 'debug'
		balloonHelp: 'If enabled, each profiled process is shown individually 
in MessageTally'
		type: #Boolean>
	^ShowProcesses

showProcesses: aBool
	"Indicates whether to show each process separately or cumulatively."
	ShowProcesses := aBool.

and then register the preference in the class initialization method via:

initialize
	"MessageTally initialize"
	"By default, show each process separately"
	ShowProcesses := true.
	"Register preferences"
	Preferences addPreferencesFor: self.

The nice thing about this scheme is that the preference is local to the 
code where it's used and that there are no more generated accessors 
which mess up Monticello packages etc. What could probably be improved 
is the self-registration; I left it that way for now since I don't know 
how expensive it would be to scan all classes for new preferences when 
one opens a preference browser. There is also an example class 
PreferenceExample that illustrates the different types of preferences 
(textual, numeric, color, boolean) you can use.

To install, just execute the following from Squeak 3.10.2:

    Installer mantis fixBug: 7306.

Enjoy!
   - Andreas



More information about the Squeak-dev mailing list