1 package org.indi.client.swing;
2
3 import java.awt.Container;
4 import java.awt.GridBagConstraints;
5 import java.awt.GridBagLayout;
6 import java.awt.Insets;
7 import java.io.IOException;
8 import java.util.HashMap;
9 import java.util.Map;
10
11 import javax.swing.JButton;
12 import javax.swing.JLabel;
13 import javax.swing.JPanel;
14 import javax.swing.JTabbedPane;
15
16 import org.indi.client.IndiClient;
17 import org.indi.objects.Element;
18 import org.indi.objects.Vector;
19 import org.indi.reactor.Reactor;
20
21 class SicElement {
22 private final int yPosition;
23
24 SicElement(int y) {
25 this.yPosition = y;
26 };
27
28 public int getyPosition() {
29 return this.yPosition;
30 }
31 }
32
33 class SicVector {
34 private final Map<String, SicElement> elements;
35 private final int yPosition;
36 private int MaxYPosition;
37 private final JPanel panel;
38 private final JLabel statusLabel;
39 private final JLabel nameLabel;
40 private final JButton setButton;
41
42 SicVector(int y, JLabel status, JLabel name, JPanel p, JButton button) {
43 this.yPosition = y;
44 this.statusLabel = status;
45 this.nameLabel = name;
46 this.panel = p;
47 this.setButton = button;
48 this.elements = new HashMap<String, SicElement>();
49 };
50
51 public int getyPosition() {
52 return this.yPosition;
53 }
54
55 public JPanel getPanel() {
56 return this.panel;
57 }
58
59 public JLabel getStatusLabel() {
60 return this.statusLabel;
61 };
62
63 public JLabel getNameLabel() {
64 return this.nameLabel;
65 };
66
67 private JButton getSetButton() {
68 return this.setButton;
69 };
70
71 public SicElement getElement(Element e) {
72 SicElement se;
73 String name = e.getName();
74 if (this.elements.containsKey(name)) {
75 se = this.elements.get(name);
76 } else {
77 JPanel p = new JPanel();
78 se = new SicElement(this.MaxYPosition);
79 this.MaxYPosition++;
80 this.elements.put(name, se);
81 }
82 return se;
83 };
84 }
85
86 class SicGroup {
87 private final Map<String, SicVector> vectors;
88 private final JPanel component;
89 private int MaxYPosition;
90
91 SicGroup(JPanel c) {
92 this.component = c;
93 this.vectors = new HashMap<String, SicVector>();
94 this.MaxYPosition = 0;
95 };
96
97 public JPanel getComponent() {
98 return this.component;
99 }
100
101 public SicVector getVector(Vector v) {
102 SicVector sv;
103 String name = v.getName();
104 if (this.vectors.containsKey(name)) {
105 sv = this.vectors.get(name);
106 } else {
107 GridBagConstraints c = new GridBagConstraints();
108 c.gridx = 0;
109 c.gridy = 0;
110 c.gridwidth = 1;
111 c.gridheight = 1;
112 c.fill = GridBagConstraints.HORIZONTAL
113 | GridBagConstraints.VERTICAL;
114 c.ipadx = 3;
115 c.ipady = 3;
116 c.insets = new Insets(3, 3, 3, 3);
117 JLabel statusLabel = new JLabel("Status");
118 this.component.add(statusLabel, c);
119 c.gridx = 1;
120 JLabel nameLabel = new JLabel(name);
121 this.component.add(nameLabel, c);
122 c.gridx = 2;
123 JPanel p = new JPanel(new GridBagLayout());
124 this.component.add(p, c);
125 c.gridx = 3;
126 c.fill = GridBagConstraints.NONE;
127 JButton setButton = new JButton("Set");
128 this.component.add(setButton, c);
129 sv = new SicVector(this.MaxYPosition, statusLabel, nameLabel, p,
130 setButton);
131 this.MaxYPosition++;
132 this.vectors.put(name, sv);
133 }
134 return sv;
135 };
136 }
137
138 class SicDevice {
139 private final Map<String, SicGroup> groups;
140 private final JTabbedPane component;
141
142 SicDevice(JTabbedPane c) {
143 this.component = c;
144 this.groups = new HashMap<String, SicGroup>();
145 };
146
147 public JTabbedPane getComponent() {
148 return this.component;
149 }
150
151 public SicGroup getGroup(Vector v) {
152 SicGroup g;
153 String group = v.getGroup();
154 if (this.groups.containsKey(group)) {
155 g = this.groups.get(group);
156 } else {
157 JPanel p = new JPanel(new GridBagLayout());
158 this.component.addTab(group, p);
159 g = new SicGroup(p);
160 this.groups.put(group, g);
161 }
162 return g;
163 };
164 }
165
166 class SicDevices {
167 private final Map<String, SicDevice> devices;
168 private final JTabbedPane component;
169
170 SicDevices(JTabbedPane c) {
171 this.component = c;
172 this.devices = new HashMap<String, SicDevice>();
173 };
174
175 public JTabbedPane getComponent() {
176 return this.component;
177 }
178
179 public SicDevice getDevice(Vector v) {
180 SicDevice d;
181 String device = v.getDevice();
182 if (this.devices.containsKey(device)) {
183 d = this.devices.get(device);
184 } else {
185 JTabbedPane tp = new JTabbedPane();
186 this.component.addTab(device, tp);
187 d = new SicDevice(tp);
188 this.devices.put(device, d);
189 }
190 return d;
191 };
192 }
193
194 public class SwingIndiClient extends IndiClient {
195 SicDevices devices;
196
197 public SwingIndiClient(Reactor r, Container c) throws IOException {
198 super(r);
199 }
200
201 public void onNewVector(Vector v) {
202
203 }
204
205 }