Engauge Digitizer  2
CmdCopy.cpp
1 /******************************************************************************************************
2  * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "CmdCopy.h"
8 #include "DataKey.h"
9 #include "Document.h"
10 #include "DocumentSerialize.h"
11 #include "EngaugeAssert.h"
12 #include "ExportToClipboard.h"
13 #include "GraphicsItemType.h"
14 #include "GraphicsView.h"
15 #include "Logger.h"
16 #include "MainWindow.h"
17 #include "MimePointsExport.h"
18 #include <QApplication>
19 #include <QClipboard>
20 #include <QTextStream>
21 #include "QtToString.h"
22 #include <QXmlStreamReader>
23 #include "Xml.h"
24 
25 const QString CMD_DESCRIPTION ("Copy");
26 
28  Document &document,
29  const QStringList &selectedPointIdentifiers) :
30  CmdAbstract(mainWindow,
31  document,
32  CMD_DESCRIPTION),
33  m_transformIsDefined (mainWindow.transformIsDefined())
34 {
35  LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::CmdCopy"
36  << " selected=" << selectedPointIdentifiers.count ();
37 
38  ExportToClipboard exportStrategy;
39  QTextStream strCsv (&m_csv), strHtml (&m_html);
40  exportStrategy.exportToClipboard (selectedPointIdentifiers,
41  mainWindow.transformation(),
42  strCsv,
43  strHtml,
44  document.curveAxes(),
45  document.curvesGraphs(),
46  m_curvesGraphs);
47 }
48 
51  const QString &cmdDescription,
52  QXmlStreamReader &reader) :
53  CmdAbstract (mainWindow,
54  document,
55  cmdDescription)
56 {
57  LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::CmdCopy";
58 
59  QXmlStreamAttributes attributes = reader.attributes();
60 
61  if (!attributes.hasAttribute(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED) ||
62  !attributes.hasAttribute(DOCUMENT_SERIALIZE_CSV) ||
63  !attributes.hasAttribute(DOCUMENT_SERIALIZE_HTML)) {
64  xmlExitWithError (reader,
65  QString ("%1 %2, %3 %4 %5")
66  .arg (QObject::tr ("Missing attribute(s)"))
67  .arg (DOCUMENT_SERIALIZE_TRANSFORM_DEFINED)
68  .arg (DOCUMENT_SERIALIZE_CSV)
69  .arg (QObject::tr ("and/or"))
70  .arg (DOCUMENT_SERIALIZE_HTML));
71  }
72 
73  QString defined = attributes.value(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED).toString();
74 
75  m_transformIsDefined = (defined == DOCUMENT_SERIALIZE_BOOL_TRUE);
76  m_csv = attributes.value(DOCUMENT_SERIALIZE_CSV).toString();
77  m_html = attributes.value(DOCUMENT_SERIALIZE_HTML).toString();
78  m_curvesGraphs.loadXml(reader);
79 }
80 
81 CmdCopy::~CmdCopy ()
82 {
83 }
84 
86 {
87  LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::cmdRedo";
88 
89  MimePointsExport *mimePointsExport;
90  if (m_transformIsDefined) {
91  mimePointsExport = new MimePointsExport (m_csv,
92  m_html);
93  } else {
94  mimePointsExport = new MimePointsExport (m_csv);
95  }
96 
97  QClipboard *clipboard = QApplication::clipboard();
98  clipboard->setMimeData (mimePointsExport, QClipboard::Clipboard);
99 
101  document().updatePointOrdinals (mainWindow().transformation());
104 }
105 
107 {
108  LOG4CPP_INFO_S ((*mainCat)) << "CmdCopy::cmdUndo";
109 
111  document().updatePointOrdinals (mainWindow().transformation());
114 }
115 
116 void CmdCopy::saveXml (QXmlStreamWriter &writer) const
117 {
118  writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
119  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_COPY);
120  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
121  writer.writeAttribute(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED,
122  m_transformIsDefined ? DOCUMENT_SERIALIZE_BOOL_TRUE : DOCUMENT_SERIALIZE_BOOL_FALSE);
123  writer.writeAttribute(DOCUMENT_SERIALIZE_CSV, m_csv);
124  writer.writeAttribute(DOCUMENT_SERIALIZE_HTML, m_html);
125  m_curvesGraphs.saveXml(writer);
126  writer.writeEndElement();
127 }
virtual void cmdUndo()
Undo method that is called when QUndoStack is moved one command backward.
Definition: CmdCopy.cpp:106
CmdCopy(MainWindow &mainWindow, Document &document, const QStringList &selectedPointIdentifiers)
Constructor for normal creation.
Definition: CmdCopy.cpp:27
void loadXml(QXmlStreamReader &reader)
Load from serialized xml post-version 5 file.
Wrapper around QUndoCommand. This simplifies the more complicated feature set of QUndoCommand.
Definition: CmdAbstract.h:19
Transformation transformation() const
Return read-only copy of transformation.
void saveOrCheckPostCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
void saveXml(QXmlStreamWriter &writer) const
Serialize curves.
virtual void cmdRedo()
Redo method that is called when QUndoStack is moved one command forward.
Definition: CmdCopy.cpp:85
void saveOrCheckPreCommandDocumentStateHash(const Document &document)
Save, when called the first time, a hash value representing the state of the Document.
Custom mime type for separate treatment of graph coordinates and, when there is no transform...
MainWindow & mainWindow()
Return the MainWindow so it can be updated by this command as a last step.
Definition: CmdAbstract.cpp:45
virtual void saveXml(QXmlStreamWriter &writer) const
Save commands as xml for later uploading.
Definition: CmdCopy.cpp:116
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
Strategy class for exporting to the clipboard. This strategy is external to the Document class so tha...
Document & document()
Return the Document that this command will modify during redo and undo.
Definition: CmdAbstract.cpp:35
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:339
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:318
void exportToClipboard(const QStringList &selected, const Transformation &transformation, QTextStream &strCsv, QTextStream &strHtml, const Curve &curveAxis, const CurvesGraphs &curvesGraphsAll, CurvesGraphs &curvesGraphsSelected) const
Export, curve-by-curve, raw data points to a string that will be copied to the clipboard.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:89
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:1060