package com.eas.client.forms;
import com.eas.client.events.PublishedSourcedEvent;
import com.eas.client.forms.components.DesktopPane;
import com.eas.client.forms.containers.AnchorsPane;
import com.eas.client.forms.events.rt.WindowEventsIProxy;
import com.eas.design.Undesignable;
import com.eas.script.AlreadyPublishedException;
import com.eas.script.EventMethod;
import com.eas.script.HasPublished;
import com.eas.script.NoPublisherException;
import com.eas.script.ScriptFunction;
import com.eas.script.ScriptObj;
import com.eas.script.Scripts;
import com.eas.util.IdGenerator;
import com.eas.util.exceptions.ClosedManageException;
import java.awt.*;
import java.awt.Dialog.ModalityType;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.*;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import jdk.nashorn.api.scripting.JSObject;
/**
*
* @author mg
*/
@ScriptObj(name = "Form", jsDoc = ""
+ "/**\n"
+ " * Application form.\n"
+ " */")
public class Form implements HasPublished {
public static final String FORM_ID_AS_FIRST_REQUIRED_MSG = "First element of form key must be a valid form id.";
public static final String FORM_KEY_REQUIRED_MSG = "Form key must be not null and must contain at least one element (form id).";
public static final String VIEW_SCRIPT_NAME = "view";
protected static final Map<String, Form> showingForms = new HashMap<>();
protected static JSObject onChange;
public static Form[] getShownForms() {
List<Form> notNullForms = new ArrayList<>();
showingForms.values().forEach((Form f) -> {
if (f != null) {
notNullForms.add(f);
}
});
return notNullForms.toArray(new Form[]{});
}
public static Form getShownForm(String aFormKey) {
return showingForms.get(aFormKey);
}
public static JSObject getOnChange() {
return onChange;
}
public static void setOnChange(JSObject aValue) {
onChange = aValue;
}
private void checkUndecorated(RootPaneContainer topContainer) {
if (UIManager.getLookAndFeel().getClass().getName().startsWith("com.jtattoo.plaf")
|| UIManager.getLookAndFeel().getClass().getName().startsWith("de.javasoft.plaf.synthetica")) {
if (topContainer instanceof JFrame) {
((JFrame) topContainer).setUndecorated(true);
} else if (topContainer instanceof JDialog) {
((JDialog) topContainer).setUndecorated(true);
}
}
}
protected void showingFormsChanged() {
if (onChange != null) {
try {
PublishedSourcedEvent event = new PublishedSourcedEvent(this);
onChange.call(published, new Object[]{event.getPublished()});
} catch (Exception ex) {
Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
protected class WindowClosingReflector extends WindowAdapter implements InternalFrameListener {
@Override
public void windowClosed(WindowEvent e) {
surface = null;
showingForms.remove(Form.this.getFormKey());
showingFormsChanged();
}
@Override
public void internalFrameOpened(InternalFrameEvent e) {
}
@Override
public void internalFrameClosing(InternalFrameEvent e) {
}
@Override
public void internalFrameClosed(InternalFrameEvent e) {
surface = null;
showingForms.remove(Form.this.getFormKey());
showingFormsChanged();
}
@Override
public void internalFrameIconified(InternalFrameEvent e) {
}
@Override
public void internalFrameDeiconified(InternalFrameEvent e) {
}
@Override
public void internalFrameActivated(InternalFrameEvent e) {
}
@Override
public void internalFrameDeactivated(InternalFrameEvent e) {
}
}
// From design info
protected int defaultCloseOperation = JFrame.DISPOSE_ON_CLOSE;
protected ImageIcon icon;
protected String title;
protected boolean resizable = true;
protected boolean minimizable = true;
protected boolean maximizable = true;
protected boolean closable = true;
protected boolean undecorated;
protected float opacity = 1.0f;
protected boolean alwaysOnTop;
protected boolean locationByPlatform = true;
protected Point formLocation;
protected Dimension designedViewSize;
protected Dimension formSize;
protected Dimension windowDecorSize = new Dimension();
protected WindowEventsIProxy windowHandler;
// runtime
protected JComponent view;
protected String formKey;
//
protected JSObject published;
// frequent runtime
protected Collection<JSObject> publishedComponents = new ArrayList<>();
protected Container surface;
protected Object closeCallbackParameter;
public Form() throws Exception {
this("form-" + IdGenerator.genId());
}
public Form(String aFormKey) throws Exception {
this(null, aFormKey);
}
public Form(JComponent aView) throws Exception {
this(aView, "form-" + IdGenerator.genId());
}
@ScriptFunction(jsDoc = ""
+ "/**\n"
+ " * Creates a form.\n"
+ " * @param aView Container instance to be used as view of created form. Optional. If it is omitted P.AnchorsPane will be created and used as view.\n"
+ " * @param aFormKey Form instance key for open windows accounting. Optional.\n"
+ " */",
params = {"aView", "aFormKey"})
public Form(JComponent aView, String aFormKey) throws Exception {
super();
formKey = aFormKey;
windowHandler = new WindowEventsIProxy();
view = aView != null ? aView : new AnchorsPane();
view.setName(VIEW_SCRIPT_NAME);
}
@Override
public final JSObject getPublished() {
if (published == null) {
JSObject publisher = Scripts.getSpace().getPublisher(this.getClass().getName());
if (publisher == null || !publisher.isFunction()) {
throw new NoPublisherException();
}
published = (JSObject) publisher.call(null, new Object[]{this});
}
return published;
}
@Override
public void setPublished(JSObject aValue) {
if (published != null) {
throw new AlreadyPublishedException();
}
injectPublished(aValue);
}
public void injectPublished(JSObject aValue) {
published = aValue;
windowHandler.setEventThis(published);
}
// Script interface
private static final String SHOW_JSDOC = ""
+ "/**\n"
+ " * Shows the form as an ordinary window.\n"
+ " */";
/**
* Script method showing the view as ordinary frame
*
* @throws Exception an exception if something goes wrong
*/
@ScriptFunction(jsDoc = SHOW_JSDOC)
public void show() throws Exception {
displayAsFrame();
}
public Object showDialog(JSObject onOkModalResult) throws Exception {
return showModal(onOkModalResult);
}
private static final String SHOW_MODAL_JSDOC = ""
+ "/**\n"
+ " * Shows the form as a dialog (modal window).\n"
+ " * @param callback a callback handler function\n"
+ " */";
/**
* Script method showing the view as modal dialog
*
* @param onOkModalResult a callback handler function
* @return value of the modalResult property
* @throws Exception an exception if something goes wrong
*/
@ScriptFunction(jsDoc = SHOW_MODAL_JSDOC, params = {"callback"})
public Object showModal(JSObject onOkModalResult) throws Exception {
return displayAsDialog(onOkModalResult);
}
private static final String SHOW_INTERNAL_FRAME_JSDOC = ""
+ "/**\n"
+ " * Shows the form as an internal window in a desktop.\n"
+ " * @param desktop the parent desktop object\n"
+ " */";
/**
* Script method showing the view as an internal frame.
*
* @param aDesktop Should be an instance of JDesktopPane
* @throws Exception an exception if something goes wrong
*/
@ScriptFunction(params = {"desktop"}, jsDoc = SHOW_INTERNAL_FRAME_JSDOC)
public void showInternalFrame(DesktopPane aDesktop) throws Exception {
displayAsInternalFrame(aDesktop);
}
/*
private static final String SHOW_ON_PANEL_FRAME_JSDOC = ""
+ "/**\n"
+ " * Script method showing the view in embedded mode on the panel.\n"
+ " * @param panel the parent panel\n"
*/// + " */";
/*
@ScriptFunction(params = {"panel"}, jsDoc = SHOW_ON_PANEL_FRAME_JSDOC)
public void showOnPanel(Object aParent) throws Exception {
com.eas.client.forms.api.Container<?> hostPanel;
if (aParent != null) {
if (aParent instanceof NativeJavaObject) {
aParent = Context.jsToJava(aParent, com.eas.client.forms.api.Container.class);
}
if (aParent instanceof com.eas.client.forms.api.Container<?>) {
hostPanel = (com.eas.client.forms.api.Container<?>) aParent;
} else {
throw new IllegalArgumentException("argument should be instance of Container, not " + aParent.getClass().getName());
}
} else {
throw new IllegalArgumentException("argument should be not null");
}
displayOnContainer(ControlsWrapper.unwrap(hostPanel));
}
//TODO is redundant method?
public String getFormId() {
return getApplicationElementId();
}
*/
private static final String FORM_KEY_JSDOC = ""
+ "/**\n"
+ " * The form key. Used to identify a form instance. Initialy set to the form's application element name.\n"
+ " */";
@ScriptFunction(jsDoc = FORM_KEY_JSDOC)
@Undesignable
public String getFormKey() {
return formKey;
}
@ScriptFunction
public void setFormKey(String aValue) {
if (formKey == null ? aValue != null : !formKey.equals(aValue)) {
showingForms.remove(formKey);
formKey = aValue;
if (isInOpenedWindow()) {
showingForms.put(formKey, this);
showingFormsChanged();
}
}
}
public JComponent getViewWidget() {
return view;
}
public JSObject getView() {
return ((HasPublished) view).getPublished();
}
private static final String IS_VISIBLE_JSDOC = ""
+ "/**\n"
+ " * Checks if this form is visible.\n"
+ " */";
@ScriptFunction(jsDoc = IS_VISIBLE_JSDOC)
public boolean getVisible() {
return isFrameVisible() || isDialogVisible() || isInternalFrameVisible();
}
public boolean isFrameVisible() {
return surface instanceof JFrame && surface.isVisible();
}
public boolean isDialogVisible() {
return surface instanceof JDialog && surface.isVisible();
}
public boolean isInternalFrameVisible() {
return surface instanceof JInternalFrame && (surface.isVisible() || ((JInternalFrame) surface).getDesktopIcon().isVisible());
}
public boolean isInOpenedWindow() {
return isFrameVisible() || isDialogVisible() || isInternalFrameVisible();
}
public void displayAsFrame() throws Exception {
if (surface == null) {
close(null);
final JFrame frame = new JFrame() {
@Override
protected void processWindowEvent(WindowEvent e) {
try {
super.processWindowEvent(e);
} catch (ClosedManageException ex) {
// no op
}
}
};
frame.addWindowListener(new WindowClosingReflector());
frame.getContentPane().setLayout(new BorderLayout());
// configure frame
frame.setDefaultCloseOperation(defaultCloseOperation);
frame.setIconImage(icon != null ? icon.getImage() : null);
frame.setTitle(title);
frame.setResizable(resizable);
frame.setUndecorated(undecorated);
if (frame.isUndecorated()) {
frame.setOpacity(opacity);
}
checkUndecorated(frame);
frame.setAlwaysOnTop(alwaysOnTop);
frame.setLocationByPlatform(locationByPlatform);
frame.getContentPane().add(view, BorderLayout.CENTER);
// add window listener
// for unknown reasons, control events are also working
windowHandler.setHandlee(frame);
//
JSObject windowOpenedHandler = windowHandler.getHandlers().get(WindowEventsIProxy.windowOpened);
windowHandler.getHandlers().remove(WindowEventsIProxy.windowOpened);
try {
showingForms.put(formKey, this);
frame.setVisible(true);
Insets decorInsets = frame.getInsets();
windowDecorSize = new Dimension(decorInsets.left + decorInsets.right, decorInsets.top + decorInsets.bottom);
if (formSize != null) {
frame.setSize(formSize.width + windowDecorSize.width, formSize.height + windowDecorSize.height);
} else if (designedViewSize != null) {
frame.setSize(designedViewSize.width + windowDecorSize.width, designedViewSize.height + windowDecorSize.height);
} else {
frame.pack();
}
formSize = new Dimension(frame.getSize().width - windowDecorSize.width, frame.getSize().height - windowDecorSize.height);
if (formLocation != null && !locationByPlatform) {
frame.setLocation(formLocation);
}
} finally {
windowHandler.getHandlers().put(WindowEventsIProxy.windowOpened, windowOpenedHandler);
}
surface = frame;
formLocation = surface.getLocation();
surface.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
formLocation = surface.getLocation();
}
@Override
public void componentResized(ComponentEvent e) {
formSize = new Dimension(surface.getSize().width - windowDecorSize.width, surface.getSize().height - windowDecorSize.height);
}
});
surface.revalidate();
surface.repaint();
showingFormsChanged();
} else {
surface.setVisible(true);
}
}
public void displayAsInternalFrame(DesktopPane aDesktop) throws Exception {
if (surface == null) {
close(null);
JInternalFrame internalFrame = new PlatypusInternalFrame(this) {
@Override
public void doDefaultCloseAction() {
try {
super.doDefaultCloseAction();
} catch (ClosedManageException ex) {
// no op
}
}
};
internalFrame.addInternalFrameListener(new WindowClosingReflector());
internalFrame.getContentPane().setLayout(new BorderLayout());
// configure frame
internalFrame.setDefaultCloseOperation(defaultCloseOperation);
internalFrame.setFrameIcon(icon);
internalFrame.setTitle(title);
internalFrame.setResizable(resizable);
internalFrame.setClosable(true);
internalFrame.setIconifiable(true);
internalFrame.setMaximizable(true);
internalFrame.getContentPane().add(view, BorderLayout.CENTER);
// add window listener
// for unknown reasons, control events are also working
windowHandler.setHandlee(internalFrame);
//
JSObject windowOpenedHandler = windowHandler.getHandlers().get(WindowEventsIProxy.windowOpened);
windowHandler.getHandlers().remove(WindowEventsIProxy.windowOpened);
try {
showingForms.put(formKey, this);
aDesktop.add(internalFrame);
internalFrame.setVisible(true);
Insets decorInsets = internalFrame.getInsets();
windowDecorSize = new Dimension(decorInsets.left + decorInsets.right, decorInsets.top + decorInsets.bottom);
if (formSize != null) {
internalFrame.setSize(formSize.width + windowDecorSize.width, formSize.height + windowDecorSize.height);
} else if (designedViewSize != null) {
internalFrame.setSize(designedViewSize.width + windowDecorSize.width, designedViewSize.height + windowDecorSize.height);
} else {
internalFrame.pack();
}
formSize = new Dimension(internalFrame.getSize().width - windowDecorSize.width, internalFrame.getSize().height - windowDecorSize.height);
if (formLocation != null && !locationByPlatform) {
internalFrame.setLocation(formLocation);
}
} finally {
windowHandler.getHandlers().put(WindowEventsIProxy.windowOpened, windowOpenedHandler);
}
surface = internalFrame;
formLocation = surface.getLocation();
surface.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
formLocation = surface.getLocation();
}
@Override
public void componentResized(ComponentEvent e) {
formSize = new Dimension(surface.getSize().width - windowDecorSize.width, surface.getSize().height - windowDecorSize.height);
}
});
windowHandler.windowOpened(null);
showingFormsChanged();
} else {
surface.setVisible(true);
}
}
public Object displayAsDialog(final JSObject onOkModalResult) throws Exception {
if (surface == null) {
close(null);
JDialog dialog = new JDialog() {
@Override
protected void processWindowEvent(WindowEvent e) {
try {
if (e.getID() == WindowEvent.WINDOW_OPENED) {
Insets decorInsets = surface.getInsets();
windowDecorSize = new Dimension(decorInsets.left + decorInsets.right, decorInsets.top + decorInsets.bottom);
if (formSize != null) {
surface.setSize(formSize.width + windowDecorSize.width, formSize.height + windowDecorSize.height);
} else if (designedViewSize != null) {
surface.setSize(designedViewSize.width + windowDecorSize.width, designedViewSize.height + windowDecorSize.height);
} else {
((JDialog) surface).pack();
}
formSize = new Dimension(surface.getSize().width - windowDecorSize.width, surface.getSize().height - windowDecorSize.height);
if (formLocation != null && !locationByPlatform) {
surface.setLocation(formLocation);
}
formLocation = surface.getLocation();
surface.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
formLocation = surface.getLocation();
}
@Override
public void componentResized(ComponentEvent e) {
if (surface != null && surface.isVisible()) {
formSize = new Dimension(surface.getSize().width - windowDecorSize.width, surface.getSize().height - windowDecorSize.height);
}
}
});
showingForms.put(formKey, Form.this);
surface.revalidate();
surface.repaint();
showingFormsChanged();
}
super.processWindowEvent(e);
} catch (ClosedManageException ex) {
// no op
}
}
};
//dialog.addWindowListener(new WindowClosingReflector());
dialog.getContentPane().setLayout(new BorderLayout());
// configure dialog
dialog.setDefaultCloseOperation(defaultCloseOperation);
dialog.setIconImage(icon != null ? icon.getImage() : null);
dialog.setTitle(title);
dialog.setResizable(resizable);
dialog.setUndecorated(undecorated);
if (dialog.isUndecorated()) {
dialog.setOpacity(opacity);
}
checkUndecorated(dialog);
dialog.setLocationByPlatform(locationByPlatform);
dialog.getContentPane().add(view, BorderLayout.CENTER);
dialog.setModalityType(ModalityType.APPLICATION_MODAL);
// add window listener
// for unknown reasons, control events are also working
windowHandler.setHandlee(dialog);
//
surface = dialog;
dialog.setVisible(true);
final Object selected = closeCallbackParameter;
surface = null;
closeCallbackParameter = null;
if (onOkModalResult != null) {
try {
onOkModalResult.call(published, new Object[]{selected});
} catch (Exception ex) {
Logger.getLogger(Form.class
.getName()).log(Level.SEVERE, null, ex);
}
}
return selected;
} else {
return null;
}
}
/*
public void displayOnContainer(java.awt.Container aTarget) throws Exception {
if (surface == null) {
close(null);
if (aTarget.getLayout() != null) {// TODO: remove this code when script moving/resizing will be clear.
aTarget.setLayout(new BorderLayout());
}
if (aTarget.getLayout() instanceof BorderLayout) {
aTarget.add(view, BorderLayout.CENTER);
}
surface = aTarget;
windowDecorSize = new Dimension();
windowHandler.windowOpened(new WindowEvent(new JFrame(), WindowEvent.WINDOW_OPENED));
aTarget.invalidate();
view.invalidate();
aTarget.validate();
aTarget.repaint();
if (surface.getLayout() == null) {
if (formSize != null) {
view.setSize(formSize);
} else if (designedViewSize != null) {
view.setSize(designedViewSize);
}
formSize = view.getSize();
if (formLocation != null) {
view.setLocation(formLocation);
}
}
designedViewSize = view.getSize();
formLocation = view.getLocation();
surface.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
formLocation = surface.getLocation();
}
@Override
public void componentResized(ComponentEvent e) {
formSize = surface.getSize();
designedViewSize = surface.getSize();
}
});
}
}
*/
private static final String CLOSE_JSDOC = ""
+ "/**\n"
+ " * Closes this form.\n"
+ " * @param obj an object to be passed as a result of a selection into <code>showModal</code> callback handler function.\n"
+ " */";
@ScriptFunction(params = {"obj"}, jsDoc = CLOSE_JSDOC)
public void close(Object aSelected) {
if (surface != null) {
try {
if (surface instanceof Window) {
windowHandler.windowClosing(new WindowEvent(((Window) surface), WindowEvent.WINDOW_CLOSING));
((Window) surface).dispose();
} else if (surface instanceof JInternalFrame) {
windowHandler.internalFrameClosing(new InternalFrameEvent(((JInternalFrame) surface), WindowEvent.WINDOW_CLOSING));
((JInternalFrame) surface).dispose();
} else {
windowHandler.windowClosing(new WindowEvent(new JFrame(), WindowEvent.WINDOW_CLOSING));
windowHandler.windowClosed(new WindowEvent(new JFrame(), WindowEvent.WINDOW_CLOSED));
view.invalidate();
surface.remove(view);
surface.validate();
surface.repaint();
}
surface = null;
closeCallbackParameter = aSelected;
} catch (ClosedManageException ex) {
// no op
}
}
}
private static final String MINIMIZE_JSDOC = ""
+ "/**\n"
+ " * Minimizes this form.\n"
+ " */";
@ScriptFunction(jsDoc = MINIMIZE_JSDOC)
public void minimize() {
if (surface != null) {
if (surface instanceof JFrame) {
((JFrame) surface).setExtendedState(JFrame.ICONIFIED);
} else if (surface instanceof JInternalFrame) {
JInternalFrame aFrame = (JInternalFrame) surface;
try {
if (aFrame.isMaximum()) {
aFrame.setMaximum(false);
}
if (!aFrame.isIcon() && aFrame.isIconifiable()) {
aFrame.setIcon(true);
}
} catch (Exception e) {
}
}
}
}
private static final String MAXIMIZE_JSDOC = ""
+ "/**\n"
+ " * Maximizes this form.\n"
+ " */";
@ScriptFunction(jsDoc = MAXIMIZE_JSDOC)
public void maximize() {
if (surface != null) {
if (surface instanceof JFrame) {
((JFrame) surface).setExtendedState(JFrame.MAXIMIZED_BOTH);
} else if (surface instanceof JInternalFrame) {
JInternalFrame aFrame = (JInternalFrame) surface;
try {
if (aFrame.isIcon()) {
aFrame.setIcon(false);
}
if (!aFrame.isMaximum() && aFrame.isMaximizable()) {
aFrame.setMaximum(true);
aFrame.toFront();
}
} catch (Exception e) {
}
}
}
}
private static final String RESTORE_JSDOC = ""
+ "/**\n"
+ " * Restores this form state.\n"
+ " */";
@ScriptFunction(jsDoc = RESTORE_JSDOC)
public void restore() {
if (surface != null) {
if (surface instanceof JInternalFrame) {
JInternalFrame aFrame = (JInternalFrame) surface;
try {
if (aFrame.isMaximum()) {
aFrame.setMaximum(false);
}
if (aFrame.isIcon()) {
aFrame.setIcon(false);
}
} catch (Exception e) {
}
aFrame.toFront();
} else if (surface instanceof JFrame) {
((JFrame) surface).setExtendedState(JFrame.NORMAL);
((JFrame) surface).toFront();
}
}
}
private static final String TO_FRONT_JSDOC = ""
+ "/**\n"
+ " * Moves form to the front position.\n"
+ " */";
@ScriptFunction(jsDoc = TO_FRONT_JSDOC)
public void toFront() {
if (surface != null) {
if (surface instanceof JInternalFrame) {
try {
((JInternalFrame) surface).setIcon(false);
} catch (Exception e) {
}
((JInternalFrame) surface).toFront();
} else if (surface instanceof JFrame) {
((JFrame) surface).toFront();
}
}
}
private static final String GET_MINIMIZED_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if this form is minimized.\n"
+ " */";
@ScriptFunction(jsDoc = GET_MINIMIZED_JSDOC)
public boolean getMinimized() {
if (surface != null) {
if (surface instanceof JInternalFrame) {
JInternalFrame aFrame = (JInternalFrame) surface;
return aFrame.isIcon();
} else if (surface instanceof JFrame) {
JFrame aFrame = (JFrame) surface;
return aFrame.getExtendedState() == JFrame.ICONIFIED;
}
}
return false;
}
private static final String IS_MAXIMIZED_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if this form is maximized.\n"
+ " */";
@ScriptFunction(jsDoc = IS_MAXIMIZED_JSDOC)
public boolean getMaximized() {
if (surface != null) {
if (surface instanceof JInternalFrame) {
JInternalFrame aFrame = (JInternalFrame) surface;
return aFrame.isMaximum() && !aFrame.isIcon();
} else if (surface instanceof JFrame) {
JFrame aFrame = (JFrame) surface;
return aFrame.getExtendedState() == JFrame.MAXIMIZED_BOTH;
}
}
return false;
}
private static final String LEFT_JSDOC = ""
+ "/**\n"
+ " * The distance for this form to the parent container's left side.\n"
+ " */";
@ScriptFunction(jsDoc = LEFT_JSDOC)
@Undesignable
public int getLeft() {
if (surface != null) {
return surface.getLocation().x;
} else if (formLocation != null) {
return formLocation.x;
} else {
return 0;
}
}
@ScriptFunction
public void setLeft(int aValue) {
if (surface != null) {
surface.setLocation(aValue, surface.getLocation().y);
} else if (formLocation != null) {
formLocation.x = aValue;
}
locationByPlatform = false;
}
private static final String TOP_JSDOC = ""
+ "/**\n"
+ " * The distance for this form to the parent container's top side.\n"
+ " */";
@ScriptFunction(jsDoc = TOP_JSDOC)
@Undesignable
public int getTop() {
if (surface != null) {
return surface.getLocation().y;
} else if (formLocation != null) {
return formLocation.y;
} else {
return 0;
}
}
@ScriptFunction
public void setTop(int aValue) {
if (surface != null) {
surface.setLocation(surface.getLocation().x, aValue);
} else if (formLocation != null) {
formLocation.y = aValue;
}
locationByPlatform = false;
}
private static final String WIDTH_JSDOC = ""
+ "/**\n"
+ " * The form's width.\n"
+ " */";
@ScriptFunction(jsDoc = WIDTH_JSDOC)
@Undesignable
public int getWidth() {
if (surface != null) {
return surface.getWidth() - windowDecorSize.width;
} else if (formSize != null) {
return formSize.width;
} else {
return designedViewSize.width;
}
}
@ScriptFunction
public void setWidth(int aValue) {
if (surface != null) {
surface.setSize(aValue + windowDecorSize.width, surface.getHeight());
} else {
if (formSize == null) {
formSize = new Dimension();
}
formSize.width = aValue;
}
}
private static final String HEIGHT_JSDOC = ""
+ "/**\n"
+ " * The form's height.\n"
+ " */";
@ScriptFunction(jsDoc = HEIGHT_JSDOC)
@Undesignable
public int getHeight() {
if (surface != null) {
return surface.getHeight() - windowDecorSize.height;
} else if (formSize != null) {
return formSize.height;
} else {
return designedViewSize.height;
}
}
@ScriptFunction
public void setHeight(int aValue) {
if (surface != null) {
surface.setSize(surface.getWidth(), aValue + windowDecorSize.height);
} else {
if (formSize == null) {
formSize = new Dimension();
}
formSize.height = aValue;
}
}
public Dimension getDesignedViewSize() {
return designedViewSize;
}
public void setDesignedViewSize(Dimension aValue) {
designedViewSize = aValue;
}
public int getDefaultCloseOperation() {
return defaultCloseOperation;
}
public void setDefaultCloseOperation(int aValue) {
defaultCloseOperation = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setDefaultCloseOperation(defaultCloseOperation);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setDefaultCloseOperation(defaultCloseOperation);
}
if (surface instanceof JFrame) {
((JFrame) surface).setDefaultCloseOperation(defaultCloseOperation);
}
}
private static final String ICON_JSDOC = ""
+ "/**\n"
+ " * The form's icon.\n"
+ " */";
@ScriptFunction(jsDoc = ICON_JSDOC)
public ImageIcon getIcon() {
return icon;
}
@ScriptFunction
public void setIcon(ImageIcon aValue) {
icon = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setIconImage(icon != null ? icon.getImage() : null);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setFrameIcon(icon);
}
if (surface instanceof JFrame) {
((JFrame) surface).setIconImage(icon != null ? icon.getImage() : null);
}
}
private static final String TITLE_JSDOC = ""
+ "/**\n"
+ " * The form's title text.\n"
+ " */";
@ScriptFunction(jsDoc = TITLE_JSDOC)
public String getTitle() {
return title;
}
@ScriptFunction
public void setTitle(String aValue) {
title = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setTitle(title);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setTitle(title);
}
if (surface instanceof JFrame) {
((JFrame) surface).setTitle(title);
}
}
private static final String RESIZABLE_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if this form is resizable.\n"
+ " */";
@ScriptFunction(jsDoc = RESIZABLE_JSDOC)
public boolean getResizable() {
return resizable;
}
@ScriptFunction
public void setResizable(boolean aValue) {
resizable = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setResizable(resizable);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setResizable(resizable);
}
if (surface instanceof JFrame) {
((JFrame) surface).setResizable(resizable);
}
}
private static final String MAXIMIZABLE_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if this form is maximizable.\n"
+ " */";
@ScriptFunction(jsDoc = MAXIMIZABLE_JSDOC)
public boolean getMaximizable() {
return maximizable;
}
@ScriptFunction
public void setMaximizable(boolean aValue) {
maximizable = aValue;
if (surface instanceof JDialog) {
//((JDialog) surface).setMaximizable(maximizable);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setMaximizable(maximizable);
}
if (surface instanceof JFrame) {
//((JFrame) surface).setMaximizable(maximizable);
}
}
private static final String CLOSABLE_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if this form is closable.\n"
+ " */";
@ScriptFunction(jsDoc = MAXIMIZABLE_JSDOC)
public boolean getClosable() {
return closable;
}
@ScriptFunction
public void setClosable(boolean aValue) {
closable = aValue;
if (surface instanceof JDialog) {
//((JDialog) surface).setClosable(closable);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setClosable(closable);
}
if (surface instanceof JFrame) {
//((JFrame) surface).setClosable(closable);
}
}
private static final String MINIMIZABLE_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if this form is minimizable.\n"
+ " */";
@ScriptFunction(jsDoc = MINIMIZABLE_JSDOC)
public boolean getMinimizable() {
return minimizable;
}
@ScriptFunction
public void setMinimizable(boolean aValue) {
minimizable = aValue;
if (surface instanceof JDialog) {
//((JDialog) surface).setMinimizable(minimizable);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setIconifiable(minimizable);
}
if (surface instanceof JFrame) {
//((JFrame) surface).setMinimizable(minimizable);
}
}
private static final String UNDECORATED_JSDOC = ""
+ "/**\n"
+ " * <code>true</code> if no decoration to be enabled for this form.\n"
+ " */";
@ScriptFunction(jsDoc = UNDECORATED_JSDOC)
public boolean getUndecorated() {
return undecorated;
}
@ScriptFunction
public void setUndecorated(boolean aValue) {
undecorated = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setUndecorated(undecorated);
}
if (surface instanceof JInternalFrame) {
//((JInternalFrame) surface).setUndecorated(undecorated);
}
if (surface instanceof JFrame) {
((JFrame) surface).setUndecorated(undecorated);
}
}
private static final String OPACITY_JSDOC = ""
+ "/**\n"
+ " * The opacity of the form.\n"
+ " */";
@ScriptFunction(jsDoc = OPACITY_JSDOC)
public float getOpacity() {
return opacity;
}
@ScriptFunction
public void setOpacity(float aValue) {
opacity = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setOpacity(opacity);
}
if (surface instanceof JInternalFrame) {
((JInternalFrame) surface).setOpaque(opacity > 0.5f);
}
if (surface instanceof JFrame) {
((JFrame) surface).setOpacity(opacity);
}
}
private static final String ALWAYS_ON_TOP_JSDOC = ""
+ "/**\n"
+ " * Determines whether this window should always be above other windows.\n"
+ " */";
@ScriptFunction(jsDoc = ALWAYS_ON_TOP_JSDOC)
@Undesignable
public boolean getAlwaysOnTop() {
return alwaysOnTop;
}
@ScriptFunction()
public void setAlwaysOnTop(boolean aValue) {
alwaysOnTop = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setAlwaysOnTop(alwaysOnTop);
}
if (surface instanceof JInternalFrame) {
//((JInternalFrame) surface).setAlwaysOnTop(alwaysOnTop);
}
if (surface instanceof JFrame) {
((JFrame) surface).setAlwaysOnTop(alwaysOnTop);
}
}
private static final String LOCATION_BY_PLATFORM_JSDOC = ""
+ "/**\n"
+ " * Determines whether this form should appear at the default location\n"
+ " * for the native windowing system or at the current location.\n"
+ " */";
@ScriptFunction(jsDoc = LOCATION_BY_PLATFORM_JSDOC)
public boolean getLocationByPlatform() {
return locationByPlatform;
}
@ScriptFunction
public void setLocationByPlatform(boolean aValue) {
locationByPlatform = aValue;
if (surface instanceof JDialog) {
((JDialog) surface).setLocationByPlatform(locationByPlatform);
}
if (surface instanceof JInternalFrame) {
//((JInternalFrame) surface).setLocationByPlatform(locationByPlatform)
}
if (surface instanceof JFrame) {
((JFrame) surface).setLocationByPlatform(locationByPlatform);
}
}
private static final String ON_WINDOW_OPENED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>before open</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_OPENED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowOpened() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowOpened) : null;
}
@ScriptFunction
public void setOnWindowOpened(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowOpened, aValue);
}
}
private static final String ON_WINDOW_CLOSING_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>before close</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_CLOSING_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowClosing() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowClosing) : null;
}
@ScriptFunction()
public void setOnWindowClosing(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowClosing, aValue);
}
}
private static final String ON_WINDOW_CLOSED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>after close</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_CLOSED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowClosed() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowClosed) : null;
}
@ScriptFunction
public void setOnWindowClosed(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowClosed, aValue);
}
}
private static final String ON_WINDOW_MINIMIZED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>after minimize</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_MINIMIZED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowMinimized() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowIconified) : null;
}
@ScriptFunction
public void setOnWindowMinimized(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowIconified, aValue);
}
}
private static final String ON_WINDOW_RESTORED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>after restore</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_RESTORED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowRestored() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowRestored) : null;
}
@ScriptFunction
public void setOnWindowRestored(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowRestored, aValue);
}
}
private static final String ON_WINDOW_MAXIMIZED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>after maximize</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_MAXIMIZED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowMaximized() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowMaximized) : null;
}
@ScriptFunction
public void setOnWindowMaximized(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowMaximized, aValue);
}
}
private static final String ON_WINDOW_ACTIVATED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>after activate</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_ACTIVATED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowActivated() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowActivated) : null;
}
@ScriptFunction
public void setOnWindowActivated(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowActivated, aValue);
}
}
private static final String ON_WINDOW_DEACTIVATED_JSDOC = ""
+ "/**\n"
+ " * The handler function for the form's <i>after deactivate</i> event.\n"
+ " */";
@ScriptFunction(jsDoc = ON_WINDOW_DEACTIVATED_JSDOC)
@EventMethod(eventClass = com.eas.client.forms.events.WindowEvent.class)
@Undesignable
public JSObject getOnWindowDeactivated() {
return windowHandler != null ? windowHandler.getHandlers().get(WindowEventsIProxy.windowDeactivated) : null;
}
@ScriptFunction
public void setOnWindowDeactivated(JSObject aValue) {
if (windowHandler != null) {
windowHandler.getHandlers().put(WindowEventsIProxy.windowDeactivated, aValue);
}
}
public JSObject[] getPublishedComponents() {
Collection<JSObject> copy = new ArrayList<>();
copy.addAll(publishedComponents);
publishedComponents.clear();
return copy.toArray(new JSObject[]{});
}
}