TableView & Menu Contextuel: sélectionner la bonne ligne
ClicCool
Membre
Bonjour,
J'ai une NSTableView autorisant les sélections multiples à laquelle je souhaite associer un menu contextuel s'appliquant à la seule ligne cliquée qui doit donc alors apparaà®tre comme la seule ligne sélectionnée.
Le problème c'est que lorsqu'on Ctrl-Clic (eh oui! j'ai pas de clic droit) la ligne cliquée est désignée par un joli contour bleu mais n'est pas sélectionnée.
Donc je ne peut me contenter d'appliquer l'action du contextuel menu à la ligne sélectionnée.
Je peux, bien sur récupérer avec [tt]- (NSInteger)clickedRow[/tt] de tableView la bonne ligne, mais c'est pas très intuitif pour l'utilisateur qui déclenche une action sur une ligne qui n'est pas celle(s) sélectionnée(s).
De plus le statut enable (bindé) des menuItems dépend de la première ligne effectivement sélectionée et pas comme il se devrait de celle cliquée ...
J'ai bien essayé d'implémenter une action sur simple-clic sur la tableView, qui (si keyModifier & NSControlKeyMask = TRUE) remplace la sélection actuelle par la lgne cliquée seule.
ça marche, sauf que dès que je "couple" la tableView avec le menu contextuel, mon action n'est plus appelée.
Et quoique j'ai essayé:
Pourtant, le comportement que je recherche se retrouve dans les App d'apple, comme Mail, l'appel d'un menu contextuel sélectionne bien la bonne ligne (et déselectionne la (les) ligne(s) précédemment sélectionnées) immédiatement AVANT l'apparition du menu contextuel...
J'ai loupé un truc simple ? ???
J'ai une NSTableView autorisant les sélections multiples à laquelle je souhaite associer un menu contextuel s'appliquant à la seule ligne cliquée qui doit donc alors apparaà®tre comme la seule ligne sélectionnée.
Le problème c'est que lorsqu'on Ctrl-Clic (eh oui! j'ai pas de clic droit) la ligne cliquée est désignée par un joli contour bleu mais n'est pas sélectionnée.
Donc je ne peut me contenter d'appliquer l'action du contextuel menu à la ligne sélectionnée.
Je peux, bien sur récupérer avec [tt]- (NSInteger)clickedRow[/tt] de tableView la bonne ligne, mais c'est pas très intuitif pour l'utilisateur qui déclenche une action sur une ligne qui n'est pas celle(s) sélectionnée(s).
De plus le statut enable (bindé) des menuItems dépend de la première ligne effectivement sélectionée et pas comme il se devrait de celle cliquée ...
J'ai bien essayé d'implémenter une action sur simple-clic sur la tableView, qui (si keyModifier & NSControlKeyMask = TRUE) remplace la sélection actuelle par la lgne cliquée seule.
ça marche, sauf que dès que je "couple" la tableView avec le menu contextuel, mon action n'est plus appelée.
Et quoique j'ai essayé:
- l'interface n'est pas claire en n'indiquant pas la ligne sélectionnée
- le statut "enable" des items correspond à (aux) ligne(s) précédemment sélectionnée(s)
Pourtant, le comportement que je recherche se retrouve dans les App d'apple, comme Mail, l'appel d'un menu contextuel sélectionne bien la bonne ligne (et déselectionne la (les) ligne(s) précédemment sélectionnées) immédiatement AVANT l'apparition du menu contextuel...
J'ai loupé un truc simple ? ???
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je crois que ce n'est plus utile dans Léo ou/et snow (?)
J'avais cru que [tt]menuForEvent[/tt] permettait "juste" d'adapter le menu au contexte, mais pas de changer la sélection de la tableView.
Je vais essayer ça !
PS je suis sous SnowLeopard que veux-tu dire par plus utile ?
Donc, faut toujours bidouiller ::)
En effet, mais le plus important c'est qu'avec ton approche ça marche impécable, exactement comme dans mail :brule:
imposant la sélection de la ligne ctrl-cliquée de toutes mes tableView
Et permettant au délégate (s'il existe et implémente la méthode) de customiser le menu par défaut
Permettant de déporter sur le délégate l'établissement du menu contextuel adapté
Le protocole se présente ainsi:
Le header de la catégorie de NSTableView est tout aussi simple:
Son implémentation est pas bien plus compliquée:
Et enfin, un exemple d'implémentation de la méthode déléguée déclarée:
Cette méthode ici se base sur le Tag de la TableView pour l'identifier et customiser le menu selon le contexte.
Si vous voyer des améliorations à apporter n'hésitez pas
À noter, plutôt utiliser :