/*******************************************************************************
* Copyright (c) 2010 Oak Ridge National Laboratory.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.csstudio.swt.xygraph.undo;
import org.csstudio.swt.xygraph.figures.Annotation;
import org.csstudio.swt.xygraph.figures.Axis;
import org.csstudio.swt.xygraph.figures.Trace;
import org.csstudio.swt.xygraph.figures.XYGraph;
/**The command for graph configuration.
* @author Xihui Chen
*
*/
public class XYGraphConfigCommand implements IUndoableCommand {
private XYGraph xyGraph;
protected XYGraphMemento previousXYGraphMem, afterXYGraphMem;
public XYGraphConfigCommand(XYGraph xyGraph) {
this.xyGraph = xyGraph;
previousXYGraphMem = new XYGraphMemento();
afterXYGraphMem = new XYGraphMemento();
createDefaultSettings();
}
protected void createDefaultSettings() {
for(int i =0; i< xyGraph.getPlotArea().getAnnotationList().size(); i++){
previousXYGraphMem.addAnnotationMemento(new AnnotationMemento());
afterXYGraphMem.addAnnotationMemento(new AnnotationMemento());
}
for(int i=0; i<xyGraph.getAxisList().size(); i++){
previousXYGraphMem.addAxisMemento(new AxisMemento());
afterXYGraphMem.addAxisMemento(new AxisMemento());
}
for(int i=0; i<xyGraph.getPlotArea().getTraceList().size(); i++){
previousXYGraphMem.addTraceMemento(new TraceMemento());
afterXYGraphMem.addTraceMemento(new TraceMemento());
}
}
@Override
public void redo() {
restoreXYGraphPropsFromMemento(xyGraph, afterXYGraphMem);
}
@Override
public void undo() {
restoreXYGraphPropsFromMemento(xyGraph, previousXYGraphMem);
}
public void savePreviousStates(){
saveXYGraphPropsToMemento(xyGraph, previousXYGraphMem);
}
public void saveAfterStates(){
saveXYGraphPropsToMemento(xyGraph, afterXYGraphMem);
}
@Override
public String toString() {
return "Configure XYGraph Settings";
}
protected void saveXYGraphPropsToMemento(XYGraph xyGraph, XYGraphMemento memento){
memento.setTitle(xyGraph.getTitle());
memento.setTitleFont(xyGraph.getTitleFont());
memento.setTitleColor(xyGraph.getTitleColor());
memento.setPlotAreaBackColor(
xyGraph.getPlotArea().getBackgroundColor());
memento.setShowTitle(xyGraph.isShowTitle());
memento.setShowLegend(xyGraph.isShowLegend());
memento.setShowPlotAreaBorder(
xyGraph.getPlotArea().isShowBorder());
memento.setTransparent(xyGraph.isTransparent());
int i=0;
for(Annotation sourceAnno : xyGraph.getPlotArea().getAnnotationList())
saveAnnotationPropsToMemento(sourceAnno,
memento.getAnnotationMementoList().get(i++));
i=0;
for(Axis axis : xyGraph.getAxisList())
saveAxisPropsToMemento(axis, memento.getAxisMementoList().get(i++));
i=0;
for(Trace trace : xyGraph.getPlotArea().getTraceList())
saveTracePropsToMemento(trace, memento.getTraceMementoList().get(i++));
}
protected void restoreXYGraphPropsFromMemento(XYGraph xyGraph, XYGraphMemento memento){
xyGraph.setTitle(memento.getTitle());
xyGraph.setTitleFont(memento.getTitleFont());
xyGraph.setTitleColor(memento.getTitleColor());
xyGraph.getPlotArea().setBackgroundColor(memento.getPlotAreaBackColor());
xyGraph.setShowTitle(memento.isShowTitle());
xyGraph.setShowLegend(memento.isShowLegend());
xyGraph.getPlotArea().setShowBorder(memento.isShowPlotAreaBorder());
xyGraph.setTransparent(memento.isTransparent());
int i=0;
for(AnnotationMemento annotationMemento : memento.getAnnotationMementoList())
restoreAnnotationPropsFromMemento(
xyGraph.getPlotArea().getAnnotationList().get(i++), annotationMemento);
i=0;
for(AxisMemento axisMemento : memento.getAxisMementoList())
restoreAxisPropsFromMemento(xyGraph.getAxisList().get(i++), axisMemento);
i=0;
for(TraceMemento traceMemento : memento.getTraceMementoList())
restoreTracePropsFromMemento(
xyGraph.getPlotArea().getTraceList().get(i++), traceMemento);
}
private void saveAnnotationPropsToMemento(Annotation annotation, AnnotationMemento memento){
memento.setName(annotation.getName());
if(annotation.isFree()){
memento.setFree(true);
memento.setXAxis(annotation.getXAxis());
memento.setYAxis(annotation.getYAxis());
}
else{
memento.setFree(false);
memento.setTrace(annotation.getTrace());
}
memento.setAnnotationColor(annotation.getAnnotationColor());
memento.setFont(annotation.getFont());
memento.setCursorLineStyle(annotation.getCursorLineStyle());
memento.setShowName(annotation.isShowName());
memento.setShowSampleInfo(annotation.isShowSampleInfo());
memento.setShowPosition(annotation.isShowPosition());
}
private void restoreAnnotationPropsFromMemento( Annotation annotation, AnnotationMemento memento){
annotation.setName(memento.getName());
if(memento.isFree())
annotation.setFree(memento.getXAxis(), memento.getYAxis());
else
annotation.setTrace(memento.getTrace());
annotation.setAnnotationColor(memento.getAnnotationColor());
annotation.setFont(memento.getFont());
annotation.setCursorLineStyle(memento.getCursorLineStyle());
annotation.setShowName(memento.isShowName());
annotation.setShowSampleInfo(memento.isShowSampleInfo());
annotation.setShowPosition(memento.isShowPosition());
}
private void saveAxisPropsToMemento(Axis axis, AxisMemento memento){
memento.setTitle(axis.getTitle());
memento.setTitleFont(axis.getTitleFont());
memento.setForegroundColor(axis.getForegroundColor());
memento.setPrimarySide(axis.isOnPrimarySide());
memento.setLogScale(axis.isLogScaleEnabled());
memento.setAutoScale(axis.isAutoScale());
memento.setAutoScaleThreshold(axis.getAutoScaleThreshold());
memento.setRange(axis.getRange());
memento.setDateEnabled(axis.isDateEnabled());
memento.setAutoFormat(axis.isAutoFormat());
memento.setFormatPattern(axis.getFormatPattern());
memento.setShowMajorGrid(axis.isShowMajorGrid());
memento.setDashGridLine(axis.isDashGridLine());
memento.setMajorGridColor(axis.getMajorGridColor());
}
private void restoreAxisPropsFromMemento(Axis axis, AxisMemento memento){
axis.setTitle(memento.getTitle());
axis.setTitleFont(memento.getTitleFont());
axis.setForegroundColor(memento.getForegroundColor());
axis.setPrimarySide(memento.isOnPrimarySide());
axis.setLogScale(memento.isLogScaleEnabled());
axis.setAutoScale(memento.isAutoScale());
axis.setAutoScaleThreshold(memento.getAutoScaleThreshold());
axis.setRange(memento.getRange());
axis.setDateEnabled(memento.isDateEnabled());
axis.setAutoFormat(memento.isAutoFormat());
axis.setFormatPattern(memento.getFormatPattern());
axis.setShowMajorGrid(memento.isShowMajorGrid());
axis.setDashGridLine(memento.isDashGridLine());
axis.setMajorGridColor(memento.getMajorGridColor());
}
private void saveTracePropsToMemento(Trace trace, TraceMemento memento){
memento.setName(trace.getName());
memento.setXAxis(trace.getXAxis());
memento.setYAxis(trace.getYAxis());
memento.setTraceColor(trace.getTraceColor());
memento.setTraceType(trace.getTraceType());
memento.setLineWidth(trace.getLineWidth());
memento.setPointStyle(trace.getPointStyle());
memento.setPointSize(trace.getPointSize());
memento.setBaseLine(trace.getBaseLine());
memento.setAreaAlpha(trace.getAreaAlpha());
memento.setAntiAliasing(trace.isAntiAliasing());
memento.setErrorBarEnabled(trace.isErrorBarEnabled());
memento.setXErrorBarType(trace.getXErrorBarType());
memento.setYErrorBarType(trace.getYErrorBarType());
memento.setErrorBarColor(trace.getErrorBarColor());
memento.setErrorBarCapWidth(trace.getErrorBarCapWidth());
memento.setDrawYErrorInArea(trace.isDrawYErrorInArea());
}
private void restoreTracePropsFromMemento(Trace trace, TraceMemento memento){
trace.setName(memento.getName());
trace.setXAxis(memento.getXAxis());
trace.setYAxis(memento.getYAxis());
trace.setTraceColor(memento.getTraceColor());
trace.setTraceType(memento.getTraceType());
trace.setLineWidth(memento.getLineWidth());
trace.setPointStyle(memento.getPointStyle());
trace.setPointSize(memento.getPointSize());
trace.setBaseLine(memento.getBaseLine());
trace.setAreaAlpha(memento.getAreaAlpha());
trace.setAntiAliasing(memento.isAntiAliasing());
trace.setErrorBarEnabled(memento.isErrorBarEnabled());
trace.setXErrorBarType(memento.getXErrorBarType());
trace.setYErrorBarType(memento.getYErrorBarType());
trace.setErrorBarColor(memento.getErrorBarColor());
trace.setErrorBarCapWidth(memento.getErrorBarCapWidth());
trace.setDrawYErrorInArea(memento.isDrawYErrorInArea());
}
}