/******************************************************************************* * Copyright (c) 2004, 2005 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.gef.examples.text.actions; import java.util.ArrayList; import java.util.List; /** * @since 3.1 */ public class StyleService { public static final Object STATE_EDITABLE = new Object(); public static final Object STATE_READ_ONLY = new Object(); public static final Object UNDEFINED = new Object(); private List listeners = new ArrayList(); private StyleProvider provider; private StyleListener providerListener = new StyleListener() { public void styleChanged(String styleID) { propogateChange(styleID); } }; /** * Constructs a new StyleService object */ public StyleService() { super(); } public void addStyleListener(StyleListener listener) { listeners.add(listener); } public Object getStyle(String styleID) { if (provider != null) return provider.getStyle(styleID); return UNDEFINED; } public Object getStyleState(String styleID) { if (provider != null) return provider.getStyleState(styleID); return UNDEFINED; } /** * @param styleID */ protected void propogateChange(String styleID) { for (int i = 0; i < listeners.size(); i++) { StyleListener listener = (StyleListener)listeners.get(i); listener.styleChanged(styleID); } } /** * Removes the first occurrence of the given listener. * @param listener the style listener */ public void removeStyleListener(StyleListener listener) { listeners.remove(listener); } public void setStyle(String styleID, Object value) { if (provider != null) provider.setStyle(styleID, value); } public void setStyleProvider(StyleProvider provider) { if (this.provider == provider) return; if (this.provider != null) this.provider.removeStyleListener(providerListener); this.provider = provider; if (this.provider != null) this.provider.addStyleListener(providerListener); propogateChange(null); } }