Hi all,

We have to make important decisions about squeak/pharo compatibility regarding the new setting package. The problem is that some packages (as Polymorph but also OB, ecompletion and certainly a lot of others) are included in pharo (aka pharo-dev) but are also used by squeak and the compatibility is now an issue because we plan
to remove the Preferences class from Pharo.
So, I'm looking for advices about that...
Any feedback ?

Cheers
Alain
--- Begin Message ---
Gary Chambers a écrit :
Hi Alain.

I guess I may have to fork the Pharo/Squeak specific areas. Not an easy job!
yes, not really cool.

what about the following:
I make the assumption that DiffMorph is using the browseWithPrettyPrint preference.
For pharo, you can create a new package with a PolymorphSettings class:

----------------------
PolymorphSettings class>>browseWithPrettyPrint
   <setting>
^ BrowseWithPrettyPrint ifNil: [ BrowseWithPrettyPrint := (SettingManager newSetting: 'bla bla') ... ]

PolymorphSettings class>>initialize
self browseWithPrettyPrint whenChangedSend: #prettyPrinting: to: DiffMorph
----------------------

For squeak you can also create a new package with a PolymorphPreferences class:

----------------------
PolymorphPreferences class>>initialize
   (Preferences preferenceAt: #browseWithPrettyPrint) ifNil:[
       Preferences
           addPreference: #browseWithPrettyPrint
            categories: #(browsing)
           default: true
           balloonHelp: 'Enable, or ...'.
       (Preferences preferenceAt: browseWithPrettyPrint)
           changeInformee: self
           changeSelector: #browseWithPrettyPrintChanged.
self browseWithPrettyPrintChanged].
PolymorphPreferences class>>browseWithPrettyPrintChanged
   DiffMorph prettyPrinting: Preferences browseWithPrettyPrint

----------------------

and as you pointed out, DiffMorph has also its own class variable for the preference.

DiffMorph class>>prettyPrinting: aBoolean
   PrettyPrinting := aBoolean

DiffMorph class>>prettyPrinting
   ^ PrettyPrinting


Thus, in Pharo PolymorphSettings is loaded and the DiffMorph class variable changes are handled via the setting. In Squeak, PolymorphPreferences is loaded and the DiffMorph class variable updating relies on the changeInformee hook.

a little bit ugly but I guess this is the price to pay for compatibility.

what do you think ?

Cheers
Alain

To start I'll refactor Polymorph to use class side accessors for any use of preferences. That way Squeak can delegate to Preferences whilst Pharo can use the pragma based settings.

E.g.
DiffMorph>>setText can do

self class colorWhenPrettyPrinting value

In Squeak:

DiffMorph class>>colorWhenPrettyPrinting
^Preferences colorWhenPrettyPrinting

In Pharo:

DiffMorph class>>colorWhenPrettyPrinting
^ColorWhenPrettyPrinting ifNil: [
ColorWhenPrettyPrinting := (SettingManager newSetting: 'Color pretty print') default: false]

Regards, Gary

----- Original Message ----- From: "Alain Plantec" <[email protected]>
To: "Gary Chambers" <[email protected]>
Sent: Friday, May 22, 2009 3:56 PM
Subject: preferences refactoring


Hi Gary,
During the migration from old preferences to the new setting framework,
some methods I'm changing can be from Polymorph packages.
I just like to know if I have to send to you polymorph specific parts ?
or what is the rule ?
As an example, DiffMorph>>setText will be touched by the removal of the #colorWhenPrettyPrinting
preference. Do I have to send to you a Polymorph specific part ?
Thanks
Alain








--- End Message ---
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to