Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
CmdCut.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 "CmdCut.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 "MimePoints.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 ("Cut");
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)) << "CmdCut::CmdCut"
36  << " selected=(" << selectedPointIdentifiers.join (", ").toLatin1 ().data () << ")";
37 
38  // Export to clipboard
39  ExportToClipboard exportStrategy;
40  QTextStream strCsv (&m_csv), strHtml (&m_html);
41  exportStrategy.exportToClipboard (selectedPointIdentifiers,
42  mainWindow.transformation(),
43  strCsv,
44  strHtml,
45  document.curveAxes(),
46  document.curvesGraphs(),
47  m_curvesGraphsRemoved);
48 }
49 
51  Document &document,
52  const QString &cmdDescription,
53  QXmlStreamReader &reader) :
54  CmdAbstract (mainWindow,
55  document,
56  cmdDescription)
57 {
58  LOG4CPP_INFO_S ((*mainCat)) << "CmdCut::CmdCut";
59 
60  QXmlStreamAttributes attributes = reader.attributes();
61 
62  if (!attributes.hasAttribute(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED) ||
63  !attributes.hasAttribute(DOCUMENT_SERIALIZE_CSV) ||
64  !attributes.hasAttribute(DOCUMENT_SERIALIZE_HTML)) {
65  xmlExitWithError (reader,
66  QString ("%1 %2, %3 %4 %5")
67  .arg (QObject::tr ("Missing argument(s)"))
68  .arg (DOCUMENT_SERIALIZE_TRANSFORM_DEFINED)
69  .arg (DOCUMENT_SERIALIZE_CSV)
70  .arg (QObject::tr ("and/or"))
71  .arg (DOCUMENT_SERIALIZE_HTML));
72  }
73 
74  QString defined = attributes.value(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED).toString();
75 
76  m_transformIsDefined = (defined == DOCUMENT_SERIALIZE_BOOL_TRUE);
77  m_csv = attributes.value(DOCUMENT_SERIALIZE_CSV).toString();
78  m_html = attributes.value(DOCUMENT_SERIALIZE_HTML).toString();
79  m_curvesGraphsRemoved.loadXml(reader);
80 }
81 
82 CmdCut::~CmdCut ()
83 {
84 }
85 
87 {
88  LOG4CPP_INFO_S ((*mainCat)) << "CmdCut::cmdRedo";
89 
90  MimePoints *mimePoints;
91  if (m_transformIsDefined) {
92  mimePoints = new MimePoints (m_csv,
93  m_html);
94  } else {
95  mimePoints = new MimePoints (m_csv);
96  }
97 
98  QClipboard *clipboard = QApplication::clipboard();
99  clipboard->setMimeData (mimePoints, QClipboard::Clipboard);
100 
101  document().removePointsInCurvesGraphs (m_curvesGraphsRemoved);
102 
103  document().updatePointOrdinals (mainWindow().transformation());
105 }
106 
108 {
109  LOG4CPP_INFO_S ((*mainCat)) << "CmdCut::cmdUndo";
110 
111  document().addPointsInCurvesGraphs (m_curvesGraphsRemoved);
112 
113  document().updatePointOrdinals (mainWindow().transformation());
115 }
116 
117 void CmdCut::saveXml (QXmlStreamWriter &writer) const
118 {
119  writer.writeStartElement(DOCUMENT_SERIALIZE_CMD);
120  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_TYPE, DOCUMENT_SERIALIZE_CMD_CUT);
121  writer.writeAttribute(DOCUMENT_SERIALIZE_CMD_DESCRIPTION, QUndoCommand::text ());
122  writer.writeAttribute(DOCUMENT_SERIALIZE_TRANSFORM_DEFINED,
123  m_transformIsDefined ? DOCUMENT_SERIALIZE_BOOL_TRUE: DOCUMENT_SERIALIZE_BOOL_FALSE);
124  writer.writeAttribute(DOCUMENT_SERIALIZE_CSV, m_csv);
125  writer.writeAttribute(DOCUMENT_SERIALIZE_HTML, m_html);
126  m_curvesGraphsRemoved.saveXml(writer);
127  writer.writeEndElement();
128 }
void saveXml(QXmlStreamWriter &writer) const
Serialize curves.
void loadXml(QXmlStreamReader &reader)
Load from serialized xml post-version 5 file.
CmdCut(MainWindow &mainWindow, Document &document, const QStringList &selectedPointIdentifiers)
Constructor for normal creation.
Definition: CmdCut.cpp:27
Transformation transformation() const
Return read-only copy of transformation.
virtual void cmdUndo()
Undo method that is called when QUndoStack is moved one command backward.
Definition: CmdCut.cpp:107
Wrapper around QUndoCommand. This simplifies the more complicated feature set of QUndoCommand.
Definition: CmdAbstract.h:18
virtual void cmdRedo()
Redo method that is called when QUndoStack is moved one command forward.
Definition: CmdCut.cpp:86
const Curve & curveAxes() const
Get method for axis curve.
Definition: Document.cpp:284
Custom mime type for separate treatment of graph coordinates and, when there is no transform...
Definition: MimePoints.h:13
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.
void removePointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Remove all points identified in the specified CurvesGraphs. See also addPointsInCurvesGraphs.
Definition: Document.cpp:741
MainWindow & mainWindow()
Return the MainWindow so it can be updated by this command as a last step.
Definition: CmdAbstract.cpp:43
void updateAfterCommand()
See GraphicsScene::updateAfterCommand.
Storage of one imported image and the data attached to that image.
Definition: Document.h:40
virtual void saveXml(QXmlStreamWriter &writer) const
Save commands as xml for later uploading.
Definition: CmdCut.cpp:117
const CurvesGraphs & curvesGraphs() const
Make all Curves available, read only, for CmdAbstract classes only.
Definition: Document.cpp:305
Strategy class for exporting to the clipboard. This strategy is external to the Document class so tha...
void addPointsInCurvesGraphs(CurvesGraphs &curvesGraphs)
Add all points identified in the specified CurvesGraphs. See also removePointsInCurvesGraphs.
Definition: Document.cpp:210
Document & document()
Return the Document that this command will modify during redo and undo.
Definition: CmdAbstract.cpp:33
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:77
void updatePointOrdinals(const Transformation &transformation)
Update point ordinals after point addition/removal or dragging.
Definition: Document.cpp:903