package org.eclipse.stem.ui.preferences;

/*******************************************************************************
 * Copyright (c) 2007 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/**
 * Constant definitions for plug-in preferences
 */
public class PreferenceConstants {

	/**
	 * The preference id for the name of the attribute to display when a
	 * visualization is first displayed. Used for Data Display Y axis.
	 */
	public static final String INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE = "org.eclipse.stem.ui.initialattributename";


	/**
	 * The preference id for the name of the attribute to display when a
	 * visualization is first displayed. Used for Phase Space Display X axis.
	 */
	public static final String INITIAL_ATTRIBUTE_NAME_STRING_PREFERENCE2 = "org.eclipse.stem.ui.initialattributename2";

	
	/**
	 * The preference id for different foreground colors for various labels. If
	 * a label is not on the list, foreground color uses the default.
	 */
	public static final String FOREGROUND_COLOR_DEFAULT = "org.eclipse.stem.ui.views.geographic.map.preferences.foregrounddefaultcolor";
	/**
	 * The preference ID for a first user selectable color that can be chosen and assigned to a property (e.g., S) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_1 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorone";
	/**
	 *  The preference ID for a second user selectable color that can be chosen and assigned to a property (e.g., E) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_2 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolortwo";
	/**
	 *  The preference ID for a third user selectable color that can be chosen and assigned to a property (e.g., I) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_3 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorthee";
	/**
	 *  The preference ID for a fourth user selectable color that can be chosen and assigned to a property (e.g., R) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_4 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorfour";
	/**
	 *  The preference ID for a fifth user selectable color that can be chosen and assigned to a property (e.g., P) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_5 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorfive";
	/**
	 *  The preference ID for a sixth user selectable color that can be chosen and assigned to a property (e.g., IR) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_6 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorsix";
	/**
	 *  The preference ID for a seventh user selectable color that can be chosen and assigned to a property (e.g., ) being visualized (eg in a time series plot)
	 */
	public static final String FOREGROUND_COLOR_LABEL_7 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundcolorseven";

	
	/**
	 * The preference id for different strings representing various labels. If a
	 * label is not on the list, foreground color uses the default.
	 */
	public static final String FOREGROUND_STRING_LABEL_DEFAULT = "org.eclipse.stem.ui.views.geographic.map.preferences.foregrounddefaultstring";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_1 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringone";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_2 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringtwo";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_3 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringthee";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_4 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringfour";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_5 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringfive";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_6 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringsix";
	/**
	 * A String label that defines the user selectable property to which a user selectable color can be assigned (e.g., when visualizing the property in a plot)
	 */
	public static final String FOREGROUND_STRING_LABEL_7 = "org.eclipse.stem.ui.views.geographic.map.preferences.foregroundstringseven";

	/**
	 * This is the preference for how many threads to use when running
	 * a simulation
	 */
	public static final String SIMULATION_THREADS = "simulationThreads"; //$NON-NLS-1$

	/**
	 * This is the preference for which default solver to use 
	 */
	public static final String DEFAULT_SOLVER = "defaultSolver"; //$NON-NLS-1$

} // PreferenceConstants
