2016-10-12 3 views
0

in meiner @execute-Methode Ich kann die Auswahl aus der Zwischenablage/LocalSelectionTransfer abrufen. Aber ich habe keine Ahnung, wie ich darauf reagieren soll, basierend darauf, wie der Benutzer den Inhalt in die Zwischenablage gelegt hat. Ich muss entscheiden, ob ich den Inhalt dupliziere oder nicht. Das ist, was ich habe:So ermitteln Sie, ob etwas in die Zwischenablage kopiert oder ausgeschnitten wurde

@Execute 
public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell, @Named(IServiceConstants.ACTIVE_PART) MPart activePart) { 
    Clipboard clipboard = new Clipboard(shell.getDisplay()); 
    TransferData[] transferDatas = clipboard.getAvailableTypes(); 

    boolean weCanUseIt= false; 
    for(int i=0; i<transferDatas.length; i++) { 
     if(LocalSelectionTransfer.getTransfer().isSupportedType(transferDatas[i])) { 
      weCanUseIt = true; 
      break; 
     } 
    } 

    if (weCanUseIt) { 
     @SuppressWarnings("unchecked") 
     List<Object> objects = ((StructuredSelection)LocalSelectionTransfer.getTransfer().getSelection()).toList(); 
     for(Object o: objects) { 
      System.out.println(o.getClass()); 
     } 
    } 
} 

keine Ideen ???

+0

Was ist diese @Execute-Methode? So gehen Sie normalerweise nicht mit Auswahlen in anderen Teilen um. Sie würden dies nur für einen Paste-Handler verwenden. –

Antwort

0

Sie nur etwas in der Zwischenablage LocalSelectionTransfer verwenden, wenn man eine Rolle in Ihrem RCP-Code Diesen Übertragungstyp für einen Kopiervorgang zu verwenden. Es bietet eine Möglichkeit, die Auswahl direkt zu übertragen.

Dieser Übertragungstyp wird nicht verwendet, wenn etwas auf andere Weise in die Zwischenablage kopiert wird (in diesem Fall könnte es sich beispielsweise um TextTransfer oder FileTransfer handeln).

Sie verwenden also nur LocalSelectionTransfer, um mit einer Auswahl aus einem anderen Teil umzugehen, in welchem ​​Fall Sie vermutlich wissen, wie Sie mit den Objekten umgehen.

Wenn Sie versuchen, Kopieren und Ausschneiden, dann sollten Sie die Ausschneiden im Quell-Viewer tun - aber das wird die Auswahl entfernen, so dass Sie LocalSelectionTransfer dafür nicht verwenden können. Verwenden Sie eine Übertragung wie FileTransfer oder TextTransfer, die nicht auf der aktuellen Auswahl beruht.

+0

Die von mir gepostete Methode dient zum Einfügen. Zu der Zeit, als der Benutzer ctrl + c oder ctrl + x anklickt, überspringe ich die Auswahl eines Treeviewers in diesen LocalSelectionTransfer. Das funktioniert. Aber: zu dem Zeitpunkt, zu dem der Benutzer über Strg + V pastet, muss ich entscheiden, ob der Inhalt der Auswahl dupliziert oder verschoben werden soll. Es gibt keine Information, wie der Benutzer den Inhalt in die Zwischenablage/LocalSelectionTransfer legt. – WildDogSmith

+0

Wenn Sie den Unterschied feststellen möchten, können Sie LocalSelectionTransfer nicht verwenden. Verwenden Sie eine der anderen Transfer-Klassen. Sie müssen das Kopieren/Ausschneiden in der Quellansicht vornehmen. –

Verwandte Themen