Merge pull request #1659 from SiboVG/issue-1643
[#1643] Round motor filter panel diameter labels
This commit is contained in:
commit
db0e272a9d
@ -38,6 +38,7 @@ import net.sf.openrocket.motor.Manufacturer;
|
|||||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
|
import net.sf.openrocket.unit.Unit;
|
||||||
import net.sf.openrocket.unit.UnitGroup;
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
import net.sf.openrocket.gui.widgets.SelectColorButton;
|
import net.sf.openrocket.gui.widgets.SelectColorButton;
|
||||||
|
|
||||||
@ -64,8 +65,18 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
* updates: motorDiameters, diameterLabels
|
* updates: motorDiameters, diameterLabels
|
||||||
*/
|
*/
|
||||||
private static void scaleDiameterLabels(){
|
private static void scaleDiameterLabels(){
|
||||||
|
Unit unit = UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit();
|
||||||
for( int i = 0; i < motorDiameters.length; i++ ) {
|
for( int i = 0; i < motorDiameters.length; i++ ) {
|
||||||
diameterLabels.put( i, new JLabel(UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit().toString(motorDiameters[i])));
|
// Round the labels, because for imperial units, the labels can otherwise overlap
|
||||||
|
double diam = unit.toUnit(motorDiameters[i]);
|
||||||
|
double diamRounded = unit.round(diam * 10) / 10; // 10 multiplication for 2-decimal precision
|
||||||
|
diam = unit.fromUnit(diamRounded);
|
||||||
|
String formatted = unit.toString(diam);
|
||||||
|
// Remove the leading zero for numbers between 0 and 1
|
||||||
|
if (diamRounded > 0 && diamRounded < 1) {
|
||||||
|
formatted = formatted.substring(1);
|
||||||
|
}
|
||||||
|
diameterLabels.put( i, new JLabel(formatted));
|
||||||
}
|
}
|
||||||
diameterLabels.get( motorDiameters.length-1).setText("+");
|
diameterLabels.get( motorDiameters.length-1).setText("+");
|
||||||
}
|
}
|
||||||
@ -96,6 +107,7 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
final JSpinner maxLengthSpinner;
|
final JSpinner maxLengthSpinner;
|
||||||
final UnitSelector maxLengthUnitSelect;
|
final UnitSelector maxLengthUnitSelect;
|
||||||
private boolean limitDiameter = false;
|
private boolean limitDiameter = false;
|
||||||
|
boolean limitByLength = false;
|
||||||
private Double mountDiameter = null;
|
private Double mountDiameter = null;
|
||||||
|
|
||||||
|
|
||||||
@ -113,7 +125,7 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
List<Manufacturer> unselectedManusFromPreferences = ((SwingPreferences) Application.getPreferences()).getExcludedMotorManufacturers();
|
List<Manufacturer> unselectedManusFromPreferences = ((SwingPreferences) Application.getPreferences()).getExcludedMotorManufacturers();
|
||||||
filter.setExcludedManufacturers(unselectedManusFromPreferences);
|
filter.setExcludedManufacturers(unselectedManusFromPreferences);
|
||||||
|
|
||||||
boolean limitByLengthPref = ((SwingPreferences) Application.getPreferences()).getBoolean("motorFilterLimitLength", false);
|
limitByLength = ((SwingPreferences) Application.getPreferences()).getBoolean("motorFilterLimitLength", false);
|
||||||
limitDiameter = ((SwingPreferences) Application.getPreferences()).getBoolean("motorFilterLimitDiameter", false);
|
limitDiameter = ((SwingPreferences) Application.getPreferences()).getBoolean("motorFilterLimitDiameter", false);
|
||||||
|
|
||||||
//// Hide used motor files
|
//// Hide used motor files
|
||||||
@ -239,9 +251,10 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
// Motor Dimension selection
|
// Motor Dimension selection
|
||||||
{
|
{
|
||||||
sub.add( new JLabel(trans.get("TCMotorSelPan.Diameter")), "split 2, wrap");
|
sub.add( new JLabel(trans.get("TCMotorSelPan.Diameter")), "split 2, wrap");
|
||||||
limitDiameterCheckBox = new JCheckBox( trans.get("TCMotorSelPan.checkbox.limitdiameter"));
|
final BooleanModel limitByDiameterModel = new BooleanModel(limitDiameter);
|
||||||
|
limitDiameterCheckBox = new JCheckBox(limitByDiameterModel);
|
||||||
|
limitDiameterCheckBox.setText(trans.get("TCMotorSelPan.checkbox.limitdiameter"));
|
||||||
GUIUtil.changeFontSize(limitDiameterCheckBox, -1);
|
GUIUtil.changeFontSize(limitDiameterCheckBox, -1);
|
||||||
limitDiameterCheckBox.setSelected(limitDiameter);
|
|
||||||
limitDiameterCheckBox.addActionListener(new ActionListener(){
|
limitDiameterCheckBox.addActionListener(new ActionListener(){
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
@ -273,12 +286,13 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
sub.add( diameterSlider, "growx, wrap");
|
sub.add( diameterSlider, "growx, wrap");
|
||||||
|
limitByDiameterModel.addEnableComponent(diameterSlider, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // length selection
|
{ // length selection
|
||||||
|
|
||||||
sub.add( new JLabel(trans.get("TCMotorSelPan.Length")), "split 2, wrap");
|
sub.add( new JLabel(trans.get("TCMotorSelPan.Length")), "split 2, wrap");
|
||||||
final BooleanModel limitByLengthModel = new BooleanModel(limitByLengthPref);
|
final BooleanModel limitByLengthModel = new BooleanModel(limitByLength);
|
||||||
limitByLengthCheckBox = new JCheckBox( limitByLengthModel );
|
limitByLengthCheckBox = new JCheckBox( limitByLengthModel );
|
||||||
limitByLengthCheckBox.setText( trans.get("TCMotorSelPan.checkbox.limitlength"));
|
limitByLengthCheckBox.setText( trans.get("TCMotorSelPan.checkbox.limitlength"));
|
||||||
GUIUtil.changeFontSize(limitByLengthCheckBox, -1);
|
GUIUtil.changeFontSize(limitByLengthCheckBox, -1);
|
||||||
@ -286,7 +300,7 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
limitByLengthCheckBox.addActionListener(new ActionListener() {
|
limitByLengthCheckBox.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
//boolean limitByLength = limitByLengthCheckBox.isSelected();
|
limitByLength = limitByLengthCheckBox.isSelected();
|
||||||
MotorFilterPanel.this.setLimitLength();
|
MotorFilterPanel.this.setLimitLength();
|
||||||
onSelectionChanged();
|
onSelectionChanged();
|
||||||
}
|
}
|
||||||
@ -326,9 +340,6 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
|
|
||||||
lengthSlider = new MultiSlider(MultiSlider.HORIZONTAL,0, 1000, 0, 1000);
|
lengthSlider = new MultiSlider(MultiSlider.HORIZONTAL,0, 1000, 0, 1000);
|
||||||
lengthSlider.setBounded(true); // thumbs cannot cross
|
lengthSlider.setBounded(true); // thumbs cannot cross
|
||||||
lengthSlider.setMajorTickSpacing(100);
|
|
||||||
lengthSlider.setPaintTicks(true);
|
|
||||||
lengthSlider.setLabelTable(diameterLabels);
|
|
||||||
lengthSlider.addChangeListener( new ChangeListener() {
|
lengthSlider.addChangeListener( new ChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void stateChanged(ChangeEvent e) {
|
public void stateChanged(ChangeEvent e) {
|
||||||
@ -371,7 +382,6 @@ public abstract class MotorFilterPanel extends JPanel {
|
|||||||
minLengthUnitSelect.setSelectedUnit(UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit());
|
minLengthUnitSelect.setSelectedUnit(UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit());
|
||||||
maxLengthUnitSelect.setSelectedUnit(UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit());
|
maxLengthUnitSelect.setSelectedUnit(UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit());
|
||||||
|
|
||||||
boolean limitByLength = limitByLengthCheckBox.isSelected();
|
|
||||||
((SwingPreferences) Application.getPreferences()).putBoolean("motorFilterLimitLength", limitByLength);
|
((SwingPreferences) Application.getPreferences()).putBoolean("motorFilterLimitLength", limitByLength);
|
||||||
if ( mountLength != null & limitByLength ) {
|
if ( mountLength != null & limitByLength ) {
|
||||||
lengthSlider.setValueAt(1, (int) Math.min(1000,Math.round(1000*mountLength)));
|
lengthSlider.setValueAt(1, (int) Math.min(1000,Math.round(1000*mountLength)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user