2014-06-09 13 views
5

Eclipse 4 Le app RCP supportano finestre di editor mobili.Come evitare finestre dell'editor floating in eclipse 4 app RCP?

Utilizzando il livello di compatibilità, eseguo il porting di un set di app RCP da Eclipse 3.8 a Eclipse 4.4. Queste applicazioni non sono state progettate per gli editor mobili. Vorrei differire il costo della riprogettazione fino a tardi.

Il Eclipse enhancement request for floating editor windows, a commento 40, menzioni l'opportunità della politica di controllo per le finestre dell'editor:

In e4 saremmo idealmente in grado di 'host' ciò che è attualmente sia un editor o una vista in qualsiasi parte lo schema. La scelta di limitare la sua posizione a una zona editoriale dovrebbe essere applicata attraverso alcune "politiche".

Nota che non è proprio così semplice, soprattutto a causa delle radicate differenze nel modo in cui il Menu/TB viene gestito per gli editor (vale a dire qualsiasi posto che ospita un editor sarebbe -require- una barra degli strumenti "principale" per ospitare gli strumenti degli editor.

Domande:?

  • Come posso spegnere la capacità di galleggiare e finestre
  • posso farlo in un modo che permette ancora e finestre per essere trascinate da una finestra del Workbench
  • ?
  • In alternativa, se consentiamo finestre di editor mobili, esiste un modo semplice per utilizzare ActionBarAdvisor esistente per un editor appena rilasciato, per impostare il menu e la barra degli strumenti?
+0

Se si allontana DndAddon dal modello dell'applicazione, si interrompe il trascinamento di finestre in qualsiasi punto. –

+0

Vorrei mantenere l'abilità 3.x di trascinare le viste dalla finestra del workbench. –

+0

Si può provare a: a) Creare un AddOn che ascolta la creazione di finestre fluttuanti e sposta sempre la parte nel suo precedente stack b) estendere/manipolare DndAddon per bloccare le finestre mobili –

risposta

2

Ho una soluzione, ma non è carina, e ci sono alcuni trucchi.

Questa soluzione richiede la copia dell'intero pacchetto di Eclipse DnDAddon e una piccola modifica all'interno di DetachedDropAgent. (Dopo il commento iniziale di @ greg-449 e alcune ricerche iniziali, speravo di sostituire DndAddon con la mia classe che ha installato una sottoclasse di DnDManager.Tuttavia, DnDManager e altre classi critiche sono protette dal pacchetto.)

Questa idea di lavoro viene da Eric Moffat, responsabile sviluppo di Eclipse e4, in risposta alla mia richiesta di miglioramento Disabling floating editors. Elenca altre due opzioni, una delle quali è simile all'opzione @ christoph.keimel a.

Di seguito sono riportati alcuni dettagli. Funziona con almeno Eclipse 4.4.

Innanzitutto, è necessario un file del modello dell'applicazione. Se non ne hai già uno, estrai il file LegacyIDE.e4xmi dal plug-in Eclipse org.eclipse.ui.workbench * .jar. Copia il tuo plug-in con un nuovo nome (in questo esempio, myApp.e4xmi). Quindi fallo utilizzare aggiungendo una proprietà applicationXMI all'estensione del prodotto nel file plugin.xml dell'applicazione.

 
    <extension 
     id="product" 
     point="org.eclipse.core.runtime.products"> 
     <product 
      application="com.mycompany.myapp" 
      name="MyApplicationName"> 
     ... 
     <property 
       name="applicationXMI" 
       value="com.my.plugin/myApp.e4xmi"> 
     </property> 
     </product> 
    </extension> 

Avanti, copiare l'intero pacchetto org.eclipse.e4.ui.workbench.addons.dndaddon dal plug-in org.eclipse.e4.ui.workbench.addons.swt * .jar nel proprio pacchetto *.ui.workbench.addons.dndaddon.

Questo suffisso del nome del pacchetto è importante.È inoltre importante non modificare il nome della classe aggiuntiva DnDAddon. Se cambi anche tu, scoprirai che il DnDAddOn standard viene aggiunto in aggiunta a quello modificato, grazie a org.eclipse.e4.ui.workbench.addons.swt.DnDProcessor, e gli editor possono ancora essere floatati.

Successivamente, in myApp.e4xmi, modificare la riga "DnD Addon" per puntare verso la propria versione. ContributionURI include il nome del plug-in contenente la versione di DnDAddon e il percorso della classe. Per esempio:

< addons xmi: id = "_ bqcWME2EEd-DfN2vYY4Lew" elementId = "DnD Addon" contributionURI = "bundleclass: //com.one.of.my.plugins/com.mypackage.e4. ui.workbench.addons.dndaddon.DnDAddon "/ >

Infine, nella classe DetachedDropAgent, modificare il metodo canDrop() per fallire per i redattori di compatibilità. (Ho scritto il codice aggiunto sotto.)

public class DetachedDropAgent extends DropAgent { 
... 
@Override 
public boolean canDrop(MUIElement dragElement, DnDInfo info) { 
    if (info.curElement != null) 
     return false; 

    // Add this code to disable floating of editors using the compatibility layer. 
    String elementId = dragElement.getElementId(); 
    if ("org.eclipse.e4.ui.compatibility.editor".equals(elementId)) { 
     return false; 
    } 

      ... 
} 
Problemi correlati