package eu.jucy.gui; import logger.LoggerFactory; import org.apache.log4j.Logger; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchListener; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.application.IWorkbenchConfigurer; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eclipse.ui.application.WorkbenchAdvisor; import org.eclipse.ui.application.WorkbenchWindowAdvisor; import uc.DCClient; import uihelpers.SUIJob; public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { private static final String PERSPECTIVE_ID = "eu.jucy.gui.perspective"; private static Logger logger = LoggerFactory.make(); private ApplicationWorkbenchWindowAdvisor myAdvisor; public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { return myAdvisor = new ApplicationWorkbenchWindowAdvisor(configurer); } public String getInitialWindowPerspectiveId() { return PERSPECTIVE_ID; } @Override public void initialize(final IWorkbenchConfigurer configurer) { super.initialize(configurer); //on new version .. forget WorkbenchLayout ... boolean save = GUIPI.get(GUIPI.lastStartupVersion).equals(DCClient.VERSION); configurer.setSaveAndRestore(save); if (!save) { GUIPI.put(GUIPI.lastStartupVersion, DCClient.VERSION); new SUIJob() { @Override public void run() { configurer.setSaveAndRestore(true); } }.schedule(10000); versionChanged(); } configurer.getWorkbench().addWorkbenchListener(new IWorkbenchListener() { public void postShutdown(IWorkbench workbench) {} public boolean preShutdown(IWorkbench workbench, boolean forced) { if (!forced && GUIPI.getBoolean(GUIPI.askBeforeShutdown)) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); return MessageDialog.openQuestion(shell, Lang.Question, Lang.AreYouSureYouWantToCloseJucy); } return true; } }); } @Override public void eventLoopException(Throwable exception) { if (Platform.inDevelopmentMode()) { logger.warn(exception, exception); } super.eventLoopException(exception); } private void versionChanged() { LoggerFactory.clearErrorLog(); } @Override public boolean preShutdown() { return super.preShutdown(); } @Override public void postShutdown() { ApplicationWorkbenchWindowAdvisor.waitForShutdownJob(); // ApplicationWorkbenchWindowAdvisor.get().stop(true); myAdvisor.disposeTray(); super.postShutdown(); } }