1 /*
   2  * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright (c) 2019, Red Hat Inc. All rights reserved.
   4  *
   5  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   6  *
   7  * The contents of this file are subject to the terms of either the Universal Permissive License
   8  * v 1.0 as shown at http://oss.oracle.com/licenses/upl
   9  *
  10  * or the following license:
  11  *
  12  * Redistribution and use in source and binary forms, with or without modification, are permitted
  13  * provided that the following conditions are met:
  14  *
  15  * 1. Redistributions of source code must retain the above copyright notice, this list of conditions
  16  * and the following disclaimer.
  17  *
  18  * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
  19  * conditions and the following disclaimer in the documentation and/or other materials provided with
  20  * the distribution.
  21  *
  22  * 3. Neither the name of the copyright holder nor the names of its contributors may be used to
  23  * endorse or promote products derived from this software without specific prior written permission.
  24  *
  25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
  26  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  27  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  28  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  31  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
  32  * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33  */
  34 package org.openjdk.jmc.ui;
  35 
  36 import java.awt.GraphicsEnvironment;
  37 import java.util.logging.Level;
  38 
  39 import org.eclipse.core.runtime.Platform;
  40 import org.eclipse.jface.resource.ImageRegistry;
  41 import org.openjdk.jmc.ui.common.security.SecurityManagerFactory;
  42 import org.openjdk.jmc.ui.common.util.Environment;
  43 import org.openjdk.jmc.ui.common.util.Environment.OSType;
  44 import org.openjdk.jmc.ui.misc.TrayManager;
  45 import org.openjdk.jmc.ui.preferences.PreferenceConstants;
  46 import org.openjdk.jmc.ui.security.DialogSecurityManager;
  47 import org.osgi.framework.BundleContext;
  48 
  49 /**
  50  * The Core Plug-in class for Mission Control
  51  */
  52 public class UIPlugin extends MCAbstractUIPlugin {
  53         public static final String PLUGIN_ID = "org.openjdk.jmc.ui"; //$NON-NLS-1$
  54 
  55         // general
  56         public static final String ICON_AMPERSAND = "other.gif"; //$NON-NLS-1$
  57         public static final String ICON_HELP = "help.gif"; //$NON-NLS-1$
  58         public static final String ICON_ERROR = "error_obj.gif"; //$NON-NLS-1$
  59         public static final String ICON_ALERT = "alert_obj.png"; //$NON-NLS-1$
  60         public static final String ICON_TABLE_SETTINGS = "settings_obj.gif"; //$NON-NLS-1$
  61         public static final String ICON_REFRESH = "refresh_tab.gif"; //$NON-NLS-1$
  62         public static final String ICON_REFRESH_GRAY = "refresh_tab_grey.gif"; //$NON-NLS-1$
  63         public static final String ICON_STACKTRACE_ELEMENT = "stckframe_obj.gif"; //$NON-NLS-1$
  64         public static final String IMAGE_TABLE_SETTINGS = "tablesettings.gif"; //$NON-NLS-1$
  65         public static final String ICON_VERTICAL_LAYOUT = "th_vertical.gif"; //$NON-NLS-1$
  66         public static final String ICON_HORIZONTAL_LAYOUT = "th_horizontal.gif"; //$NON-NLS-1$
  67         public static final String ICON_EXPAND_ALL = "expandall.gif"; //$NON-NLS-1$
  68         public static final String ICON_COLLAPSE_ALL = "collapseall.gif"; //$NON-NLS-1$
  69         public static final String ICON_EXPAND_GRAYED = "collapsegrayed.gif"; //$NON-NLS-1$
  70         public static final String ICON_CLOCK = "clock16.gif"; //$NON-NLS-1$
  71         public static final String ICON_PROPERTY_OBJECT = "property_obj.gif"; //$NON-NLS-1$
  72         public static final String ICON_BINARY = "binary_co.gif"; //$NON-NLS-1$
  73         public static final String ICON_DATA = "data.gif"; //$NON-NLS-1$
  74         public static final String ICON_GARBAGE_BIN = "trash.png"; //$NON-NLS-1$
  75         public static final String ICON_ADRESS = "adress.gif"; //$NON-NLS-1$
  76         public static final String ICON_PASTE = "paste_edit.gif"; //$NON-NLS-1$
  77         public static final String ICON_CHANGE = "change.gif"; //$NON-NLS-1$
  78         public static final String ICON_SAVE = "save_edit.gif"; //$NON-NLS-1$
  79         public static final String ICON_ADD = "add.gif"; //$NON-NLS-1$;
  80         public static final String ICON_CUT = "cut_edit.gif"; //$NON-NLS-1$
  81         public static final String ICON_TIMESPAN = "time-span-16.png"; //$NON-NLS-1$
  82         public static final String ICON_TREE_MODE = "tree_mode.png"; //$NON-NLS-1$
  83         public static final String ICON_RESET_TO_DEFAULTS = "undo.gif"; //$NON-NLS-1$
  84         public static final String ICON_LOCK_TREE = "lock_tree.png"; //$NON-NLS-1$
  85         public static final String ICON_REGEX = "regex.png"; //$NON-NLS-1$;
  86 
  87         // control
  88         public static final String ICON_STOP = "stop.gif"; //$NON-NLS-1$
  89         public static final String ICON_PLAY = "play.gif"; //$NON-NLS-1$
  90         public static final String ICON_PAUSE = "pause-16.png"; //$NON-NLS-1$
  91         public static final String ICON_STEP_OVER = "stepover.gif"; //$NON-NLS-1$
  92 
  93         public static final String ICON_STOP_GREY = "stopgrey.gif"; //$NON-NLS-1$
  94         public static final String ICON_PLAY_GREY = "playgrey.gif"; //$NON-NLS-1$
  95         public static final String ICON_PAUSE_GREY = "pause_grey.gif"; //$NON-NLS-1$
  96         public static final String ICON_STEP_OVER_GREY = "stepover_grey.gif"; //$NON-NLS-1$
  97 
  98         public static final String ICON_EXPORT = "export.gif"; //$NON-NLS-1$
  99         public static final String ICON_IMPORT = "import.gif"; //$NON-NLS-1$
 100 
 101         // overlay
 102         public static final String ICON_OVERLAY_ERROR = "error_co.gif"; //$NON-NLS-1$
 103         public static final String ICON_OVERLAY_RECURSIVE = "recursive_co.gif"; //$NON-NLS-1$
 104         public static final String ICON_OVERLAY_STATIC = "static_co.gif"; //$NON-NLS-1$
 105 
 106         // class
 107         public static final String ICON_CLASS_PUBLIC = "class_obj.gif"; //$NON-NLS-1$
 108 
 109         // exception
 110         public static final String ICON_EXCEPTION = "jexception_obj.png"; //$NON-NLS-1$
 111         public static final String ICON_RUNTIME_EXCEPTION = "jexceptiond_obj.png"; //$NON-NLS-1$
 112 
 113         // method
 114         public static final String ICON_METHOD_DEFAULT = "methdef_obj.gif"; //$NON-NLS-1$
 115         public static final String ICON_METHOD_PRIVATE = "methpri_obj.gif"; //$NON-NLS-1$
 116         public static final String ICON_METHOD_PUBLIC = "methpub_obj.gif"; //$NON-NLS-1$
 117         public static final String ICON_METHOD_PROTECTED = "methpro_obj.gif"; //$NON-NLS-1$
 118         public static final String ICON_METHOD_NON_OPTIMIZED = "non-optimized-method-16.png"; //$NON-NLS-1$
 119         public static final String ICON_METHOD_OPTIMZED = "optimized-method-16.png"; //$NON-NLS-1$
 120         public static final String ICON_METHOD_CALLER = "caller.png"; //$NON-NLS-1$
 121         public static final String ICON_METHOD_CALLEE = "callee.png"; //$NON-NLS-1$
 122 
 123         // package
 124         public static final String ICON_PACKAGE = "package_obj.gif"; //$NON-NLS-1$
 125         public static final String ICON_LOGICAL_PACKAGE = "logical_package_obj.gif"; //$NON-NLS-1$
 126 
 127         // module
 128         public static final String ICON_MODULE = "jigsaw-32.png"; //$NON-NLS-1$
 129 
 130         // font awesome
 131         public static final String ICON_FA_SCALE_TO_FIT = "fa-scale-to-fit-16.png";
 132         public static final String ICON_FA_SELECTION = "fa-selection-16.png";
 133         public static final String ICON_FA_ZOOM_IN = "fa-zoom-in-16.png";
 134         public static final String ICON_FA_ZOOM_OUT = "fa-zoom-out-16.png";
 135         public static final String ICON_FA_ZOOM_PAN = "fa-zoom-pan-16.png";
 136         
 137         // thread
 138         public final static String ICON_THREAD_RUNNING = "thread_obj.gif"; //$NON-NLS-1$
 139         public final static String ICON_THREAD_SUSPENDED = "threads_obj.gif"; //$NON-NLS-1$
 140         public final static String ICON_THREAD_TERMINATED = "threadt_obj.gif"; //$NON-NLS-1$
 141         public static final String ICON_THREAD_DEADLOCKED = "live-thread-deadlocked-16.PNG"; //$NON-NLS-1$
 142         public static final String ICON_THREAD_DEADLOCKED_GREY = "live-thread-deadlocked-grey-16.PNG"; //$NON-NLS-1$
 143         public static final String ICON_THREAD_NEW = "live-thread-new-16.png"; //$NON-NLS-1$
 144         public static final String ICON_THREAD_TIMEWAITING = "live-thread-timewaiting-16.png"; //$NON-NLS-1$
 145         public static final String ICON_THREAD_WAITING = "live-thread-waiting-16.png"; //$NON-NLS-1$
 146         public static final String ICON_THREAD_BLOCKED = "live-thread-locked-16.png"; //$NON-NLS-1$
 147         public static final String ICON_THREAD_GROUP = "threadgroup.gif"; //$NON-NLS-1$
 148         public static final String ICON_THREAD_LOCK = ICON_THREAD_BLOCKED;
 149 
 150         public static final String ICON_ZOOM_IN = "zoom-in-16.png"; //$NON-NLS-1$
 151         public static final String ICON_ZOOM_OUT = "zoom-out-16.png"; //$NON-NLS-1$
 152         public static final String ICON_SELECT_ALL = "select-all-16.png"; //$NON-NLS-1$
 153         public static final String ICON_NAV_FORWARD = "forward_nav.gif"; //$NON-NLS-1$
 154         public static final String ICON_NAV_BACKWARD = "backward_nav.gif"; //$NON-NLS-1$
 155         public static final String ICON_NAV_DOWN = "down_nav.gif"; //$NON-NLS-1$
 156         public static final String ICON_NAV_UP = "up_nav.gif"; //$NON-NLS-1$
 157         public static final String ICON_ZOOM_ON = "zoom-tool-on-16.png"; //$NON-NLS-1$
 158         public static final String ICON_ZOOM_OFF = "zoom-tool-off-16.png"; //$NON-NLS-1$
 159         public static final String ICON_SELECT_ON = "selection-tool-on-16.png"; //$NON-NLS-1$
 160         public static final String ICON_SELECT_OFF = "selection-tool-off-16.png"; //$NON-NLS-1$
 161 
 162         public static final String ICON_FOLDER = "fldr_obj.gif"; //$NON-NLS-1$
 163         public static final String ICON_FOLDER_CLOSED = "closedFolder.gif"; //$NON-NLS-1$
 164 
 165         public static final String ICON_COLOR_PALETTE = "color-palette.gif"; //$NON-NLS-1$
 166 
 167         public static final String ICON_DIAL_PANEL = "single-dial.png"; //$NON-NLS-1$
 168         public static final String ICON_DIAL_BACKGROUND = "dial-bkgnd.png"; //$NON-NLS-1$
 169         public static final String ICON_DIAL_PANEL2 = "dial2.png"; //$NON-NLS-1$TDial
 170 
 171         public static final String ICON_DIAL_PANEL_1_10 = "dial_1_to_10.png"; //$NON-NLS-1$
 172         public static final String ICON_DIAL_PANEL_10_100 = "dial_10_to_100.png"; //$NON-NLS-1$
 173         public static final String ICON_DIAL_PANEL_100_1000 = "dial_100_to_1000.png"; //$NON-NLS-1$
 174         public final static String ICON_DELETE = "delete-16.png"; //$NON-NLS-1$
 175 
 176         public final static String ICON_MISSION_CONTROL = "mission_control.gif"; //$NON-NLS-1$
 177         public static final String ICON_TOOLS = "external_tools.gif"; //$NON-NLS-1$
 178         public static final String ICON_TOOLBAR = "toolbar.gif"; //$NON-NLS-1$
 179 
 180         public static final String ICON_LAYOUT = "layout.gif"; //$NON-NLS-1$
 181 
 182         public static final String ICON_SERVICES = "service.gif"; //$NON-NLS-1$
 183 
 184         public static final String ICON_TABGROUP_OTHER = "tabgroup_other.png"; //$NON-NLS-1$
 185 
 186         public static final String ICON_BANNER_PASSWORD_WIZARD = "bannerpasswordwiz.gif"; //$NON-NLS-1$
 187 
 188         public static final String ICON_OVERLAY_WARNING = "overlay_warning.gif"; //$NON-NLS-1$
 189 
 190         public static final String ICON_FIND = "search-glass.png"; //$NON-NLS-1$
 191 
 192         public static enum ImageRegistryPrefixes {
 193                 COLORED_SQUARE, TYPE_IMAGES, NONE // Use NONE prefix to avoid conflict with other prefixes
 194         }
 195 
 196         // The shared instance.
 197         private static UIPlugin plugin;
 198         private TrayManager m_trayManager;
 199 
 200         /**
 201          * The constructor.
 202          */
 203         public UIPlugin() {
 204                 super(PLUGIN_ID);
 205                 plugin = this;
 206         }
 207 
 208         /**
 209          * This method is called upon plug-in activation
 210          */
 211         @Override
 212         public void start(BundleContext context) throws Exception {
 213                 super.start(context);
 214                 initSwingLookAndFeel();
 215                 // FIXME: Move to extension point
 216                 SecurityManagerFactory.setDefaultSecurityManager(new DialogSecurityManager());
 217         }
 218 
 219         /**
 220          * This method is called when the plug-in is stopped
 221          */
 222         @Override
 223         public void stop(BundleContext context) throws Exception {
 224                 super.stop(context);
 225                 plugin = null;
 226                 Platform.getInstanceLocation().release();
 227         }
 228 
 229         @Override
 230         protected void initializeImageRegistry(ImageRegistry registry) {
 231                 registerImage(registry, ICON_CLASS_PUBLIC, ICON_CLASS_PUBLIC);
 232                 registerImage(registry, ICON_AMPERSAND, ICON_AMPERSAND);
 233                 registerImage(registry, ICON_HELP, ICON_HELP);
 234                 registerImage(registry, ICON_EXCEPTION, ICON_EXCEPTION);
 235                 registerImage(registry, ICON_RUNTIME_EXCEPTION, ICON_RUNTIME_EXCEPTION);
 236                 registerImage(registry, ICON_PACKAGE, ICON_PACKAGE);
 237                 registerImage(registry, ICON_LOGICAL_PACKAGE, ICON_LOGICAL_PACKAGE);
 238                 registerImage(registry, ICON_METHOD_PROTECTED, ICON_METHOD_PROTECTED);
 239                 registerImage(registry, ICON_METHOD_PRIVATE, ICON_METHOD_PRIVATE);
 240                 registerImage(registry, ICON_METHOD_PUBLIC, ICON_METHOD_PUBLIC);
 241                 registerImage(registry, ICON_METHOD_DEFAULT, ICON_METHOD_DEFAULT);
 242                 registerImage(registry, ICON_METHOD_CALLEE, ICON_METHOD_CALLEE);
 243                 registerImage(registry, ICON_METHOD_CALLER, ICON_METHOD_CALLER);
 244                 registerImage(registry, ICON_ALERT, ICON_ALERT);
 245                 registerImage(registry, ICON_VERTICAL_LAYOUT, ICON_VERTICAL_LAYOUT);
 246                 registerImage(registry, ICON_HORIZONTAL_LAYOUT, ICON_HORIZONTAL_LAYOUT);
 247                 registerImage(registry, ICON_TABLE_SETTINGS, ICON_TABLE_SETTINGS);
 248                 registerImage(registry, ICON_STACKTRACE_ELEMENT, ICON_STACKTRACE_ELEMENT);
 249                 registerImage(registry, ICON_REFRESH, ICON_REFRESH);
 250                 registerImage(registry, ICON_REFRESH_GRAY, ICON_REFRESH_GRAY);
 251                 registerImage(registry, ICON_METHOD_NON_OPTIMIZED, ICON_METHOD_NON_OPTIMIZED);
 252                 registerImage(registry, ICON_METHOD_OPTIMZED, ICON_METHOD_OPTIMZED);
 253                 registerImage(registry, ICON_DATA, ICON_DATA);
 254                 registerImage(registry, ICON_BINARY, ICON_BINARY);
 255                 registerImage(registry, ICON_GARBAGE_BIN, ICON_GARBAGE_BIN);
 256                 registerImage(registry, ICON_ADRESS, ICON_ADRESS);
 257                 registerImage(registry, ICON_STOP, ICON_STOP);
 258                 registerImage(registry, ICON_PLAY, ICON_PLAY);
 259                 registerImage(registry, ICON_STEP_OVER, ICON_STEP_OVER);
 260 
 261                 registerImage(registry, ICON_STOP_GREY, ICON_STOP_GREY);
 262                 registerImage(registry, ICON_PLAY_GREY, ICON_PLAY_GREY);
 263                 registerImage(registry, ICON_STEP_OVER_GREY, ICON_STEP_OVER_GREY);
 264                 registerImage(registry, ICON_PAUSE_GREY, ICON_PAUSE_GREY);
 265 
 266                 registerImage(registry, ICON_IMPORT, ICON_IMPORT);
 267                 registerImage(registry, ICON_EXPORT, ICON_EXPORT);
 268 
 269                 registerImage(registry, ICON_PASTE, ICON_PASTE);
 270                 registerImage(registry, ICON_SAVE, ICON_SAVE);
 271                 registerImage(registry, ICON_CHANGE, ICON_CHANGE);
 272                 registerImage(registry, ICON_ADD, ICON_ADD);
 273                 registerImage(registry, ICON_CUT, ICON_CUT);
 274                 registerImage(registry, ICON_TIMESPAN, ICON_TIMESPAN);
 275                 registerImage(registry, ICON_REGEX, ICON_REGEX);
 276 
 277                 registerImage(registry, ICON_CLOCK, ICON_CLOCK);
 278                 registerImage(registry, ICON_PROPERTY_OBJECT, ICON_PROPERTY_OBJECT);
 279 
 280                 registerImage(registry, ICON_EXPAND_ALL, ICON_EXPAND_ALL);
 281                 registerImage(registry, ICON_COLLAPSE_ALL, ICON_COLLAPSE_ALL);
 282 
 283                 // font awesome
 284                 registerImage(registry, ICON_FA_SCALE_TO_FIT, ICON_FA_SCALE_TO_FIT);
 285                 registerImage(registry, ICON_FA_SELECTION, ICON_FA_SELECTION);
 286                 registerImage(registry, ICON_FA_ZOOM_IN, ICON_FA_ZOOM_IN);
 287                 registerImage(registry, ICON_FA_ZOOM_OUT, ICON_FA_ZOOM_OUT);
 288                 registerImage(registry, ICON_FA_ZOOM_PAN, ICON_FA_ZOOM_PAN);
 289                 
 290                 // Threads
 291                 registerImage(registry, ICON_THREAD_RUNNING, ICON_THREAD_RUNNING);
 292                 registerImage(registry, ICON_THREAD_SUSPENDED, ICON_THREAD_SUSPENDED);
 293                 registerImage(registry, ICON_THREAD_TERMINATED, ICON_THREAD_TERMINATED);
 294                 registerImage(registry, ICON_THREAD_DEADLOCKED, ICON_THREAD_DEADLOCKED);
 295                 registerImage(registry, ICON_THREAD_DEADLOCKED_GREY, ICON_THREAD_DEADLOCKED_GREY);
 296                 registerImage(registry, ICON_THREAD_TIMEWAITING, ICON_THREAD_TIMEWAITING);
 297                 registerImage(registry, ICON_THREAD_WAITING, ICON_THREAD_WAITING);
 298                 registerImage(registry, ICON_THREAD_BLOCKED, ICON_THREAD_BLOCKED);
 299                 registerImage(registry, ICON_THREAD_NEW, ICON_THREAD_NEW);
 300                 registerImage(registry, ICON_THREAD_GROUP, ICON_THREAD_GROUP);
 301 
 302                 // overlay
 303                 registerImage(registry, ICON_ERROR, ICON_ERROR);
 304                 registerImage(registry, ICON_OVERLAY_ERROR, ICON_OVERLAY_ERROR);
 305                 registerImage(registry, ICON_OVERLAY_RECURSIVE, ICON_OVERLAY_RECURSIVE);
 306 
 307                 registerImage(registry, IMAGE_TABLE_SETTINGS, IMAGE_TABLE_SETTINGS);
 308 
 309                 // Panning and zooming
 310                 registerImage(registry, ICON_ZOOM_IN, ICON_ZOOM_IN);
 311                 registerImage(registry, ICON_ZOOM_OUT, ICON_ZOOM_OUT);
 312                 registerImage(registry, ICON_SELECT_ALL, ICON_SELECT_ALL);
 313                 registerImage(registry, ICON_ZOOM_OFF, ICON_ZOOM_OFF);
 314                 registerImage(registry, ICON_ZOOM_ON, ICON_ZOOM_ON);
 315                 registerImage(registry, ICON_SELECT_ON, ICON_SELECT_ON);
 316                 registerImage(registry, ICON_SELECT_OFF, ICON_SELECT_OFF);
 317 
 318                 registerImage(registry, ICON_NAV_FORWARD, ICON_NAV_FORWARD);
 319                 registerImage(registry, ICON_NAV_BACKWARD, ICON_NAV_BACKWARD);
 320                 registerImage(registry, ICON_NAV_UP, ICON_NAV_UP);
 321                 registerImage(registry, ICON_NAV_DOWN, ICON_NAV_DOWN);
 322 
 323                 registerImage(registry, ICON_DIAL_PANEL, ICON_DIAL_PANEL);
 324                 registerImage(registry, ICON_DIAL_PANEL_1_10, ICON_DIAL_PANEL_1_10);
 325                 registerImage(registry, ICON_DIAL_PANEL_10_100, ICON_DIAL_PANEL_10_100);
 326                 registerImage(registry, ICON_DIAL_PANEL_100_1000, ICON_DIAL_PANEL_100_1000);
 327 
 328                 registerImage(registry, ICON_DIAL_BACKGROUND, ICON_DIAL_BACKGROUND);
 329                 registerImage(registry, ICON_FOLDER, ICON_FOLDER);
 330                 registerImage(registry, ICON_FOLDER_CLOSED, ICON_FOLDER_CLOSED);
 331 
 332                 registerImage(registry, ICON_COLOR_PALETTE, ICON_COLOR_PALETTE);
 333 
 334                 registerImage(registry, ICON_DELETE, ICON_DELETE);
 335                 registerImage(registry, ICON_MISSION_CONTROL, ICON_MISSION_CONTROL);
 336 
 337                 registerImage(registry, ICON_TOOLS, ICON_TOOLS);
 338                 registerImage(registry, ICON_TOOLBAR, ICON_TOOLBAR);
 339                 registerImage(registry, ICON_LAYOUT, ICON_LAYOUT);
 340 
 341                 registerImage(registry, ICON_SERVICES, ICON_SERVICES);
 342 
 343                 registerImage(registry, ICON_TABGROUP_OTHER, ICON_TABGROUP_OTHER);
 344 
 345                 registerImage(registry, ICON_BANNER_PASSWORD_WIZARD, ICON_BANNER_PASSWORD_WIZARD);
 346 
 347                 registerImage(registry, ICON_RESET_TO_DEFAULTS, ICON_RESET_TO_DEFAULTS);
 348 
 349                 registerImage(registry, ICON_LOCK_TREE, ICON_LOCK_TREE);
 350 
 351         }
 352 
 353         /**
 354          * Returns the shared instance.
 355          */
 356         public static UIPlugin getDefault() {
 357                 return plugin;
 358         }
 359 
 360         public boolean getAccessibilityMode() {
 361                 return getPreferenceStore().getBoolean(PreferenceConstants.P_ACCESSIBILITY_MODE);
 362         }
 363 
 364         /**
 365          * @return the tray manager
 366          */
 367         public TrayManager getTrayManager() {
 368                 return m_trayManager;
 369         }
 370 
 371         /**
 372          * @param trayManager
 373          */
 374         public void setTrayManager(TrayManager trayManager) {
 375                 m_trayManager = trayManager;
 376         }
 377 
 378         /**
 379          * Sets the Swing look and feel if needed.
 380          */
 381         private static void initSwingLookAndFeel() {
 382                 // Avoid the possibly broken GTK look and feel on Linux
 383                 String laf = System.getProperty("swing.defaultlaf"); //$NON-NLS-1$
 384                 if (Environment.getOSType() == OSType.LINUX && laf == null && !GraphicsEnvironment.isHeadless()) {
 385                         laf = "javax.swing.plaf.metal.MetalLookAndFeel"; //$NON-NLS-1$
 386                         System.setProperty("swing.defaultlaf", laf); //$NON-NLS-1$
 387                         System.setProperty("swing.systemlaf", laf); //$NON-NLS-1$
 388                         UIPlugin.getDefault().getLogger().log(Level.INFO,
 389                                         "On Linux, setting look and feel system properties to " + laf); //$NON-NLS-1$
 390                 }
 391         }
 392 }