diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index c878c8a81..15d544fa3 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -2023,8 +2023,10 @@ ComponentPresetChooserDialog.menu.sortAsc = Sort Ascending ComponentPresetChooserDialog.menu.sortDesc = Sort Descending ComponentPresetChooserDialog.menu.units = Units ComponentPresetChooserDialog.checkbox.showAllCompatible = Show all compatible +ComponentPresetChooserDialog.checkbox.showLegacyCheckBox = Show Legacy Components ComponentPresetChooserDialog.lbl.favorites = Select to add preset to drop-down menu table.column.Favorite = Favorite +table.column.Legacy = Legacy table.column.Manufacturer = Manufacturer table.column.PartNo = Part Number table.column.Description = Description diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java b/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java index dead76d17..8a10be1d7 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java @@ -44,7 +44,6 @@ class ComponentPresetSetter implements Setter { } List presets = Application.getComponentPresetDao().find(manufacturerName, productNo); - ComponentPreset matchingPreset = null; for (ComponentPreset preset : presets) { @@ -53,6 +52,7 @@ class ComponentPresetSetter implements Setter { matchingPreset = preset; break; } + if (type != null && preset.getType().name().equals(type) && matchingPreset != null) { // Found the first one with matching type. matchingPreset = preset; @@ -71,4 +71,4 @@ class ComponentPresetSetter implements Setter { setMethod.invoke(c, matchingPreset); } -} \ No newline at end of file +} diff --git a/core/src/net/sf/openrocket/preset/ComponentPreset.java b/core/src/net/sf/openrocket/preset/ComponentPreset.java index 75568d696..46df68c88 100644 --- a/core/src/net/sf/openrocket/preset/ComponentPreset.java +++ b/core/src/net/sf/openrocket/preset/ComponentPreset.java @@ -377,6 +377,9 @@ public class ComponentPreset implements Comparable, Serializabl }); for (TypedKey key : keys) { + if (key == ComponentPreset.LEGACY) { + continue; + } Object value = properties.get(key); diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java index 8c98bfb57..237155d42 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java @@ -49,7 +49,9 @@ public class ComponentPresetChooserDialog extends JDialog { private JTextField filterText; private JCheckBox foreDiameterFilterCheckBox; private JCheckBox aftDiameterFilterCheckBox; - + private JCheckBox showLegacyCheckBox; + + private ComponentPresetRowFilter legacyFilter; private ComponentPresetRowFilter foreDiameterFilter; private ComponentPresetRowFilter aftDiameterFilter; @@ -58,6 +60,7 @@ public class ComponentPresetChooserDialog extends JDialog { * outerDiamtereColumnIndex is the index of the column associated with the OUTER_DIAMETER * field. This index is needed by the matchOuterDiameterCheckBox to implement filtering. */ + int legacyColumnIndex = -1; int aftDiameterColumnIndex = -1; int foreDiameterColumnIndex = -1; @@ -87,6 +90,9 @@ public class ComponentPresetChooserDialog extends JDialog { if (!displayedColumnKeys.contains(key)) { continue; } + if (key == ComponentPreset.LEGACY) { + legacyColumnIndex = i; + } if (key == ComponentPreset.OUTER_DIAMETER || key == ComponentPreset.AFT_OUTER_DIAMETER) { aftDiameterColumnIndex = i; } @@ -126,17 +132,20 @@ public class ComponentPresetChooserDialog extends JDialog { }); panel.add(sub, "growx, ay 0, gapright para"); - - - panel.add(getFilterCheckboxes(), "wrap para"); - + + // need to create componentSelectionTable before filter checkboxes, + // but add to panel after componentSelectionTable = new ComponentPresetTable(presetType, presets, displayedColumnKeys); // GUIUtil.setAutomaticColumnTableWidths(componentSelectionTable, 20); int w = componentSelectionTable.getRowHeight() + 4; - TableColumn tc = componentSelectionTable.getColumnModel().getColumn(0); + XTableColumnModel tm = componentSelectionTable.getXColumnModel(); + //TableColumn tc = componentSelectionTable.getColumnModel().getColumn(0); + TableColumn tc = tm.getColumn(0); tc.setPreferredWidth(w); tc.setMaxWidth(w); tc.setMinWidth(w); + + panel.add(getFilterCheckboxes(tm, legacyColumnIndex), "wrap para"); JScrollPane scrollpane = new JScrollPane(); scrollpane.setViewportView(componentSelectionTable); @@ -169,10 +178,12 @@ public class ComponentPresetChooserDialog extends JDialog { GUIUtil.rememberWindowSize(this); GUIUtil.setDisposableDialogOptions(this, okButton); + + updateFilters(); } - private JPanel getFilterCheckboxes() { + private JPanel getFilterCheckboxes(XTableColumnModel tm, int legacyColumnIndex) { JPanel panel = new JPanel(new MigLayout("ins 0")); /* @@ -194,9 +205,27 @@ public class ComponentPresetChooserDialog extends JDialog { } componentSelectionTable.updateData(presets); } - }); + }); } + /* + * Add legacy component filter checkbox + */ + TableColumn legacyColumn = tm.getColumn(legacyColumnIndex); + tm.setColumnVisible(legacyColumn, false); + legacyFilter = new ComponentPresetRowFilter(false, legacyColumnIndex); + showLegacyCheckBox = new JCheckBox(); + showLegacyCheckBox.setText(trans.get("ComponentPresetChooserDialog.checkbox.showLegacyCheckBox")); + panel.add(showLegacyCheckBox, "wrap"); + + showLegacyCheckBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + updateFilters(); + tm.setColumnVisible(legacyColumn, showLegacyCheckBox.isSelected()); + } + }); + if(component instanceof SymmetricComponent) { final SymmetricComponent curSym = (SymmetricComponent) component; /* @@ -274,6 +303,9 @@ public class ComponentPresetChooserDialog extends JDialog { if (foreDiameterFilterCheckBox.isSelected()) { filters.add(foreDiameterFilter); } + if (!showLegacyCheckBox.isSelected()) { + filters.add(legacyFilter); + } componentSelectionTable.setRowFilter(RowFilter.andFilter(filters)); } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java index 7c66aa136..7be37dc5e 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java @@ -7,31 +7,45 @@ import net.sf.openrocket.unit.Value; import net.sf.openrocket.util.MathUtil; public class ComponentPresetRowFilter extends RowFilter { - - private final double value; + + private Boolean bvalue = false; + private double dvalue = 0.0; + private double epsilon = 0.0; private final int column; - private final double epsilon; ComponentPresetRowFilter(double value, int column) { - this.value = value; + this.dvalue = value; this.column = column; /* * Accept 5% difference, but at least 1mm. */ this.epsilon = MathUtil.max(value * 0.05, 0.001); } + + ComponentPresetRowFilter(Boolean value, int column) { + this.bvalue = value; + this.column = column; + } + @Override public boolean include(RowFilter.Entry entry) { Object o = entry.getValue(column); if (o instanceof Value) { Value v = (Value) o; - return Math.abs(value - v.getValue()) < epsilon; + return Math.abs(dvalue - v.getValue()) < epsilon; } + if (o instanceof Double) { Double d = (Double) o; - return Math.abs(value - d) < epsilon; + return Math.abs(dvalue - d) < epsilon; } + + if (o instanceof Boolean) { + Boolean b = (Boolean) o; + return b.equals(bvalue); + } + return true; } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java index 5a3be9ed5..e7ee2db32 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java @@ -126,12 +126,27 @@ public class ComponentPresetTable extends JTable { } }); + } else if ( key.getType() == Boolean.class ) { + sorter.setComparator(index, new Comparator() { + + @Override + public int compare(Boolean b1, Boolean b2) { + if (b1 && !b2) { + return 1; + } else if (!b1 && b2) { + return -1; + } else { + return 0; + } + } + }); } + if ( visibleColumnKeys.indexOf(key) < 0 ) { hiddenColumns.add(columns[index]); } index ++; - } + } } this.setAutoCreateColumnsFromModel(false); @@ -165,6 +180,10 @@ public class ComponentPresetTable extends JTable { }); } + public XTableColumnModel getXColumnModel() { + return tableColumnModel; + } + public void setRowFilter( RowFilter filter ) { sorter.setRowFilter( filter ); }