Gestion des menus

UniXUniX Membre
11:27 modifié dans API AppKit #1
Salut.

Ca y est, je dois me lancer dans la gestion des menus. J'ai lu qu'il y avait 2 modes : automatique ou manuel, je crois que moi il va me falloir la manuelle, car l'activation de mes menus dépend de plusieurs paramètres (si un élément d'une NSTableView est sélectionné, si tel onglet d'une NSTabView est affiché, ...).

Par contre une question : il va falloir que je gère donc à  la mimine tous mes menus. Comment faut-il s'y prendre ? Créer un outlet pour chaque menu, et ensuite accéder à  ses sous-menus en utilisant les méthodes du type menuItemAtIndex: ?

Réponses

  • elfelf Membre
    11:27 modifié #2
    Je crois que les menus envoie le message delegate -validateMenuItem:(NSMenuItem *)theMenuItem à  sa cible... A verifier
  • BruBru Membre
    11:27 modifié #3
    dans 1134038091:

    Je crois que les menus envoie le message delegate -validateMenuItem:(NSMenuItem *)theMenuItem à  sa cible... A verifier


    Oui et non... et surtout non !

    -validateMenuItem:(NSMenuItem *)theMenuItem est appelé quand la gestion des menus est justement en  automatique (ce que ne veut pas utiliser UniX). Et si c'est le cas, ce n'est pas le delegate qui doit implémenter cette méthode, mais l'objet target qui est relié au menu-item.

    .
  • AliGatorAliGator Membre, Modérateur
    11:27 modifié #4
    Alors pourquoi ne pas utiliser le mode automatique ?
    Même si la validation de tes menus se fait sur plusieurs critères peut-être un peu complexes (plusieurs conditions par exemple), rien ne t'empêche d'utiliser le mode automatique et donc justement de mettre le code pour valider ton menuItem dans cette méthode validateMenuItem ;)

    non ?
    Tu as peut-être abandonné le mode automatique un peu vite, UniX ?

    (Enfin moi ce que j'en dis... je suis pas encore rendu à  ce stade :D)
  • BruBru Membre
    11:27 modifié #5
    dans 1134035590:

    Par contre une question : il va falloir que je gère donc à  la mimine tous mes menus. Comment faut-il s'y prendre ? Créer un outlet pour chaque menu, et ensuite accéder à  ses sous-menus en utilisant les méthodes du type menuItemAtIndex: ?


    Tu peux utiliser les 2.

    En automatique, dans IB, tu dois relier le target/action de tous tes menu-items à  un objet (typiquement ton objet contrôleur).
    Ensuite, dans ledit objet, tu implémentes la méthode validateMenuItem: évoquée par SeoxyS.
    L'argument de cette méthode est le menu-item (objet NSMenuItem) qui en encours de validation ou non.
    A ce moment, tu peus alors faire ton setEnable en fonction de tes critères.

    L'idéal est d'utiliser ou le tag ou le representedObject du menu-item pour facilement savoir à  qui tu as affaire...

    En manuel, soit tu créés un outlet pour chacun des menu-items à  gérer, soit tu utilises une boucle qui parcours tous les menu-items de ton appli, et à  l'aide du tag ou du representedObject, tu repères le menu-item pour faire le setEnable qui va bien.

    .
  • UniXUniX Membre
    11:27 modifié #6
    Po po po po po, le temps que je lise la 1ère réponse de Bru, que je réfléchisse profondemment et que je me rende compte que j'avais pas tout compris à  la gestion des menus, il y'avait 2 nouveaux messages ..... :)

    En effet, étant donné que tous mes menus items sont reliés à  mon objet controlleur, je n'ai qu'à  implémenter une seule méthode qui fera l'analyse de tous mes critères.

    En fait c'est super facile ...!  :P
Connectez-vous ou Inscrivez-vous pour répondre.