summaryrefslogtreecommitdiff
path: root/src/data
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-04-09 11:40:54 +0200
committerAleks Kissinger <aleks0@gmail.com>2018-04-09 11:40:54 +0200
commitba8e3d516afefbb4a43227525ddb6525547a650e (patch)
tree22348b60954931253c062c79bd3b315e036bc400 /src/data
parente840508c39b8e85328875477bfdbe0417c4e0eb0 (diff)
added support for tikz editing/parsing
Diffstat (limited to 'src/data')
-rw-r--r--src/data/edge.cpp10
-rw-r--r--src/data/edge.h5
-rw-r--r--src/data/graph.cpp1
-rw-r--r--src/data/tikzdocument.cpp42
-rw-r--r--src/data/tikzdocument.h3
-rw-r--r--src/data/tikzlexer.l2
-rw-r--r--src/data/tikzparserdefs.h2
7 files changed, 62 insertions, 3 deletions
diff --git a/src/data/edge.cpp b/src/data/edge.cpp
index 5c49aba..d0f0deb 100644
--- a/src/data/edge.cpp
+++ b/src/data/edge.cpp
@@ -329,6 +329,16 @@ void Edge::setWeight(float weight)
_weight = weight;
}
+int Edge::tikzLine() const
+{
+ return _tikzLine;
+}
+
+void Edge::setTikzLine(int tikzLine)
+{
+ _tikzLine = tikzLine;
+}
+
QPointF Edge::mid() const
{
return _mid;
diff --git a/src/data/edge.h b/src/data/edge.h
index f010acd..7df899f 100644
--- a/src/data/edge.h
+++ b/src/data/edge.h
@@ -57,6 +57,9 @@ public:
void setOutAngle(int outAngle);
void setWeight(float weight);
+ int tikzLine() const;
+ void setTikzLine(int tikzLine);
+
signals:
public slots:
@@ -86,6 +89,8 @@ private:
QPointF _cp1;
QPointF _cp2;
QPointF _mid;
+
+ int _tikzLine;
};
#endif // EDGE_H
diff --git a/src/data/graph.cpp b/src/data/graph.cpp
index 33af93d..dec992f 100644
--- a/src/data/graph.cpp
+++ b/src/data/graph.cpp
@@ -179,6 +179,7 @@ QString Graph::tikz()
Edge *e;
foreach (e, _edges) {
+ e->setTikzLine(line);
e->updateData();
code << "\t\t\\draw ";
diff --git a/src/data/tikzdocument.cpp b/src/data/tikzdocument.cpp
index bf39f67..206ec5b 100644
--- a/src/data/tikzdocument.cpp
+++ b/src/data/tikzdocument.cpp
@@ -17,6 +17,7 @@ TikzDocument::TikzDocument(QObject *parent) : QObject(parent)
_fileName = "";
_shortName = "";
_undoStack = new QUndoStack();
+ _undoStack->setClean();
}
TikzDocument::~TikzDocument()
@@ -68,6 +69,8 @@ void TikzDocument::open(QString fileName)
foreach (Node *n, _graph->nodes()) n->attachStyle();
foreach (Edge *e, _graph->edges()) e->updateControls();
_parseSuccess = true;
+ refreshTikz();
+ setClean();
} else {
delete newGraph;
_parseSuccess = false;
@@ -78,6 +81,18 @@ void TikzDocument::save() {
if (_fileName == "") {
saveAs();
} else {
+ MainWindow *win = tikzit->activeWindow();
+ if (win != 0 && !win->tikzScene()->enabled()) {
+ win->tikzScene()->parseTikz(win->tikzSource());
+ if (!win->tikzScene()->enabled()) {
+ auto resp = QMessageBox::question(0,
+ tr("Tikz failed to parse"),
+ tr("Cannot save file with invalid TiKZ source. Revert changes and save?"));
+ if (resp == QMessageBox::Yes) win->tikzScene()->setEnabled(true);
+ else return; // ABORT the save
+ }
+ }
+
refreshTikz();
QFile file(_fileName);
QFileInfo fi(file);
@@ -89,13 +104,23 @@ void TikzDocument::save() {
QTextStream stream(&file);
stream << _tikz;
file.close();
- tikzit->activeWindow()->updateFileName();
+ setClean();
} else {
QMessageBox::warning(0, "Save Failed", "Could not open file: '" + _fileName + "' for writing.");
}
}
}
+bool TikzDocument::isClean() const
+{
+ return _undoStack->isClean();
+}
+
+void TikzDocument::setClean()
+{
+ _undoStack->setClean();
+}
+
void TikzDocument::setGraph(Graph *graph)
{
_graph = graph;
@@ -103,6 +128,18 @@ void TikzDocument::setGraph(Graph *graph)
}
void TikzDocument::saveAs() {
+ MainWindow *win = tikzit->activeWindow();
+ if (win != 0 && !win->tikzScene()->enabled()) {
+ win->tikzScene()->parseTikz(win->tikzSource());
+ if (!win->tikzScene()->enabled()) {
+ auto resp = QMessageBox::question(0,
+ tr("Tikz failed to parse"),
+ tr("Cannot save file with invalid TiKZ source. Revert changes and save?"));
+ if (resp == QMessageBox::Yes) win->tikzScene()->setEnabled(true);
+ else return; // ABORT the save
+ }
+ }
+
QSettings settings("tikzit", "tikzit");
QString fileName = QFileDialog::getSaveFileName(tikzit->activeWindow(),
tr("Save File As"),
@@ -112,6 +149,9 @@ void TikzDocument::saveAs() {
if (!fileName.isEmpty()) {
_fileName = fileName;
save();
+
+ // clean state might not change, so update title bar manually
+ tikzit->activeWindow()->updateFileName();
}
}
diff --git a/src/data/tikzdocument.h b/src/data/tikzdocument.h
index 9b6893a..8f16a53 100644
--- a/src/data/tikzdocument.h
+++ b/src/data/tikzdocument.h
@@ -32,6 +32,9 @@ public:
void saveAs();
void save();
+ bool isClean() const;
+ void setClean();
+
private:
Graph *_graph;
QString _tikz;
diff --git a/src/data/tikzlexer.l b/src/data/tikzlexer.l
index 0a7ff39..d90ad4b 100644
--- a/src/data/tikzlexer.l
+++ b/src/data/tikzlexer.l
@@ -97,7 +97,7 @@ to { return TO; }
}
<ycoord>\) {
BEGIN(INITIAL);
- return COORD;
+ return TCOORD;
}
/* when we see "[", change parsing mode */
diff --git a/src/data/tikzparserdefs.h b/src/data/tikzparserdefs.h
index 1625136..5865739 100644
--- a/src/data/tikzparserdefs.h
+++ b/src/data/tikzparserdefs.h
@@ -17,6 +17,6 @@ struct noderef {
char *anchor;
};
-inline int isatty(void*) { return 0; }
+inline int isatty(int) { return 0; }
#endif // TIKZPARSERDEFS_H