diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2018-04-06 08:36:18 +0200 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2018-04-06 08:36:18 +0200 |
commit | e840508c39b8e85328875477bfdbe0417c4e0eb0 (patch) | |
tree | b405ed169cdb1ddbd25de91dc2e87f39b1b95316 /src/gui | |
parent | 9e2116497660509afd417cc3b952ea80bbb72ce5 (diff) |
parse tikz feature
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/mainmenu.cpp | 14 | ||||
-rw-r--r-- | src/gui/mainmenu.h | 1 | ||||
-rw-r--r-- | src/gui/mainmenu.ui | 8 | ||||
-rw-r--r-- | src/gui/mainwindow.cpp | 17 | ||||
-rw-r--r-- | src/gui/mainwindow.h | 3 | ||||
-rw-r--r-- | src/gui/tikzscene.cpp | 33 | ||||
-rw-r--r-- | src/gui/tikzscene.h | 5 | ||||
-rw-r--r-- | src/gui/tikzview.cpp | 4 | ||||
-rw-r--r-- | src/gui/tikzview.h | 1 | ||||
-rw-r--r-- | src/gui/undocommands.cpp | 17 | ||||
-rw-r--r-- | src/gui/undocommands.h | 14 |
11 files changed, 115 insertions, 2 deletions
diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp index 0166caf..7ebb6af 100644 --- a/src/gui/mainmenu.cpp +++ b/src/gui/mainmenu.cpp @@ -94,7 +94,19 @@ void MainMenu::on_actionDeselect_All_triggered() // Tikz void MainMenu::on_actionParse_triggered() { - // TODO + MainWindow *win = tikzit->activeWindow(); + if (win != 0) { + win->tikzScene()->parseTikz(win->tikzSource()); + } +} + +void MainMenu::on_actionRevert_triggered() +{ + MainWindow *win = tikzit->activeWindow(); + if (win != 0) { + win->tikzDocument()->refreshTikz(); + win->tikzScene()->setEnabled(true); + } } diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h index ee167e6..103a74a 100644 --- a/src/gui/mainmenu.h +++ b/src/gui/mainmenu.h @@ -35,6 +35,7 @@ public slots: // Tikz void on_actionParse_triggered(); + void on_actionRevert_triggered(); // View void on_actionZoom_In_triggered(); diff --git a/src/gui/mainmenu.ui b/src/gui/mainmenu.ui index 2f15d5a..ccd6c38 100644 --- a/src/gui/mainmenu.ui +++ b/src/gui/mainmenu.ui @@ -43,6 +43,7 @@ <string>Tikz</string> </property> <addaction name="actionParse"/> + <addaction name="actionRevert"/> </widget> <widget class="QMenu" name="menuView"> <property name="title"> @@ -157,7 +158,7 @@ </action> <action name="actionParse"> <property name="text"> - <string>Parse</string> + <string>Parse Tikz</string> </property> <property name="shortcut"> <string>Ctrl+T</string> @@ -184,6 +185,11 @@ <string>Exit</string> </property> </action> + <action name="actionRevert"> + <property name="text"> + <string>Revert Tikz</string> + </property> + </action> <addaction name="menuFile"/> <addaction name="menuEdit"/> <addaction name="menuView"/> diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 9ce340a..9436eb3 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -12,6 +12,7 @@ #include <QSettings> #include <QMessageBox> #include <QFileDialog> +#include <QTextEdit> int MainWindow::_numWindows = 0; @@ -32,8 +33,11 @@ MainWindow::MainWindow(QWidget *parent) : addDockWidget(Qt::RightDockWidgetArea, _stylePalette); + _tikzScene = new TikzScene(_tikzDocument, _toolPalette, _stylePalette, this); ui->tikzView->setScene(_tikzScene); + + _pristine = true; @@ -93,6 +97,11 @@ StylePalette *MainWindow::stylePalette() const return _stylePalette; } +QString MainWindow::tikzSource() +{ + return ui->tikzSource->toPlainText(); +} + void MainWindow::updateFileName() { setWindowTitle("TiKZiT - " + _tikzDocument->shortName()); @@ -100,7 +109,10 @@ void MainWindow::updateFileName() void MainWindow::refreshTikz() { + // don't emit textChanged() when we update the tikz + ui->tikzSource->blockSignals(true); ui->tikzSource->setText(_tikzDocument->tikz()); + ui->tikzSource->blockSignals(false); } ToolPalette *MainWindow::toolPalette() const @@ -133,4 +145,9 @@ bool MainWindow::pristine() const return _pristine; } +void MainWindow::on_tikzSource_textChanged() +{ + if (_tikzScene->enabled()) _tikzScene->setEnabled(false); +} + diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index facce2b..dc69fbc 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -36,10 +36,13 @@ public: TikzDocument *tikzDocument() const; ToolPalette *toolPalette() const; StylePalette *stylePalette() const; + QString tikzSource(); void updateFileName(); void refreshTikz(); +public slots: + void on_tikzSource_textChanged(); protected: void closeEvent(QCloseEvent *event); void changeEvent(QEvent *event); diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp index ffc111c..a650961 100644 --- a/src/gui/tikzscene.cpp +++ b/src/gui/tikzscene.cpp @@ -80,6 +80,8 @@ void TikzScene::graphReplaced() void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { + if (!_enabled) return; + // current mouse position, in scene coordinates _mouseDownPos = event->scenePos(); @@ -181,6 +183,8 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { + if (!_enabled) return; + // current mouse position, in scene coordinates QPointF mousePos = event->scenePos(); //QRectF rb = views()[0]->rubberBandRect(); @@ -323,6 +327,8 @@ void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (!_enabled) return; + // current mouse position, in scene coordinates QPointF mousePos = event->scenePos(); @@ -415,6 +421,8 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void TikzScene::keyReleaseEvent(QKeyEvent *event) { + if (!_enabled) return; + if (event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) { deleteSelectedItems(); } else if (event->modifiers() == Qt::NoModifier) { @@ -438,6 +446,8 @@ void TikzScene::keyReleaseEvent(QKeyEvent *event) void TikzScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { + if (!_enabled) return; + QPointF mousePos = event->scenePos(); foreach (QGraphicsItem *gi, items(mousePos)) { if (EdgeItem *ei = dynamic_cast<EdgeItem*>(gi)) { @@ -462,6 +472,18 @@ void TikzScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) } } +bool TikzScene::enabled() const +{ + return _enabled; +} + +void TikzScene::setEnabled(bool enabled) +{ + _enabled = enabled; + update(); +} + + void TikzScene::applyActiveStyleToNodes() { ApplyStyleToNodesCommand *cmd = new ApplyStyleToNodesCommand(this, _styles->activeNodeStyleName()); _tikzDocument->undoStack()->push(cmd); @@ -547,6 +569,17 @@ void TikzScene::deselectAll() selectedItems().clear(); } +void TikzScene::parseTikz(QString tikz) +{ + Graph *newGraph = new Graph(this); + TikzAssembler ass(newGraph); + if (ass.parse(tikz)) { + ReplaceGraphCommand *cmd = new ReplaceGraphCommand(this, graph(), newGraph); + tikzDocument()->undoStack()->push(cmd); + setEnabled(true); + } +} + void TikzScene::getSelection(QSet<Node *> &selNodes, QSet<Edge *> &selEdges) { foreach (QGraphicsItem *gi, selectedItems()) { diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h index 7061143..3cc2e87 100644 --- a/src/gui/tikzscene.h +++ b/src/gui/tikzscene.h @@ -44,6 +44,10 @@ public: void pasteFromClipboard(); void selectAllNodes(); void deselectAll(); + void parseTikz(QString tikz); + bool enabled() const; + void setEnabled(bool enabled); + public slots: void graphReplaced(); @@ -73,6 +77,7 @@ private: int _oldBend; int _oldInAngle; int _oldOutAngle; + bool _enabled; void getSelection(QSet<Node*> &selNodes, QSet<Edge*> &selEdges); QSet<Node*> getSelectedNodes(); diff --git a/src/gui/tikzview.cpp b/src/gui/tikzview.cpp index 60db665..047ef50 100644 --- a/src/gui/tikzview.cpp +++ b/src/gui/tikzview.cpp @@ -32,6 +32,10 @@ void TikzView::setScene(QGraphicsScene *scene) void TikzView::drawBackground(QPainter *painter, const QRectF &rect) { + // draw a gray background if disabled + TikzScene *sc = static_cast<TikzScene*>(scene()); + if (!sc->enabled()) painter->fillRect(rect, QBrush(QColor(240,240,240))); + // draw the grid QPen pen1; diff --git a/src/gui/tikzview.h b/src/gui/tikzview.h index cb41fd4..b2006c8 100644 --- a/src/gui/tikzview.h +++ b/src/gui/tikzview.h @@ -20,6 +20,7 @@ class TikzView : public QGraphicsView Q_OBJECT public: explicit TikzView(QWidget *parent = 0); + public slots: void zoomIn(); void zoomOut(); diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp index 32fafbe..4c5d0dc 100644 --- a/src/gui/undocommands.cpp +++ b/src/gui/undocommands.cpp @@ -351,3 +351,20 @@ void ChangeLabelCommand::redo() GraphUpdateCommand::redo(); } + +ReplaceGraphCommand::ReplaceGraphCommand(TikzScene *scene, Graph *oldGraph, Graph *newGraph, QUndoCommand *parent) : + GraphUpdateCommand(scene, parent), _oldGraph(oldGraph), _newGraph(newGraph) +{ +} + +void ReplaceGraphCommand::undo() +{ + _scene->tikzDocument()->setGraph(_oldGraph); + _scene->graphReplaced(); +} + +void ReplaceGraphCommand::redo() +{ + _scene->tikzDocument()->setGraph(_newGraph); + _scene->graphReplaced(); +} diff --git a/src/gui/undocommands.h b/src/gui/undocommands.h index e716458..a0abb26 100644 --- a/src/gui/undocommands.h +++ b/src/gui/undocommands.h @@ -146,4 +146,18 @@ private: QString _newLabel; }; +class ReplaceGraphCommand : public GraphUpdateCommand +{ +public: + explicit ReplaceGraphCommand(TikzScene *scene, + Graph *oldGraph, + Graph *newGraph, + QUndoCommand *parent = 0); + void undo() override; + void redo() override; +private: + Graph *_oldGraph; + Graph *_newGraph; +}; + #endif // UNDOCOMMANDS_H |