Domanda

Dopo lunghe indagini e la lettura di questo domanda Io ancora non ho avuto una "buona" soluzione per il mio problema.

Ho un Gef editor e voglio permettere agli utenti di trascinare e rilasciare cifre (== gli oggetti del modello) modulo di questo editor per un'altra visualizzazione personalizzata disponibile in mio punto di vista.

L'aggiunta di un DragSource con la mia trascinare il trasferimento sul mio GEF editor figura tela permette che.Ma come effetto collaterale, e non voglio che questo effetto collaterale, questo disabilita la possibilità di muovere le figure all'INTERNO dell'editor utilizzando il drag and drop.

Dopo indagini ho trovato questo post su eclipse forum, ma la soluzione non è accettabile per me.Così ho indagato più profondo ed è venuto alla seguente puro SWT snippet mostra che gli eventi MouseMove (quelli utilizzati da gef per il supporto di trascinamento all'INTERNO dell'editor) non sono più sparati una volta a trascinare la fonte ha aggiunto:

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();
        }
    }

Credo che questo è il normale comportamento di fro uomo SWT punto di vista.È possibile confermare ?

Inoltre, io sono veramente alla ricerca di una soluzione a questo problema, altro che quello proposto su Eclipse forum che consiste nell'attivazione di mio DragSource solo se una determinata condizione è soddisfatta, come Shift è premuto (questo è fatto in un DragSourceListener.dragStart metodo di impostazione dell'evento.doit false)

Qualsiasi aiuto, suggerimenti e commenti sono i benvenuti.

Grazie in anticipo,

Manu

È stato utile?

Soluzione

Più probabile che si voglia estendere normale GEF drag and drop per contenere anche Immagini trascinare il supporto.

Quando si trascina gli elementi all'interno di GEF editor è possibile trascinare i loro dati (in realtà è più complesso, si sta usando Richiesta-Command pattern).Ma quando il vostro trascinare va oltre l'editor di confini è necessario essere in grado di fornire ie.Immagine di dati.

SWT Fornisce il supporto per diversi Trascinare Trasferimenti di Dati come questo:

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

Quindi credo che si desidera trovare un modo in GEF DragTracker di includere anche questo ImageTransfer per l'OS Trascinare.DragTrackers sono GEF modo di gestire trascinare, e sono tornato in EditPart funzione getDragTracker()

Io non sono del tutto sicuro di come questo possa essere fatto, ma estendendo la propria DragTracker che è anche in grado di fornire anche OS a livello di Immagine dovrebbe fare il trucco.

Caso è molto simile al copia e incolla, e in base GMF editor è possibile copiare e incollare elementi come immagini all'esterno dell'editor di qualsiasi strumento di accettare le immagini.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top