Live Data progress: using field's context
This commit is contained in:
parent
8be592f3d4
commit
2a8998f548
|
@ -264,6 +264,7 @@ DISPLAY(DISPLAY_IF(hasEtbPedalPositionSensor))
|
||||||
|
|
||||||
DISPLAY_TEXT(Pedal);
|
DISPLAY_TEXT(Pedal);
|
||||||
DISPLAY_SENSOR(PPS);
|
DISPLAY_SENSOR(PPS);
|
||||||
|
DISPLAY(DISPLAY_CONFIG(throttlePedalPositionAdcChannel));
|
||||||
DISPLAY_TEXT(eol);
|
DISPLAY_TEXT(eol);
|
||||||
|
|
||||||
DISPLAY_STATE(ETB_pid)
|
DISPLAY_STATE(ETB_pid)
|
||||||
|
|
|
@ -7,10 +7,10 @@ import java.util.Objects;
|
||||||
* <p>
|
* <p>
|
||||||
* (c) Andrey Belomutskiy 2013-2019
|
* (c) Andrey Belomutskiy 2013-2019
|
||||||
*/
|
*/
|
||||||
public class StateId {
|
public class LiveDataContext {
|
||||||
private final int id;
|
private final int id;
|
||||||
|
|
||||||
public StateId(int id) {
|
public LiveDataContext(int id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ public class StateId {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "StateId{" +
|
return "LiveDataContext{" +
|
||||||
"id=" + id +
|
"id=" + id +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ public class StateId {
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
StateId stateId = (StateId) o;
|
LiveDataContext stateId = (LiveDataContext) o;
|
||||||
return id == stateId.id;
|
return id == stateId.id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,27 +3,29 @@ package com.rusefi.ui.livedocs;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||||
import com.rusefi.config.Field;
|
import com.rusefi.config.Field;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class LiveDocHolder {
|
public abstract class LiveDocHolder {
|
||||||
private final StateId id;
|
private final LiveDataContext id;
|
||||||
private final List<RefreshActions> actions;
|
private final RefreshActionsMap actions;
|
||||||
private final Field[] values;
|
private final Field[] values;
|
||||||
|
|
||||||
public LiveDocHolder(StateId id, List<RefreshActions> actions, Field[] values) {
|
public LiveDocHolder(LiveDataContext id, com.rusefi.ui.livedocs.RefreshActionsMap actions, Field[] values) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.actions = actions;
|
this.actions = actions;
|
||||||
this.values = values;
|
this.values = values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(BinaryProtocol binaryProtocol, byte[] response) {
|
public RefreshActionsMap getActions() {
|
||||||
for (RefreshActions action : actions)
|
return actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(BinaryProtocol binaryProtocol, LiveDataContext context, byte[] response) {
|
||||||
|
for (RefreshActions action : actions.getActions().get(context))
|
||||||
action.refresh(binaryProtocol, response);
|
action.refresh(binaryProtocol, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract boolean isVisible();
|
public abstract boolean isVisible();
|
||||||
|
|
||||||
public StateId getId() {
|
public LiveDataContext getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,13 +27,15 @@ public enum LiveDocsRegistry {
|
||||||
boolean visible = holder.isVisible();
|
boolean visible = holder.isVisible();
|
||||||
System.out.println(holder + ": is_visible=" + visible);
|
System.out.println(holder + ": is_visible=" + visible);
|
||||||
if (visible) {
|
if (visible) {
|
||||||
refresh(binaryProtocol, holder);
|
for (LiveDataContext context : holder.getActions().getActions().keySet()) {
|
||||||
|
refresh(binaryProtocol, holder, context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refresh(BinaryProtocol binaryProtocol, LiveDocHolder holder) {
|
private void refresh(BinaryProtocol binaryProtocol, LiveDocHolder holder, LiveDataContext context) {
|
||||||
int liveDocRequestId = holder.getId().getId();
|
int liveDocRequestId = context.getId();
|
||||||
int size = holder.getStructSize();
|
int size = holder.getStructSize();
|
||||||
|
|
||||||
byte packet[] = new byte[5];
|
byte packet[] = new byte[5];
|
||||||
|
@ -49,6 +51,6 @@ public enum LiveDocsRegistry {
|
||||||
|
|
||||||
System.arraycopy(responseWithCode, 1, response, 0, size);
|
System.arraycopy(responseWithCode, 1, response, 0, size);
|
||||||
|
|
||||||
holder.update(binaryProtocol, response);
|
holder.update(binaryProtocol, context, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.rusefi.ui.livedocs;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class RefreshActionsMap {
|
||||||
|
private final Map<LiveDataContext, List<RefreshActions>> actions = new HashMap<>();
|
||||||
|
|
||||||
|
public void put(LiveDataContext context, RefreshActions refreshAction) {
|
||||||
|
actions.putIfAbsent(context, new ArrayList<>());
|
||||||
|
actions.get(context).add(refreshAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addAll(RefreshActionsMap actions) {
|
||||||
|
for (Map.Entry<LiveDataContext, List<RefreshActions>> e : actions.actions.entrySet()) {
|
||||||
|
for (RefreshActions action : e.getValue())
|
||||||
|
put(e.getKey(), action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<LiveDataContext, List<RefreshActions>> getActions() {
|
||||||
|
return actions;
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,8 @@ import com.rusefi.config.generated.EngineState;
|
||||||
import com.rusefi.config.generated.Fields;
|
import com.rusefi.config.generated.Fields;
|
||||||
import com.rusefi.config.generated.PidState;
|
import com.rusefi.config.generated.PidState;
|
||||||
import com.rusefi.config.generated.TriggerState;
|
import com.rusefi.config.generated.TriggerState;
|
||||||
|
import com.rusefi.ui.livedocs.LiveDataContext;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -26,25 +28,35 @@ public enum StateDictionary {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Field[] getValue(String state) {
|
public Field[] getValue(String state) {
|
||||||
String indexFieldName = "LDS_" + state.toUpperCase() + "_STATE_INDEX";
|
String indexFieldName = getContextIndexFieldName(state);
|
||||||
java.lang.reflect.Field field = null;
|
LiveDataContext indexValue = getStateContext(indexFieldName);
|
||||||
try {
|
Field[] result = map.get(indexValue.getId());
|
||||||
field = Fields.class.getField(indexFieldName);
|
|
||||||
} catch (NoSuchFieldException e) {
|
|
||||||
throw new IllegalStateException(e);
|
|
||||||
}
|
|
||||||
Objects.requireNonNull(field, "Field " + indexFieldName);
|
|
||||||
int indexValue;
|
|
||||||
try {
|
|
||||||
indexValue = (int) field.get(null);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
throw new IllegalStateException(e);
|
|
||||||
}
|
|
||||||
Field[] result = map.get(indexValue);
|
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
throw new IllegalStateException("Nothing for " + indexFieldName + "/" + indexValue);
|
throw new IllegalStateException("Nothing for " + indexFieldName + "/" + indexValue);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static String getContextIndexFieldName(String state) {
|
||||||
|
return "LDS_" + state.toUpperCase() + "_STATE_INDEX";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LiveDataContext getStateContext(String contextIndexFieldName) {
|
||||||
|
java.lang.reflect.Field field;
|
||||||
|
try {
|
||||||
|
field = Fields.class.getField(contextIndexFieldName);
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
throw new IllegalStateException(e);
|
||||||
|
}
|
||||||
|
Objects.requireNonNull(field, "Field " + contextIndexFieldName);
|
||||||
|
int indexValue;
|
||||||
|
try {
|
||||||
|
indexValue = (int) field.get(null);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new IllegalStateException(e);
|
||||||
|
}
|
||||||
|
return new LiveDataContext(indexValue);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ public class ElectronicThrottleMeta {
|
||||||
new TextRequest("eol"),
|
new TextRequest("eol"),
|
||||||
new TextRequest("Pedal"),
|
new TextRequest("Pedal"),
|
||||||
new SensorRequest("PPS"),
|
new SensorRequest("PPS"),
|
||||||
|
new ConfigRequest("throttlePedalPositionAdcChannel"),
|
||||||
new TextRequest("eol"),
|
new TextRequest("eol"),
|
||||||
new TextRequest("Output"),
|
new TextRequest("Output"),
|
||||||
new FieldRequest("ETB_pid", "output"),
|
new FieldRequest("ETB_pid", "output"),
|
||||||
|
|
|
@ -6,15 +6,16 @@ import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Multi-line horizontal flow panel.
|
* Multi-line horizontal flow panel.
|
||||||
*
|
* <p>
|
||||||
*
|
* <p>
|
||||||
* (c) Andrey Belomutskiy 2013-2019
|
* (c) Andrey Belomutskiy 2013-2019
|
||||||
*/
|
*/
|
||||||
public class ActionPanel {
|
public class ActionPanel {
|
||||||
List<RefreshActions> actionsList = new ArrayList<>();
|
private final RefreshActionsMap refreshActions = new RefreshActionsMap();
|
||||||
private final JPanel panel = new JPanel(new MigLayout());
|
private final JPanel panel = new JPanel(new MigLayout());
|
||||||
private JPanel currentLinePanel;
|
private JPanel currentLinePanel;
|
||||||
|
|
||||||
|
@ -42,4 +43,16 @@ public class ActionPanel {
|
||||||
panel.add(currentLinePanel, "wrap");
|
panel.add(currentLinePanel, "wrap");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RefreshActionsMap getRefreshActions() {
|
||||||
|
return refreshActions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionsListAdd(LiveDataContext context, RefreshActions refreshAction) {
|
||||||
|
refreshActions.put(context, refreshAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionsListAddAll(RefreshActionsMap actions) {
|
||||||
|
refreshActions.addAll(actions);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,17 +10,16 @@ import java.util.List;
|
||||||
* (c) Andrey Belomutskiy 2013-2019
|
* (c) Andrey Belomutskiy 2013-2019
|
||||||
*/
|
*/
|
||||||
public class IfConditionPanel {
|
public class IfConditionPanel {
|
||||||
private final List<RefreshActions> actionsList = new ArrayList<>();
|
private final RefreshActionsMap actionsList;
|
||||||
private final JPanel panel = new JPanel(new MigLayout());
|
private final JPanel panel = new JPanel(new MigLayout());
|
||||||
|
|
||||||
public IfConditionPanel(JPanel result, List<RefreshActions> combined) {
|
public IfConditionPanel(JPanel result, RefreshActionsMap actionsList) {
|
||||||
// todo: do we really need this proxy panel or can we just use parameter value?
|
// todo: do we really need this proxy panel or can we just use parameter value?
|
||||||
panel.add(result);
|
panel.add(result);
|
||||||
// todo: do we really need this list or can we just use parameter value?
|
this.actionsList = actionsList;
|
||||||
actionsList.addAll(combined);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RefreshActions> getActionsList() {
|
public RefreshActionsMap getActionsList() {
|
||||||
return actionsList;
|
return actionsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,6 @@ import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static com.rusefi.config.Field.niceToString;
|
import static com.rusefi.config.Field.niceToString;
|
||||||
|
|
||||||
|
@ -38,13 +36,13 @@ public class LiveDocPanel {
|
||||||
private static final int LIVE_DATA_PRECISION = 2;
|
private static final int LIVE_DATA_PRECISION = 2;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
static JPanel createPanel(String title, String settingsInstancePrefix, final int integerId, Field[] values, Request[] content) {
|
static JPanel createPanel(String title, String settingsInstancePrefix, final int defaultContextId, Field[] values, Request[] content) {
|
||||||
StateId id = new StateId(integerId);
|
LiveDataContext defaultContext = new LiveDataContext(defaultContextId);
|
||||||
|
|
||||||
ActionPanel ap = createComponents(title, content, values, settingsInstancePrefix);
|
ActionPanel ap = createComponents(title, content, values, settingsInstancePrefix, defaultContext);
|
||||||
JPanel panel = ap.getPanel();
|
JPanel panel = ap.getPanel();
|
||||||
|
|
||||||
LiveDocHolder holder = new LiveDocHolder(id, ap.actionsList, values) {
|
LiveDocHolder holder = new LiveDocHolder(defaultContext, ap.getRefreshActions(), values) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isVisible() {
|
public boolean isVisible() {
|
||||||
boolean isVisible = !panel.getVisibleRect().isEmpty();
|
boolean isVisible = !panel.getVisibleRect().isEmpty();
|
||||||
|
@ -61,7 +59,7 @@ public class LiveDocPanel {
|
||||||
return c.isVisible() && (parent == null || isRecursivelyVisible(parent));
|
return c.isVisible() && (parent == null || isRecursivelyVisible(parent));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ActionPanel createComponents(String title, Request[] content, Field[] values, String settingsInstancePrefix) {
|
private static ActionPanel createComponents(String title, Request[] content, Field[] values, String settingsInstancePrefix, LiveDataContext defaultContext) {
|
||||||
ActionPanel result = new ActionPanel(title);
|
ActionPanel result = new ActionPanel(title);
|
||||||
|
|
||||||
for (Request r : content) {
|
for (Request r : content) {
|
||||||
|
@ -74,12 +72,13 @@ public class LiveDocPanel {
|
||||||
}
|
}
|
||||||
} else if (r instanceof FieldRequest) {
|
} else if (r instanceof FieldRequest) {
|
||||||
FieldRequest request = (FieldRequest) r;
|
FieldRequest request = (FieldRequest) r;
|
||||||
|
LiveDataContext context = getFieldContext(defaultContext, request.getStateContext());
|
||||||
Field field = getField(values, request);
|
Field field = getField(values, request);
|
||||||
JLabel label = new JLabel("*");
|
JLabel label = new JLabel("*");
|
||||||
label.setIcon(UiUtils.loadIcon("livedocs/variable.png"));
|
label.setIcon(UiUtils.loadIcon("livedocs/variable.png"));
|
||||||
label.setToolTipText("Variable " + field.getName());
|
label.setToolTipText("Variable " + field.getName());
|
||||||
result.addControl(label);
|
result.addControl(label);
|
||||||
result.actionsList.add(new RefreshActions() {
|
result.actionsListAdd(context, new RefreshActions() {
|
||||||
@Override
|
@Override
|
||||||
public void refresh(BinaryProtocol bp, byte[] response) {
|
public void refresh(BinaryProtocol bp, byte[] response) {
|
||||||
Number fieldValue = field.getValue(new ConfigurationImage(response));
|
Number fieldValue = field.getValue(new ConfigurationImage(response));
|
||||||
|
@ -94,19 +93,19 @@ public class LiveDocPanel {
|
||||||
JLabel label = new JLabel("*");
|
JLabel label = new JLabel("*");
|
||||||
label.setIcon(UiUtils.loadIcon("livedocs/setting.png"));
|
label.setIcon(UiUtils.loadIcon("livedocs/setting.png"));
|
||||||
label.setToolTipText(getTooltipText(field.getName()));
|
label.setToolTipText(getTooltipText(field.getName()));
|
||||||
result.actionsList.add(new RefreshActions() {
|
result.addControl(label);
|
||||||
|
// todo: use different notification flow altogether since configuration has nothing to do with live data structures
|
||||||
|
result.actionsListAdd(new LiveDataContext(Fields.LDS_ENGINE_STATE_INDEX), new RefreshActions() {
|
||||||
@Override
|
@Override
|
||||||
public void refresh(BinaryProtocol bp, byte[] response) {
|
public void refresh(BinaryProtocol bp, byte[] response) {
|
||||||
String value = field.getAnyValue(bp.getController()).toString();
|
String value = field.getAnyValue(bp.getController()).toString();
|
||||||
label.setText(value);
|
label.setText(value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
result.addControl(label);
|
|
||||||
} else if (r instanceof SensorRequest) {
|
} else if (r instanceof SensorRequest) {
|
||||||
SensorRequest request = (SensorRequest) r;
|
SensorRequest request = (SensorRequest) r;
|
||||||
Sensor sensor = Sensor.find(request.getValue());
|
Sensor sensor = Sensor.find(request.getValue());
|
||||||
JLabel label = new JLabel("*");
|
JLabel label = new JLabel("*");
|
||||||
result.addControl(label);
|
|
||||||
label.setIcon(UiUtils.loadIcon("livedocs/gauge.png"));
|
label.setIcon(UiUtils.loadIcon("livedocs/gauge.png"));
|
||||||
label.setToolTipText("Sensor " + request.getValue());
|
label.setToolTipText("Sensor " + request.getValue());
|
||||||
label.addMouseListener(new MouseAdapter() {
|
label.addMouseListener(new MouseAdapter() {
|
||||||
|
@ -118,19 +117,19 @@ public class LiveDocPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
result.actionsList.add(new RefreshActions() {
|
result.addControl(label);
|
||||||
|
SensorCentral.getInstance().addListener(sensor, new SensorCentral.SensorListener() {
|
||||||
@Override
|
@Override
|
||||||
public void refresh(BinaryProtocol bp, byte[] response) {
|
public void onSensorUpdate(double value) {
|
||||||
double value = SensorCentral.getInstance().getValue(sensor);
|
|
||||||
label.setText(niceToString(value, LIVE_DATA_PRECISION));
|
label.setText(niceToString(value, LIVE_DATA_PRECISION));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (r instanceof IfRequest) {
|
} else if (r instanceof IfRequest) {
|
||||||
IfRequest request = (IfRequest) r;
|
IfRequest request = (IfRequest) r;
|
||||||
|
|
||||||
IfConditionPanel panel = createIfRequestPanel(request, values);
|
IfConditionPanel panel = createIfRequestPanel(request, values, defaultContext);
|
||||||
|
|
||||||
result.actionsList.addAll(panel.getActionsList());
|
result.actionsListAddAll(panel.getActionsList());
|
||||||
|
|
||||||
result.addControl(panel.getPanel());
|
result.addControl(panel.getPanel());
|
||||||
} else {
|
} else {
|
||||||
|
@ -140,6 +139,15 @@ public class LiveDocPanel {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static LiveDataContext getFieldContext(LiveDataContext defaultContext, String stateContext) {
|
||||||
|
if (stateContext.isEmpty()) {
|
||||||
|
return defaultContext;
|
||||||
|
} else {
|
||||||
|
String indexFieldName = StateDictionary.getContextIndexFieldName(stateContext);
|
||||||
|
return StateDictionary.getStateContext(indexFieldName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static Field getField(Field[] defaultContext, FieldRequest request) {
|
private static Field getField(Field[] defaultContext, FieldRequest request) {
|
||||||
Field[] context;
|
Field[] context;
|
||||||
if (request.getStateContext().isEmpty()) {
|
if (request.getStateContext().isEmpty()) {
|
||||||
|
@ -158,8 +166,7 @@ public class LiveDocPanel {
|
||||||
return "Configuration " + dialogField.getUiName() + " (" + configurationFieldName + ")";
|
return "Configuration " + dialogField.getUiName() + " (" + configurationFieldName + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IfConditionPanel createIfRequestPanel(IfRequest request, Field[] values) {
|
private static IfConditionPanel createIfRequestPanel(IfRequest request, Field[] values, LiveDataContext defaultContext) {
|
||||||
|
|
||||||
Field conditionField = Field.findField(values, "", request.getVariable());
|
Field conditionField = Field.findField(values, "", request.getVariable());
|
||||||
|
|
||||||
JPanel result = new JPanel(new VerticalFlowLayout());
|
JPanel result = new JPanel(new VerticalFlowLayout());
|
||||||
|
@ -168,16 +175,18 @@ public class LiveDocPanel {
|
||||||
result.add(conditionLabel);
|
result.add(conditionLabel);
|
||||||
|
|
||||||
|
|
||||||
ActionPanel trueAP = createComponents("", request.trueBlock.toArray(new Request[0]), values, "");
|
ActionPanel trueAP = createComponents("", request.trueBlock.toArray(new Request[0]), values, "", defaultContext);
|
||||||
ActionPanel falseAP = createComponents("", request.falseBlock.toArray(new Request[0]), values, "");
|
ActionPanel falseAP = createComponents("", request.falseBlock.toArray(new Request[0]), values, "", defaultContext);
|
||||||
|
|
||||||
result.add(trueAP.getPanel());
|
result.add(trueAP.getPanel());
|
||||||
result.add(falseAP.getPanel());
|
result.add(falseAP.getPanel());
|
||||||
|
|
||||||
List<RefreshActions> combined = new ArrayList<>(trueAP.actionsList);
|
RefreshActionsMap combined = trueAP.getRefreshActions();
|
||||||
combined.addAll(falseAP.actionsList);
|
combined.addAll(falseAP.getRefreshActions());
|
||||||
|
|
||||||
combined.add(new RefreshActions() {
|
LiveDataContext context = getFieldContext(defaultContext, request.getStateContext());
|
||||||
|
|
||||||
|
combined.put(context, new RefreshActions() {
|
||||||
@Override
|
@Override
|
||||||
public void refresh(BinaryProtocol bp, byte[] response) {
|
public void refresh(BinaryProtocol bp, byte[] response) {
|
||||||
int value = (int) conditionField.getValue(new ConfigurationImage(response));
|
int value = (int) conditionField.getValue(new ConfigurationImage(response));
|
||||||
|
|
|
@ -23,6 +23,10 @@ public class IfRequest extends Request {
|
||||||
this.falseBlock.addAll(Arrays.asList(falseBlock));
|
this.falseBlock.addAll(Arrays.asList(falseBlock));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getStateContext() {
|
||||||
|
return stateContext;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "IfRequest{" +
|
return "IfRequest{" +
|
||||||
|
|
Loading…
Reference in New Issue