2013-01-08 27 views
7

C'è un modo per sostituire la shell generata da Eclipse RCP per MTrimmedWindow da una finestra definita dall'utente?Come creare la mia shell per sostituire la shell creata in MTrimmedWindow in e4 RCP?

Eclipse crea una shell con un tipo di stile particolare, che può essere fornita solo durante la creazione. Voglio rimuovere massimizzare e ridimensionare dall'elemento shell creato per MTrimmedWindow. Se qualcuno ha una soluzione per il problema sopra, per favore rispondi.

risposta

6

Lo stile per la shell non può essere modificato dopo la creazione e la shell stessa non può essere scambiata dopo che è stata creata dal renderer. Ma la situazione non è senza speranza.

Eclipse 4 utilizza i renderer per generare elementi dell'interfaccia utente dal modello dell'applicazione. Questi renderizzatori possono essere scambiati con utilizzando il Framework di rendering e questo è un modo possibile per creare una shell con uno stile diverso da quello predefinito.

La soluzione implicherebbe la scrittura di un proprio renderer per UIElements del tipo MWindow, fornendo a WorkbenchRendererFactory la creazione di un nuovo renderer SWT per MWindows e la registrazione del nuovo factory con il prodotto.

di default: la creazione di Shell da WBWRenderer

WBWRenderer (banco di lavoro finestra renderer) è il renderer standard per gli elementi di tipo SWT MWindow.

Nel WBWRenderer#createWidget, il guscio è stato creato con lo stile SWT.SHELL_TRIM, che è uno stile convenienza per SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE:

wbwShell = new Shell(Display.getCurrent(), SWT.SHELL_TRIM | rtlStyle); 

Questo si tradurrà in un TrimmedWindow che può essere massimizzato e ridimensionato, senza la possibilità di cambiare questo comportamento dopo la creazione.

creazione Shell dal nuovo renderer

per aggirare la limitazione di cui sopra, è possibile fornire un renderer diversa, utilizzando WBWRenderer come modello. Ciò ti consente di cambiare il codice per la creazione della shell, ad es.

wbwShell = new Shell(Display.getCurrent(), SWT.CLOSE | SWT.TITLE | 
         SWT.MIN | rtlStyle); 

Questo rendering deve essere restituito da una WorkbenchRendererFactory come renderer utilizzato per mostrare il MWindows. Inoltre, lo strumento di rendering deve essere aggiunto come proprietà del prodotto nel file plugin.xml.

Queste modifiche generano una finestra di controllo che non può essere ingrandita o ridimensionata.

Un esempio di come scrivere e registrare WorkbenchRendererFactory può essere trovato here.

Una soluzione migliore?

In realtà, ci potrebbe essere un modo migliore per gusci stile SWT dal WBWRenderer già utilizza i tag per determinare il comportamento MWindow: shellMaximized e shellMinimized. Questi tag possono essere impostati nella scheda supplementare della finestra ritagliata nell'editor del modello di applicazione.

Se i tag di stile swt possono essere impostati in modo simile, potrebbero essere utilizzati per impostare lo stile di shell. Questa sarebbe una richiesta di funzionalità per Eclipse.

+0

grazie. Proverà la soluzione di cui sopra. Ho anche suggerito l'opzione di tag in uno dei post del forum di Eclipse. Ancora una volta, grazie mille. –

+0

@GouthamPrasad Ho appena trovato una segnalazione di bug relativa alla funzione di stile per la finestra dell'applicazione in Eclipse 4 [qui] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=379396) –

1

Ora è possibile risolvere questo problema con uno specifico flag "stato persistente", come documentato in https://bugs.eclipse.org/bugs/show_bug.cgi?id=386951. Ad esempio, per realizzare una finestra NO_TRIM, aggiungere la chiave/valore di styleOverride/8, dove 8 è il valore se si ottiene il valore numerico di

int val = SWT.NO_TRIM; 
    System.out.println(val); 
0

Oltre a col.panic di risposta se si voleva uno stile di

SWT.CLOSE | SWT.TITLE 

vostro valore styleOverride sarebbe 96

System.out.println(SWT.CLOSE | SWT.TITLE) = 96