javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/BaseCSSEngine.java
changeset 21 2a9601315dfc
child 35 85266cc22c7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/BaseCSSEngine.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,156 @@
+package org.eclipse.swt.internal.qt;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTException;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * Base CSS Engine for eSWT. This engine recognizes only Qt
+ * <a href="http://qt.nokia.com/doc/4.6/stylesheet.html">stylesheet</a> syntax.
+ *
+ * CSS id selectors are supported by setting an id to the widget as follows.
+ * <pre>
+ *	Button myButton = new Button(composite, SWT.PUSH);
+ *	myButton.setData(WidgetConstant.CSS_ID,"myButtonId");
+ * </pre>
+ *
+ * <p><b>NOTE:</b> This class is intended for internal use only.</p>
+ */
+public final class BaseCSSEngine {
+	private Display parent;
+
+	/**
+	 * Creates an engine instance.
+	 *
+	 * @exception IllegalArgumentException
+	 *                <ul>
+	 *                <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *                <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+	 *                </ul>
+	 * @exception SWTException
+	 *                <ul>
+	 *                <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
+	 *                thread that created the parent</li>
+	 *                </ul>
+	 */
+	public BaseCSSEngine(Display display){
+		if (display == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		if (display.isDisposed ()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+		if (Display.getCurrent() == null ) SWT.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+		this.parent = display;
+	}
+
+	/**
+	 * Applies the given string containing valid CSS to all the widgets created for the Display.
+	 * CSS used in this method can not have any relative urls (for example for imports and images).
+	 * Relative urls will not be resolved.
+	 *
+	 *<p><b>NOTE:</b> This is intended for internal use.</p>
+	 *
+	 * @param style
+	 * @exception IllegalArgumentException
+	 * <ul>
+ 	 *    <li>ERROR_NULL_ARGUMENT - if style is null</li>
+ 	 *    <li>ERROR_INVALID_ARGUMENT - if style is not a valid style string</li>
+ 	 * </ul>
+     * @exception SWTException <ul>
+     *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+     *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+     * </ul>
+	 */
+	public void applyCSS( String style ){
+		checkEngine();
+		if( style == null ) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		if( style.startsWith("file:///") ) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+		OS.QApplication_setStyleSheet(style);
+	}
+
+	/**
+	 * Applies the given string containing valid CSS to the widget.
+	 * CSS used in this method can not have any relative urls (for example for imports and images).
+	 * Relative urls will not be resolved.
+	 *
+	 * <p><b>NOTE:</b> This is intended for internal use.</p>
+	 *
+	 * @param style
+	 * @exception IllegalArgumentException
+	 * <ul>
+ 	 *    <li>ERROR_NULL_ARGUMENT - if style is null</li>
+ 	 *    <li>ERROR_INVALID_ARGUMENT - if style is not a valid style string</li>
+ 	 * </ul>
+     * @exception SWTException <ul>
+     *    <li>ERROR_WIDGET_DISPOSED - if the receiver or the widget has been disposed</li>
+     *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+     * </ul>
+	 */
+	public void applyCSS(Widget widget, String style ){
+		checkEngine();
+		if( style == null ) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		if( widget == null ) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		if( widget.isDisposed() ) SWT.error( SWT.ERROR_WIDGET_DISPOSED);
+		if( style.startsWith("file:///") ) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+		OS.QWidget_setStyleSheet(Internal_PackageSupport.handle(widget), style);
+	}
+	/**
+	 * Loads a file containing valid CSS and applies to all the widgets for Display.
+	 * This function bypasses java security checks for accessing the file.
+	 *
+	 * <p><b>NOTE:</b> This is intended for internal use.</p>
+	 *
+	 * @param style
+	 * @exception IllegalArgumentException <ul>
+ 	 *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
+ 	 * </ul>
+     * @exception SWTException <ul>
+     *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+     *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+     * </ul>
+	 */
+	public void loadCSS( String filename ){
+		checkEngine();
+		if (filename == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		OS.QApplication_setStyleSheet("file:///"+filename);
+	}
+
+	/**
+	 * Loads a file containing valid CSS and applies to the widget.
+	 * This function bypasses Java security checks for accessing the file.
+	 *
+	 * <p><b>NOTE:</b> This is intended for internal use.</p>
+	 *
+	 * @param style
+	 * @exception IllegalArgumentException
+	 * <ul>
+ 	 *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
+ 	 * </ul>
+     * @exception SWTException <ul>
+     *    <li>ERROR_WIDGET_DISPOSED - if the receiver or the widget has been disposed</li>
+     *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+     * </ul>
+	 */
+	public void loadCSS( Widget widget, String filename ){
+		if (filename == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		if( widget == null ) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		if( widget.isDisposed() ) SWT.error( SWT.ERROR_WIDGET_DISPOSED);
+		OS.QWidget_setStyleSheet(Internal_PackageSupport.handle(widget), "file:///"+filename);
+	}
+
+	/**
+	 * Dispose the engine.
+	 * @exception SWTException <ul>
+     *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+     * </ul>
+	 *
+	 */
+	public void dispose(){
+		if (Display.getCurrent() == null ) SWT.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+		parent = null;
+	}
+
+	private void checkEngine(){
+		if ( parent == null || parent.isDisposed() ) SWT.error( SWT.ERROR_WIDGET_DISPOSED);
+	    if (Display.getCurrent() == null ) SWT.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+}