NSIndexSet - Drag&Drop entre deux NSTableView

RocouRocou Membre
juillet 2009 modifié dans API AppKit #1
Bonjour,

J'ai réalisé un drag@drop entre deux NSTableView qui fonctionne très bien.
Je récupère des éléments sur une ligne de la NSTableView de départ et je génère une ligne dans la NSTableView de destination.

Je voudrais pouvoir réaliser un drag@drop de plusieurs lignes.

Dans le code de "l'acceptDrop", j'ai la ligne suivante:
int dragRow = [rowIndexes firstIndex];

Elle me permet de récupérer l'index de la ligne que je "drag"
Or si je veux faire un drag de plusieurs lignes, il faut que je récupère les index de chacune de ces lignes et pas seulement le "firstIndex".
Je ne vois pas comment faire, il n'existe apparemment pas de méthode NSIndexSet permettant de récupérer d'autre index que le premier ou le dernier (lastIndex).

Réponses

  • RocouRocou Membre
    juillet 2009 modifié #2
    dans 1247644533:

    Je ne vois pas comment faire, il n'existe apparemment pas de méthode NSIndexSet permettant de récupérer d'autre index que le premier ou le dernier (lastIndex).

    Bon, je pense avoir trouvé, il faut utiliser:

    (avec NSIndexSet* rowIndexes)

    [rowIndexes count] pour trouver le nombre d'index

    puis boucler sur ce nombre et dans la boucle passer d'in dex à  l'autre à  l'aide de:

    int dragRow = [rowIndexes indexGreaterThanIndex:[rowIndexes firstIndex]];


    EDIT: non, ça ne permet que de trouver le deuxième index mais pas les suivants. Zut!

    EDIT2: ouf ça y est!  :P

    Dans la boucle il faut réinitialiser le NSIndexSet avec tous les index moins le premier et ainsi de suite:

    NSRange indexRange;<br />			indexRange.location = [rowIndexes indexGreaterThanIndex:[rowIndexes firstIndex]];<br />			indexRange.length = [rowIndexes count];<br />			[rowIndexes initWithIndexesInRange:indexRange];<br />		<br />		dragRow = [rowIndexes firstIndex];<br />
    

  • Philippe49Philippe49 Membre
    22:57 modifié #3
    Ou faire un tableau C de NSUInteger, et le parcourir de manière classique

    <br />#import &lt;Foundation/Foundation.h&gt;<br /><br />int main (int argc, const char * argv&#91;]) {<br />	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];<br />	NSIndexSet * indexSet=[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2,5)];<br />	int bufferSize=[indexSet count];<br />	NSUInteger buffer[bufferSize ];<br />	[indexSet getIndexes:buffer maxCount:bufferSize inIndexRange:nil];<br />	int i;<br />	for(i=0;i&lt;bufferSize;i++) {<br />		printf(&quot;%d &quot;,buffer[i]);		<br />	}<br />	putchar(&#39;&#092;n&#39;);<br />	[pool drain];<br />	return 0;<br />}
    



    Essai :


    % gcc pgm.m -o pgm -framework Foundation
    % pgm
    2 3 4 5 6
    %
  • RocouRocou Membre
    22:57 modifié #4
    dans 1247656650:

    Ou faire un tableau C de NSUInteger, et le parcourir de manière classique

    Ha, merci, je ne comprenais rien à  la méthode getIndexes::bufferSize inIndexRange:
Connectez-vous ou Inscrivez-vous pour répondre.