--- /dev/null
+package javajs.api;
+
+import javajs.awt.Component;
+import javajs.awt.Dimension;
+
+/**
+ * SwingController is an interface that javajs.swing classes will need.
+ * It must be implemented as a JavaScript object PRIOR to
+ * any calls to create any components.
+ *
+ * In JSmol it is Jmol.Swing (see JsmolCore.js)
+ *
+ * There should be one and only one SwingController on a page.
+ * It is called by its class name "SwingController" directly.
+ *
+ * @author hansonr
+ *
+ */
+public interface SwingController {
+
+ /**
+ * Fired from clicking an element such as a button or
+ * check box or table entry, or from entering text in a text box.
+ *
+ * SwingController should make the changes in the underlying
+ * "Java" object directly, then send notification of the event to the manager.
+ * For instance:
+ *
+ * var component = Jmol.Swing.htDialogs[element.id];
+ * var info = component.toString();
+ *
+ * if (info.indexOf("JCheck") >= 0)
+ * component.selected = element.checked;
+ * var id = $("div.JDialog:has(#" + element.id + ")")[0].id
+ * var dialog = Jmol.Swing.htDialogs[id];
+ * dialog.manager.actionPerformed(component ? component.name : dialog.registryKey + "/" + element.id);
+ *
+ * @param element
+ * @param event
+ */
+ void click(HTMLElement element, HTMLWindowEvent event);
+
+
+ /**
+ * Remove this component's HTML5 equivalent and clear references to it.
+ *
+ * @param dialog
+ */
+ void dispose(Component dialog);
+
+ /**
+ * Return the width and height of the window in d.
+ * For example:
+ *
+ * d.width = $(window).width();
+ * d.height = $(window).height();
+ *
+ * @param d
+ */
+ void getScreenDimensions(Dimension d);
+
+ /**
+ * Set c's id to a unique identifier
+ * and add it to an associative array that will
+ * associate that id with c.
+ *
+ * @param c
+ * @param type
+ */
+ void register(Component c, String type);
+
+ /**
+ * The HTML for this dialog has been generated.
+ * Now create the HTML on the page for this dialog
+ * based on dialog.html and wrap it appropriately.
+ *
+ * @param dialog
+ */
+ void setDialog(Component dialog);
+
+ /**
+ * Convey to the HTML object that this check box's selection
+ * has been changed.
+ *
+ * $("#" + chk.id).prop('checked', !!chk.selected);
+ *
+ * @param chk
+ */
+ void setSelected(Component chk);
+
+ /**
+ * Convey to the HTML object that this combo box's selected item
+ * has been changed.
+ *
+ * $("#" + cmb.id).prop('selectedIndex', cmb.selectedIndex);
+ *
+ * @param cmb
+ */
+ void setSelectedIndex(Component cmb);
+
+ /**
+ * Convey to the HTML object that this component's text
+ * has been changed.
+ *
+ * $("#" + btn.id).prop('value', btn.text);
+ *
+ * @param text
+ */
+ void setText(String text);
+
+ /**
+ * Convey to the HTML object that this component's text
+ * has been changed.
+ *
+ * if (c.visible)
+ * $("#" + c.id).show();
+ * else
+ * $("#" + c.id).hide();
+ *
+ * @param c
+ */
+ void setVisible(Component c);
+
+ /**
+ * Called by clicking the [x] in the corner of the dialog;
+ * send a notification back to the manager via processWindowClosing(key)
+ *
+ * var id = $("div.JDialog:has(#" + element.id + ")")[0].id
+ * var dialog = Jmol.Swing.htDialogs[id];
+ * dialog.manager.processWindowClosing(dialog.registryKey);
+ *
+ * @param element
+ */
+ void windowClosing(HTMLElement element);
+
+}