refaire ou utiliser les Outlet d'Interface Builder

GreensourceGreensource Membre
20:09 modifié dans API AppKit #1
Bonsoir!
Je souhaiterais refaire quelques choses dans le style des connecteurs que l'ont trouve dans IB (cf: piece jointe).

J'ai besoin de représenter un fil de connexion entre deux port et je me dit que ce qui est fait dans IB ressemble pas mal à  ce que je veux.

Vous savez si il y a moyen de récupérer ça? Ou bien faut-il tout refaire?

Réponses

  • AliGatorAliGator Membre, Modérateur
    20:09 modifié #2
    Bah heu en même temps ça doit pas être bien compliqué à  faire, si ?
    Sur un mouseDown tu commences un BezierPath, sur mouseDrag tu fais évoluer ce BezierPath et tu regardes la view qui est sous la souris pour la mettre en surbrillance si besoin, et sur mouseUp tu finalises le lien.
  • yoannyoann Membre
    20:09 modifié #3
    Il doit falloir rajouter une NSView qui se redimentionne à  la volé aussi, on ne peut pas fait des BezierPath sans vue non ?
  • GreensourceGreensource Membre
    20:09 modifié #4
    Ouais ouais, pas de souci je vais refaire ça. C'était juste au cas où je l'avais loupé dans IB. Merci
  • frOMfrOM Membre
    20:09 modifié #5
    Que voilà  une conversation qui m'intéresse car c'est aussi exactement ce que je désire faire... mais je n'en connais pas autant que ces internautes. Vous serait-il possible de développer et d'exposer ce qu'il convient de faire ? Pour ce que je projette, le connecteur ne dépassera pas le cadre de la fenêtre de l'application.
  • CéroceCéroce Membre, Modérateur
    février 2010 modifié #6
    En gros, on crée une sous-classe de NSView
    Cette vue est instanciée et placée dans la fenêtre au dessus de l'autre vue (celle qui contient les connecteurs) dés qu'on clique sur un connecteur.

    - Dans -mouseDown: on prend le point de départ du clic
    - Dans -mouseDragged: on prend les coordonnées du point courant, on redimensionne la vue pour que la ligne tienne dedans et on appelle -[self setNeedsDisplay:YES]
    - Dans -drawRect:, on dessine une ligne (NSBezierPath) entre les deux points.

    La difficulté provient plus du retour visuel qu'il faut donner aux connecteurs quand une liaison est bonne. Il faut que la vue du dessus transmette les coordonnées du point courant à  la vue en dessous.


    À noter que si cela se fait entre plusieurs fenêtres de l'appli, le principe est similaire, sauf qu'on dessinera la ligne dans une fenêtre transparente. C'est ce que fait Interface Builder.
  • frOMfrOM Membre
    20:09 modifié #7
    dans 1266338322:

    La difficulté provient plus du retour visuel qu'il faut donner aux connecteurs quand une liaison est bonne. Il faut que la vue du dessus transmette les coordonnées du point courant à  la vue en dessous.


    C'est dejà  un bon point de départ pour moi, je dois pouvoir me débrouiller avec les premiers pas... mais, j'imaginais bien qu'il y aurait une difficulté du genre ci-dessus.

    Je vais déjà  faire des tests avant de m'attaquer à  ce problème.
    Merci.
Connectez-vous ou Inscrivez-vous pour répondre.