summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.test/src/main/java/net/wotonomy/test/InspectorController.java
blob: eeb6dd9d0c953cbe6287ea3765dabfb836f841b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package net.wotonomy.test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.AbstractButton;
import javax.swing.JDialog;

import net.wotonomy.foundation.NSArray;
import net.wotonomy.ui.EOAssociation;
import net.wotonomy.ui.EODisplayGroup;
import net.wotonomy.ui.MasterDetailAssociation;
import net.wotonomy.ui.swing.DisplayGroupActionAssociation;
import net.wotonomy.ui.swing.ListAssociation;
import net.wotonomy.ui.swing.RadioPanelAssociation;
import net.wotonomy.ui.swing.TextAssociation;
import net.wotonomy.ui.swing.util.WindowUtilities;

/**
 * A simple editor panel with a few textfields.
 */
public class InspectorController {
	public InspectorController(Object o) {
		EditPanel editPanel = new EditPanel();

		EODisplayGroup group = new EODisplayGroup();
		group.setDataSource(new TestDataSource());
		group.setObjectArray(new NSArray(o));
		group.selectNext();

		// text associations

		EOAssociation ta;

		ta = new TextAssociation(editPanel.firstNameField);
		ta.bindAspect(EOAssociation.ValueAspect, group, "firstName");
		ta.establishConnection();

		ta = new TextAssociation(editPanel.middleNameField);
		ta.bindAspect(EOAssociation.ValueAspect, group, "middleName");
		ta.establishConnection();

		ta = new TextAssociation(editPanel.lastNameField);
		ta.bindAspect(EOAssociation.ValueAspect, group, "lastName");
		ta.establishConnection();

		// radio panels

		ta = new RadioPanelAssociation(editPanel.yearRadioPanel);
		ta.bindAspect(EOAssociation.ValueAspect, group, "createDate.year");

		EODisplayGroup yearTitles = new EODisplayGroup();
		yearTitles.setObjectArray(new NSArray(new Object[] { "1999", "2000", "2001" }));
		ta.bindAspect(EOAssociation.TitlesAspect, yearTitles, "");

		EODisplayGroup yearObjects = new EODisplayGroup();
		yearObjects.setObjectArray(new NSArray(new Object[] { new Integer(99), new Integer(100), new Integer(101) }));
		ta.bindAspect(EOAssociation.ObjectsAspect, yearObjects, "");

		ta.establishConnection();

		// detail group

		final EODisplayGroup detailGroup = new EODisplayGroup();

		ta = new MasterDetailAssociation(detailGroup);
		ta.bindAspect(EOAssociation.ParentAspect, group, "childList");
		ta.establishConnection();

		ta = new ListAssociation(editPanel.list);
		ta.bindAspect(EOAssociation.TitlesAspect, detailGroup, "fullName");
		ta.establishConnection();

		// display group action associations

		AbstractButton button = (AbstractButton) editPanel.addPanel.getButton("Add");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				detailGroup.insertNewObjectAtIndex(0);
			}
		});

		ta = new DisplayGroupActionAssociation(editPanel.addPanel.getButton("Remove"));
		ta.bindAspect(EOAssociation.ActionAspect, detailGroup, "deleteSelection");
		ta.establishConnection();

		// add mouse listener for list

		editPanel.list.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					Object item = detailGroup.selectedObject();
					if (item != null) {
						new InspectorController(item);
					}
				}
			}
		});

		// launch

		JDialog dialog = new JDialog();
		dialog.getContentPane().add(editPanel);
		dialog.setTitle("Inspector Panel");
		dialog.pack();
		dialog.setSize(300, dialog.getSize().height);
		WindowUtilities.cascade(dialog);
		dialog.show();

		// workaround for memory issues on jdk1.2.2
		dialog.addWindowListener(new WindowAdapter() {
			// exit on close
			public void windowClosing(WindowEvent e) {
				((JDialog) e.getWindow()).getContentPane().removeAll();
			}
		});
	}

}