diff options
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/edge.cpp | 10 | ||||
-rw-r--r-- | src/data/edge.h | 5 | ||||
-rw-r--r-- | src/data/graph.cpp | 1 | ||||
-rw-r--r-- | src/data/tikzdocument.cpp | 42 | ||||
-rw-r--r-- | src/data/tikzdocument.h | 3 | ||||
-rw-r--r-- | src/data/tikzlexer.l | 2 | ||||
-rw-r--r-- | src/data/tikzparserdefs.h | 2 |
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 |