summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-04-06 08:36:18 +0200
committerAleks Kissinger <aleks0@gmail.com>2018-04-06 08:36:18 +0200
commite840508c39b8e85328875477bfdbe0417c4e0eb0 (patch)
treeb405ed169cdb1ddbd25de91dc2e87f39b1b95316
parent9e2116497660509afd417cc3b952ea80bbb72ce5 (diff)
parse tikz feature
-rw-r--r--src/data/tikzdocument.cpp6
-rw-r--r--src/data/tikzdocument.h2
-rw-r--r--src/gui/mainmenu.cpp14
-rw-r--r--src/gui/mainmenu.h1
-rw-r--r--src/gui/mainmenu.ui8
-rw-r--r--src/gui/mainwindow.cpp17
-rw-r--r--src/gui/mainwindow.h3
-rw-r--r--src/gui/tikzscene.cpp33
-rw-r--r--src/gui/tikzscene.h5
-rw-r--r--src/gui/tikzview.cpp4
-rw-r--r--src/gui/tikzview.h1
-rw-r--r--src/gui/undocommands.cpp17
-rw-r--r--src/gui/undocommands.h14
-rw-r--r--stylepalette.cpp2
14 files changed, 125 insertions, 2 deletions
diff --git a/src/data/tikzdocument.cpp b/src/data/tikzdocument.cpp
index 4a813ad..bf39f67 100644
--- a/src/data/tikzdocument.cpp
+++ b/src/data/tikzdocument.cpp
@@ -96,6 +96,12 @@ void TikzDocument::save() {
}
}
+void TikzDocument::setGraph(Graph *graph)
+{
+ _graph = graph;
+ refreshTikz();
+}
+
void TikzDocument::saveAs() {
QSettings settings("tikzit", "tikzit");
QString fileName = QFileDialog::getSaveFileName(tikzit->activeWindow(),
diff --git a/src/data/tikzdocument.h b/src/data/tikzdocument.h
index edb1beb..9b6893a 100644
--- a/src/data/tikzdocument.h
+++ b/src/data/tikzdocument.h
@@ -19,6 +19,7 @@ public:
~TikzDocument();
Graph *graph() const;
+ void setGraph(Graph *graph);
QString tikz() const;
QUndoStack *undoStack() const;
bool parseSuccess() const;
@@ -30,6 +31,7 @@ public:
void saveAs();
void save();
+
private:
Graph *_graph;
QString _tikz;
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
diff --git a/stylepalette.cpp b/stylepalette.cpp
index bd82e30..1416cc3 100644
--- a/stylepalette.cpp
+++ b/stylepalette.cpp
@@ -28,6 +28,8 @@ StylePalette::StylePalette(QWidget *parent) :
ui->styleListView->setMovement(QListView::Static);
ui->styleListView->setGridSize(QSize(70,40));
+ reloadStyles();
+
connect(ui->styleListView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT( itemDoubleClicked(const QModelIndex&)) );
}