1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sourceforge.jarduino.gui;
18
19 import java.awt.BorderLayout;
20 import java.awt.Dimension;
21 import javax.swing.BorderFactory;
22 import javax.swing.Box;
23 import javax.swing.BoxLayout;
24 import javax.swing.JButton;
25 import javax.swing.JComponent;
26 import javax.swing.JFrame;
27 import javax.swing.JPanel;
28 import javax.swing.JScrollPane;
29 import javax.swing.border.Border;
30
31 import net.sourceforge.jarduino.message.ArduinoMsgFilter;
32 import net.sourceforge.jarduino.message.ArduinoNamedObject;
33 import net.sourceforge.jarduino.message.ArduinoNode;
34 import net.sourceforge.jarduino.message.ArduinoSystem;
35
36
37
38
39 public class ArduinoPanelFilter {
40
41
42
43 private final ArduinoPanelSource theParent;
44
45
46
47
48 private final JPanel thePanel;
49
50
51
52
53 private final ArduinoScrollButton<ArduinoNamedObject> theBasis;
54
55
56
57
58 private final JButton theReset;
59
60
61
62
63 private final JButton thePublic;
64
65
66
67
68 private final ArduinoTableFilter theTable;
69
70
71
72
73
74
75 ArduinoPanelFilter(final ArduinoPanelSource pParent,
76 final JFrame pFrame) {
77
78 theParent = pParent;
79
80
81 theTable = new ArduinoTableFilter(this);
82
83
84 final JButton mySource = new JButton();
85 mySource.setText("Message Filter");
86 mySource.addActionListener(e -> theParent.showSource());
87
88
89 theBasis = new ArduinoScrollButton<>(pFrame);
90 theBasis.setFormatter(ArduinoPanelFilter::getNodeName);
91 theBasis.onSelect(this::setNode);
92
93
94 theReset = new JButton();
95 theReset.setText("Reset");
96 theReset.addActionListener(e -> setNode(theBasis.getSelectedItem()));
97
98
99 thePublic = new JButton();
100 thePublic.setText("Private");
101 thePublic.addActionListener(e -> {
102 final ArduinoMsgFilter myFilter = getFilter();
103 myFilter.togglePublicFields();
104 thePublic.setText(myFilter.publicFields() ? "Public" : "Private");
105 theParent.updateFilter();
106 });
107
108
109 final JPanel myBasisPanel = new JPanel();
110 myBasisPanel.setLayout(new BoxLayout(myBasisPanel, BoxLayout.X_AXIS));
111 myBasisPanel.add(Box.createHorizontalStrut(ArduinoPanelMain.STRUTSIZE));
112 myBasisPanel.add(Box.createHorizontalStrut(ArduinoPanelMain.STRUTSIZE));
113 myBasisPanel.add(theBasis.getComponent());
114 myBasisPanel.add(Box.createHorizontalGlue());
115 myBasisPanel.add(theReset);
116 myBasisPanel.add(Box.createHorizontalGlue());
117 Border myBorder = BorderFactory.createTitledBorder("Filter Basis");
118 myBasisPanel.setBorder(myBorder);
119
120
121 final JPanel myFieldPanel = new JPanel();
122 myFieldPanel.setLayout(new BoxLayout(myFieldPanel, BoxLayout.X_AXIS));
123 myFieldPanel.add(Box.createHorizontalStrut(ArduinoPanelMain.STRUTSIZE));
124 myFieldPanel.add(thePublic);
125 myFieldPanel.add(Box.createHorizontalStrut(ArduinoPanelMain.STRUTSIZE));
126 myBorder = BorderFactory.createTitledBorder("Fields");
127 myFieldPanel.setBorder(myBorder);
128
129
130 final JPanel mySourcePanel = new JPanel();
131 mySourcePanel.setLayout(new BoxLayout(mySourcePanel, BoxLayout.X_AXIS));
132 mySourcePanel.add(Box.createHorizontalStrut(ArduinoPanelMain.STRUTSIZE));
133 mySourcePanel.add(mySource);
134 mySourcePanel.add(Box.createHorizontalStrut(ArduinoPanelMain.STRUTSIZE));
135 myBorder = BorderFactory.createTitledBorder("View");
136 mySourcePanel.setBorder(myBorder);
137
138
139 final JPanel myControl = new JPanel();
140 myControl.setLayout(new BoxLayout(myControl, BoxLayout.X_AXIS));
141 myControl.add(myBasisPanel);
142 myControl.add(myFieldPanel);
143 myControl.add(mySourcePanel);
144
145
146 final JPanel myFilterPanel = new JPanel(new BorderLayout());
147 myFilterPanel.add(new JScrollPane(theTable.getComponent()), BorderLayout.CENTER);
148 myBorder = BorderFactory.createTitledBorder("Message Filter");
149 myFilterPanel.setBorder(myBorder);
150
151
152 thePanel = new JPanel(new BorderLayout());
153 thePanel.add(myControl, BorderLayout.PAGE_START);
154 thePanel.add(myFilterPanel, BorderLayout.CENTER);
155
156
157 thePanel.setPreferredSize(new Dimension(ArduinoPanelMain.WIDTH, ArduinoPanelMain.HEIGHT));
158 }
159
160
161
162
163
164 JComponent getComponent() {
165 return thePanel;
166 }
167
168
169
170
171
172 ArduinoMsgFilter getFilter() {
173 return theTable.getFilter();
174 }
175
176
177
178
179
180
181 private static String getNodeName(final ArduinoNamedObject pNode) {
182 return pNode instanceof ArduinoSystem ? "All" : pNode.getName();
183 }
184
185
186
187
188
189 void setSystem(final ArduinoSystem pSystem) {
190
191 theTable.configureForSystem(pSystem);
192
193
194 theBasis.removeAll();
195 theBasis.add(pSystem);
196
197
198 for (ArduinoNode myNode : pSystem.getNodes()) {
199
200 if (!myNode.getName().equals(ArduinoNode.NULL_NODE)) {
201 theBasis.add(myNode);
202 }
203 }
204 }
205
206
207
208
209
210 private void setNode(final ArduinoNamedObject pNode) {
211
212 theTable.configureForNode(pNode);
213 }
214
215
216
217
218 void updateFilter() {
219
220 theParent.updateFilter();
221
222
223 theReset.setVisible(theTable.isBespoke());
224 }
225 }