Déplacement de lignes dans une NSOutlineView

ChachaChacha Membre
21:30 modifié dans API AppKit #1
Salut,

j'ai une NSOutlineView (donc une NSTableView) qui affiche des choses. En l'occurence, je n'ai qu'une seule colonne et chaque case affiche une image et un texte, j'ai donc mis des NSButtonCell qui vont très bien, même si un clic dessus n'a rien à  déclencher. Si vous avez mieux que NSButtonCell à  me proposer, je suis preneur, mais ce n'est pas la question ici.

Maintenant, j'aimerais, (comme dans l'explorateur de fichier de XCode), déplacer des items au sein ma NSOutlineView. Pour cela, j'ai donc besoin de détecter un mouseDown sur un item, puis un mouseDragged pour le déplacer.

Sauf que... Une fois le mouseDown fait, un trackMouse:... est envoyé à  la cellule, et plus aucun NSEvent de souris n'est capturé dans la NSOutlineView. J'ai bidouillé des tas de choses dans la gestion des événements et des firstResponder mais rien n'y a fait. Je n'ai pas réussi à  capturer un "déplacement d'item".

Du coup, je me dis que je suis peut-être en train de m'y prendre comme un manche. Sauriez vous comment faire, donc, pour déplacer des items dans une NSOutlineView, comme dans l'explorateur de fichiers de XCode ?

+
Chacha

Réponses

  • ChachaChacha Membre
    21:30 modifié #2
    C'est bon, je viens de trouver une piste complètement différente !
    Il existe une méthode "outlineview:writeitems:topasteboard" qui fait quasiment tout le boulot du drag à  ma place !
    Li bonheur, quoi.

    +
    Chacha
  • 21:30 modifié #3
    Hello,

    Si ton but est juste d'afficher une image et un texte dans la même cellule, je te conseille ImageAndTextCell (ou qqch dans le genre), qui se trouve dans l'exemple ...DragNDropOutlineView (/Developer/Examples/AppKit).

    A+
    Renaud
  • ChachaChacha Membre
    21:30 modifié #4
    dans 1115131002:

    DragNDropOutlineView (/Developer/Examples/AppKit).


    Merci ((unsigned int) -1) fois ! C'est exactement ce dont je rêvais. Exactement ce que je voulais faire !
    Allez, je me lâche pour l'occasion :  <3 <br />Non vraiment, cet exemple est formidable.

    +
    Un Chacha tout guilleret
  • Eddy58Eddy58 Membre
    21:30 modifié #5
    Chacha tu fais partie de la même confrérie que Bru ? ???
    Vous buvez des pots ensembles en maudissant les smileys c'est ça ? ;) :P
  • ChachaChacha Membre
    21:30 modifié #6
    dans 1115141434:

    Chacha tu fais partie de la même confrérie que Bru ?

    Vouais, moi je n'aime pas les smileys. Souvent, on exprime par un smiley ce qu'on aurait pu exprimer avec des mots en se cassant un peu la tête. Pour moi les smileys sont un appauvrissement du pouvoir d'expression.
    Et en plus ça fait ramer mon iBook.
    Gna gna gna

    +
    Chacha ronchon
  • ChachaChacha Membre
    21:30 modifié #7
    Salut,

    Grâce à  Renaud, j'ai pu faire la NSOutlineView de mes rêves (en matant DragNDropOutlineView (/Developer/Examples/AppKit))
    Cependant, il y quelque chose que je n'arrive décidément pas à  faire, même avec cet exemple : drag'n dropper une ligne vers le Finder pour y créer un fichier correspondant à  ce que j'ai drag'n droppé.

    Il semblerait que par défaut, il existe un mécanisme qui crée un fichier, mais je ne sais pas via quelle méthode. Je sais qu'il faut utiliser le NSPromiseFilesPboardType, je l'ai déjà  utilisé par le passé, mais dans le contexte d'une NSOutlineView (ou NSTableView), je ne comprends pas, ce ne sont pas les méthodes habituelles performDragOperation, concludeDragOperation, nameofPromisedFileTypes... qui sont appelées.

    Quelqu'un saurait comment faire ?

    +
    Chacha
  • mai 2005 modifié #8
    Hello,

    Il me semble, mais ça remonte à  loin, que les promiseFiles sont plutôt à  utiliser si tu glisserais un fichier qui n'existe pas encore (comme par exemple un document qui a été créé, mais pas encore enregistré ou fichier se trouvant sur un serveur auquel l'utilisateur n'a pas accès). C'est à  mon avis une mauvaise piste.

    ++
    Renaud
  • ChachaChacha Membre
    21:30 modifié #9
    dans 1115748518:

    Hello,

    Il me semble, mais ça remonte à  loin, que les promiseFiles sont plutôt à  utiliser si tu glisserais un fichier qui n'existe pas encore

    Mais oui, c'est exactement ça : ma NSOutlineView contient des items, que moi je veux transformer en fichiers si l'utilisateur les glisse sur le Finder.
  • mai 2005 modifié #10
    Considère que je n'ai rien dis (à  mettre sur le compte de la fatigue).

    Sinon, au niveau du datasource de ton outlineview, tu as implémenté la méthode suivante (il y en a sûrement d'autres)?
    [tt]- (NSArray *)outlineView:(NSOutlineView *)outlineView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items[/tt]
  • ChachaChacha Membre
    21:30 modifié #11
    dans 1115750786:

    [tt]- (NSArray *)outlineView:(NSOutlineView *)outlineView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedItems:(NSArray *)items[/tt]

    Ben... elle existe pas cette méthode ! En tous cas elle est pas dans ma doc. C'est une nouveauté Tiger ?
  • 21:30 modifié #12
    Oups. Effectivement c'est une nouveauté Tiger, j'avais pô vu.

    J'ai trouvé ceci: http://www.cocoabuilder.com/archive/message/cocoa/2005/4/11/132875. Et si c'est encore une boulette, je vais dormir.
  • ChachaChacha Membre
    21:30 modifié #13
    dans 1115752747:

    Oups. Effectivement c'est une nouveauté Tiger, j'avais pô vu.

    J'ai trouvé ceci: http://www.cocoabuilder.com/archive/message/cocoa/2005/4/11/132875. Et si c'est encore une boulette, je vais dormir.

    Ben merci. Apparemment, je suis pas le seul à  m'être posé la question; et si Tiger rajoute des méthodes, c'est bien qu'il y avait là  un gros manque.
    J'étudie ça

    +
    Chacha
Connectez-vous ou Inscrivez-vous pour répondre.