package org.uva.student.calinwouter.qlqls.ql.gui.widgets; import org.uva.student.calinwouter.qlqls.ql.model.StateWrapper; import org.uva.student.calinwouter.qlqls.ql.interfaces.ChangedStateEventListener; import org.uva.student.calinwouter.qlqls.ql.model.VariableTable; import javax.swing.*; import java.awt.*; /** * This widget is basically a (Label + Widget) Widget. */ public class LabelWithWidgetWidget implements IWidget { private final JPanel labelWithWidgetWidget; private final IWidget widget; private final Label fieldLabel; private final StateWrapper stateWrapper; private final String identifier; public Component getWidgetComponent() { return labelWithWidgetWidget; } public void resetValue() { widget.resetValue(); } private boolean setMyVisibility() { final VariableTable variableTable = stateWrapper.getVariableTable(); final Boolean isVariableSet = variableTable.isSet(identifier); labelWithWidgetWidget.setVisible(isVariableSet); return isVariableSet; } private void resetVisibilityAndValue() { if ( !setMyVisibility()) { resetValue(); } } protected void setLabelStylingSettings(Label fieldLabel) { // QL uses default styling settings. :-) } private void createEventListener() { stateWrapper.subscribeChangedStateEventListener(new ChangedStateEventListener() { public void onStateChanged() { resetVisibilityAndValue(); labelWithWidgetWidget.revalidate(); } }); } private JPanel createUserInterface() { final JPanel labelWithWidgetWidget = new JPanel(); labelWithWidgetWidget.setAlignmentX(Component.LEFT_ALIGNMENT); labelWithWidgetWidget.add(fieldLabel); labelWithWidgetWidget.add(widget.getWidgetComponent()); return labelWithWidgetWidget; } private Label createFieldLabel(String label) { return new Label(label); } protected void initializeWidget() { setLabelStylingSettings(fieldLabel); setMyVisibility(); createEventListener(); } public LabelWithWidgetWidget(String label, String identifier, IWidget widget, StateWrapper stateWrapper) { this.widget = widget; this.fieldLabel = createFieldLabel(label); this.labelWithWidgetWidget = createUserInterface(); this.stateWrapper = stateWrapper; this.identifier = identifier; initializeWidget(); } }