/** * Copyright (c) 2013-2015 by Brainwy Software Ltda, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.shared_ui; import java.lang.reflect.Field; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.e4.ui.css.swt.theme.IThemeEngine; import org.eclipse.e4.ui.services.IStylingEngine; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.python.pydev.shared_core.log.Log; import org.python.pydev.shared_ui.bundle.BundleInfo; import org.python.pydev.shared_ui.bundle.IBundleInfo; import org.python.pydev.shared_ui.utils.UIUtils; /** * The main plugin class to be used in the desktop. */ public class SharedUiPlugin extends AbstractUIPlugin { public static final String PLUGIN_ID = "org.python.pydev.shared_ui"; //The shared instance. private static SharedUiPlugin plugin; // ----------------- SINGLETON THINGS ----------------------------- public static IBundleInfo info; public static IBundleInfo getBundleInfo() { if (SharedUiPlugin.info == null) { SharedUiPlugin bundle = SharedUiPlugin.getDefault(); if (bundle == null) { return null; } SharedUiPlugin.info = new BundleInfo(bundle.getBundle()); } return SharedUiPlugin.info; } public static void setBundleInfo(IBundleInfo b) { SharedUiPlugin.info = b; } // ----------------- END BUNDLE INFO THINGS -------------------------- /** * The constructor. */ public SharedUiPlugin() { super(); plugin = this; } /** * This method is called upon plug-in activation */ @Override public void start(BundleContext context) throws Exception { super.start(context); } /** * This method is called when the plug-in is stopped */ @Override public void stop(BundleContext context) throws Exception { super.stop(context); } /** * Returns the shared instance. */ public static SharedUiPlugin getDefault() { return plugin; } private static ImageCache imageCache = null; /** * @return the cache that should be used to access images within the pydev plugin. */ public static ImageCache getImageCache() { if (imageCache == null) { IBundleInfo bundleInfo = SharedUiPlugin.getBundleInfo(); if (bundleInfo == null) { return null; } imageCache = bundleInfo.getImageCache(); } return imageCache; } public ImageDescriptor getImageDescriptor(String key) { return getImageRegistry().getDescriptor(key); } @SuppressWarnings("restriction") public static void setCssId(Object control, String id, boolean applyToChildren) { try { IStylingEngine engine = (IStylingEngine) UIUtils.getActiveWorkbenchWindow(). getService(IStylingEngine.class); if (engine != null) { engine.setId(control, id); IThemeEngine themeEngine = (IThemeEngine) Display.getDefault().getData( "org.eclipse.e4.ui.css.swt.theme"); themeEngine.applyStyles(control, applyToChildren); } } catch (Throwable e) { //Ignore: older versions of Eclipse won't have it! // e.printStackTrace(); } } public static void fixSelectionStatusDialogStatusLineColor(Object dialog, Color color) { //TODO: Hack: remove when MessageLine is styleable. try { Field field = org.eclipse.ui.dialogs.SelectionStatusDialog.class .getDeclaredField("fStatusLine"); field.setAccessible(true); Control messageLine = (Control) field.get(dialog); messageLine.setBackground(color); } catch (Exception e) { Log.log(e); } } public static IStatus makeErrorStatus(Exception e, boolean useErrorMessage) { String message = ""; if (useErrorMessage) { message = e.getMessage(); if (message == null) { message = "null"; } } return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, e); } }