From: kruland2607 Date: Thu, 12 Apr 2012 04:52:32 +0000 (+0000) Subject: Added a filter on all columns. Uses case insensitive match with unicode folding... X-Git-Tag: upstream/12.09^2~374 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=3f034fb6a4ad06e0287393866c82879d29f7d9ed;p=debian%2Fopenrocket Added a filter on all columns. Uses case insensitive match with unicode folding so it should work fine in Turkey. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@540 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 471e5d08..0268342a 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -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 diff --git a/core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java b/core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java index d501f7e8..fc0fb827 100644 --- a/core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java +++ b/core/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java @@ -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 sorter; + private final JTextField filterText; + private final List 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 sorter = new TableRowSorter(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); 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 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); + } }