import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
private static final int BELOW_THRESHOLD_OPTION = 2;
+ private static final DecimalFormat DECFMT_2_2 = new DecimalFormat(
+ "##.##");
+
/*
* FeatureRenderer holds colour scheme and filters for feature types
*/
* and an empty filter for the user to populate (add)
*/
KeyedMatcherI noFilter = new KeyedMatcher(Condition.values()[0], "",
- (String) null);
+ (String[]) null);
filters.add(noFilter);
/*
*/
populateConditions((String) attCombo.getSelectedItem(), cond,
condCombo);
+ condCombo.setPreferredSize(new Dimension(150, 20));
condCombo.addItemListener(itemListener);
filterRow.add(condCombo);
filterRow.add(patternField);
/*
+ * disable pattern field for condition 'Present / NotPresent'
+ */
+ Condition selectedCondition = (Condition) condCombo.getSelectedItem();
+ if (selectedCondition == Condition.Present
+ || selectedCondition == Condition.NotPresent)
+ {
+ patternField.setEnabled(false);
+ }
+
+ /*
+ * if a numeric condition is selected, show the value range
+ * as a tooltip on the value input field
+ */
+ if (selectedCondition.isNumeric())
+ {
+ float[] minMax = FeatureAttributes.getInstance()
+ .getMinMax(featureType, attName);
+ if (minMax != null)
+ {
+ String tip = String.format("(%s - %s)",
+ DECFMT_2_2.format(minMax[0]), DECFMT_2_2.format(minMax[1]));
+ patternField.setToolTipText(tip);
+ }
+ }
+
+ /*
* add remove button if filter is populated (non-empty pattern)
*/
if (pattern != null && pattern.trim().length() > 0)
* Answers true unless a numeric condition has been selected with a non-numeric
* value. Sets the value field to RED with a tooltip if in error.
* <p>
- * If the pattern entered is empty, this method returns false, but does not mark
- * the field as invalid. This supports selecting an attribute for a new
+ * If the pattern is expected but is empty, this method returns false, but does
+ * not mark the field as invalid. This supports selecting an attribute for a new
* condition before a match pattern has been entered.
*
* @param value
}
Condition cond = (Condition) condCombo.getSelectedItem();
+ if (cond == Condition.Present || cond == Condition.NotPresent)
+ {
+ return true;
+ }
+
value.setBackground(Color.white);
value.setToolTipText("");
String v1 = value.getText().trim();
for (KeyedMatcherI filter : filters)
{
String pattern = filter.getMatcher().getPattern();
- if (pattern.trim().length() > 0)
+ Condition condition = filter.getMatcher().getCondition();
+ if (pattern.trim().length() > 0 || condition == Condition.Present
+ || condition == Condition.NotPresent)
{
if (anded)
{