/*******************************************************************************
 * Copyright (c) 2004, 2008 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
 *******************************************************************************/
package org.eclipse.ui.themes;

import java.util.Set;

import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.util.IPropertyChangeListener;

/**
 * A theme is a collection of colors, fonts and supporting data that may 
 * be used by plugins to help provide uniform look and feel to their components.
 * The workbench has a default theme (one whos id has the value {@link org.eclipse.ui.themes.IThemeManager#DEFAULT_THEME}) 
 * that defines the initial values for a collection of fonts and colors.  Other
 * themes may extend and override the default theme to provide new values.
 * 
 * <p>
 * Clients may obtain themes via {@link org.eclipse.ui.themes.IThemeManager#getTheme(String)}.
 * </p>
 * 
 * <p>
 * This interface is not intended to be implemented or extended by clients.
 * </p> 
 * 
 * @see org.eclipse.ui.IWorkbench#getThemeManager()  
 * @since 1.1
 * @noimplement This interface is not intended to be implemented by clients.
 */
public interface ITheme {

    /**
     * Adds a property listener to the theme.  Any events fired by the 
     * underlying registries will cause an event to be fired.  This event is the
     * same event that was fired by the registry.  As such, the "source" 
     * attribute of the event will not be this theme, but rather the color or 
     * font registry.
     * 
     * @param listener the listener to add
     */
    void addPropertyChangeListener(IPropertyChangeListener listener);

    /**
     * Dispose of this theme.  This method is called by the workbench when
     * appropriate and should never be called by a user.
     */
    void dispose();

    /**
     * Get arbitrary data associated with this theme.
     *
     * @param key the key
     * @return the data, or the default value <code>false</code> if none exists 
     * or if the value cannot be treated as a boolean.
     */
    boolean getBoolean(String key);

    /**
     * Return this themes color registry.
     * 
     * @return this themes color registry
     */
    ColorRegistry getColorRegistry();

    /**
     * Return this themes font registry.
     * 
     * @return this themes font registry
     */
    FontRegistry getFontRegistry();

    /**
     * Returns the id of this theme.
     * 
     * @return the id of this theme.  Guaranteed not to be <code>null</code>.
     */
    String getId();

    /**
     * Get arbitrary data associated with this theme.
     *
     * @param key the key
     * @return the data, or the default value <code>0</code> if none exists or 
     * if the value cannot be treated as an integer.
     */
    public int getInt(String key);

    /**
     * Returns the label of this theme.
     * 
     * @return the label of this theme.  Guaranteed not be <code>null</code>.
     */
    String getLabel();

    /**
     * Get arbitrary data associated with this theme.
     *
     * @param key the key
     * @return the data, or <code>null</code> if none exists.
     */
    String getString(String key);

    /**
     * Get the set of keys associated with this theme.
     *  
     * @return the Set of keys
     */
    Set keySet();

    /**
     * Removes a property listener from the theme.
     * 
     * @param listener the listener to remove
     */
    void removePropertyChangeListener(IPropertyChangeListener listener);
}
