/******************************************************************************* * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tm.te.rcp.application; import java.text.Collator; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.util.Policy; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.tm.te.rcp.application.nls.Messages; 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 org.eclipse.ui.internal.PluginActionBuilder; /** * Target Explorer, RCP: Workbench advisor implementation. */ @SuppressWarnings("restriction") public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { private final static String PERSPECTIVE_ID = "org.eclipse.tm.te.ui.perspective"; //$NON-NLS-1$ private static ApplicationWorkbenchAdvisor workbenchAdvisor = null; private Listener settingsChangeListener; /** * Creates a new workbench advisor instance. */ public ApplicationWorkbenchAdvisor() { super(); if (workbenchAdvisor != null) { throw new IllegalStateException(); } workbenchAdvisor = this; Listener closeListener = new Listener() { public void handleEvent(Event event) { boolean doExit = ApplicationWorkbenchWindowAdvisor.promptOnExit(null); event.doit = doExit; if (!doExit) event.type = SWT.None; } }; Display.getDefault().addListener(SWT.Close, closeListener); } /* * (non-Javadoc) * * @see org.eclipse.ui.application.WorkbenchAdvisor#initialize */ @Override public void initialize(IWorkbenchConfigurer configurer) { PluginActionBuilder.setAllowIdeLogging(false); // make sure we always save and restore workspace state configurer.setSaveAndRestore(true); // show Help button in JFace dialogs TrayDialog.setDialogHelpAvailable(true); Policy.setComparator(Collator.getInstance()); } /* * (non-Javadoc) * * @see org.eclipse.ui.application.WorkbenchAdvisor#preStartup() */ @Override public void preStartup() { // Suspend background jobs while we startup Job.getJobManager().suspend(); } /* * (non-Javadoc) * * @see org.eclipse.ui.application.WorkbenchAdvisor#postStartup() */ @Override public void postStartup() { try { initializeSettingsChangeListener(); Display.getCurrent().addListener(SWT.Settings, settingsChangeListener); } finally {// Resume background jobs after we startup Job.getJobManager().resume(); } } /** * Initialize the listener for settings changes. */ private void initializeSettingsChangeListener() { settingsChangeListener = new Listener() { boolean currentHighContrast = Display.getCurrent().getHighContrast(); public void handleEvent(org.eclipse.swt.widgets.Event event) { if (Display.getCurrent().getHighContrast() == currentHighContrast) return; currentHighContrast = !currentHighContrast; // make sure they really want to do this if (new MessageDialog(null, Messages.SystemSettingsChange_title, null, Messages.SystemSettingsChange_message, MessageDialog.QUESTION, new String[] { Messages.SystemSettingsChange_yes, Messages.SystemSettingsChange_no }, 1).open() == Window.OK) { PlatformUI.getWorkbench().restart(); } } }; } /* (non-Javadoc) * @see org.eclipse.ui.application.WorkbenchAdvisor#preShutdown() */ @Override public boolean preShutdown() { Display.getCurrent().removeListener(SWT.Settings, settingsChangeListener); return super.preShutdown(); } /* * (non-Javadoc) * * @see org.eclipse.ui.application.WorkbenchAdvisor#createWorkbenchWindowAdvisor(org.eclipse.ui.application.IWorkbenchWindowConfigurer) */ @Override public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { return new ApplicationWorkbenchWindowAdvisor(this, configurer); } /** * Return true if the intro plugin is present and false otherwise. * * @return boolean */ public boolean hasIntro() { return getWorkbenchConfigurer().getWorkbench().getIntroManager().hasIntro(); } /* (non-Javadoc) * @see org.eclipse.ui.application.WorkbenchAdvisor */ @Override public String getInitialWindowPerspectiveId() { return PERSPECTIVE_ID; } }