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:
parent
5aa16cb556
commit
f34686ea4e
@ -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
|
||||
|
@ -44,7 +44,6 @@ class ComponentPresetSetter implements Setter {
|
||||
}
|
||||
|
||||
List<ComponentPreset> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -377,6 +377,9 @@ public class ComponentPreset implements Comparable<ComponentPreset>, Serializabl
|
||||
});
|
||||
|
||||
for (TypedKey<?> key : keys) {
|
||||
if (key == ComponentPreset.LEGACY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Object value = properties.get(key);
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -7,31 +7,45 @@ import net.sf.openrocket.unit.Value;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
|
||||
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 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<? extends TableModel, ? extends Object> 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;
|
||||
}
|
||||
|
||||
|
@ -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 ) {
|
||||
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<? super TableModel ,? super Integer> filter ) {
|
||||
sorter.setRowFilter( filter );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user