blob: 300c0f77f6d367a34fce9911378604e06086d044 [file] [log] [blame]
/*******************************************************************************
* 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 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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);
}
}
}