Merge branch 'Jalview-JS/develop' into merge_js_develop
[jalview.git] / src / javajs / async / AsyncColorChooser.java
diff --git a/src/javajs/async/AsyncColorChooser.java b/src/javajs/async/AsyncColorChooser.java
new file mode 100644 (file)
index 0000000..2474833
--- /dev/null
@@ -0,0 +1,67 @@
+package javajs.async;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.swing.JColorChooser;
+import javax.swing.plaf.UIResource;
+
+/**
+ * A simple Asynchronous file chooser for JavaScript; synchronous with Java.
+ * 
+ * Allows two modes -- using an ActionListener (setAction(ActionListener) or constructor(ActionListener))
+ * 
+ * @author Bob Hanson
+ */
+
+public class AsyncColorChooser implements PropertyChangeListener {
+
+       private ActionListener listener;
+       private Color selectedColor;
+
+       public void showDialog(Component component, String title, Color initialColor, ActionListener listener) {
+               setListener(listener);
+               process(JColorChooser.showDialog(component, title, initialColor));
+               unsetListener();
+       }
+
+       public Color getSelectedColor() {
+               return selectedColor;
+       }
+
+
+       @Override
+       public void propertyChange(PropertyChangeEvent evt) {
+               // JavaScript only
+               Color c = (Color) evt.getNewValue();
+               
+               switch (evt.getPropertyName()) {
+               case "SelectedColor":
+                       process(c);
+                       break;
+               }
+       }
+
+       private void setListener(ActionListener a) {
+               listener = a;
+               /** @j2sNative Clazz.load("javax.swing.JColorChooser");javax.swing.JColorChooser.listener = this */
+       }
+
+       private void unsetListener() {
+               /** @j2sNative javax.swing.JColorChooser.listener = null */
+       }
+
+       
+       
+       private void process(Color c) {
+               if (c instanceof UIResource)
+                       return;
+               selectedColor = c;
+               listener.actionPerformed(new ActionEvent(this, c == null ? 0 : c.getRGB(), c == null ? null : c.toString()));
+       }
+       
+}