00001
00002
00003
00004
00005
00006
00007 #include "CmdSettingsCurveAddRemove.h"
00008 #include "CurveNameList.h"
00009 #include "Document.h"
00010 #include "DocumentSerialize.h"
00011 #include "Logger.h"
00012 #include "MainWindow.h"
00013 #include <QXmlStreamReader>
00014 #include "Xml.h"
00015
00016 const QString CMD_DESCRIPTION ("Curve add/remove");
00017
00018 CmdSettingsCurveAddRemove::CmdSettingsCurveAddRemove(MainWindow &mainWindow,
00019 Document &document,
00020 const CurveNameList &modelCurves) :
00021 CmdAbstract(mainWindow,
00022 document,
00023 CMD_DESCRIPTION)
00024 {
00025 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveAddRemove::CmdSettingsCurveAddRemove";
00026
00027 m_curvesGraphsBefore = document.curvesGraphs ();
00028
00029
00030 for (int row = 0; row < modelCurves.rowCount (); row++) {
00031
00032 QModelIndex idxCurrent = modelCurves.index (row, CURVE_NAME_LIST_COLUMN_CURRENT);
00033
00034 QString curveNameCurrent = modelCurves.data (idxCurrent).toString ();
00035 QString curveNameOriginal = modelCurves.currentCurveToOriginalCurve (curveNameCurrent);
00036 if (!curveNameOriginal.isEmpty ()) {
00037
00038
00039 const Curve *curveOriginal = ((const Document&) document).curveForCurveName (curveNameOriginal);
00040 Curve curveCurrent (*curveOriginal);
00041 curveCurrent.setCurveName (curveNameCurrent);
00042
00043 m_curvesGraphsAfter.addGraphCurveAtEnd (curveCurrent);
00044
00045 } else {
00046
00047
00048 Curve curveCurrent (curveNameCurrent,
00049 ColorFilterSettings::defaultFilter(),
00050 CurveStyle (LineStyle::defaultGraphCurve(m_curvesGraphsAfter.numCurves()),
00051 PointStyle::defaultGraphCurve(m_curvesGraphsAfter.numCurves())));
00052
00053 m_curvesGraphsAfter.addGraphCurveAtEnd (curveCurrent);
00054 }
00055 }
00056 }
00057
00058 CmdSettingsCurveAddRemove::CmdSettingsCurveAddRemove (MainWindow &mainWindow,
00059 Document &document,
00060 const QString &cmdDescription,
00061 QXmlStreamReader &reader) :
00062 CmdAbstract (mainWindow,
00063 document,
00064 cmdDescription)
00065 {
00066 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveAddRemove::CmdSettingsCurveAddRemove";
00067
00068 bool success = true;
00069
00070
00071 bool isBefore = true;
00072 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
00073 (reader.name() != DOCUMENT_SERIALIZE_CMD)){
00074 loadNextFromReader(reader);
00075 if (reader.atEnd()) {
00076 xmlExitWithError (reader,
00077 QString ("%1 %2")
00078 .arg (QObject::tr ("Reached end of file before finding end element for"))
00079 .arg (DOCUMENT_SERIALIZE_CMD));
00080 success = false;
00081 break;
00082 }
00083
00084 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
00085 (reader.name() == DOCUMENT_SERIALIZE_CURVES_GRAPHS)) {
00086
00087 if (isBefore) {
00088
00089 m_curvesGraphsBefore.loadXml (reader);
00090 isBefore = false;
00091
00092 } else {
00093
00094 m_curvesGraphsAfter.loadXml (reader);
00095
00096 }
00097 }
00098 }
00099
00100 if (!success) {
00101 reader.raiseError ("Cannot read curve add/remove settings");
00102 }
00103 }
00104
00105 CmdSettingsCurveAddRemove::~CmdSettingsCurveAddRemove ()
00106 {
00107 }
00108
00109 void CmdSettingsCurveAddRemove::cmdRedo ()
00110 {
00111 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveAddRemove::cmdRedo";
00112
00113 saveOrCheckPreCommandDocumentStateHash (document ());
00114 mainWindow().updateSettingsCurveAddRemove(m_curvesGraphsAfter);
00115 mainWindow().updateAfterCommand();
00116 saveOrCheckPostCommandDocumentStateHash (document ());
00117 }
00118
00119 void CmdSettingsCurveAddRemove::cmdUndo ()
00120 {
00121 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsCurveAddRemove::cmdUndo";
00122
00123 saveOrCheckPostCommandDocumentStateHash (document ());
00124 mainWindow().updateSettingsCurveAddRemove(m_curvesGraphsBefore);
00125 mainWindow().updateAfterCommand();
00126 saveOrCheckPreCommandDocumentStateHash (document ());
00127 }
00128
00129 void CmdSettingsCurveAddRemove::saveXml (QXmlStreamWriter &writer) const
00130 {
00131 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00132 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_SETTINGS_CURVE_ADD_REMOVE);
00133 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00134 m_curvesGraphsBefore.saveXml(writer);
00135 m_curvesGraphsAfter.saveXml(writer);
00136 writer.writeEndElement();
00137 }