Added a filter on all columns. Uses case insensitive match with unicode folding...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Thu, 12 Apr 2012 04:52:32 +0000 (04:52 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Thu, 12 Apr 2012 04:52:32 +0000 (04:52 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@540 180e2498-e6e9-4542-8430-84ac67f01cd8

core/resources/l10n/messages.properties
core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java

index 471e5d08cb6a0146135ebd986ffa0856dd6ff777..0268342a388b730334eb3a69856eb22e8fc18ebd 100644 (file)
@@ -1590,6 +1590,7 @@ PresetModel.lbl.database = From database...
 
 ! Component Preset Chooser Dialog
 ComponentPresetChooserDialog.title = Choose component preset
+ComponentPresetChooserDialog.filter.label = Filter:
 table.column.Manufacturer = Manufacturer
 table.column.PartNo = Part Number
 table.column.OuterDiameter = Outer Diameter
index d501f7e8378bff43a6830c2524654ba1df5f13af..fc0fb8272ecd1661c0354d86cc8ac830ef6e2de1 100644 (file)
@@ -9,10 +9,15 @@ import java.util.List;
 
 import javax.swing.JButton;
 import javax.swing.JDialog;
+import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
+import javax.swing.JTextField;
 import javax.swing.ListSelectionModel;
+import javax.swing.RowFilter;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
 import javax.swing.table.TableModel;
 import javax.swing.table.TableRowSorter;
 
@@ -32,6 +37,9 @@ public class ComponentPresetChooserDialog extends JDialog {
        private static final Translator trans = Application.getTranslator();
        
        private final JTable componentSelectionTable;
+       private final TableRowSorter<TableModel> sorter;
+       private final JTextField filterText;
+       
        private final List<ComponentPreset> presets;
        
        private boolean okClicked = false;
@@ -45,6 +53,24 @@ public class ComponentPresetChooserDialog extends JDialog {
                presets = Application.getComponentPresetDao().listAll();
                
                JPanel panel = new JPanel(new MigLayout("fill"));
+               JLabel filterLabel = new JLabel(trans.get("ComponentPresetChooserDialog.filter.label"));
+               panel.add(filterLabel);
+               filterText = new JTextField(15);
+               panel.add(filterText,"growx, growy 0, wrap");
+               filterText.getDocument().addDocumentListener(new DocumentListener() {
+                       @Override
+                       public void changedUpdate(DocumentEvent e) {
+                               newFilter(filterText.getText());
+                       }
+                       @Override
+                       public void insertUpdate(DocumentEvent e) {
+                               newFilter(filterText.getText());
+                       }
+                       @Override
+                       public void removeUpdate(DocumentEvent e) {
+                               newFilter(filterText.getText());
+                       }
+               });
                
                final Column[] columns = new Column[columnKeys.length+1];
                
@@ -97,12 +123,7 @@ public class ComponentPresetChooserDialog extends JDialog {
                
                componentSelectionTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
-               final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
-               // FIXME we might need some custom sorters.
-               /*for (int i = 0; i < columnKeys.length; i++) {
-                       TypedKey<?> column = columnKeys[i];
-                       sorter.setComparator(i, column.getComparator());
-               }*/
+               sorter = new TableRowSorter<TableModel>(tableModel);
                componentSelectionTable.setRowSorter(sorter);
 
                JScrollPane scrollpane = new JScrollPane();
@@ -164,4 +185,15 @@ public class ComponentPresetChooserDialog extends JDialog {
                this.setVisible(false);
        }
        
+       private void newFilter(String regex) {
+               RowFilter<TableModel,Object> filter = null;
+               try {
+                       // The "(?iu)" magic turns on case insensitivity with unicode chars
+                       filter = RowFilter.regexFilter("(?iu)"+regex);
+               } catch ( java.util.regex.PatternSyntaxException e ) {
+                       // FIXME - do we want to remove the filter?
+                       return;
+               }
+               sorter.setRowFilter(filter);
+       }
 }