Filtrer le double clic dans une NSTableView

UniXUniX Membre
14:33 modifié dans API AppKit #1
Salut.

J'ai implémenté dans une NSTableView une méthode doubleClic.
Le problème, c'est qu'elle s'exécute même lorsque je double clique sur mes en-têtes de colonnes ....
Y a t'il un moyen pour filtrer ça ?

Réponses

  • Eddy58Eddy58 Membre
    14:33 modifié #2
    Tes columns headers, ils te servent à  gérer le tri sinon ? :o
  • UniXUniX Membre
    14:33 modifié #3
    oui
  • Eddy58Eddy58 Membre
    septembre 2005 modifié #4
    En effet, je n'avais pas prévu ce cas et ça produisait un léger disfonctionnement dans mon appli aussi.
    Voici ma parade : :)

    Dans ton interfaçage, tu déclares une variable bool, prenons par exemple ici :
    [tt]
    BOOL tableViewHeaderColumnClique;
    [/tt]

    Ensuite, dans l'implémentation :

    [tt]
    -(void)awakeFromNib
    {
        /*...*/

    tableViewHeaderColumnClique=NO;

        /*...*/
    }
    [/tt]

    Dans la méthode qui est appelée par le double-clique, tu mets le code suivant au tout début :
    [tt]
    -(void)doubleCliqueTableView
    {
    if (tableViewHeaderColumnClique==YES)
    {
    return;
    }
         
          /*...*/
    }
    [/tt]

    Et puis, il faut implémenter la méthode delegate (si ce n'est déjà  fait) "-(void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn" avec le code suivant. La tempo est là  pour attendre que la méthode appelée pour le double-clique ait bien été appelée.

    [tt]
    -(void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn
    {
    tableViewHeaderColumnClique=YES;

          /*...*/

    [self performSelector:@selector(setTableViewHeaderColumnCliqueNoState) withObject:nil afterDelay:0.1];
    }

    -(void)setTableViewHeaderColumnCliqueNoState
    {
    tableViewHeaderColumnClique=NO;
    }
    [/tt]
  • mpergandmpergand Membre
    14:33 modifié #5
    Je vais ressortir un bout de code qui date du début du siècle  :)

    <br />-(void) tableViewDoubleAction:(NSTableView*) tableView<br />{<br />  int selectedColumn=[tableView selectedColumn];  // selected column number, -1 if none<br />	<br />  if(selectedColumn!=-1)	// double-click on a column<br />	....<br />  else		// double-click on a row<br />	....<br /><br />
    
  • Eddy58Eddy58 Membre
    14:33 modifié #6
    dans 1128068393:

    <br />-(void) tableViewDoubleAction:(NSTableView*) tableView<br />{<br />  int selectedColumn=[tableView selectedColumn];  // selected column number, -1 if none<br />	<br />  if(selectedColumn!=-1)	// double-click on a column<br />	....<br />  else		// double-click on a row<br />	....<br /><br />
    


    Cette méthode, bien plus simple en effet, ne fonctionne que si la sélection des colonnes est autorisée dans les attributs de la tableview, ce qui n'est pas le cas pour moi. ;)
  • UniXUniX Membre
    14:33 modifié #7
    Non mpergand, ta solution ne fonctionne pas. Enfin du moins pas dans mon cas, mais je pense que c'est parceque j'ai interdit dans IB de sélectionner une colonne, donc selectedColumn renvoie toujours -1.

    En revanche ça roule avec le code de Eddy58.

    Les 2 solutions doivent être bonnes, suivant la configuration de la NSTableView.

    Merci à  vous 2  ;)
  • mpergandmpergand Membre
    14:33 modifié #8
    :'( :'( :'(

    Mais lors d'un double-clic sur un en-tête de colonne, clickedRow=-1 ?
  • Eddy58Eddy58 Membre
    14:33 modifié #9
    Pour le double-clique sur un column header, la selected row renvoyée est celle qui est sélectionnée, ce qui est plutôt logique. :o
  • mpergandmpergand Membre
    14:33 modifié #10
    Oui, mais [tableView clickedRow] renvoie -1
    Ce qui est également très logique  ;)
  • Eddy58Eddy58 Membre
    14:33 modifié #11
    Ha oui, bien vu mpergand, je connaissais pas du tout cette méthode d'usage assez rare il est vrai. Ca simplifie bien les choses en effet ! ;D
Connectez-vous ou Inscrivez-vous pour répondre.