package org.uva.student.calinwouter.qlqls.qls.model; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeCallback; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor; import org.uva.student.calinwouter.qlqls.qls.abstractions.AbstractWidget; import org.uva.student.calinwouter.qlqls.qls.model.functions.widgets.Checkbox; import org.uva.student.calinwouter.qlqls.qls.model.functions.widgets.Intbox; import org.uva.student.calinwouter.qlqls.qls.model.functions.widgets.Textbox; import java.awt.*; import java.util.HashMap; import java.util.Map; /** * This model contains all styling settings for a (default) type. */ public class StylingSettings { public static final String WIDGET = "widget"; public static final String FONT = "font"; public static final String FONT_SIZE = "fontSize"; public static final String COLOR = "color"; public static final String WIDTH = "width"; private final AbstractWidget widget; private final String font; private final Integer fontSize, color, width; public Font createFont() { return new Font(font, 0, fontSize); } public AbstractWidget getWidget() { return widget; } public Color createForegroundColor() { return new Color(color); } public Dimension createSizeDimension(int oldHeight) { return new Dimension(width, oldHeight); } /** * This internal class is used for setting the default widget settings based on its type. */ private class DefaultStylingSettingsCreator implements ITypeCallback { private final Map<String, Object> stylingSettings = new HashMap<String, Object>(); public void usesBoolean() { stylingSettings.put(StylingSettings.WIDGET, new Checkbox()); } public void usesInteger() { stylingSettings.put(StylingSettings.WIDGET, new Intbox()); } public void usesString() { stylingSettings.put(StylingSettings.WIDGET, new Textbox()); } public Map<String, Object> getResults() { stylingSettings.put(StylingSettings.FONT, "Arial"); stylingSettings.put(StylingSettings.FONT_SIZE, 12); stylingSettings.put(StylingSettings.COLOR, 0); stylingSettings.put(StylingSettings.WIDTH, 200); return stylingSettings; } } /** * Create a map based on the provided styling settings, with fallback parameters to the defaults. */ private Map<String, Object> createMapBackedByDefaults(ITypeDescriptor typeDescriptor, Map<String, Object> stylingSettingsMap) { final DefaultStylingSettingsCreator defaultStylingSettingsCreator = new DefaultStylingSettingsCreator(); if (typeDescriptor != null) { typeDescriptor.callTypeMethod(defaultStylingSettingsCreator); } final Map<String, Object> results = defaultStylingSettingsCreator.getResults(); final Map<String, Object> newStylingSettingsMap = new HashMap<String, Object>(results); newStylingSettingsMap.putAll(stylingSettingsMap); return newStylingSettingsMap; } public StylingSettings(ITypeDescriptor typeDescriptor, Map<String, Object> stylingSettingsMap) { Map<String, Object> newStylingSettingsMap = createMapBackedByDefaults(typeDescriptor, stylingSettingsMap); this.widget = (AbstractWidget) newStylingSettingsMap.get(StylingSettings.WIDGET); this.font = (String) newStylingSettingsMap.get(StylingSettings.FONT); this.fontSize = (Integer) newStylingSettingsMap.get(StylingSettings.FONT_SIZE); this.color = (Integer) newStylingSettingsMap.get(StylingSettings.COLOR); this.width = (Integer) newStylingSettingsMap.get(StylingSettings.WIDTH); } }