2016-10-14 4 views
0

TL; DR: Ich weiß nicht, wie ich dem Benutzer einen Bestätigungsdialog vor dem Schließen der durch EMF Compare definierten CompareEditor präsentieren kann.Bestätigung vor dem Schließen eines Editors in Eclipse RCP

Weitere Details:

ich einen relativ einfachen Anwendungsfall haben, Ich mag würde aufnehmen: den Benutzer auffordert, sie bestätigen möchten einen Editor schließen, nachdem sie die enge (x) Taste auf gedrückt haben das Werkbankfenster.

Ich habe von der Eclipse forum festgestellt, dass das Anfügen einer IPartListener an das Fenster nicht helfen wird, da die partClosed() Methode nur aufgerufen wird, nachdem das Fenster geschlossen wurde.

Die empfohlene Lösung besteht darin, die Schnittstelle ISaveablePart2 in dem Teil zu implementieren, den der Benutzer schließt. Allerdings kann ich das nicht, da der Teil von einem Plugin kommt. Insbesondere ist es der durch EMF definierte CompareEditor Vergleich. Ich kann also keine zusätzlichen Schnittstellen hinzufügen. Oder, wenn ich es irgendwie kann, weiß ich nicht, wie ich es machen soll (die Klasse zu erweitern sieht nicht nach einer Option aus, da sie von einer anderen EMF Compare-Klasse und nicht direkt von meinem Code instanziiert wird).

Ein weiteres suggestion ich sah ist ein IPerspectiveListener2 anstelle der IPartListener zu verwenden, da dieser Listener benachrichtigt wird, bevor das Teil tatsächlich geschlossen ist. Ich weiß jedoch immer noch nicht, wie ich das Schließen des Teils innerhalb dieses Hörers abbrechen kann. Ist das überhaupt möglich?

+0

Verwenden Sie Eclipse 4? Sie könnten wahrscheinlich einen benutzerdefinierten 'ISaveHandler' in Eclipse 4 verwenden. Dies ist in einer e4-Anwendung einfach durchzuführen, nicht sicher, wie es in einer 3.x-Kompatibilitätsmodus-App funktioniert. –

+0

@ greg-449 Ich bin leider im 3.x Kompatibilitätsmodus ausgeführt. – Epicurus

Antwort

0

Sie können eine benutzerdefinierte ISaveHandler verwenden, um speichert zu speichern. Dies ist eine Eclipse 4 einzige Schnittstelle, die Sie im IEclipseContext für Ihr Haupt MWindow registrieren:

MWindow window = ... get main window 

IEclipseContext windowContext = window.getContext(); 

windowContext.set(ISaveHandler.class, ... your save handler); 

In einem 3.x-Kompatibilitätsmodus RCP können Sie die MWindow durch die IServiceLocator Schnittstelle durch eine Reihe von Schnittstellen angeboten bekommen . Zum Beispiel in einer Ansicht oder Editor:

MWindow window = (MWindow)getSite().getService(MWindow.class); 

IWorkbenchWindow implementiert auch IServiceLocator.

Der Custom-Save-Handler befasst sich damit, dass der Editor aufgefordert wird, den Benutzer zu speichern und den Benutzer zum Speichern aufzufordern.

Die Standardimplementierung ist org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler, die Sie als Beispiel dafür verwenden können.

+0

Vielen Dank für den Vorschlag. Ich bin mir jedoch nicht sicher, ob ich es befolge. Ich möchte nicht einen benutzerdefinierten Sicherungshandler erstellen, sondern dem Benutzer die Möglichkeit geben, den Abschluss eines Editors abzubrechen, unabhängig davon, ob sein Inhalt gespeichert wurde oder nicht. – Epicurus

+0

Die Methode 'promptToSave' des benutzerdefinierten Sicherungshandlers behandelt das Abbrechen des Speicherns. –

+0

Danke. Ich habe mir die Implementierung von PartServiceSaveHandler angesehen, aber es scheint nicht zu helfen. Ich versuche nicht, eine Sicherungsoperation abzubrechen, ich versuche den Editor zu schließen, egal ob er verschmutzt ist oder nicht. Mit anderen Worten, ich versuche, dem Benutzer die Möglichkeit zu geben, zu sagen: "Ich wollte diesen (x) Knopf nicht drücken. Bitte schließe meinen Editor nicht.". Und ich möchte ihm diese Option unabhängig vom Status des Editors (gespeichert oder nicht) geben. – Epicurus

Verwandte Themen