Question

Après de longues recherches et la lecture de ceci question Je n'ai toujours pas eu de "bonne" solution pour mon problème.

J'ai un éditeur GEF et je veux laisser les utilisateurs faire glisser et déposer des figures (== Model ObjectS) cet éditeur vers une autre vue personnalisée disponible dans ma perspective.

L'ajout d'un glisser-gamme avec mon propre transfert de glisser sur mon canevas de figure GEF Editor le permet. Mais comme effet secondaire, et je ne veux pas cet effet secondaire, cela désactivait la possibilité de déplacer les chiffres à l'intérieur de l'éditeur en utilisant la glisser-déposer.

Après les enquêtes, j'ai trouvé cela Publier sur les forums Eclipse, mais la solution n'est pas acceptable pour moi. Ainsi, j'ai enquêté plus profondément et je suis arrivé à l'extrait SWT pur suivant qui montre que les événements MouseMove (ceux utilisés par GEF pour soutenir la traînée à l'intérieur de l'éditeur) ne sont plus licenciés une fois qu'une source de traînée a été ajoutée:

import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

    public class SwtTest {
        public static void main(String[] args) {
            final Display display = new Display();
            final Shell shell = new Shell(display);
            shell.addMouseListener(new MouseListener() {
                public void mouseUp(MouseEvent e) {
                    System.out.println("mouseUp");
                }

                public void mouseDown(MouseEvent e) {
                    System.out.println("mouseDown");
                }

                public void mouseDoubleClick(MouseEvent e) {
                    System.out.println("mouseDoubleClick");
                }
            });
            shell.addMouseMoveListener(new MouseMoveListener() {

                @Override
                public void mouseMove(MouseEvent e) {
                    System.out.println("Mouse move");
                }
            });
            DragSourceListener dragListener = new DragSourceListener() {

                public void dragFinished(DragSourceEvent event) {
                    System.out.println("dragFinished");

                }

                public void dragSetData(DragSourceEvent event) {
                    System.out.println("dragSetData");

                }

                public void dragStart(DragSourceEvent event) {
                    System.out.println("dragStart");
                }
            };

            DragSource dragSource = new DragSource(shell, DND.DROP_COPY | DND.DROP_MOVE);
            dragSource.addDragListener(dragListener);
            dragSource.setTransfer(new Transfer[] { FileTransfer.getInstance() });

            shell.pack();
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();
        }
    }

Je suppose que c'est le comportement normal du point de vue de l'homme. Confirmez-vous?

De plus, je recherche vraiment une solution à ce problème autre que celle proposée sur le forum Eclipse consistant à activer mon dragsource unique .doin à false)

Toute aide, suggestions et commentaires sont les bienvenus.

Merci d'avance,

Manue

Était-ce utile?

La solution

Très probablement, vous souhaitez étendre le glisser-déposer GEF normal pour contenir également la prise en charge de glisser d'image.

Lorsque vous faites glisser des éléments à l'intérieur de l'éditeur GEF, vous pouvez les faire glisser en tant que chiffres (en fait, il est un peu plus complexe, il utilise le modèle de commande de demande). Mais lorsque votre traînée passe en revue les frontières de l'éditeur, vous devez être en mesure de fournir IE. Image à partir de ces données.

SWT prend en charge plusieurs transferts de données de glisser différents comme ceci:

dragSource.setTransfer(new Transfer[] { FileTransfer.getInstance(), ImageTransfer.getInstance() });

Je crois donc que vous voulez trouver un moyen dans GEF Dragtracker d'inclure également cet ImageTransfer à la traînée du système d'exploitation. Les dragtrackers sont la manière GEF de gérer la traînée et sont renvoyées dans la fonction d'EditPart getDragTracker()

Je ne sais pas totalement comment cela peut être fait, mais l'extension de son propre dragtracker qui est également capable de fournir également l'image de niveau OS devrait faire l'affaire.

L'affaire est assez similaire à la coopération du collage, et dans l'éditeur de base GMF, il est possible de copier des éléments de collage sous forme d'images en dehors de l'éditeur à n'importe quel outil qui accepte les images.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top