00001
00002
00003
00004
00005
00006
00007 #include "CmdAddScale.h"
00008 #include "Document.h"
00009 #include "DocumentSerialize.h"
00010 #include "EngaugeAssert.h"
00011 #include "Logger.h"
00012 #include "MainWindow.h"
00013 #include "QtToString.h"
00014 #include <QXmlStreamReader>
00015 #include "Xml.h"
00016
00017 const QString CMD_DESCRIPTION ("Add scale point");
00018
00019 CmdAddScale::CmdAddScale (MainWindow &mainWindow,
00020 Document &document,
00021 const QPointF &posScreen0,
00022 const QPointF &posScreen1,
00023 double scaleLength,
00024 double ordinal0,
00025 double ordinal1) :
00026 CmdPointChangeBase (mainWindow,
00027 document,
00028 CMD_DESCRIPTION),
00029 m_posScreen0 (posScreen0),
00030 m_posScreen1 (posScreen1),
00031 m_scaleLength (scaleLength),
00032 m_ordinal0 (ordinal0),
00033 m_ordinal1 (ordinal1)
00034 {
00035 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddScale::CmdAddScale"
00036 << " posScreen0=" << QPointFToString (posScreen0).toLatin1 ().data ()
00037 << " posScreen1=" << QPointFToString (posScreen1).toLatin1 ().data ()
00038 << " scaleLength=" << scaleLength
00039 << " ordinal0=" << ordinal0
00040 << " ordinal1=" << ordinal1;
00041 }
00042
00043 CmdAddScale::CmdAddScale (MainWindow &mainWindow,
00044 Document &document,
00045 const QString &cmdDescription,
00046 QXmlStreamReader &reader) :
00047 CmdPointChangeBase (mainWindow,
00048 document,
00049 cmdDescription)
00050 {
00051 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddScale::CmdAddScale";
00052
00053 QXmlStreamAttributes attributes = reader.attributes();
00054
00055 if (!attributes.hasAttribute(DOCUMENT_SERIALIZE_SCREEN_X) ||
00056 !attributes.hasAttribute(DOCUMENT_SERIALIZE_SCREEN_Y) ||
00057 !attributes.hasAttribute(DOCUMENT_SERIALIZE_SCREEN_X1) ||
00058 !attributes.hasAttribute(DOCUMENT_SERIALIZE_SCREEN_Y1) ||
00059 !attributes.hasAttribute(DOCUMENT_SERIALIZE_SCALE_LENGTH) ||
00060 !attributes.hasAttribute(DOCUMENT_SERIALIZE_IDENTIFIER) ||
00061 !attributes.hasAttribute(DOCUMENT_SERIALIZE_IDENTIFIER1) ||
00062 !attributes.hasAttribute(DOCUMENT_SERIALIZE_ORDINAL) ||
00063 !attributes.hasAttribute(DOCUMENT_SERIALIZE_ORDINAL1)) {
00064 xmlExitWithError (reader,
00065 QString ("Missing attribute(s) %1, %2, %3, %4, %5, %6, %7, %8 and/or %9")
00066 .arg (DOCUMENT_SERIALIZE_SCREEN_X)
00067 .arg (DOCUMENT_SERIALIZE_SCREEN_Y)
00068 .arg (DOCUMENT_SERIALIZE_SCREEN_X1)
00069 .arg (DOCUMENT_SERIALIZE_SCREEN_Y1)
00070 .arg (DOCUMENT_SERIALIZE_SCALE_LENGTH)
00071 .arg (DOCUMENT_SERIALIZE_IDENTIFIER)
00072 .arg (DOCUMENT_SERIALIZE_IDENTIFIER1)
00073 .arg (DOCUMENT_SERIALIZE_ORDINAL)
00074 .arg (DOCUMENT_SERIALIZE_ORDINAL1));
00075 }
00076
00077 m_posScreen0.setX(attributes.value(DOCUMENT_SERIALIZE_SCREEN_X).toDouble());
00078 m_posScreen0.setY(attributes.value(DOCUMENT_SERIALIZE_SCREEN_Y).toDouble());
00079 m_posScreen1.setX(attributes.value(DOCUMENT_SERIALIZE_SCREEN_X1).toDouble());
00080 m_posScreen1.setY(attributes.value(DOCUMENT_SERIALIZE_SCREEN_Y1).toDouble());
00081 m_scaleLength = attributes.value(DOCUMENT_SERIALIZE_SCALE_LENGTH).toDouble();
00082 m_identifierAdded0 = attributes.value(DOCUMENT_SERIALIZE_IDENTIFIER).toString();
00083 m_identifierAdded1 = attributes.value(DOCUMENT_SERIALIZE_IDENTIFIER1).toString();
00084 m_ordinal0 = attributes.value(DOCUMENT_SERIALIZE_ORDINAL).toDouble();
00085 m_ordinal1 = attributes.value(DOCUMENT_SERIALIZE_ORDINAL1).toDouble();
00086 }
00087
00088 CmdAddScale::~CmdAddScale ()
00089 {
00090 }
00091
00092 void CmdAddScale::cmdRedo ()
00093 {
00094 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddScale::cmdRedo";
00095
00096 saveOrCheckPreCommandDocumentStateHash (document ());
00097 saveDocumentState (document ());
00098 document().addScaleWithGeneratedIdentifier (m_posScreen0,
00099 m_posScreen1,
00100 m_scaleLength,
00101 m_identifierAdded0,
00102 m_identifierAdded1,
00103 m_ordinal0,
00104 m_ordinal1);
00105 document().updatePointOrdinals (mainWindow().transformation());
00106 mainWindow().updateAfterCommand();
00107 saveOrCheckPostCommandDocumentStateHash (document ());
00108 }
00109
00110 void CmdAddScale::cmdUndo ()
00111 {
00112 LOG4CPP_INFO_S ((*mainCat)) << "CmdAddScale::cmdUndo";
00113
00114 saveOrCheckPostCommandDocumentStateHash (document ());
00115 restoreDocumentState (document ());
00116 mainWindow().updateAfterCommand();
00117 saveOrCheckPreCommandDocumentStateHash (document ());
00118 }
00119
00120 void CmdAddScale::saveXml (QXmlStreamWriter &writer) const
00121 {
00122
00123
00124 const char FORMAT = 'g';
00125 const int PRECISION = 16;
00126
00127 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00128 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_ADD_SCALE);
00129 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00130 writer.writeAttribute(DOCUMENT_SERIALIZE_SCREEN_X, QString::number (m_posScreen0.x()));
00131 writer.writeAttribute(DOCUMENT_SERIALIZE_SCREEN_Y, QString::number (m_posScreen0.y()));
00132 writer.writeAttribute(DOCUMENT_SERIALIZE_SCREEN_X1, QString::number (m_posScreen1.x()));
00133 writer.writeAttribute(DOCUMENT_SERIALIZE_SCREEN_Y1, QString::number (m_posScreen1.y()));
00134 writer.writeAttribute(DOCUMENT_SERIALIZE_SCALE_LENGTH, QString::number (m_scaleLength, FORMAT, PRECISION));
00135 writer.writeAttribute(DOCUMENT_SERIALIZE_IDENTIFIER, m_identifierAdded0);
00136 writer.writeAttribute(DOCUMENT_SERIALIZE_IDENTIFIER1, m_identifierAdded1);
00137 writer.writeAttribute(DOCUMENT_SERIALIZE_ORDINAL, QString::number (m_ordinal0));
00138 writer.writeAttribute(DOCUMENT_SERIALIZE_ORDINAL1, QString::number (m_ordinal1));
00139 writer.writeEndElement();
00140 }