package hep.aida.ref.plotter;

import hep.aida.IAxisStyle;
import hep.aida.IDataStyle;
import hep.aida.IInfoStyle;
import hep.aida.IPlotterStyle;
import hep.aida.ITitleStyle;
import hep.aida.ref.plotter.BaseStyle;

/**
 *
 * @author The AIDA team @ SLAC.
 *
 */
public class PlotterStyle extends BaseStyle implements IPlotterStyle {
    
    private IDataStyle  dataStyle;
    private IInfoStyle  infoStyle;
    private ITitleStyle titleStyle;
    private IAxisStyle  xAxisStyle;
    private IAxisStyle  yAxisStyle;
    private IAxisStyle  zAxisStyle;
    
    PlotterStyle() {
        super();
    }
    
    PlotterStyle( PlotterStyle style ) {
        super( style );
    }
    
    protected void initializeBaseStyle() {    
        dataStyle  = new DataStyle();
        infoStyle  = new InfoStyle();
        titleStyle = new TitleStyle();
        xAxisStyle = new AxisStyle();
        yAxisStyle = new AxisStyle();
        zAxisStyle = new AxisStyle();
        addBaseStyle( dataStyle, "data" );
        addBaseStyle( infoStyle, "info" );
        addBaseStyle( titleStyle, "title" );
        addBaseStyle( xAxisStyle, "xAxis" );
        addBaseStyle( yAxisStyle, "yAxis" );
        addBaseStyle( zAxisStyle, "zAxis" );
        String[] trueFalse = {"true", "false"};
        addParameter("showStatisticsBox", trueFalse, "true");
        addParameter("showLegend", trueFalse, "true");        
        addParameter("legendFont", "SansSerif");        
        addParameter("legendFontSize", "10");        
        addParameter("legendFontStyle", "1");        
        addParameter("legendTitles");
        addParameter("statisticsBoxFont", "SansSerif");        
        addParameter("statisticsBoxFontSize", "10");        
        addParameter("statisticsBoxFontStyle", "1");        
        addParameter("backgroundColor");
        addParameter("foregroundColor");
        addParameter("dataAreaColor");
        String[] borderTypes = {"bevelIn", "bevelOut", "etched", "line", "shadow","0","1","2","3","4"};
        addParameter("dataAreaBorderType", borderTypes);
        String[] hist2dStyle = {"box", "ellipse", "colorMap", "0", "1", "2"};
        addParameter("hist2DStyle", hist2dStyle);
        addParameter("showAsScatterPlot",trueFalse,"true");
        addParameter("showTitle", trueFalse, "true");        
    }
    
    public IDataStyle dataStyle() {
        return dataStyle;
    }
    
    public IInfoStyle infoStyle() {
        return infoStyle;
    }
    
    public ITitleStyle titleStyle() {
        return titleStyle;
    }
    
    public IAxisStyle xAxisStyle() {
        return xAxisStyle;
    }
    
    public IAxisStyle yAxisStyle() {
        return yAxisStyle;
    }
    
    public IAxisStyle zAxisStyle() {
        return zAxisStyle;
    }
    
    public boolean setAxisStyleX(IAxisStyle xAxisStyle) {
        this.xAxisStyle = xAxisStyle;
        addBaseStyle( xAxisStyle, "xAxis" );
        return true;
    }
    
    public boolean setAxisStyleY(IAxisStyle yAxisStyle) {
        this.yAxisStyle = yAxisStyle;
        addBaseStyle( yAxisStyle, "yAxis" );
        return true;
    }
    
    public boolean setAxisStyleZ(IAxisStyle zAxisStyle) {
        this.zAxisStyle = zAxisStyle;
        addBaseStyle( zAxisStyle, "zAxis" );
        return true;
    }
    
    public boolean setDataStyle(IDataStyle dataStyle) {
        this.dataStyle = dataStyle;
        addBaseStyle( dataStyle, "data" );
        return true;
    }
    
    public boolean setInfoStyle(IInfoStyle infoStyle) {
        this.infoStyle = infoStyle;
        addBaseStyle( infoStyle, "info" );
        return true;
    }
    
    public boolean setTitleStyle(ITitleStyle titleStyle) {
        this.titleStyle = titleStyle;
        addBaseStyle( titleStyle, "title" );
        return true;
    }
    
}
