00001
00002
00003
00004
00005
00006
00007 #include "CmdCopy.h"
00008 #include "DataKey.h"
00009 #include "Document.h"
00010 #include "DocumentSerialize.h"
00011 #include "EngaugeAssert.h"
00012 #include "ExportToClipboard.h"
00013 #include "GraphicsItemType.h"
00014 #include "GraphicsView.h"
00015 #include "Logger.h"
00016 #include "MainWindow.h"
00017 #include "MimePointsExport.h"
00018 #include <QApplication>
00019 #include <QClipboard>
00020 #include <QTextStream>
00021 #include "QtToString.h"
00022 #include <QXmlStreamReader>
00023 #include "Xml.h"
00024
00025 const QString CMD_DESCRIPTION ("Copy");
00026
00027 CmdCopy::CmdCopy(MainWindow &mainWindow,
00028 Document &document,
00029 const QStringList &selectedPointIdentifiers) :
00030 CmdAbstract(mainWindow,
00031 document,
00032 CMD_DESCRIPTION),
00033 m_transformIsDefined (mainWindow.transformIsDefined())
00034 {
00035 LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::CmdCopy"
00036 << " selected=" << selectedPointIdentifiers.count ();
00037
00038 ExportToClipboard exportStrategy;
00039 QTextStream strCsv (&m_csv), strHtml (&m_html);
00040 exportStrategy.exportToClipboard (selectedPointIdentifiers,
00041 mainWindow.transformation(),
00042 strCsv,
00043 strHtml,
00044 document.curveAxes(),
00045 document.curvesGraphs(),
00046 m_curvesGraphs);
00047 }
00048
00049 CmdCopy::CmdCopy (MainWindow &mainWindow,
00050 Document &document,
00051 const QString &cmdDescription,
00052 QXmlStreamReader &reader) :
00053 CmdAbstract (mainWindow,
00054 document,
00055 cmdDescription)
00056 {
00057 LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::CmdCopy";
00058
00059 QXmlStreamAttributes attributes = reader.attributes();
00060
00061 if (!attributes.hasAttribute(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED) ||
00062 !attributes.hasAttribute(DOCUMENT_SERIALIZE_CSV) ||
00063 !attributes.hasAttribute(DOCUMENT_SERIALIZE_HTML)) {
00064 xmlExitWithError (reader,
00065 QString ("%1 %2, %3 %4 %5")
00066 .arg (QObject::tr ("Missing attribute(s)"))
00067 .arg (DOCUMENT_SERIALIZE_TRANSFORM_DEFINED)
00068 .arg (DOCUMENT_SERIALIZE_CSV)
00069 .arg (QObject::tr ("and/or"))
00070 .arg (DOCUMENT_SERIALIZE_HTML));
00071 }
00072
00073 QString defined = attributes.value(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED).toString();
00074
00075 m_transformIsDefined = (defined == DOCUMENT_SERIALIZE_BOOL_TRUE);
00076 m_csv = attributes.value(DOCUMENT_SERIALIZE_CSV).toString();
00077 m_html = attributes.value(DOCUMENT_SERIALIZE_HTML).toString();
00078 m_curvesGraphs.loadXml(reader);
00079 }
00080
00081 CmdCopy::~CmdCopy ()
00082 {
00083 }
00084
00085 void CmdCopy::cmdRedo ()
00086 {
00087 LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::cmdRedo";
00088
00089 MimePointsExport *mimePointsExport;
00090 if (m_transformIsDefined) {
00091 mimePointsExport = new MimePointsExport (m_csv,
00092 m_html);
00093 } else {
00094 mimePointsExport = new MimePointsExport (m_csv);
00095 }
00096
00097 QClipboard *clipboard = QApplication::clipboard();
00098 clipboard->setMimeData (mimePointsExport, QClipboard::Clipboard);
00099
00100 saveOrCheckPreCommandDocumentStateHash (document ());
00101 document().updatePointOrdinals (mainWindow().transformation());
00102 mainWindow().updateAfterCommand();
00103 saveOrCheckPostCommandDocumentStateHash (document ());
00104 }
00105
00106 void CmdCopy::cmdUndo ()
00107 {
00108 LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::cmdUndo";
00109
00110 saveOrCheckPostCommandDocumentStateHash (document ());
00111 document().updatePointOrdinals (mainWindow().transformation());
00112 mainWindow().updateAfterCommand();
00113 saveOrCheckPreCommandDocumentStateHash (document ());
00114 }
00115
00116 void CmdCopy::saveXml (QXmlStreamWriter &writer) const
00117 {
00118 writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
00119 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_COPY);
00120 writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
00121 writer.writeAttribute(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED,
00122 m_transformIsDefined ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
00123 writer.writeAttribute(DOCUMENT_SERIALIZE_CSV, m_csv);
00124 writer.writeAttribute(DOCUMENT_SERIALIZE_HTML, m_html);
00125 m_curvesGraphs.saveXml(writer);
00126 writer.writeEndElement();
00127 }