# # PreferencesPanelController.py # ControlledPreferences # # Converted by u.fiedler on 04.02.05. # with great help from Bob Ippolito - Thank you Bob! # # The original version was written in Objective-C by Malcolm Crawford # at http://homepage.mac.com/mmalc/CocoaExamples/controllers.html from FontNameToDisplayNameTransformer import FontNameToDisplayNameTransformer from Foundation import * from AppKit import * from PyObjCTools.KeyValueCoding import * class PreferencesPanelController (NSWindowController): @objc.IBAction def changeTextFont_(self, sender): "The user changed the current font selection, so update the default font" # Get font name and size from user defaults defaults = NSUserDefaultsController.sharedUserDefaultsController().values() fontName = getKey(defaults, u'FontName') fontSize = getKey(defaults, u'FontSize') # Create font from name and size; initialize font panel font = NSFont.fontWithName_size_(fontName, fontSize) if font is None: font = NSFont.systemFontOfSize_(NSFont.systemFontSize()) NSFontManager.sharedFontManager().setSelectedFont_isMultiple_(font, False) NSFontManager.sharedFontManager().orderFrontFontPanel_(self) # Set window as firstResponder so we get changeFont: messages self.window().makeFirstResponder_(self.window()) @objc.IBAction def changeFont_(self, sender): "This is the message the font panel sends when a new font is selected" # Get selected font fontManager = NSFontManager.sharedFontManager() selectedFont = fontManager.selectedFont() if selectedFont is None: selectedFont = NSFont.systemFontOfSize_(NSFont.systemFontSize()) panelFont = fontManager.convertFont_(selectedFont) # Get and store details of selected font # Note: use fontName, not displayName. The font name identifies the font to # the system, we use a value transformer to show the user the display name fontSize = panelFont.pointSize() defaults = NSUserDefaultsController.sharedUserDefaultsController().values() defaults.setValue_forKey_(panelFont.fontName(), u"FontName") defaults.setValue_forKey_(fontSize, u"FontSize") """ Set up initial values for defaults: Create dictionary with keys and values for WordOfTheDay, FontName, FontSize, and FavoriteColor. Mostly straightforward, but: Store the fontName of the font as the default; the textfield displays the font's displayName using a value transformer. The color must be archived -- you can't store NSColors directly in NSUserDefaults. """ dictionary = {} dictionary[u'WordOfTheDay'] = u'Today' systemFont = NSFont.systemFontOfSize_(NSFont.systemFontSize()) dictionary[u"FontName"] = systemFont.fontName() dictionary[u"FontSize"] = systemFont.pointSize() archivedColor = NSArchiver.archivedDataWithRootObject_(NSColor.greenColor()) dictionary[u'FavoriteColor'] = archivedColor NSUserDefaultsController.sharedUserDefaultsController().setInitialValues_(dictionary) # Create and register font name value transformer transformer = FontNameToDisplayNameTransformer.alloc().init() NSValueTransformer.setValueTransformer_forName_(transformer, u'FontNameToDisplayNameTransformer')