Improve height sliders of Rail Button config

Make it linear + dynamic changing of max/min value
This commit is contained in:
SiboVG 2022-12-10 19:57:45 +01:00
parent e19deecf94
commit 8c150299bc
3 changed files with 53 additions and 8 deletions

View File

@ -126,7 +126,7 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
}
this.baseHeight_m = Math.max(newBaseHeight, 0);
this.baseHeight_m = Math.min(this.baseHeight_m, this.totalHeight_m - this.flangeHeight_m);
this.baseHeight_m = Math.min(this.baseHeight_m, getMaxBaseHeight());
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
@ -139,11 +139,36 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
}
this.flangeHeight_m = Math.max(newFlangeHeight, 0);
this.flangeHeight_m = Math.min(this.flangeHeight_m, this.totalHeight_m - this.baseHeight_m);
this.flangeHeight_m = Math.min(this.flangeHeight_m, getMaxFlangeHeight());
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setTotalHeight(double newHeight ) {
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {
((RailButton) listener).setTotalHeight(newHeight);
}
}
this.totalHeight_m = Math.max(newHeight, getMinTotalHeight());
clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public double getMaxBaseHeight() {
return this.totalHeight_m - this.flangeHeight_m;
}
public double getMaxFlangeHeight() {
return this.totalHeight_m - this.baseHeight_m;
}
public double getMinTotalHeight() {
return this.baseHeight_m + this.flangeHeight_m;
}
public void setScrewHeight(double height) {
for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) {

View File

@ -220,6 +220,19 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
quad2 = quad1 = quad0 = 0; // Not used
}
public ValueSliderModel(DoubleModel min, double max) {
this.islinear = true;
linearPosition = 1.0;
this.min = min;
this.mid = new DoubleModel(max); // Never use exponential scale
this.max = new DoubleModel(max);
min.addChangeListener(this);
quad2 = quad1 = quad0 = 0; // Not used
}
@ -443,6 +456,10 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
public BoundedRangeModel getSliderModel(double min, DoubleModel max) {
return new ValueSliderModel(min, max);
}
public BoundedRangeModel getSliderModel(DoubleModel min, double max) {
return new ValueSliderModel(min, max);
}
public BoundedRangeModel getSliderModel(double min, double mid, double max) {
return new ValueSliderModel(min, mid, max);

View File

@ -55,7 +55,7 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(ODSpinner, "growx");
order.add(((SpinnerEditor) ODSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(ODModel), "growx");
panel.add(new BasicSlider(ODModel.getSliderModel(0, 0.001, 0.02)), "w 100lp, wrap");
panel.add(new BasicSlider(ODModel.getSliderModel(0, 0.02)), "w 100lp, wrap");
}
{ //// Inner Diameter
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.InnerDiam")));
@ -65,7 +65,7 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(IDSpinner, "growx");
order.add(((SpinnerEditor) IDSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(IDModel), "growx");
panel.add(new BasicSlider(IDModel.getSliderModel(0, 0.001, 0.02)), "w 100lp, wrap para");
panel.add(new BasicSlider(IDModel.getSliderModel(0, 0.02)), "w 100lp, wrap para");
}
{ //// Base Height
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.BaseHeight")));
@ -75,7 +75,8 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx");
panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.001, 0.02)), "w 100lp, wrap");
panel.add(new BasicSlider(heightModel.getSliderModel(0, new DoubleModel(component, "MaxBaseHeight", UnitGroup.UNITS_LENGTH))),
"w 100lp, wrap");
}
{ //// Flange Height
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.FlangeHeight")));
@ -85,9 +86,10 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx");
panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.001, 0.02)), "w 100lp, wrap");
panel.add(new BasicSlider(heightModel.getSliderModel(0, new DoubleModel(component, "MaxFlangeHeight", UnitGroup.UNITS_LENGTH))),
"w 100lp, wrap");
}
{ //// Height
{ //// Total Height
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.TotalHeight")));
DoubleModel heightModel = new DoubleModel(component, "TotalHeight", UnitGroup.UNITS_LENGTH, 0);
JSpinner heightSpinner = new JSpinner(heightModel.getSpinnerModel());
@ -95,7 +97,8 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx");
panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.001, 0.02)), "w 100lp, wrap para");
panel.add(new BasicSlider(heightModel.getSliderModel(new DoubleModel(component, "MinTotalHeight", UnitGroup.UNITS_LENGTH), 0.02)),
"w 100lp, wrap para");
}
{ //// Angular Position: