javauis/eswt_qt/com.nokia.swt.extensions/extensions/org/eclipse/swt/internal/extension/ApplicationUI.java
changeset 35 85266cc22c7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/com.nokia.swt.extensions/extensions/org/eclipse/swt/internal/extension/ApplicationUI.java	Fri Jun 11 13:33:44 2010 +0300
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * 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:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.swt.internal.extension;
+
+import org.eclipse.swt.internal.qt.UIThreadManager;
+
+/**
+ * A class that provides services for transferring the control over the
+ * execution of the UI thread to the application, and services for obtaining
+ * notifications of the state of the UI until the UI thread will return back to the
+ * caller.
+ * 
+ * @see InternalUI
+ * @see ApplicationUIListener
+ */
+public final class ApplicationUI {
+	
+	/**
+	 * Hand over the execution of the UI thread to the application. If the
+	 * application has not yet requested the UI thread then it will be waiting
+	 * until that happens. The waiting can be aborted by calling
+	 * <code>abortWait()</code>.
+	 * 
+	 * The control of the thread will be passed to the application. If the
+	 * application allows the UI thread to return then this method will also
+	 * return.
+	 * 
+	 * After calling this method and before the method has returned the state of
+	 * the UI thread can be tracked by setting an
+	 * <code>ApplicationUIListener</code>.
+	 */
+	public static void run() {
+		UIThreadManager.runApplicationUI();
+	}
+	
+	/**
+	 * Aborts waiting the application to request the UI thread. This waiting can
+	 * occur after <code>run()</code> has been called if the application has not
+	 * yet at that point requested the UI thread and thus has not provided the
+	 * Runnable to call back. Aborting the waiting will cause the UI thread to
+	 * return from <code>run()</code>. If the application already obtained the
+	 * control of the UI thread then this method does nothing. 
+	 */
+	public static void abortWait() {
+		UIThreadManager.abortWait();
+	}
+	
+	/**
+	 * Sets the listener that will be notified of the state of the UI during its
+	 * life-cycle under the application's control. 
+	 * 
+	 * @param listener The listener, or null to disable the notifications
+	 */	
+	public static void setListener(ApplicationUIListener listener) {
+		final ApplicationUIListener applicationUIListener = listener;
+		org.eclipse.swt.internal.qt.ApplicationUIListener internalListener; 
+		if(listener != null) {
+			internalListener = new org.eclipse.swt.internal.qt.ApplicationUIListener() {
+				public void applicationUIThreadRequest() {
+					applicationUIListener.applicationUIThreadRequest();
+				}
+			};
+		} else {
+			internalListener = null;
+		}
+		UIThreadManager.setApplicationUIListener(internalListener);
+	}
+}