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