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