package org.uva.student.calinwouter.qlqls.qls.model.functions;
import org.uva.student.calinwouter.qlqls.ql.model.StateWrapper;
import org.uva.student.calinwouter.qlqls.ql.gui.widgets.IWidget;
import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor;
import org.uva.student.calinwouter.qlqls.ql.model.StaticFields;
import org.uva.student.calinwouter.qlqls.qls.abstractions.AbstractFormField;
import org.uva.student.calinwouter.qlqls.qls.abstractions.AbstractWidget;
import org.uva.student.calinwouter.qlqls.qls.widgets.StyledLabelWithWidgetWidget;
import org.uva.student.calinwouter.qlqls.qls.model.FieldType;
import org.uva.student.calinwouter.qlqls.qls.model.QLSRenderParameters;
import org.uva.student.calinwouter.qlqls.qls.model.StylingSettings;
import java.awt.*;
import java.util.Map;
@SuppressWarnings("unused") // Used through reflection.
public class Question extends AbstractFormField {
private IWidget createLabelWithWidgetWidget(StaticFields staticFields, StylingSettings stylingSettings, StateWrapper stateWrapper, IWidget embeddedWidget) {
final String label = staticFields.getLabelForField(identifier);
return new StyledLabelWithWidgetWidget(label, identifier, embeddedWidget, stateWrapper, stylingSettings);
}
@Override
public Component render(QLSRenderParameters qlsRenderParameters) {
final StateWrapper stateWrapper = qlsRenderParameters.getStateWrapper();
final StaticFields staticFields = qlsRenderParameters.getStaticFields();
final StyleSheet styleSheet = qlsRenderParameters.getStyleSheet();
final ITypeDescriptor typeDescriptor = staticFields.getTypeOfField(identifier);
final FieldType fieldType = new FieldType(identifier, typeDescriptor);
final StylingSettings stylingSettings = styleSheet.deriveStylingSettings(fieldType);
final AbstractWidget widget = stylingSettings.getWidget();
final IWidget renderedWidget = widget.render(identifier, qlsRenderParameters);
final IWidget widgetWrappedWithLabel = createLabelWithWidgetWidget(staticFields, stylingSettings, stateWrapper, renderedWidget);
return widgetWrappedWithLabel.getWidgetComponent();
}
public Question(String identifier) {
super(identifier);
}
public Question(String identifier, Map<String, Object> stylingArguments) {
super(identifier, stylingArguments);
}
}