package org.fugazi.qls.ast.widget; import org.fugazi.ql.ast.AbstractASTNode; import org.fugazi.ql.ast.type.Type; import org.fugazi.ql.evaluator.expression_value.ExpressionValue; import org.fugazi.ql.gui.ui_element.UIForm; import org.fugazi.ql.gui.widgets.IWidget; import org.fugazi.ql.gui.widgets.WidgetsEventListener; import org.fugazi.qls.ast.IQLSASTVisitor; import org.fugazi.qls.ast.style.Style; import org.fugazi.qls.ast.style.style_property.*; import org.fugazi.qls.ast.widget.widget_types.IWidgetType; import org.fugazi.qls.ast.widget.widget_types.UndefinedWidgetType; import javax.swing.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public abstract class AbstractQLSWidget extends AbstractASTNode implements IWidget { protected final static String DEFAULT_FONT = "Arial"; protected final static int DEFAULT_FONT_SIZE = 14; protected final static int DEFAULT_COLOR = 0x000000; protected final static int DEFAULT_WIDTH = 68; protected IWidgetType type; protected JComponent component; protected JLabel componentLabel; public AbstractQLSWidget() { this.type = new UndefinedWidgetType(); this.component = new JPanel(); this.componentLabel = new JLabel(); } public void setLabel(String _label) { this.componentLabel.setText(_label); } public IWidgetType getType() { return this.type; } public Font getDefaultFont() { return new Font(DEFAULT_FONT); } public FontSize getDefaultFontSize() { return new FontSize(DEFAULT_FONT_SIZE); } public Color getDefaultColor() { return new Color(DEFAULT_COLOR); } public Width getDefaultWidth() { return new Width(DEFAULT_WIDTH); } public Style getDefaultStyle() { List<StyleProperty> defaultStyles = new ArrayList<StyleProperty>( Arrays.asList( getDefaultFont(), getDefaultFontSize(), getDefaultColor(), getDefaultWidth()) ); return new Style(defaultStyles); } public void resetStyleToDefault() { Style style = this.getDefaultStyle(); this.applyStyle(style); } public abstract void applyStyle(Style _style); @Override public void render(UIForm _canvas) { _canvas.addWidget(this.component); } @Override public void suppress(UIForm _canvas){ _canvas.removeWidget(this.component); } @Override public abstract ExpressionValue getWidgetValue(); @Override public abstract void setWidgetValue(ExpressionValue _value); @Override public abstract void addEventListener(WidgetsEventListener _listener); @Override public abstract void setReadOnly(boolean _isReadonly); public abstract List<Type> getSupportedQuestionTypes(); public abstract <T> T accept(IQLSASTVisitor<T> visitor); public boolean isUndefined() { return false; } }