2011-07-11 5 views
2

Je configure la fenêtre de préférences pour mon application cool, qui affiche du texte. Dans les préférences, j'ai mis en place un bouton qui ouvre un NSFontPanel. Mon application stocke la couleur et la police de texte préférées de l'utilisateur et s'ouvre toujours avec ces paramètres afin que l'utilisateur n'ait jamais à voir le texte affiché dans une couleur ou une police qu'il ne souhaite pas.Comment définir les valeurs par défaut pour un NSFontPanel?

Le problème est, alors que mon application est capable de se souvenir de ces préférences, le NSFontPanel a des problèmes. Lorsque j'ouvre le panneau de police pour la première fois, les valeurs par défaut de tous les champs sont réinitialisées. Après les avoir manipulés, fermé le panneau et l'avoir rouvert, les valeurs correctes sont conservées. Le problème se produit uniquement lorsque j'ouvre le panneau pour la première fois.

Je ne comprends pas pourquoi cela se passe!

J'ai pris soin de définir la police et la couleur du panneau lorsque mon application démarre, comme vous pouvez le voir dans cet extrait:

def show_entry_font_menu(sender) 
    font_manager = NSFontManager.sharedFontManager  
    color_panel = NSColorPanel.sharedColorPanel 

    font_manager.setDelegate self 
    color_panel.setDelegate self 

    font_manager.setSelectedFont(preferences.entry_font, isMultiple:false) 

    font_panel = font_manager.fontPanel(true) 
    font_panel.makeKeyAndOrderFront(sender) 
    attributes = preferences.entry_font_attributes 
    color = preferences.entry_font_color 

    font_manager.setSelectedAttributes(attributes, isMultiple:false) 
    color_panel.setColor(color) if preferences.entry_font_color 

    self.did_open_font_panel = true 
end 

Répondre

4

Il y a une bizarrerie dans l'initialisation du sharedFontPanel. Si vous définissez la police avant de la créer la première fois, cela fonctionne correctement, mais pas les attributs de définition.

Ce que vous devez faire est makeKeyAndOrderFront d'abord, puis définissez les attributs. Une fois que le panneau a été ainsi créé la première fois, il reflète correctement setSelectedAttributes.

font_panel.makeKeyAndOrderFront(sender) 
    font_manager.setSelectedAttributes(attributes, isMultiple:false) 
+0

Ha! C'est le genre de chose que je n'aurais jamais compris! – Ziggy

Questions connexes