00001
00002
00003
00004
00005
00006
00007 #include "CmdSettingsSegments.h"
00008 #include "Document.h"
00009 #include "DocumentSerialize.h"
00010 #include "Logger.h"
00011 #include "MainWindow.h"
00012 #include <QXmlStreamReader>
00013 #include "Xml.h"
00014
00015 const QString CMD_DESCRIPTION ("Segments settings");
00016
00017 CmdSettingsSegments::CmdSettingsSegments(MainWindow &mainWindow,
00018 Document &document,
00019 const DocumentModelSegments &modelSegmentsBefore,
00020 const DocumentModelSegments &modelSegmentsAfter) :
00021 CmdAbstract(mainWindow,
00022 document,
00023 CMD_DESCRIPTION),
00024 m_modelSegmentsBefore (modelSegmentsBefore),
00025 m_modelSegmentsAfter (modelSegmentsAfter)
00026 {
00027 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsSegments::CmdSettingsSegments";
00028 }
00029
00030 CmdSettingsSegments::CmdSettingsSegments (MainWindow &mainWindow,
00031 Document &document,
00032 const QString &cmdDescription,
00033 QXmlStreamReader &reader) :
00034 CmdAbstract (mainWindow,
00035 document,
00036 cmdDescription)
00037 {
00038 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsSegments::CmdSettingsSegments";
00039
00040 bool success = true;
00041
00042
00043 bool isBefore = true;
00044 while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
00045 (reader.name() != DOCUMENT_SERIALIZE_CMD)){
00046 loadNextFromReader(reader);
00047 if (reader.atEnd()) {
00048 xmlExitWithError (reader,
00049 QString ("%1 %2")
00050 .arg (QObject::tr ("Reached end of file before finding end element for"))
00051 .arg (DOCUMENT_SERIALIZE_CMD));
00052 success = false;
00053 break;
00054 }
00055
00056 if ((reader.tokenType() == QXmlStreamReader::StartElement) &&
00057 (reader.name() == DOCUMENT_SERIALIZE_SEGMENTS)) {
00058
00059 if (isBefore) {
00060
00061 m_modelSegmentsBefore.loadXml (reader);
00062 isBefore = false;
00063
00064 } else {
00065
00066 m_modelSegmentsAfter.loadXml (reader);
00067
00068 }
00069 }
00070 }
00071
00072 if (!success) {
00073 reader.raiseError ("Cannot read segments settings");
00074 }
00075 }
00076
00077 CmdSettingsSegments::~CmdSettingsSegments ()
00078 {
00079 }
00080
00081 void CmdSettingsSegments::cmdRedo ()
00082 {
00083 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsSegments::cmdRedo";
00084
00085 saveOrCheckPreCommandDocumentStateHash (document ());
00086 mainWindow().updateSettingsSegments(m_modelSegmentsAfter);
00087 mainWindow().updateAfterCommand();
00088 saveOrCheckPostCommandDocumentStateHash (document ());
00089 }
00090
00091 void CmdSettingsSegments::cmdUndo ()
00092 {
00093 LOG4CPP_INFO_S ((*mainCat)) << "CmdSettingsSegments::cmdUndo";
00094
00095 saveOrCheckPostCommandDocumentStateHash (document ());
00096 mainWindow().updateSettingsSegments(m_modelSegmentsBefore);
00097 mainWindow().updateAfterCommand();
00098 saveOrCheckPreCommandDocumentStateHash (document ());
00099 }
00100
00101 void CmdSettingsSegments::saveXml (QXmlStreamWriter &writer) const
00102 {
00103 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00104 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_SETTINGS_SEGMENTS);
00105 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00106 m_modelSegmentsBefore.saveXml (writer);
00107 m_modelSegmentsAfter.saveXml(writer);
00108 writer.writeEndElement();
00109 }