Drag sur WebView

03:12 modifié dans API AppKit #1
Bonjour à  tous,

Suite à  ce topic -> http://www.osx-dev.com/index.php?topic=3168.0
J'aimerai remplacer le comportement d'une WebView face à  un Drag. Au lieu de déplacer un item (une image chargée dans la webview), je voudrai plutôt faire bouger sa fenêtre.
J'ai tenté le sous-classage de la WebView avec gestion du mouseDown/Dragged, mais rien..

Une idée?

Louka.

Réponses

  • AliGatorAliGator Membre, Modérateur
    03:12 modifié #2
    Une NSView par dessus (ou en subview de) ta WebView, qui intercepte les clics à  sa place ?
    Bon après faudra faire le tri au cas par cas entre un mouseDown et un mouseDrag pour "laisser passer" l'un mais intercepter l'autre...
  • 03:12 modifié #3
    dans 1242340794:

    Une NSView par dessus (ou en subview de) ta WebView, qui intercepte les clics à  sa place ?
    Bon après faudra faire le tri au cas par cas entre un mouseDown et un mouseDrag pour "laisser passer" l'un mais intercepter l'autre...


    Mais si j'ajoute une NSView ducoup l'utilisateur pourra plus cliquer sur les bouton "play/next/back" de la WebView  :o et comme leur position est totalement différente selon les themes.

    Par contre j'ai trouvé "WebUIDelegate" mais je vois pas trop ce que je pourrai utiliser... à  part pour empêcher le drag des élément hors de la WebView.. mais ça ne résoud toujours pas le fait de pouvoir bouger la fenêtre  :(
  • mai 2009 modifié #4
    Il semblerait que les fonctions "mouseDown" et cie sont gérées directement dans les Themes grâce au JavaScript.
    Il faut simplement que mon app récupère "setFrame:" afin de changer la position de la fenêtre..

    Le hic c'est que certains themes n'intègre pas cette fonction, et pourtant on peut quand même bouger la fenêtre... donc c'est forcément possible.
  • AliGatorAliGator Membre, Modérateur
    03:12 modifié #5
    Je comprend pas ce que th appelles "thèmes" ?
    A la base j'avais pensé que c'était juste des feuilles CSS HTML (mais quel rapport avec ton WebView et les boutons page précédente/suivante qui sont hors de la vue de rendu ?) mais tu parles de javascript dans le thème derrière ?

    Et j'ai l'impression que tu mélanges un peu la partie CSS, la partie javascript... et la gestion des events en Cocoa par la WebView ?

    Ceci dit, c'est certainement possible d'intercepter le drag par javascript aussi... mais ça veut dire qu'il te faudra rajouter du code javascript dans les pages que tu affiches dans ta WebView... or si ce n'est pas du contenu perso mais du contenu venant du net, c'est pas gagné...

    Bref, pas bien clair tout ça :P
  • 03:12 modifié #6
    Nonon je mélange rien du tout. En fait j'ai regardé le code JS d'un des Themes (voir le lien de mon premier message), et j'ai vu du code permettant de bouger la fenêtre dedans.
    Or, j'ai aussi regardé d'autres themes et là  il n'y a pas la moindre trace d'un code permettant de bouger la fenêtre. (Le JS était censé envoyer la nouvelle frame dans une new Array() ).
    C'est pour ça qu'au final je pense qu'il est possible de bouger une WebView, en interceptant le moment où on appuie puis le moment où un drag est effectué. Pour l'instant j'ai trouvé juste la méthode permettant le drag, mais elle n'est pas continue, donc impossible de continuellement bouger ma fenêtre.
  • AliGatorAliGator Membre, Modérateur
    03:12 modifié #7
    Heu attends j'ai du mal à  cerner ton problème là  alors... c'est du code JavaScript ou Cocoa que tu attends ?
  • 03:12 modifié #8
    dans 1242389843:

    Heu attends j'ai du mal à  cerner ton problème là  alors... c'est du code JavaScript ou Cocoa que tu attends ?


    Cocoa... Certains Themes n'ont pas de code Javascript pour la gestion de la fenêtre, c'est à  dire le script qui envoie setFrame: à  mon object cocoa.. Ducoup j'imagine que le dév de Bowtie a géré par défaut le mouvement de la fenêtre depuis la webview en COCOA :p
  • 03:12 modifié #9
    Il y a quelque chose qui m'échappe...

    <br />- (unsigned)webView:(WebView *)sender dragSourceActionMaskForPoint:(NSPoint)point<br />
    



    Returns a mask of allowable actions for a drag beginning at a set of coordinates on the sender.

    This method controls the behavior of dragging elements from a web view. It returns a mask indicating the allowed actions for a drag operation that begins at the coordinates specified by point within the coordinates of sender.

    For example, this method may return WebDragSourceActionAny to allow all actions or may return WebDragSourceActionNone to disallow all actions. (See “Constants” for a complete list of possible return values.)

    This method may be invoked multiple times while content is dragged from sender. When the content is dropped, sender sends webView:willPerformDragSourceAction:fromPoint:withPasteboard:to the receiver.

    The default behavior returns (WebDragSourceActionAny & ~WebDragSourceActionLink) if the cursor is in an editable part of the WebView, WebDragDestinationActionAny otherwise.



    La partie qui n'est pas du tout clair pour moi c'est celle-ci :

    This method may be invoked multiple times while content is dragged from sender.


    Faut-il interpréter cette phrase comme voulant dire "Cette méthode est appelée autant de fois que l'on désire "prendre" un élément de la webview" ou bien "Cette méthode peut-être appelée plusieurs fois tant que l'ont désire "prendre" un élément".
    ... La méthode n'est appelée qu'une fois lorqu'on effectue un drag sur un élément.. donc je suppose, malheureusement, que la première "phrase" est la bonne.. :(
  • AliGatorAliGator Membre, Modérateur
    03:12 modifié #10
    Dans toutes les docs techniques, les verbes "may" "should" "must" ont vraiment un sens bien défini... Là  donc "may be invoked" ça veut bien dire "il se peut qu'elle soit appelée plusieurs fois" (donc faites gaffe à  cette possibilité/éventualité quand vous allez implémenter votre méthode à  pas risquer de faire des trucs en double si jamais ça arrive genre je sais pas moi, allouer deux fois un objet)
  • 03:12 modifié #11
    dans 1242434773:

    Dans toutes les docs techniques, les verbes "may" "should" "must" ont vraiment un sens bien défini... Là  donc "may be invoked" ça veut bien dire "il se peut qu'elle soit appelée plusieurs fois" (donc faites gaffe à  cette possibilité/éventualité quand vous allez implémenter votre méthode à  pas risquer de faire des trucs en double si jamais ça arrive genre je sais pas moi, allouer deux fois un objet)


    Tu m'excuseras d'avoir des doutes après l'histoire du "filename" qui retourne un chemin  :P
    cf : http://www.osx-dev.com/index.php?topic=3649.msg36856#msg36856
Connectez-vous ou Inscrivez-vous pour répondre.