NSMenu pour NSTableView

14:32 modifié dans API AppKit #1
Bonjour à  tous,

Voilà , j'ai relié un NSMenu à  ma tableView... je pensais obtenir un NSMenu par rapport a la selection d'une row du tableau... mais en fait même si le tableau est vide, le menu peut s'afficher

Alors quelqu'un a une idée de comment faire pour que le menu s'affiche que par rapport aux rows ? (voir ichat par exemple)

Réponses

  • Eddy58Eddy58 Membre
    14:32 modifié #2
    J'ai un peu de mal à  cerner ce que tu veux là ...;). En faites, tu veux un menu avec des items qui reflètent le contenu des rangées sélectionnées de la tableview ?
  • 14:32 modifié #3
    Ben juste mettre un NSMenu sur mes rows :p
    Avec la connexion "menu" de NSTableView, on peut faire un clique-droit ds le vide de la table et le menu s'affiche quand même.
    Je voudrais que si on fait clique-droit sur une row, celle-ci est sélectionnée et un NSMenu s'affiche au niveau de la souris
  • LeChatNoirLeChatNoir Membre, Modérateur
    14:32 modifié #4
    J'aurai tendance à  dire qu'il te faut sous-classer ta TableView pour intercepter l'évènement click droit.

    En l'interceptant, tu peux faire tes tests (table vide ou pas ?), sélectionner ta ligne et afficher ton menu.

    Bon je sais pas si c'est la bonne solution mais je verrai les choses comme ça...

    a+
  • mpergandmpergand Membre
    novembre 2005 modifié #5
    Dans une sous classe de ta table, essaye:
    <br />- (void)rightMouseDown:(NSEvent *)theEvent<br />{<br />	printf(&quot;right clic&#092;n&quot;);<br />	NSWindow* window=[self window];<br />	NSPoint mousePt=[window convertScreenToBase:[NSEvent mouseLocation]];<br />	mousePt=[self convertPoint:mousePt fromView:[window contentView]];<br />	<br />	int hitRow=[self rowAtPoint:mousePt];<br />			<br />	if(hitRow!=-1)<br />		{<br />		[self selectRow:hitRow byExtendingSelection:false];<br />		[super rightMouseDown:theEvent];<br />		}<br /><br />}<br />
    


    [edit]
    Pour le mousePt, y a plus simple ...
    <br />NSPoint mousePt = [theEvent locationInWindow];<br />mousePt = [self convertPoint:mousePt fromView:nil];<br />
    

  • novembre 2005 modifié #6
    Tu sous-classes NSTableView et tu implémentes la méthode suivante:
    [tt]- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
    int row = [self rowAtPoint:[self convertPoint:[theEvent locationInWindow] fromView:nil]];

    if (row == -1) return nil; // précaution élémentataire

    [self selectRow:row byExtendingSelection:NO];
    NSMenu* menu = [[[NSMenu alloc] init] autorelease];
    [menu addItemWithTitle:@test action:NULL keyEquivalent:@";"];
    return menu;
    }
    [/tt]
  • 14:32 modifié #8
    Euh... il n'y a pas que bru qui sache lire la doc à  ce que je sache.
  • 14:32 modifié #9
    Ben merci bcp  :o
Connectez-vous ou Inscrivez-vous pour répondre.