2010-01-14 4 views
1

(Ceci est pas une question sur KVC/KVO et les liaisons clé-valeur.)Comment spécifier des raccourcis clavier dans un fichier dict à l'intérieur de l'ensemble d'applications Cocoa?

J'écris une application avec un panneau "outils". Chaque outil peut être sélectionné en utilisant une touche d'une lettre (comme "M" - "Outil de déplacement"). L'outil peut être sélectionné même s'il n'y a pas de fenêtre principale et que le panneau d'outils n'est pas sélectionné (n'étant pas "clé"). Les documents indiquent que les événements de clé brute ne sont pas propagés au délégué de l'application et au contrôleur de document (donc je ne peux pas compter sur onKeyDown car cela devrait se produire dans un WindowController). Mais les «événements d'action» (clés liées à un sélecteur) sont envoyés à l'application, au délégué de l'application et au contrôleur de document.

Je connais deux manières de définir de telles liaisons globales: via des équivalents de clé NSMenuItem dans Interface Builder ou en utilisant le fichier ~/Library/KeyBindings/DefaultKeyBinding.dict (qui spécifie des liaisons globales pour toutes les applications). L'approche des éléments de menu n'est pas bonne parce que je ne veux pas polluer mon menu avec des commandes qui peuvent être déclenchées à partir du panneau d'outils.

Je voudrais mettre les fixations ou les spécifier par programmation dans un KeyBindings.dict fourni comme Xcode et TextMate font.

Cependant, je n'ai pas pu trouver de docs ou d'exemples comment nommer un tel fichier dict et comment le connecter à l'application. Xcode utilise le nom de fichier PBKeyBinding.dict, TextMate utilise KeyBindings.dict. Info.plist ne peut pas demander à l'application de lire le fichier dict.

Est-ce que quelqu'un sait comment cela pourrait être fait?

Merci.

Répondre

0

The documentation says this isn't supported. Alors, même si vous le faire fonctionner, il pourrait se briser dans une future version de Mac OS X.

Je suggère de mettre tous les outils dans un menu Outils. La redondance n'est pas intrinsèquement mauvaise, et un menu pourrait être plus facilement navigable par les personnes ayant une mauvaise vision, et servirait de référence rapide pour ceux qui ne sont pas encore familiers avec vos icônes d'outils.

Si un menu Outils est vraiment inutile, vous pouvez définir la propriété cachée de l'élément de menu Outils (dont le sous-menu est le menu Outils). De cette façon, l'élément de menu Outils est toujours dans le menu principal (barre de menu), et devrait donc toujours associer ses raccourcis clavier aux actions, mais il n'est pas visible pour les utilisateurs.

+0

Merci pour votre réponse! Malheureusement, la propriété masquée désactive les équivalents clés (OS X 10.6.2). Mais vous avez un bon point sur la convivialité du menu. Je pense que je vais le garder comme un menu visible pour l'instant. J'ai déjà passé assez de temps sur ce problème. Je vais aussi jeter un coup d'œil aux menus contextuels. Mais ils sont probablement liés à window/windowcontroller particulier. –

Questions connexes