Add checkbox to show/hide legacy components

Initially, checkbox is not set, legacy components are not shown, and
"Legacy" column in chooser dialog table is not visible.

Toggling checkbox shows/hides legacy components and column in table
This commit is contained in:
JoePfeiffer 2022-01-23 19:07:50 -07:00
parent 5aa16cb556
commit f34686ea4e
6 changed files with 87 additions and 17 deletions

View File

@ -2023,8 +2023,10 @@ ComponentPresetChooserDialog.menu.sortAsc = Sort Ascending
ComponentPresetChooserDialog.menu.sortDesc = Sort Descending ComponentPresetChooserDialog.menu.sortDesc = Sort Descending
ComponentPresetChooserDialog.menu.units = Units ComponentPresetChooserDialog.menu.units = Units
ComponentPresetChooserDialog.checkbox.showAllCompatible = Show all compatible ComponentPresetChooserDialog.checkbox.showAllCompatible = Show all compatible
ComponentPresetChooserDialog.checkbox.showLegacyCheckBox = Show Legacy Components
ComponentPresetChooserDialog.lbl.favorites = Select to add preset to drop-down menu ComponentPresetChooserDialog.lbl.favorites = Select to add preset to drop-down menu
table.column.Favorite = Favorite table.column.Favorite = Favorite
table.column.Legacy = Legacy
table.column.Manufacturer = Manufacturer table.column.Manufacturer = Manufacturer
table.column.PartNo = Part Number table.column.PartNo = Part Number
table.column.Description = Description table.column.Description = Description

View File

@ -44,7 +44,6 @@ class ComponentPresetSetter implements Setter {
} }
List<ComponentPreset> presets = Application.getComponentPresetDao().find(manufacturerName, productNo); List<ComponentPreset> presets = Application.getComponentPresetDao().find(manufacturerName, productNo);
ComponentPreset matchingPreset = null; ComponentPreset matchingPreset = null;
for (ComponentPreset preset : presets) { for (ComponentPreset preset : presets) {
@ -53,6 +52,7 @@ class ComponentPresetSetter implements Setter {
matchingPreset = preset; matchingPreset = preset;
break; break;
} }
if (type != null && preset.getType().name().equals(type) && matchingPreset != null) { if (type != null && preset.getType().name().equals(type) && matchingPreset != null) {
// Found the first one with matching type. // Found the first one with matching type.
matchingPreset = preset; matchingPreset = preset;
@ -71,4 +71,4 @@ class ComponentPresetSetter implements Setter {
setMethod.invoke(c, matchingPreset); setMethod.invoke(c, matchingPreset);
} }
} }

View File

@ -377,6 +377,9 @@ public class ComponentPreset implements Comparable<ComponentPreset>, Serializabl
}); });
for (TypedKey<?> key : keys) { for (TypedKey<?> key : keys) {
if (key == ComponentPreset.LEGACY) {
continue;
}
Object value = properties.get(key); Object value = properties.get(key);

View File

@ -49,7 +49,9 @@ public class ComponentPresetChooserDialog extends JDialog {
private JTextField filterText; private JTextField filterText;
private JCheckBox foreDiameterFilterCheckBox; private JCheckBox foreDiameterFilterCheckBox;
private JCheckBox aftDiameterFilterCheckBox; private JCheckBox aftDiameterFilterCheckBox;
private JCheckBox showLegacyCheckBox;
private ComponentPresetRowFilter legacyFilter;
private ComponentPresetRowFilter foreDiameterFilter; private ComponentPresetRowFilter foreDiameterFilter;
private ComponentPresetRowFilter aftDiameterFilter; private ComponentPresetRowFilter aftDiameterFilter;
@ -58,6 +60,7 @@ public class ComponentPresetChooserDialog extends JDialog {
* outerDiamtereColumnIndex is the index of the column associated with the OUTER_DIAMETER * outerDiamtereColumnIndex is the index of the column associated with the OUTER_DIAMETER
* field. This index is needed by the matchOuterDiameterCheckBox to implement filtering. * field. This index is needed by the matchOuterDiameterCheckBox to implement filtering.
*/ */
int legacyColumnIndex = -1;
int aftDiameterColumnIndex = -1; int aftDiameterColumnIndex = -1;
int foreDiameterColumnIndex = -1; int foreDiameterColumnIndex = -1;
@ -87,6 +90,9 @@ public class ComponentPresetChooserDialog extends JDialog {
if (!displayedColumnKeys.contains(key)) { if (!displayedColumnKeys.contains(key)) {
continue; continue;
} }
if (key == ComponentPreset.LEGACY) {
legacyColumnIndex = i;
}
if (key == ComponentPreset.OUTER_DIAMETER || key == ComponentPreset.AFT_OUTER_DIAMETER) { if (key == ComponentPreset.OUTER_DIAMETER || key == ComponentPreset.AFT_OUTER_DIAMETER) {
aftDiameterColumnIndex = i; aftDiameterColumnIndex = i;
} }
@ -126,17 +132,20 @@ public class ComponentPresetChooserDialog extends JDialog {
}); });
panel.add(sub, "growx, ay 0, gapright para"); panel.add(sub, "growx, ay 0, gapright para");
// need to create componentSelectionTable before filter checkboxes,
panel.add(getFilterCheckboxes(), "wrap para"); // but add to panel after
componentSelectionTable = new ComponentPresetTable(presetType, presets, displayedColumnKeys); componentSelectionTable = new ComponentPresetTable(presetType, presets, displayedColumnKeys);
// GUIUtil.setAutomaticColumnTableWidths(componentSelectionTable, 20); // GUIUtil.setAutomaticColumnTableWidths(componentSelectionTable, 20);
int w = componentSelectionTable.getRowHeight() + 4; 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.setPreferredWidth(w);
tc.setMaxWidth(w); tc.setMaxWidth(w);
tc.setMinWidth(w); tc.setMinWidth(w);
panel.add(getFilterCheckboxes(tm, legacyColumnIndex), "wrap para");
JScrollPane scrollpane = new JScrollPane(); JScrollPane scrollpane = new JScrollPane();
scrollpane.setViewportView(componentSelectionTable); scrollpane.setViewportView(componentSelectionTable);
@ -169,10 +178,12 @@ public class ComponentPresetChooserDialog extends JDialog {
GUIUtil.rememberWindowSize(this); GUIUtil.rememberWindowSize(this);
GUIUtil.setDisposableDialogOptions(this, okButton); GUIUtil.setDisposableDialogOptions(this, okButton);
updateFilters();
} }
private JPanel getFilterCheckboxes() { private JPanel getFilterCheckboxes(XTableColumnModel tm, int legacyColumnIndex) {
JPanel panel = new JPanel(new MigLayout("ins 0")); JPanel panel = new JPanel(new MigLayout("ins 0"));
/* /*
@ -194,9 +205,27 @@ public class ComponentPresetChooserDialog extends JDialog {
} }
componentSelectionTable.updateData(presets); 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) { if(component instanceof SymmetricComponent) {
final SymmetricComponent curSym = (SymmetricComponent) component; final SymmetricComponent curSym = (SymmetricComponent) component;
/* /*
@ -274,6 +303,9 @@ public class ComponentPresetChooserDialog extends JDialog {
if (foreDiameterFilterCheckBox.isSelected()) { if (foreDiameterFilterCheckBox.isSelected()) {
filters.add(foreDiameterFilter); filters.add(foreDiameterFilter);
} }
if (!showLegacyCheckBox.isSelected()) {
filters.add(legacyFilter);
}
componentSelectionTable.setRowFilter(RowFilter.andFilter(filters)); componentSelectionTable.setRowFilter(RowFilter.andFilter(filters));
} }

View File

@ -7,31 +7,45 @@ import net.sf.openrocket.unit.Value;
import net.sf.openrocket.util.MathUtil; import net.sf.openrocket.util.MathUtil;
public class ComponentPresetRowFilter extends RowFilter<TableModel, Object> { public class ComponentPresetRowFilter extends RowFilter<TableModel, Object> {
private final double value; private Boolean bvalue = false;
private double dvalue = 0.0;
private double epsilon = 0.0;
private final int column; private final int column;
private final double epsilon;
ComponentPresetRowFilter(double value, int column) { ComponentPresetRowFilter(double value, int column) {
this.value = value; this.dvalue = value;
this.column = column; this.column = column;
/* /*
* Accept 5% difference, but at least 1mm. * Accept 5% difference, but at least 1mm.
*/ */
this.epsilon = MathUtil.max(value * 0.05, 0.001); this.epsilon = MathUtil.max(value * 0.05, 0.001);
} }
ComponentPresetRowFilter(Boolean value, int column) {
this.bvalue = value;
this.column = column;
}
@Override @Override
public boolean include(RowFilter.Entry<? extends TableModel, ? extends Object> entry) { public boolean include(RowFilter.Entry<? extends TableModel, ? extends Object> entry) {
Object o = entry.getValue(column); Object o = entry.getValue(column);
if (o instanceof Value) { if (o instanceof Value) {
Value v = (Value) o; Value v = (Value) o;
return Math.abs(value - v.getValue()) < epsilon; return Math.abs(dvalue - v.getValue()) < epsilon;
} }
if (o instanceof Double) { if (o instanceof Double) {
Double d = (Double) o; 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; return true;
} }

View File

@ -126,12 +126,27 @@ public class ComponentPresetTable extends JTable {
} }
}); });
} else if ( key.getType() == Boolean.class ) {
sorter.setComparator(index, new Comparator<Boolean>() {
@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 ) { if ( visibleColumnKeys.indexOf(key) < 0 ) {
hiddenColumns.add(columns[index]); hiddenColumns.add(columns[index]);
} }
index ++; index ++;
} }
} }
this.setAutoCreateColumnsFromModel(false); this.setAutoCreateColumnsFromModel(false);
@ -165,6 +180,10 @@ public class ComponentPresetTable extends JTable {
}); });
} }
public XTableColumnModel getXColumnModel() {
return tableColumnModel;
}
public void setRowFilter( RowFilter<? super TableModel ,? super Integer> filter ) { public void setRowFilter( RowFilter<? super TableModel ,? super Integer> filter ) {
sorter.setRowFilter( filter ); sorter.setRowFilter( filter );
} }