blob: 669129dd4710118eb3b4104c2b35bb7e634daec0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Angelo Zerr 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:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.e4.ui.css.core.engine;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.eclipse.e4.ui.css.core.dom.IElementProvider;
import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
import org.eclipse.e4.ui.css.core.dom.properties.converters.ICSSValueConverter;
import org.eclipse.e4.ui.css.core.resources.IResourcesRegistry;
import org.eclipse.e4.ui.css.core.util.resources.IResourcesLocatorManager;
import org.w3c.css.sac.InputSource;
import org.w3c.dom.Element;
import org.w3c.dom.css.CSSStyleDeclaration;
import org.w3c.dom.css.CSSStyleSheet;
import org.w3c.dom.css.CSSValue;
import org.w3c.dom.css.DocumentCSS;
import org.w3c.dom.css.ViewCSS;
import org.w3c.dom.stylesheets.StyleSheet;
/**
* CSS Engine interface used to parse style sheet and apply styles to something
* (UI SWT, UI Swing...).
*
*/
public interface CSSEngine {
/*--------------- Parse style sheet -----------------*/
/**
* Parse style sheet from Reader reader.
*
* @param reader
* @return
* @throws IOException
*/
public StyleSheet parseStyleSheet(Reader reader) throws IOException;
/**
* Parse style sheet from InputStream stream.
*
* @param stream
* @return
* @throws IOException
*/
public StyleSheet parseStyleSheet(InputStream stream) throws IOException;
/**
* Parse style sheet from InputSource source.
*
* @param source
* @return
* @throws IOException
*/
public StyleSheet parseStyleSheet(InputSource source) throws IOException;
/*--------------- Parse style declaration -----------------*/
/**
* Parse style declaration from String style.
*
* @param style
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseStyleDeclaration(String style)
throws IOException;
/**
* Parse style declaration from Reader reader.
*
* @param reader
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseStyleDeclaration(Reader reader)
throws IOException;
/**
* Parse style declaration from InputStream stream.
*
* @param stream
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseStyleDeclaration(InputStream stream)
throws IOException;
/**
* Parse style declaration from InputSource source.
*
* @param source
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseStyleDeclaration(InputSource source)
throws IOException;
/*--------------- Parse CSS Property Value-----------------*/
/**
* Parse CSSValue from String value.
*
* @param value
* @return
* @throws IOException
*/
public CSSValue parsePropertyValue(String value) throws IOException;
/**
* Parse CSSValue from InputStream stream.
*
* @param reader
* @return
* @throws IOException
*/
public CSSValue parsePropertyValue(InputStream stream) throws IOException;
/**
* Parse CSSValue from Reader reader.
*
* @param reader
* @return
* @throws IOException
*/
public CSSValue parsePropertyValue(Reader reader) throws IOException;
/**
* Parse CSSValue from InputSource source.
*
* @param source
* @return
* @throws IOException
*/
public CSSValue parsePropertyValue(InputSource source) throws IOException;
/*--------------- Apply styles -----------------*/
/**
* Apply styles to the Object node (SWT Text,...). If
* <code>applyStylesToChildNodes</code> is true, apply styles to the child
* nodes (ex : if node is SWT Composite, styles are applied to the child
* controls too).
*
* @param node
* @param applyStylesToChildNodes
*/
public void applyStyles(Object node, boolean applyStylesToChildNodes);
/**
* Apply styles to the Object node (SWT Text,...). If
* <code>applyStylesToChildNodes</code> is true, apply styles to the child
* nodes (ex : if node is SWT Composite, styles are applied to the child
* controls too). If <code>computeDefaultStyle</code> is true, default
* style is computed before apply styles.
*
* @param node
* @param applyStylesToChildNodes
* @param computeDefaultStyle
*/
public void applyStyles(Object node, boolean applyStylesToChildNodes,
boolean computeDefaultStyle);
/*--------------- Apply style declaration -----------------*/
/**
* Apply style declaration to the object node.
*
* @param node
* @param style
* @param pseudo
*/
public void applyStyleDeclaration(Object node, CSSStyleDeclaration style,
String pseudo);
/**
* Parse and apply style declaration from Reader reader.
*
* @param node
* @param reader
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseAndApplyStyleDeclaration(Object node,
Reader reader) throws IOException;
/**
* Parse and apply style declaration from InputStream stream.
*
* @param node
* @param stream
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseAndApplyStyleDeclaration(Object node,
InputStream stream) throws IOException;
/**
* Parse and apply style declaration from InputSource source.
*
* @param node
* @param source
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseAndApplyStyleDeclaration(Object node,
InputSource sourcee) throws IOException;
/**
* Parse and apply style declaration from String style.
*
* @param node
* @param style
* @return
* @throws IOException
*/
public CSSStyleDeclaration parseAndApplyStyleDeclaration(Object node,
String style) throws IOException;
/*--------------- Apply inline style -----------------*/
/**
* Apply inline style of the object node. If
* <code>applyStylesToChildNodes</code> is true, apply style inline to the
* child nodes (ex : if node is SWT Composite, styles are applied to the
* child controls too).
*
* @param node
* @param applyStylesToChildNodes
* @throws IOException
*/
public void applyInlineStyle(Object node, boolean applyStylesToChildNodes)
throws IOException;
/**
* Return {@link CSSErrorHandler} used to handles exception error.
*
* @return
*/
public CSSErrorHandler getErrorHandler();
/**
* Register the {@link CSSErrorHandler} used to handles exception error.
*
* @param errorHandler
*/
public void setErrorHandler(CSSErrorHandler errorHandler);
/*--------------- Resources -----------------*/
/**
* Set the {@link IResourcesLocatorManager} to use manage resources.
*
* @param resourcesLocatorManager
*/
public void setResourcesLocatorManager(
IResourcesLocatorManager resourcesLocatorManager);
/**
* Get the {@link IResourcesLocatorManager} to use manage resources.
*
* @return
*/
public IResourcesLocatorManager getResourcesLocatorManager();
/*--------------- Document/View CSS -----------------*/
/**
* Return the {@link DocumentCSS} used to store {@link CSSStyleSheet}.
*
* @return
*/
public DocumentCSS getDocumentCSS();
/**
* Return the {@link ViewCSS} used to compute {@link CSSStyleDeclaration}.
*
* @return
*/
public ViewCSS getViewCSS();
/*--------------- w3c Element -----------------*/
/**
* Get {@link IElementProvider} registered used to retrieve w3c
* {@link Element} which wrap native widget.
*
* @return
*/
public IElementProvider getElementProvider();
/**
* Set {@link IElementProvider} registered used to retrieve w3c
* {@link Element} which wrap native widget.
*
* @param elementProvider
*/
public void setElementProvider(IElementProvider elementProvider);
/*--------------- CSS Property Handler -----------------*/
/**
* Apply CSS property <code>property</code> to the <code>node</code>
* with <code>value</code>.
*
* @param node
* @param property
* @param value
* @param pseudo
* @return
* @throws Exception
*/
public ICSSPropertyHandler applyCSSProperty(Object node, String property,
CSSValue value, String pseudo) throws Exception;
/**
* Retrieve String of {@link CSSValue} of the CSS <code>property</code> of
* the <code>node</code>.
*
* @param widget
* @param property
* @param pseudo
* @return
*/
public String retrieveCSSProperty(Object node, String property, String pseudo);
/*--------------- Default Style -----------------*/
/**
* Apply initial style of the object node. If
* <code>applyStylesToChildNodes</code> is true, apply style inline to the
* child nodes (ex : if node is SWT Composite, styles are applied to the
* child controls too).
*
* @param node
* @param applyStylesToChildNodes
* @throws IOException
*/
public void applyDefaultStyleDeclaration(Object node,
boolean applyStylesToChildNodes);
/**
* Get default {@link CSSStyleDeclaration} of the <code>node</code> for
* pseudo element <code>pseudoE</code> which can be null.
*
* @param element
* @return
*/
public CSSStyleDeclaration getDefaultStyleDeclaration(Object node,
String pseudoE);
/*--------------- Dispose/Reset -----------------*/
/**
* Call reset and dispose all resources
*/
public void dispose();
/**
* Reset all style sheet registered into CSS Engine. This method must be
* called if you want parse and apply new StyleSheet and remove the old
* StyleSheet parsed.
*/
public void reset();
/*--------------- Resources Registry -----------------*/
/**
* Get the {@link IResourcesRegistry} registered used to cache/dispose
* resources.
*
* @return
*/
public IResourcesRegistry getResourcesRegistry();
/**
* Register {@link IResourcesRegistry} used to cache/dispose resources.
*
* @param resourcesRegistry
*/
public void setResourcesRegistry(IResourcesRegistry resourcesRegistry);
/*--------------- CSS Value Converter -----------------*/
/**
* Register CSSValue converter {@link ICSSValueConverter}.
*
* @param converter
*/
public void registerCSSValueConverter(ICSSValueConverter converter);
/**
* Unregister CSSValue converter {@link ICSSValueConverter}.
*
* @param converter
*/
public void unregisterCSSValueConverter(ICSSValueConverter converter);
/**
* Get CSSValue converter {@link ICSSValueConverter} which is enable to
* convert <code>toType</code> Object.
*
* @param toType
* @return
*/
public ICSSValueConverter getCSSValueConverter(Object toType);
/**
* Convert CSSValue into Object type of <code>toType</code>. (ex :
* convert CSSValue color:red into java.awt.Color). If
* {@link IResourcesRegistry} is registered into {@link CSSEngine} this
* method search before into cache of {@link IResourcesRegistry} if the
* Object was already converted.
*
* @param value
* @param toType
* @param context
* can be null. For SWT context is
* org.eclipse.swt.widgets.Display.
* @return
* @throws Exception
*/
public Object convert(CSSValue value, Object toType, Object context)
throws Exception;
/**
* Convert Object type of <code>toType</code> into CSSValue String.
*
* @param value
* @param toType
* @param context
* @return
* @throws Exception
*/
public String convert(Object value, Object toType, Object context)
throws Exception;
/**
* Get the w3c {@link Element} which wrap Oqbject <code>node</code>.
*
* @param node
* @return
*/
public Element getElement(Object node);
/**
* Get the {@link CSSElementContext} context of the object <code>node</code>.
*
* @param node
* @return
*/
public CSSElementContext getCSSElementContext(Object node);
/**
* Return array of CSS property name of the CSS <code>property</code>.
*
* @param property
* @return
*/
public String[] getCSSCompositePropertiesNames(String property);
/**
* Handle exceptions.
*
* @param e
*/
public void handleExceptions(Exception e);
}