Skip to content

Commit 630f021

Browse files
jkbelcherworldveil
andauthored
Visual indicator on UserPresets knob when there are no presets (#778)
* Bug fix: suppress command engine with UIOffairParameter * Visual indicator on UserPresets knob when there are no presets * Use relative increment mode for OffAir parameters --------- Co-authored-by: Will Drevo <worldveil@users.noreply.github.com>
1 parent a38bd4f commit 630f021

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

te-app/src/main/java/titanicsend/model/justin/LXVirtualDiscreteParameter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,15 @@ public LXVirtualDiscreteParameter<T> setParameter(T parameter) {
5757
public LXVirtualDiscreteParameter<T> setParameter(T parameter, boolean fireImmediately) {
5858
if (this.parameter != null) {
5959
this.parameter.removeListener(realParameterListener);
60+
this.parameter.optionsChanged.removeListener(this.realOptionsChangedListener);
6061
if (this.parameter instanceof DisposableParameter) {
6162
((DisposableParameter) this.parameter).unlistenDispose(disposeParameterListener);
6263
}
6364
}
6465
this.parameter = parameter;
6566
if (this.parameter != null) {
6667
this.parameter.addListener(realParameterListener);
68+
this.parameter.optionsChanged.addListener(this.realOptionsChangedListener);
6769
if (this.parameter instanceof DisposableParameter) {
6870
((DisposableParameter) this.parameter).listenDispose(disposeParameterListener);
6971
}
@@ -79,6 +81,11 @@ public LXVirtualDiscreteParameter<T> setParameter(T parameter, boolean fireImmed
7981
onRealParameterChanged();
8082
};
8183

84+
private final LXParameterListener realOptionsChangedListener =
85+
(p) -> {
86+
onRealOptionsChanged();
87+
};
88+
8289
private final DisposeListener disposeParameterListener =
8390
(p) -> {
8491
onRealParameterDisposed();
@@ -88,8 +95,14 @@ protected void onRealParameterChanged() {
8895
bang();
8996
}
9097

98+
protected void onRealOptionsChanged() {
99+
// Relay optionsChanged event
100+
this.optionsChanged.bang();
101+
}
102+
91103
protected void onRealParameterDisposed() {
92104
this.parameter.removeListener(realParameterListener);
105+
this.parameter.optionsChanged.removeListener(this.realOptionsChangedListener);
93106
this.parameter = null;
94107
}
95108

te-app/src/main/java/titanicsend/parameter/OffairDiscreteParameter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class OffairDiscreteParameter extends LXVirtualDiscreteParameter<Discrete
1818

1919
public OffairDiscreteParameter(String label, DiscreteParameter parameter) {
2020
super(label, parameter);
21+
this.setIncrementMode(IncrementMode.RELATIVE);
2122
}
2223

2324
/**

te-app/src/main/java/titanicsend/parameter/UIOffairDiscreteParameter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import heronarts.glx.ui.UI;
44
import heronarts.glx.ui.component.UIKnob;
55
import heronarts.lx.parameter.LXParameter;
6+
import heronarts.lx.parameter.LXParameterListener;
67
import heronarts.lx.studio.ui.device.UIDeviceControls;
78

89
public class UIOffairDiscreteParameter extends UIKnob
@@ -18,5 +19,13 @@ public UIOffairDiscreteParameter(
1819

1920
// There's an issue when this wraps a preset selector. It needs to not use the command engine.
2021
setUseCommandEngine(false);
22+
23+
// For visual aid, disable if there is only one option
24+
LXParameterListener optionsChangedListener =
25+
(p) -> {
26+
setEditable(parameter.getOptions().length > 1);
27+
redraw();
28+
};
29+
addListener(parameter.optionsChanged, optionsChangedListener, true);
2130
}
2231
}

0 commit comments

Comments
 (0)