/** | |
* Copyright (c) 2011, 2015 Mia-Software, and Soft-Maint. | |
* | |
* 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: | |
* Alban Ménager (Soft-Maint) - Bug 387470 - [EFacet][Custom] Editors | |
* Grégoire Dupé (Soft-Maint) - Bug 387470 - [EFacet][Custom] Editors | |
* Grégoire Dupé (Mia-Software) - Bug 423181 - Unchecked cast in HandlerUtils.getStructuredSelection() | |
* Thomas Cicognani (Soft-Maint) - Bug 438994 - Optimization of selection in TableWidget | |
* Jonathan Pepin (Soft-Maint) - Bug 479754 - NullPointer on HandlerUtils.getStructuredSelection() on close Eclipse | |
*/ | |
package org.eclipse.modisco.facet.util.ui.internal.exported.handler; | |
import org.eclipse.jface.viewers.ISelection; | |
import org.eclipse.jface.viewers.IStructuredSelection; | |
import org.eclipse.modisco.facet.util.core.DebugUtils; | |
import org.eclipse.modisco.facet.util.ui.internal.Activator; | |
import org.eclipse.swt.widgets.Display; | |
import org.eclipse.swt.widgets.Shell; | |
import org.eclipse.ui.IWorkbench; | |
import org.eclipse.ui.IWorkbenchPage; | |
import org.eclipse.ui.IWorkbenchPart; | |
import org.eclipse.ui.IWorkbenchPartSite; | |
import org.eclipse.ui.IWorkbenchWindow; | |
import org.eclipse.ui.PlatformUI; | |
/** | |
* Util class for Handlers. | |
* | |
* @since 0.3 | |
*/ | |
public final class HandlerUtils { | |
private static final boolean DEBUG = DebugUtils.getDebugStatus(Activator.getDefault()); | |
private HandlerUtils() { | |
// Hidden constructor. | |
} | |
/** | |
* @since 1.0 | |
*/ | |
public static IWorkbenchWindow getWorkbenchWindow() { | |
final IWorkbenchWindow[] result = new IWorkbenchWindow[1]; | |
final Runnable runnable = new Runnable() { | |
public void run() { | |
final IWorkbench workbench = PlatformUI.getWorkbench(); | |
DebugUtils.debug(HandlerUtils.DEBUG, | |
"PlatformUI.getWorkbench()==" + workbench); //$NON-NLS-1$ | |
if (workbench != null) { | |
final IWorkbenchWindow[] workbenchWindows = workbench | |
.getWorkbenchWindows(); | |
DebugUtils | |
.debug(HandlerUtils.DEBUG, | |
"PlatformUI.getWorkbench().getWorkbenchWindows().length==" //$NON-NLS-1$ | |
+ workbenchWindows.length); | |
if ((workbenchWindows.length > 0) | |
&& (workbenchWindows[0].getSelectionService() != null)) { | |
result[0] = workbenchWindows[0]; | |
} | |
} | |
} | |
}; | |
if (Thread.currentThread() == Display.getDefault().getThread()) { | |
runnable.run(); | |
} else { | |
Display.getDefault().syncExec(runnable); | |
} | |
return result[0]; | |
} | |
/** | |
* Return the tree selection of the user's selection. | |
* | |
* @return the current tree selection. | |
*/ | |
public static IStructuredSelection getStructuredSelection() { | |
IStructuredSelection result = null; | |
final IWorkbenchWindow workbenchWindow = getWorkbenchWindow(); | |
if (workbenchWindow != null) { | |
final ISelection selection = workbenchWindow.getSelectionService() | |
.getSelection(); | |
if (selection instanceof IStructuredSelection) { | |
result = (IStructuredSelection) selection; | |
} | |
} | |
return result; | |
} | |
/** | |
* Return the current selection. | |
* | |
* @return the current selection. | |
*/ | |
public static Object getSelection() { | |
Object result = null; | |
// on a facet model, the selection is obviously a TreeSelection | |
final IStructuredSelection structSelection = getStructuredSelection(); | |
if (structSelection != null) { | |
result = structSelection.getFirstElement(); | |
} | |
return result; | |
} | |
/** | |
* Return the active workbench window. | |
* | |
* @return the active workbench window. | |
*/ | |
public static Shell getWorkbenchWindowShell() { | |
final IWorkbenchWindow iWorkbenchWindow = PlatformUI.getWorkbench() | |
.getWorkbenchWindows()[0]; | |
final IWorkbenchPage iWorkbenchPage = iWorkbenchWindow.getPages()[0]; | |
final IWorkbenchPart activePart = iWorkbenchPage.getActivePart(); | |
final IWorkbenchPartSite site = activePart.getSite(); | |
return site.getShell(); | |
} | |
/** | |
* @return The active page | |
* @since 1.0 | |
*/ | |
public static IWorkbenchPage getActivePage() { | |
IWorkbenchPage activePage = null; | |
final IWorkbench workbench = PlatformUI.getWorkbench(); | |
if (workbench != null) { | |
final IWorkbenchWindow window = workbench | |
.getActiveWorkbenchWindow(); | |
if (window != null) { | |
activePage = window.getActivePage(); | |
} | |
} | |
return activePage; | |
} | |
/** | |
* @return The active part | |
* @since 1.0 | |
*/ | |
public static IWorkbenchPart getActivePart() { | |
IWorkbenchPart activePart = null; | |
final IWorkbenchPage activePage = getActivePage(); | |
if (activePage != null) { | |
activePart = activePage.getActivePart(); | |
} | |
return activePart; | |
} | |
} |