01: package org.osbl.client.wings.form.editor;
02:
03: import org.osbl.client.wings.shell.Window;
04: import org.osbl.client.wings.shell.Client;
05: import org.osbl.client.wings.form.DelegateEnvironment;
06: import org.osbl.client.wings.form.ObjectForm;
07: import org.osbl.client.wings.XButton;
08: import org.osbl.client.wings.XOptionPane;
09: import org.osbl.client.action.*;
10:
11: import javax.swing.event.EventListenerList;
12: import javax.swing.*;
13: import java.awt.event.ActionEvent;
14: import java.awt.event.ActionListener;
15:
16: public class FormWindow extends Window {
17: private EventListenerList listenerList = new EventListenerList();
18:
19: DelegateEnvironment delegateEnvironment = new DelegateEnvironment(
20: this );
21:
22: ObjectForm form;
23:
24: public FormWindow(ObjectForm objectForm) {
25: this .form = objectForm;
26: delegateEnvironment.setActive(true);
27: delegateEnvironment
28: .setNestedEnvironment((DelegateEnvironment) objectForm
29: .getEnvironment());
30: }
31:
32: public ObjectForm getForm() {
33: return form;
34: }
35:
36: public final void addPopAction(ObjectAction action) {
37: listenerList.add(ObjectAction.class, action);
38: delegateEnvironment.addControl(new XButton(
39: new FormWindow.PopAction(action)));
40: }
41:
42: public final void removePopAction(ObjectAction action) {
43: listenerList.remove(ObjectAction.class, action);
44: }
45:
46: private void firePopEvent(ObjectActionEvent event) {
47: Object[] listeners = listenerList.getListenerList();
48: if (listeners.length == 0)
49: return;
50:
51: for (int i = listeners.length - 2; i >= 0; i -= 2) {
52: ObjectAction listener = (ObjectAction) listeners[i + 1];
53: listener.actionPerformed(event);
54: }
55: }
56:
57: class PopAction extends AbstractAction {
58: ObjectAction objectAction;
59:
60: public PopAction(ObjectAction objectAction) {
61: this .objectAction = objectAction;
62: putValue(Action.ACTION_COMMAND_KEY, objectAction
63: .getValue(ObjectAction.ACTION_COMMAND_KEY));
64: putValue(AuthorizedAction.PERMISSION_KEY, objectAction
65: .getValue(AuthorizedAction.PERMISSION_KEY));
66: }
67:
68: public void actionPerformed(ActionEvent e) {
69: if (form.getEnvironment().getHasChanges()) {
70: String name = Client.getInstance()
71: .getResourceProvider().getMessage(
72: form.getType().getName());
73: String message = Client
74: .getInstance()
75: .getResourceProvider()
76: .getMessage(
77: "businessobject.messages.unsavedChanges");
78: XOptionPane.showConfirmDialog(null, message, name,
79: new ActionListener() {
80: public void actionPerformed(ActionEvent e) {
81: if (XOptionPane.YES_ACTION == e
82: .getActionCommand())
83: pop();
84: }
85: });
86: } else
87: pop();
88: }
89:
90: private void pop() {
91: Client.getInstance().popWindow(FormWindow.this );
92: ObjectActionEvent event = new ObjectActionEvent(this, form
93: .getObject());
94: firePopEvent(event);
95: }
96: }
97: }
|