+ /**
+ * Lay out fields for attribute value filters
+ *
+ * @param attNames
+ *
+ * @return
+ */
+ protected JPanel initFiltersPanel(Iterator<String> attNames)
+ {
+ JPanel filtersPanel = new JPanel();
+ filtersPanel.setLayout(new GridLayout(2, 3));
+ filtersPanel.setBackground(Color.white);
+
+ /*
+ * drop-down choice of attribute
+ */
+ filterAttribute = new JComboBox<>();
+ filterAttribute2 = new JComboBox<>();
+ while (attNames.hasNext())
+ {
+ String attName = attNames.next();
+ filterAttribute.addItem(attName);
+ filterAttribute2.addItem(attName);
+ }
+ filterAttribute.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ changeColour(true);
+ }
+ });
+
+ /*
+ * drop-down choice of test condition
+ */
+ filterCondition = new JComboBox<>();
+ for (Condition cond : Condition.values())
+ {
+ filterCondition.addItem(cond);
+ }
+ filterCondition.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ changeColour(true);
+ }
+ });
+
+ filterValue = new JTextField(12);
+ filterValue.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ changeColour(true);
+ }
+ });
+ filterValue.addFocusListener(new FocusAdapter()
+ {
+ @Override
+ public void focusLost(FocusEvent e)
+ {
+ changeColour(true);
+ }
+ });
+
+ /*
+ * repeat for a second filter
+ * todo: generalise to N filters
+ */
+ filterAttribute2.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ changeColour(true);
+ }
+ });
+
+ /*
+ * drop-down choice of test condition
+ */
+ filterCondition2 = new JComboBox<>();
+ for (Condition cond : Condition.values())
+ {
+ filterCondition2.addItem(cond);
+ }
+ filterCondition2.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ changeColour(true);
+ }
+ });
+
+ filterValue2 = new JTextField(12);
+ filterValue2.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ changeColour(true);
+ }
+ });
+ filterValue2.addFocusListener(new FocusAdapter()
+ {
+ @Override
+ public void focusLost(FocusEvent e)
+ {
+ changeColour(true);
+ }
+ });
+
+ filtersPanel.add(filterAttribute);
+ filtersPanel.add(filterCondition);
+ filtersPanel.add(filterValue);
+ filtersPanel.add(filterAttribute2);
+ filtersPanel.add(filterCondition2);
+ filtersPanel.add(filterValue2);
+
+ return filtersPanel;
+ }
+