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.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(); clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); 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.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(); clearPreset();
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); 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) { public void setScrewHeight(double height) {
for (RocketComponent listener : configListeners) { for (RocketComponent listener : configListeners) {
if (listener instanceof RailButton) { if (listener instanceof RailButton) {

View File

@ -221,6 +221,19 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
quad2 = quad1 = quad0 = 0; // Not used 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
}
/** /**
@ -444,6 +457,10 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
return new ValueSliderModel(min, 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) { public BoundedRangeModel getSliderModel(double min, double mid, double max) {
return new ValueSliderModel(min, mid, max); return new ValueSliderModel(min, mid, max);
} }

View File

@ -55,7 +55,7 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(ODSpinner, "growx"); panel.add(ODSpinner, "growx");
order.add(((SpinnerEditor) ODSpinner.getEditor()).getTextField()); order.add(((SpinnerEditor) ODSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(ODModel), "growx"); 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 { //// Inner Diameter
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.InnerDiam"))); panel.add(new JLabel(trans.get("RailBtnCfg.lbl.InnerDiam")));
@ -65,7 +65,7 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(IDSpinner, "growx"); panel.add(IDSpinner, "growx");
order.add(((SpinnerEditor) IDSpinner.getEditor()).getTextField()); order.add(((SpinnerEditor) IDSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(IDModel), "growx"); 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 { //// Base Height
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.BaseHeight"))); panel.add(new JLabel(trans.get("RailBtnCfg.lbl.BaseHeight")));
@ -75,7 +75,8 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx"); panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField()); order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx"); 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 { //// Flange Height
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.FlangeHeight"))); panel.add(new JLabel(trans.get("RailBtnCfg.lbl.FlangeHeight")));
@ -85,9 +86,10 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx"); panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField()); order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx"); 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"))); panel.add(new JLabel(trans.get("RailBtnCfg.lbl.TotalHeight")));
DoubleModel heightModel = new DoubleModel(component, "TotalHeight", UnitGroup.UNITS_LENGTH, 0); DoubleModel heightModel = new DoubleModel(component, "TotalHeight", UnitGroup.UNITS_LENGTH, 0);
JSpinner heightSpinner = new JSpinner(heightModel.getSpinnerModel()); JSpinner heightSpinner = new JSpinner(heightModel.getSpinnerModel());
@ -95,7 +97,8 @@ public class RailButtonConfig extends RocketComponentConfig {
panel.add(heightSpinner, "growx"); panel.add(heightSpinner, "growx");
order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField()); order.add(((SpinnerEditor) heightSpinner.getEditor()).getTextField());
panel.add(new UnitSelector(heightModel), "growx"); 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: { //// Angular Position: