Capture du mouse event dans NSOutlineView avec des views custom
manu57
Membre
Salut,
J'ai un petit soucis sur lequel je viens de passer l'apres midi et la soirée sans trop de succès.
Dans un NSOutlineView dont les lignes sont des instances de NSView, je cherche à afficher un menu contextuel lors d'un click droit sur une ligne. Evidemment les NSView contiennent quelques contrôles. Lorsque je click droit sur la cellule, le mouse event est capturé par la première vue trouvée sous le pointeur de souris, souvent un des sous contrôles de la vue, du coup l'event n'arrive jamais jusqu'à l'outline view et donc pas de menu. Le comportement parait correct, mais dans mon cas, il est génant puisqu'il faut viser juste entre les contrôles pour voir le menu (pas intérêt à trembler de la souris :P.
Existe t il un truc pour éviter ça ? J'ai plusieurs pistes un peu capilotractées comme une vue overlay ou subclasser tous les contrôles mais bon avant de me lancer dans ce genre de chantier je voudrais savoir si j'ai pas loupé un truc...
Merci de votre aide
Manu
J'ai un petit soucis sur lequel je viens de passer l'apres midi et la soirée sans trop de succès.
Dans un NSOutlineView dont les lignes sont des instances de NSView, je cherche à afficher un menu contextuel lors d'un click droit sur une ligne. Evidemment les NSView contiennent quelques contrôles. Lorsque je click droit sur la cellule, le mouse event est capturé par la première vue trouvée sous le pointeur de souris, souvent un des sous contrôles de la vue, du coup l'event n'arrive jamais jusqu'à l'outline view et donc pas de menu. Le comportement parait correct, mais dans mon cas, il est génant puisqu'il faut viser juste entre les contrôles pour voir le menu (pas intérêt à trembler de la souris :P.
Existe t il un truc pour éviter ça ? J'ai plusieurs pistes un peu capilotractées comme une vue overlay ou subclasser tous les contrôles mais bon avant de me lancer dans ce genre de chantier je voudrais savoir si j'ai pas loupé un truc...
Merci de votre aide
Manu
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
ça vaut le coup d'essayer.
Je cherchais un moyen de dire a une vue de ne pas consommer l'event et donc de laisser faire superview mais j'ai rien trouvé. Il y avait encore un solution en modifiant le comportement de NSWindow hitPoint pour lui faire remonter une vue spécialement taggée par exemple plutôt que la "top most" avec un gros risque d'effet de bord
J'ai donc suivi une autre piste, j'ai réduit le contenu de la sous vue aux seuls contrôles justifiant la vue, il en reste plus qu'un et le reste est dessiné par le vue elle-meme. Du coup le problème est circonscrit au contrôle restant que j'ai très légèrement subclassé. Un peu d'huile à gauche ou à droite notemment pour gérer la selection lors du click droit et tout fonctionne correctement.
merci
manu
Non, pourquoi ? Tu passerais le même menu (que tu as déjà ) aux contrôles de la même ligne. Ce menu peut très bien être différent pour chaque ligne, non ?
En tout cas, si ça fonctionne maintenant, ça n'a plus trop d'importance.
Bonjour
Puis-je réactiver cette discussion ?
J'ai réussi à utiliser NSOutline qui affiche bien les items de mon arborescence.
Maintenant, je voudrais comme manu57 récupérer un évènement souris sur un item, un clic droit par exemple.
Quand je sélectionne un item et que je fais un clic droit, un menu contextuel par défaut apparaà®t.
Je voudrais changer les items de ce menu contextuel.
Mais je ne vois vraiment pas comment faire. Je ne comprends pas bien la solution de manu57.
Essai :
J'ai créé une sous-classe MYTextField de NSTextField avec une méthode mouseRightDown.
Je l'ai utilisée à la place de NSTextField via l'Identité Inspector.
Idem pour MYTextFieldCell.
Tout est OK, sauf que le clic droit affiche toujours le menu contextuel par défaut.
J'avais fait ça très bien sur une NSImageView.
Une piste, SVP.