/******************************************************************************* * Copyright (c) 2010, 2015 Ericsson * * 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: * Patrick Tasse - Initial API and implementation * Bernd Hufmann - Updated to use RGB for the tick color *******************************************************************************/ package org.eclipse.tracecompass.tmf.ui.views.colors; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.tracecompass.internal.tmf.ui.Activator; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.filter.ITmfFilter; /** * Static class for managing color settings. * * @version 1.0 * @author Patrick Tasse * */ public class ColorSettingsManager { // The color settings file name private static final String COLOR_SETTINGS_FILE_NAME = "color_settings.xml"; //$NON-NLS-1$ // The path for the color settings file private static final String COLOR_SETTINGS_PATH_NAME = Activator.getDefault().getStateLocation().addTrailingSeparator().append(COLOR_SETTINGS_FILE_NAME).toString(); /* * Legacy path to the XML definitions file (in Linux Tools) * TODO Remove once we feel the transition phase is over. */ private static final IPath COLOR_SETTINGS_PATH_NAME_LEGACY = Activator.getDefault().getStateLocation().removeLastSegments(1) .append("org.eclipse.linuxtools.tmf.ui") //$NON-NLS-1$ .append(COLOR_SETTINGS_FILE_NAME); // The default color setting private static final ColorSetting DEFAULT_COLOR_SETTING = new ColorSetting( null, null, null, null); /** * Special value for priority if unknown. */ public static final int PRIORITY_NONE = Integer.MAX_VALUE; // The stored color settings private static ColorSetting[] fColorSettings; static { File defaultFile = new File(COLOR_SETTINGS_PATH_NAME); /* * If there is no file at the expected location, check the legacy * location instead. */ if (!defaultFile.exists()) { File legacyFileCore = COLOR_SETTINGS_PATH_NAME_LEGACY.toFile(); if (legacyFileCore.exists()) { ColorSetting[] colorSettings = ColorSettingsXML.load(COLOR_SETTINGS_PATH_NAME_LEGACY.toString()); if (colorSettings != null) { ColorSettingsXML.save(COLOR_SETTINGS_PATH_NAME, colorSettings); } } } fColorSettings = ColorSettingsXML.load(COLOR_SETTINGS_PATH_NAME); } // The listener list private static List<IColorSettingsListener> fListeners = new ArrayList<>(); /** * Returns an array of color settings. * * @return an array of color settings. */ public static ColorSetting[] getColorSettings() { return (fColorSettings != null) ? Arrays.copyOf(fColorSettings, fColorSettings.length) : null; } /** * Sets the array of color settings. * * @param colorSettings A array of color settings to set */ public static void setColorSettings(ColorSetting[] colorSettings) { fColorSettings = (colorSettings != null) ? Arrays.copyOf(colorSettings, colorSettings.length) : null; if (fColorSettings != null) { ColorSettingsXML.save(COLOR_SETTINGS_PATH_NAME, fColorSettings); } fireColorSettingsChanged(); } /** * Gets the color settings that matches the filter for given event. * * @param event * The event to check * * @return color settings defined for filter if found else default color * settings */ public static ColorSetting getColorSetting(ITmfEvent event) { for (int i = 0; i < fColorSettings.length; i++) { ColorSetting colorSetting = fColorSettings[i]; ITmfFilter filter = colorSetting.getFilter(); if (filter != null && filter.matches(event)) { return colorSetting; } } return DEFAULT_COLOR_SETTING; } /** * Gets the color settings priority for the given event. * * @param event A event the event to check * @return the priority defined for the filter else PRIORITY_NONE */ public static int getColorSettingPriority(ITmfEvent event) { for (int i = 0; i < fColorSettings.length; i++) { ColorSetting colorSetting = fColorSettings[i]; ITmfFilter filter = colorSetting.getFilter(); if (filter != null && filter.matches(event)) { return i; } } return PRIORITY_NONE; } /** * Returns the color settings based the priority. * * @param priority A priority (index) of color settings * @return the color settings defined for the priority else default color settings */ public static ColorSetting getColorSetting(int priority) { if (priority < fColorSettings.length) { return fColorSettings[priority]; } return DEFAULT_COLOR_SETTING; } /** * Adds a color settings listener. * * @param listener A listener to add. */ public static void addColorSettingsListener(IColorSettingsListener listener) { if (! fListeners.contains(listener)) { fListeners.add(listener); } } /** * Removes a color settings listener. * * @param listener A listener to remove. */ public static void removeColorSettingsListener(IColorSettingsListener listener) { fListeners.remove(listener); } // Notify listeners private static void fireColorSettingsChanged() { for (IColorSettingsListener listener : fListeners) { listener.colorSettingsChanged(fColorSettings); } } }