/******************************************************************************* * Copyright (c) 2010, 2016 Red Hat, Inc. and others. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.eclipse.linuxtools.internal.docker.ui.utils; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.action.ContributionManager; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.menus.IMenuService; import org.eclipse.ui.part.EditorPart; import org.eclipse.ui.plugin.AbstractUIPlugin; /** * @author Andre Dietisheim */ public class UIUtils { private UIUtils() { } /** * Returns the selection of the active workbench window. * * @return the selection * * @see IWorkbenchWindow#getSelectionService() */ public static ISelection getWorkbenchWindowSelection() { return getActiveWorkbenchWindow().getSelectionService().getSelection(); } /** * Gets the structured selection. * * @return the structured selection */ public static IStructuredSelection getStructuredSelection() { ISelection selection = getWorkbenchWindowSelection(); if (selection instanceof IStructuredSelection) { return (IStructuredSelection) selection; } else { return null; } } /** * Gets the first element. * * @param selection * the selection * @param expectedClass * the expected class * * @return the first element */ @SuppressWarnings("unchecked") public static <T> T getFirstElement(final ISelection selection, final Class<T> expectedClass) { if (selection == null) { return null; } else { Assert.isTrue(selection instanceof IStructuredSelection); Object firstElement = ((IStructuredSelection) selection) .getFirstElement(); if (firstElement != null && expectedClass.isAssignableFrom(firstElement.getClass())) { return (T) firstElement; } else { return null; } } } /** * Gets the active page. * * @return the active page */ public static IWorkbenchPage getActivePage() { IWorkbenchPage workbenchPage = getActiveWorkbenchWindow() .getActivePage(); Assert.isNotNull(workbenchPage); return workbenchPage; } /** * Returns the editor that's currently active (focused). * * @return the active editor */ public static IEditorPart getActiveEditor() { IEditorPart editor = getActivePage().getActiveEditor(); Assert.isNotNull(editor); return editor; } /** * Gets the active workbench window. * * @return the active workbench window */ public static IWorkbenchWindow getActiveWorkbenchWindow() { IWorkbenchWindow workbenchWindow = getWorkbench() .getActiveWorkbenchWindow(); Assert.isNotNull(workbenchWindow); return workbenchWindow; } /** * Gets the workbench. * * @return the workbench */ public static IWorkbench getWorkbench() { IWorkbench workbench = PlatformUI.getWorkbench(); Assert.isNotNull(workbench); return workbench; } /** * Replaces an image with the given key by the given image descriptor. * * @param imageKey * the image key * @param imageDescriptor * the image descriptor */ public static void replaceInJfaceImageRegistry(final String imageKey, final ImageDescriptor imageDescriptor) { Assert.isNotNull(imageKey); Assert.isNotNull(imageDescriptor); JFaceResources.getImageRegistry().remove(imageKey); JFaceResources.getImageRegistry().put(imageKey, imageDescriptor); } /** * Register the given ContributionManager with the given id. The * contribution manager gets unregistered on control disposal. * * @param id * the id * @param contributionManager * the contribution manager * @param control * the control * * @see ContributionManager * @see IMenuService * @see DisposeListener */ public static void registerContributionManager(final String id, final IContributionManager contributionManager, final Control control) { Assert.isNotNull(id); Assert.isNotNull(contributionManager); Assert.isTrue(control != null && !control.isDisposed()); final IMenuService menuService = PlatformUI .getWorkbench().getService(IMenuService.class); menuService.populateContributionManager( (ContributionManager) contributionManager, id); contributionManager.update(true); control.addDisposeListener(e -> menuService.releaseContributions( (ContributionManager) contributionManager)); } /** * Creates context menu to a given control. * * @param control * the control * * @return the i menu manager */ public static IMenuManager createContextMenu(final Control control) { Assert.isTrue(control != null && !control.isDisposed()); MenuManager menuManager = new MenuManager(); menuManager .add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); Menu menu = menuManager.createContextMenu(control); control.setMenu(menu); return menuManager; } /** * Gets the dialog settings for the given identifer and plugin. * * @param identifier * the identifier * @param plugin * the plugin * * @return the dialog settings */ public static IDialogSettings getDialogSettings(final String identifier, final AbstractUIPlugin plugin) { Assert.isNotNull(plugin); IDialogSettings dialogSettings = plugin.getDialogSettings(); IDialogSettings section = dialogSettings.getSection(identifier); if (section == null) { section = dialogSettings.addNewSection(identifier); } return section; } /** * Returns the page for a given editor. * * @param editor * the editor * @return the page * * @see IWorkbenchPage */ public static IWorkbenchPage getPage(EditorPart editor) { Assert.isNotNull(editor); IWorkbenchPartSite site = editor.getSite(); Assert.isNotNull(site); return site.getPage(); } }