[squeak-dev] The Inbox: System-eem.747.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Jun 30 22:30:06 UTC 2015
Eliot Miranda uploaded a new version of System to project The Inbox:
http://source.squeak.org/inbox/System-eem.747.mcz
==================== Summary ====================
Name: System-eem.747
Author: eem
Time: 30 June 2015, 3:29:21.961 pm
UUID: b4f12663-36dd-4e16-9c83-5e446ea6e037
Ancestors: System-eem.746
Second part of putsch. Move preferences dictionary from class var to inst var. Remove the setter, and makde the getter, currently used only by SystemReporter, answer a copy.
=============== Diff against System-eem.746 ===============
Item was changed:
----- Method: Preferences class>>addPreference:categories:default:balloonHelp:projectLocal:changeInformee:changeSelector:type: (in category 'add preferences') -----
addPreference: aName categories: categoryList default: aValue balloonHelp: helpString projectLocal: localBoolean changeInformee: informeeSymbol changeSelector: aChangeSelector type: aType
"Add or replace a preference as indicated. Reuses the preexisting Preference object for this symbol, if there is one, so that UI artifacts that interact with it will remain valid."
| newPreference aPreference |
(newPreference := Preference new)
name: aName asSymbol
defaultValue: aValue
helpString: helpString
localToProject: localBoolean
categoryList: categoryList
changeInformee: informeeSymbol
changeSelector: aChangeSelector
type: aType.
+ aPreference := preferencesDictionary
- aPreference := DictionaryOfPreferences
at: newPreference name
ifAbsent: [newPreference].
aPreference == newPreference
ifTrue: "Atomically add the new preference to the dictionary."
[self atomicUpdatePreferences:
[:preferenceDictionaryCopy|
preferenceDictionaryCopy at: newPreference name put: newPreference]]
ifFalse: "Use the copyFrom: primitive to atomically update the existing preference."
[aPreference copyFrom: newPreference].
self compileAccessMethodForPreference: aPreference!
Item was changed:
----- Method: Preferences class>>allPreferenceObjects (in category 'preference-object access') -----
allPreferenceObjects
"Answer a list of all the Preference objects registered in the system"
+ ^preferencesDictionary values!
- ^DictionaryOfPreferences values!
Item was changed:
----- Method: Preferences class>>atomicUpdatePreferences: (in category 'accessing') -----
atomicUpdatePreferences: aBlock
"Evaluate aBlock with a copy of the preferences dictionary and
then assign (assignment is atomic) the copy to the dictionary."
+ | copyOfPreferences |
+ copyOfPreferences := preferencesDictionary
- | copyOfDictionaryOfPreferences |
- copyOfDictionaryOfPreferences := DictionaryOfPreferences
ifNil: [IdentityDictionary new]
ifNotNil: [:dict| dict copy].
+ aBlock value: copyOfPreferences.
+ preferencesDictionary := copyOfPreferences!
- aBlock value: copyOfDictionaryOfPreferences.
- DictionaryOfPreferences := copyOfDictionaryOfPreferences!
Item was changed:
----- Method: Preferences class>>dictionaryOfPreferences (in category 'accessing') -----
dictionaryOfPreferences
+ "N.B. Does /not/ answer the dictionary itself. To burrow that deep use e.g. instVarNamed:"
+ ^preferencesDictionary copy!
- "The use of this accessor doesn't ensure that the dictionary is not accessed concurrently. Use #accessDictionaryOfPreferencesIn: instead."
-
- ^DictionaryOfPreferences!
Item was removed:
- ----- Method: Preferences class>>dictionaryOfPreferences: (in category 'accessing') -----
- dictionaryOfPreferences: anObject
- DictionaryOfPreferences := anObject!
Item was changed:
----- Method: Preferences class>>initializeDictionaryOfPreferences (in category 'initialization') -----
initializeDictionaryOfPreferences
+ "Initialize the preferencesDictionary to be an empty IdentityDictionary"
- "Initialize the DictionaryOfPreferences to be an empty IdentityDictionary"
"Preferences initializeDictionaryOfPreferences"
+ preferencesDictionary := IdentityDictionary new!
- self dictionaryOfPreferences:IdentityDictionary new!
Item was changed:
----- Method: Preferences class>>inspectPreferences (in category 'preferences panel') -----
inspectPreferences
"Open a window on the current preferences dictionary, allowing the user to inspect and change the current preference settings. This is fallen back upon if Morphic is not present. This is dangerous, the dictionary of preferences should not be accessed concurrently."
"Preferences inspectPreferences"
+ preferencesDictionary inspectWithLabel: 'Preferences'!
- self dictionaryOfPreferences inspectWithLabel:'Preferences'!
Item was changed:
----- Method: Preferences class>>preferenceAt:ifAbsent: (in category 'preference-object access') -----
preferenceAt: aSymbol ifAbsent: aBlock
"Answer the Preference object at the given symbol, or the value of aBlock if not present"
+ ^preferencesDictionary at: aSymbol ifAbsent: aBlock!
- ^DictionaryOfPreferences at: aSymbol ifAbsent: aBlock!
Item was changed:
----- Method: Preferences class>>savePersonalPreferences (in category 'personalization') -----
savePersonalPreferences
"Save the current list of Preference settings as the user's personal choices"
self
setParameter: #PersonalDictionaryOfPreferences
+ to: preferencesDictionary deepCopy!
- to: DictionaryOfPreferences deepCopy!
Item was changed:
----- Method: Preferences class>>storePreferencesIn: (in category 'personalization') -----
storePreferencesIn: aFileName
| stream prefsSnapshot |
#(Prevailing PersonalPreferences) do:
[:ea |
Parameters removeKey: ea ifAbsent: []].
stream := ReferenceStream fileNamed: aFileName.
stream nextPut: Parameters.
+ prefsSnapshot := preferencesDictionary copy.
- prefsSnapshot := DictionaryOfPreferences copy.
prefsSnapshot keysAndValuesDo: [:key :pref | prefsSnapshot at: key put: pref asPreference].
stream nextPut: prefsSnapshot.
stream nextPut: (Smalltalk isMorphic
ifTrue:[World fillStyle]
ifFalse:[DesktopColor]).
stream close!
Item was changed:
(PackageInfo named: 'System') postscript: '" Convert SoundService registeredClasses to classes if necessary "
[ | currentSoundSystem |
currentSoundSystem := SoundService defaultOrNil.
(SoundService registeredClasses copy collect: [:ss |
SoundService unregister: ss.
ss isBehavior
ifTrue: [ss]
ifFalse: [ss class]]
) do: [:ssClass |
SoundService register: ssClass].
SoundService default: (currentSoundSystem
ifNotNil: [:css| css isBehavior ifTrue: [css] ifFalse: [css class]]).
] value.
"Convert preferences dictionary from class var to inst var if necessary."
(Preferences instVarNamed: ''preferencesDictionary'') ifNil:
[(Preferences classPool at: #DictionaryOfPreferences) ifNotNil:
[:dictionary|
Preferences
instVarNamed: ''preferencesDictionary''
+ put: dictionary]].
+
+ (Smalltalk classNamed: #ServicePreferences) ifNotNil:
+ [:sp|
+ (sp instVarNamed: ''preferencesDictionary'') ifNil:
+ [(sp classPool at: #ServiceDictionaryOfPreferences) ifNotNil:
+ [:dictionary|
+ sp
+ instVarNamed: ''preferencesDictionary''
+ put: dictionary]]]'!
- put: dictionary]]'!
More information about the Squeak-dev
mailing list
|