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