1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package de.desy.acop.displayers.selector;
24
25 import java.awt.GridBagConstraints;
26 import java.awt.GridBagLayout;
27 import java.awt.Insets;
28 import java.awt.event.ActionEvent;
29 import java.awt.event.ActionListener;
30 import java.beans.PropertyChangeEvent;
31 import java.beans.PropertyChangeListener;
32
33 import javax.swing.JButton;
34 import javax.swing.JPanel;
35 import javax.swing.event.ListSelectionEvent;
36 import javax.swing.event.ListSelectionListener;
37
38 import com.cosylab.gui.components.util.RunnerHelper;
39
40 import de.desy.acop.displayers.AcopTrendChart;
41 import de.desy.acop.displayers.chart.HistoryParameters;
42 import de.desy.acop.displayers.chart.TrendSelector;
43 import de.desy.acop.displayers.tools.AcopDisplayer;
44 import de.desy.acop.displayers.tools.AcopGraphHistoryParameters;
45 import de.desy.acop.displayers.tools.AcopGraphParameters;
46 import de.desy.acop.transport.ConnectionParameters;
47
48
49
50
51
52
53
54
55
56 public class TrendChartConnectionCustomizer extends ChartConnectionCustomizer {
57
58 public static void main(String[] args) {
59 RunnerHelper.runComponent(new TrendChartConnectionCustomizer(), 800,400);
60 }
61
62 private static final long serialVersionUID = 1L;
63
64 private TrendSelector trendSelector;
65 private JPanel trendPanel;
66 private JButton suggestButton;
67 private JButton applyButton;
68 private SelectorGUI selector;
69
70
71
72
73
74 public TrendChartConnectionCustomizer() {
75 super();
76 JPanel p = new JPanel(new GridBagLayout());
77 p.add(getTrendPanel(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0,0,0,0),0,0));
78 getCustomizerTabbedPane().add(p, "History", 0);
79
80 getSelectorGUI().addSelectorGUIListener(new SelectorGUIListener() {
81
82 public void selectionChanged(SelectorGUIEvent e) {
83 setToTrendSelector(getSelectorGUI().getConnectionParameters(), null);
84 }});
85 getSelectorGUI().addPropertyChangeListener(AcopDisplayer.CONNECTION_PARAMETERS_PROPERTY,new PropertyChangeListener() {
86 public void propertyChange(PropertyChangeEvent e) {
87 setToTrendSelector(getSelectorGUI().getConnectionParameters(), null);
88 }
89 });
90 getSelectionList().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
91
92 public void valueChanged(ListSelectionEvent e) {
93 int sel = getSelectionList().getSelectedIndex();
94 if (sel >= 0) {
95 AcopGraphHistoryParameters parameters = (AcopGraphHistoryParameters) getSelectionList().getModel().getElementAt(sel);
96 HistoryParameters hp = parameters.getHistoryParameters();
97 getTrendSelector().setHistoryParameters(hp);
98 if (hp != null) getTrendSelector().setHistoryEnabled(true);
99 else getTrendSelector().setHistoryEnabled(false);
100 } else {
101 getTrendSelector().setHistoryParameters(null);
102 getTrendSelector().setHistoryEnabled(false);
103 }
104
105 }});
106 }
107
108
109
110
111
112 @Override
113 protected SelectorGUI getSelectorGUI() {
114 if (selector == null) {
115 selector = new SelectorGUI();
116 selector.addSelectorGUIListener(new SelectorGUIListener() {
117 public void selectionChanged(SelectorGUIEvent e) {
118 getAddButton().setEnabled(SelectorUtilities.isConnectionParametersValid(selector.getConnectionParameters()));
119 }
120 });
121 selector.addPropertyChangeListener(AcopDisplayer.CONNECTION_PARAMETERS_PROPERTY,new PropertyChangeListener() {
122 public void propertyChange(PropertyChangeEvent e) {
123 getAddButton().setEnabled(SelectorUtilities.isConnectionParametersValid(selector.getConnectionParameters()));
124 }
125 });
126 }
127
128 return selector;
129 }
130
131 private JPanel getTrendPanel() {
132 if (trendPanel == null) {
133 trendPanel = new JPanel(new GridBagLayout());
134 trendPanel.add(getTrendSelector(), new GridBagConstraints(0,0,2,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(1,1,1,1),0,0));
135 trendPanel.add(getSuggestButton(), new GridBagConstraints(0,1,1,1,1,0,GridBagConstraints.EAST,GridBagConstraints.NONE,new Insets(1,1,1,3),0,0));
136 trendPanel.add(getApplyButton(), new GridBagConstraints(1,1,1,1,1,0,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,3,1,1),0,0));
137 }
138
139 return trendPanel;
140 }
141
142 private JButton getSuggestButton() {
143 if (suggestButton == null) {
144 suggestButton = new JButton("Suggest Default");
145 suggestButton.addActionListener(new ActionListener() {
146 public void actionPerformed(ActionEvent e) {
147 int sel = getSelectionList().getSelectedIndex();
148 if (sel >= 0) {
149 AcopGraphHistoryParameters parameters = (AcopGraphHistoryParameters) getSelectionList().getModel().getElementAt(sel);
150 HistoryParameters hp = parameters.getHistoryParameters();
151 getTrendSelector().setHistoryParameters(hp);
152 setToTrendSelector(parameters.getConnectionParameters(), hp);
153 } else {
154 setToTrendSelector(getSelectorGUI().getConnectionParameters(), null);
155 }
156 }});
157 }
158
159 return suggestButton;
160 }
161
162 private TrendSelector getTrendSelector() {
163 if (trendSelector == null) {
164 trendSelector = new TrendSelector();
165 }
166 return trendSelector;
167 }
168
169
170
171
172 @Override
173 protected MultipleDisplayerAbstractSettingsPanel<AcopGraphParameters> getSettingsPanel() {
174 GraphCustomizerPanel gcp = (GraphCustomizerPanel) super.getSettingsPanel();
175 gcp.toggleTrendControls(false);
176 return gcp;
177 }
178
179
180
181
182 @Override
183 protected AcopGraphParameters generateParameters() {
184 AcopGraphParameters agp = super.generateParameters();
185 agp.deriveWith(getTrendSelector().getSelectedIndex());
186 return new AcopGraphHistoryParameters(agp, getTrendSelector().getHistoryParameters());
187 }
188
189 private void setToTrendSelector(ConnectionParameters cp, HistoryParameters hp) {
190 if (hp == null) {
191 getTrendSelector().setHistoryParameters(
192 cp.getDeviceContext(),
193 "HISTORY",
194 cp.getDeviceName(),
195 cp.getDeviceProperty());
196 }
197 else {
198 getTrendSelector().setHistoryParameters(hp);
199 }
200 if (SelectorUtilities.isConnectionParametersValid(cp)) {
201 getTrendSelector().setIndexMax(SelectorUtilities.getSequenceLength(cp)-1);
202 }
203 if (hp != null) getTrendSelector().setSelectedIndex(hp.getHistoryIndex());
204 getApplyButton().setEnabled(selectedParameters != null);
205 }
206
207 @Override
208 protected void setSelectedParameters(AcopGraphParameters selected) {
209 super.setSelectedParameters(selected);
210 if (selected instanceof AcopGraphHistoryParameters) {
211 setToTrendSelector(((AcopGraphHistoryParameters)selected).getConnectionParameters(),
212 ((AcopGraphHistoryParameters)selected).getHistoryParameters());
213 }
214 }
215
216 private JButton getApplyButton() {
217 if (applyButton == null) {
218 applyButton = new JButton("Apply");
219 applyButton.addActionListener(new ActionListener() {
220 public void actionPerformed(ActionEvent e) {
221 if (selectedParameters != null) {
222 if (selectedParameters instanceof AcopGraphHistoryParameters) {
223 ((AcopGraphHistoryParameters)selectedParameters).setHistoryParameters(getTrendSelector().getHistoryParameters());
224 } else {
225 selectedParameters.putParameter("historyParameters",getTrendSelector().getHistoryParameters());
226 }
227 if (getDisplayer() instanceof AcopTrendChart) {
228 ((AcopTrendChart)getDisplayer()).reloadHistory(selectedParameters);
229 }
230 }
231 }
232 });
233 }
234 return applyButton;
235 }
236 }