X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjavajs%2Fapi%2FSwingController.java;fp=src%2Fjavajs%2Fapi%2FSwingController.java;h=68aace5899910eadff1a96add4aaded27d04e298;hp=0000000000000000000000000000000000000000;hb=eb40ed78f348375efcd74b5a683bdc2380b3bd61;hpb=c07eb2c5794833bd0241000d6844d783fe10cb82 diff --git a/src/javajs/api/SwingController.java b/src/javajs/api/SwingController.java new file mode 100644 index 0000000..68aace5 --- /dev/null +++ b/src/javajs/api/SwingController.java @@ -0,0 +1,136 @@ +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); + +}