summaryrefslogtreecommitdiff
path: root/src/gui
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/gui
parente840508c39b8e85328875477bfdbe0417c4e0eb0 (diff)
added support for tikz editing/parsing
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/edgeitem.cpp13
-rw-r--r--src/gui/mainmenu.cpp11
-rw-r--r--src/gui/mainmenu.h1
-rw-r--r--src/gui/mainmenu.ui9
-rw-r--r--src/gui/mainwindow.cpp37
-rw-r--r--src/gui/mainwindow.h8
-rw-r--r--src/gui/tikzscene.cpp34
-rw-r--r--src/gui/tikzscene.h1
8 files changed, 82 insertions, 32 deletions
diff --git a/src/gui/edgeitem.cpp b/src/gui/edgeitem.cpp
index 04ee7b6..f174186 100644
--- a/src/gui/edgeitem.cpp
+++ b/src/gui/edgeitem.cpp
@@ -34,9 +34,16 @@ void EdgeItem::readPos()
QPainterPath path;
path.moveTo (toScreen(_edge->tail()));
- path.cubicTo(toScreen(_edge->cp1()),
- toScreen(_edge->cp2()),
- toScreen(_edge->head()));
+
+ if (_edge->bend() != 0 || !_edge->basicBendMode()) {
+ path.cubicTo(toScreen(_edge->cp1()),
+ toScreen(_edge->cp2()),
+ toScreen(_edge->head()));
+ }
+ else {
+ path.lineTo(toScreen(_edge->head()));
+ }
+
setPath(path);
_cp1Item->setPos(toScreen(_edge->cp1()));
diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp
index 7ebb6af..7e2584c 100644
--- a/src/gui/mainmenu.cpp
+++ b/src/gui/mainmenu.cpp
@@ -1,6 +1,8 @@
#include "mainmenu.h"
#include "tikzit.h"
+#include <QDebug>
+
MainMenu::MainMenu()
{
ui.setupUi(this);
@@ -109,6 +111,15 @@ void MainMenu::on_actionRevert_triggered()
}
}
+void MainMenu::on_actionJump_to_Selection_triggered()
+{
+ MainWindow *win = tikzit->activeWindow();
+ if (win != 0) {
+ qDebug() << "jump to selection on line:" << win->tikzScene()->lineNumberForSelection();
+ win->setSourceLine(win->tikzScene()->lineNumberForSelection());
+ }
+}
+
// View
void MainMenu::on_actionZoom_In_triggered()
diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h
index 103a74a..bceb69d 100644
--- a/src/gui/mainmenu.h
+++ b/src/gui/mainmenu.h
@@ -36,6 +36,7 @@ public slots:
// Tikz
void on_actionParse_triggered();
void on_actionRevert_triggered();
+ void on_actionJump_to_Selection_triggered();
// View
void on_actionZoom_In_triggered();
diff --git a/src/gui/mainmenu.ui b/src/gui/mainmenu.ui
index ccd6c38..6a2511e 100644
--- a/src/gui/mainmenu.ui
+++ b/src/gui/mainmenu.ui
@@ -44,6 +44,7 @@
</property>
<addaction name="actionParse"/>
<addaction name="actionRevert"/>
+ <addaction name="actionJump_to_Selection"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
@@ -190,6 +191,14 @@
<string>Revert Tikz</string>
</property>
</action>
+ <action name="actionJump_to_Selection">
+ <property name="text">
+ <string>Jump to Selection</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+J</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 9436eb3..15b6943 100644
--- a/src/gui/mainwindow.cpp
+++ b/src/gui/mainwindow.cpp
@@ -13,6 +13,7 @@
#include <QMessageBox>
#include <QFileDialog>
#include <QTextEdit>
+#include <QTextBlock>
int MainWindow::_numWindows = 0;
@@ -32,15 +33,9 @@ MainWindow::MainWindow(QWidget *parent) :
_stylePalette = new StylePalette(this);
addDockWidget(Qt::RightDockWidgetArea, _stylePalette);
-
-
_tikzScene = new TikzScene(_tikzDocument, _toolPalette, _stylePalette, this);
ui->tikzView->setScene(_tikzScene);
-
- _pristine = true;
-
-
// TODO: check if each window should have a menu
_menu = new MainMenu();
_menu->setParent(this);
@@ -52,6 +47,10 @@ MainWindow::MainWindow(QWidget *parent) :
sz[0] = sz[0] + sz[1];
sz[1] = 0;
ui->splitter->setSizes(sz);
+
+ _tikzDocument->refreshTikz();
+
+ connect(_tikzDocument->undoStack(), SIGNAL(cleanChanged(bool)), this, SLOT(updateFileName()));
}
MainWindow::~MainWindow()
@@ -62,15 +61,16 @@ MainWindow::~MainWindow()
void MainWindow::open(QString fileName)
{
- _pristine = false;
_tikzDocument->open(fileName);
- ui->tikzSource->setText(_tikzDocument->tikz());
+
+ //ui->tikzSource->setText(_tikzDocument->tikz());
if (_tikzDocument->parseSuccess()) {
statusBar()->showMessage("TiKZ parsed successfully", 2000);
- setWindowTitle("TiKZiT - " + _tikzDocument->shortName());
+ //setWindowTitle("TiKZiT - " + _tikzDocument->shortName());
_tikzScene->setTikzDocument(_tikzDocument);
+ updateFileName();
} else {
statusBar()->showMessage("Cannot read TiKZ source");
}
@@ -102,9 +102,21 @@ QString MainWindow::tikzSource()
return ui->tikzSource->toPlainText();
}
+void MainWindow::setSourceLine(int line)
+{
+ QTextCursor cursor(ui->tikzSource->document()->findBlockByLineNumber(line));
+ cursor.movePosition(QTextCursor::EndOfLine);
+ //ui->tikzSource->moveCursor(QTextCursor::End);
+ ui->tikzSource->setTextCursor(cursor);
+ ui->tikzSource->setFocus();
+}
+
void MainWindow::updateFileName()
{
- setWindowTitle("TiKZiT - " + _tikzDocument->shortName());
+ QString nm = _tikzDocument->shortName();
+ if (nm.isEmpty()) nm = "untitled";
+ if (!_tikzDocument->isClean()) nm += "*";
+ setWindowTitle("TiKZiT - " + nm);
}
void MainWindow::refreshTikz()
@@ -140,11 +152,6 @@ TikzView *MainWindow::tikzView() const
return ui->tikzView;
}
-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 dc69fbc..1e05239 100644
--- a/src/gui/mainwindow.h
+++ b/src/gui/mainwindow.h
@@ -29,7 +29,6 @@ public:
~MainWindow();
void open(QString fileName);
- bool pristine() const;
int windowId() const;
TikzView *tikzView() const;
TikzScene *tikzScene() const;
@@ -37,12 +36,12 @@ public:
ToolPalette *toolPalette() const;
StylePalette *stylePalette() const;
QString tikzSource();
-
- void updateFileName();
- void refreshTikz();
+ void setSourceLine(int line);
public slots:
void on_tikzSource_textChanged();
+ void updateFileName();
+ void refreshTikz();
protected:
void closeEvent(QCloseEvent *event);
void changeEvent(QEvent *event);
@@ -54,7 +53,6 @@ private:
ToolPalette *_toolPalette;
StylePalette *_stylePalette;
Ui::MainWindow *ui;
- bool _pristine;
int _windowId;
static int _numWindows;
};
diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp
index a650961..b26c4ba 100644
--- a/src/gui/tikzscene.cpp
+++ b/src/gui/tikzscene.cpp
@@ -20,6 +20,7 @@ TikzScene::TikzScene(TikzDocument *tikzDocument, ToolPalette *tools,
_edgeStartNodeItem = 0;
_drawEdgeItem = new QGraphicsLineItem();
_rubberBandItem = new QGraphicsRectItem();
+ _enabled = true;
//setSceneRect(-310,-230,620,450);
setSceneRect(-1000,-1000,2000,2000);
@@ -72,6 +73,7 @@ void TikzScene::graphReplaced()
}
foreach (Node *n, graph()->nodes()) {
+ n->attachStyle();
NodeItem *ni = new NodeItem(n);
_nodeItems.insert(n, ni);
addItem(ni);
@@ -366,19 +368,25 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
_rubberBandItem->setVisible(false);
if (!_oldNodePositions.empty()) {
- QMap<Node*,QPointF> newNodePositions;
+ QPointF shift = mousePos - _mouseDownPos;
+ shift = QPointF(round(shift.x()/GRID_SEP)*GRID_SEP, round(shift.y()/GRID_SEP)*GRID_SEP);
- foreach (QGraphicsItem *gi, selectedItems()) {
- if (NodeItem *ni = dynamic_cast<NodeItem*>(gi)) {
- ni->writePos();
- newNodePositions.insert(ni->node(), ni->node()->point());
+ if (shift.x() != 0 || shift.y() != 0) {
+ QMap<Node*,QPointF> newNodePositions;
+
+ foreach (QGraphicsItem *gi, selectedItems()) {
+ if (NodeItem *ni = dynamic_cast<NodeItem*>(gi)) {
+ ni->writePos();
+ newNodePositions.insert(ni->node(), ni->node()->point());
+ }
}
- }
- //qDebug() << _oldNodePositions;
- //qDebug() << newNodePositions;
+ //qDebug() << _oldNodePositions;
+ //qDebug() << newNodePositions;
+
+ _tikzDocument->undoStack()->push(new MoveCommand(this, _oldNodePositions, newNodePositions));
+ }
- _tikzDocument->undoStack()->push(new MoveCommand(this, _oldNodePositions, newNodePositions));
_oldNodePositions.clear();
}
}
@@ -483,6 +491,14 @@ void TikzScene::setEnabled(bool enabled)
update();
}
+int TikzScene::lineNumberForSelection()
+{
+ foreach (QGraphicsItem *gi, selectedItems()) {
+ if (NodeItem *ni = dynamic_cast<NodeItem*>(gi)) return ni->node()->tikzLine();
+ if (EdgeItem *ei = dynamic_cast<EdgeItem*>(gi)) return ei->edge()->tikzLine();
+ }
+}
+
void TikzScene::applyActiveStyleToNodes() {
ApplyStyleToNodesCommand *cmd = new ApplyStyleToNodesCommand(this, _styles->activeNodeStyleName());
diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h
index 3cc2e87..3b4a1e1 100644
--- a/src/gui/tikzscene.h
+++ b/src/gui/tikzscene.h
@@ -47,6 +47,7 @@ public:
void parseTikz(QString tikz);
bool enabled() const;
void setEnabled(bool enabled);
+ int lineNumberForSelection();
public slots:
void graphReplaced();