/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * 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:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.ui.api.themes;

/**
 *  CSS Style Class Names for OSBP html components
 */
public enum EnumCssClass {
	/** combobox with icon */
	COMBOBOX_WITH_ICON,
	VIEW_HEADER_H2,
	BOX,
	CHART,
	TABLE,
	HAS_FOCUS,
	SELECT_LANGUAGE,
	SELECTION_AREA,
	MULTI_SELECTION,
	MULTI_SELECTION_AREA,
	SINGLE_SELECTION,
	SINGLE_SELECTION_AREA,
	RANGE_SELECTION,
	DATA_COMPONENT,
	DATA_AREA,
	MULTI_AREA,
	WORK_AREA,
	LOWER_AREA,
	TOP_AREA,
	SIDE_AREA,
	VIEW,
	CHART_VIEW,
	DIALOG_VIEW,
	ORGANIZATION_VIEW,
	REPORT_VIEW,
	TABLE_VIEW,
	TOPOLOGY_VIEW,
	MPARTTOOLBARAREA,
	MPARTTOOLBAR,
	TOOLBAR_STATE,
	TOOLBAR_BUTTON,
	TOOLBAR_STATE_CONTAINER;

	public String styleName() {
		return toString();
	}
	public String toString() {
		return "os-"+super.toString().toLowerCase().replaceAll("_", "-");
	}
}
