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.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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user