(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.
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. –