From 5816cd5d5e3edf7ee7a7273c7c3a3d907dc54a4a Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Tue, 5 Dec 2017 17:55:04 +0000 Subject: Qt --- tikzit/src/gui/commands.cpp | 0 tikzit/src/gui/commands.h | 4 + tikzit/src/gui/edgeitem.cpp | 39 +++++++--- tikzit/src/gui/edgeitem.h | 1 + tikzit/src/gui/mainmenu.ui | 146 +++++++++++++++++++++++++++++++++++++ tikzit/src/gui/mainwindow.cpp | 36 ++------- tikzit/src/gui/mainwindow.h | 3 +- tikzit/src/gui/nodeitem.cpp | 18 +++++ tikzit/src/gui/nodeitem.h | 1 + tikzit/src/gui/propertypalette.cpp | 1 - tikzit/src/gui/tikzscene.cpp | 6 ++ 11 files changed, 215 insertions(+), 40 deletions(-) create mode 100644 tikzit/src/gui/commands.cpp create mode 100644 tikzit/src/gui/commands.h create mode 100644 tikzit/src/gui/mainmenu.ui (limited to 'tikzit/src/gui') diff --git a/tikzit/src/gui/commands.cpp b/tikzit/src/gui/commands.cpp new file mode 100644 index 0000000..e69de29 diff --git a/tikzit/src/gui/commands.h b/tikzit/src/gui/commands.h new file mode 100644 index 0000000..73bfaa7 --- /dev/null +++ b/tikzit/src/gui/commands.h @@ -0,0 +1,4 @@ +#ifndef COMMANDS_H +#define COMMANDS_H + +#endif // COMMANDS_H diff --git a/tikzit/src/gui/edgeitem.cpp b/tikzit/src/gui/edgeitem.cpp index f45493d..cb275a5 100644 --- a/tikzit/src/gui/edgeitem.cpp +++ b/tikzit/src/gui/edgeitem.cpp @@ -14,8 +14,16 @@ EdgeItem::EdgeItem(Edge *edge) setPen(pen); _cp1Item = new QGraphicsEllipseItem(this); _cp1Item->setParentItem(this); + _cp1Item->setRect(GLOBAL_SCALEF * (-0.05), GLOBAL_SCALEF * (-0.05), + GLOBAL_SCALEF * 0.1, GLOBAL_SCALEF * 0.1); + _cp1Item->setVisible(false); + _cp2Item = new QGraphicsEllipseItem(this); _cp2Item->setParentItem(this); + _cp2Item->setRect(GLOBAL_SCALEF * (-0.05), GLOBAL_SCALEF * (-0.05), + GLOBAL_SCALEF * 0.1, GLOBAL_SCALEF * 0.1); + _cp2Item->setVisible(false); + syncPos(); } @@ -31,9 +39,8 @@ void EdgeItem::syncPos() toScreen(_edge->head())); setPath(path); - float r = GLOBAL_SCALEF * 0.05; - //painter->drawEllipse(toScreen(_edge->cp1()), r, r); - //painter->drawEllipse(toScreen(_edge->cp2()), r, r); + _cp1Item->setPos(toScreen(_edge->cp1())); + _cp2Item->setPos(toScreen(_edge->cp2())); } void EdgeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) @@ -43,8 +50,6 @@ void EdgeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, painter->setBrush(Qt::NoBrush); painter->drawPath(path()); - - if (isSelected()) { QColor draw; QColor draw1; @@ -72,18 +77,34 @@ void EdgeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, painter->drawLine(toScreen(_edge->tail()), toScreen(_edge->cp1())); painter->drawLine(toScreen(_edge->head()), toScreen(_edge->cp2())); - r = GLOBAL_SCALEF * 0.05; - painter->drawEllipse(toScreen(_edge->cp1()), r, r); - painter->drawEllipse(toScreen(_edge->cp2()), r, r); + //painter->drawEllipse(toScreen(_edge->cp1()), r, r); + //painter->drawEllipse(toScreen(_edge->cp2()), r, r); + + _cp1Item->setPen(QPen(draw)); + _cp1Item->setBrush(QBrush(fill)); + _cp1Item->setVisible(true); + _cp2Item->setPen(QPen(draw)); + _cp2Item->setBrush(QBrush(fill)); + _cp2Item->setVisible(true); + + r = GLOBAL_SCALEF * 0.05; painter->setPen(QPen(Qt::black)); painter->setBrush(QBrush(QColor(255,255,255,200))); painter->drawEllipse(toScreen(_edge->mid()), r, r); + } else { + _cp1Item->setVisible(false); + _cp2Item->setVisible(false); } } QRectF EdgeItem::boundingRect() const { float r = GLOBAL_SCALEF * (_edge->cpDist() + 0.2); - return QGraphicsPathItem::boundingRect().adjusted(-r,-r,r,r); + return shape().boundingRect().adjusted(-r,-r,r,r); +} + +Edge *EdgeItem::edge() const +{ + return _edge; } diff --git a/tikzit/src/gui/edgeitem.h b/tikzit/src/gui/edgeitem.h index 935138b..ed04772 100644 --- a/tikzit/src/gui/edgeitem.h +++ b/tikzit/src/gui/edgeitem.h @@ -18,6 +18,7 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QRectF boundingRect() const; + Edge *edge() const; private: Edge *_edge; diff --git a/tikzit/src/gui/mainmenu.ui b/tikzit/src/gui/mainmenu.ui new file mode 100644 index 0000000..d3eed0a --- /dev/null +++ b/tikzit/src/gui/mainmenu.ui @@ -0,0 +1,146 @@ + + + MainMenu + + + + 0 + 0 + 476 + 22 + + + + + File + + + + + + + + + + + Edit + + + + + + + + + + + + + + + Tikz + + + + + + View + + + + + + + + + + + New... + + + + + Open... + + + + + Close + + + + + Save + + + + + Save As... + + + + + Undo + + + + + Redo + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Delete + + + + + Select All + + + + + Deselect All + + + + + Parse + + + Ctrl+T + + + + + Zoom In + + + Ctrl+= + + + + + Zoom Out + + + Ctrl+- + + + + diff --git a/tikzit/src/gui/mainwindow.cpp b/tikzit/src/gui/mainwindow.cpp index 7d7ab04..980a312 100644 --- a/tikzit/src/gui/mainwindow.cpp +++ b/tikzit/src/gui/mainwindow.cpp @@ -21,8 +21,8 @@ MainWindow::MainWindow(QWidget *parent) : _numWindows++; ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose, true); - _graph = new Graph(this); - _tikzScene = new TikzScene(_graph, this); + _tikzDocument = new TikzDocument(this); + _tikzScene = new TikzScene(_tikzDocument->graph(), this); ui->tikzView->setScene(_tikzScene); _fileName = ""; _pristine = true; @@ -41,39 +41,17 @@ MainWindow::~MainWindow() void MainWindow::open(QString fileName) { - _fileName = fileName; _pristine = false; - QFile file(fileName); - QFileInfo fi(file); - QSettings settings("tikzit", "tikzit"); - settings.setValue("previous-file-path", fi.absolutePath()); + _tikzDocument->open(fileName); + ui->tikzSource->setText(_tikzDocument->tikz()); - setWindowTitle("TiKZiT - " + fi.fileName()); - if (!file.open(QIODevice::ReadOnly)) { - QMessageBox::critical(this, tr("Error"), - tr("Could not open file")); - return; - } - - QTextStream in(&file); - QString tikz = in.readAll(); - file.close(); - - ui->tikzSource->setText(tikz); - - Graph *newGraph = new Graph(this); - TikzGraphAssembler ass(newGraph); - if (ass.parse(tikz)) { + if (_tikzDocument->parseSuccess()) { statusBar()->showMessage("TiKZ parsed successfully", 2000); - delete _graph; - _graph = newGraph; - foreach (Node *n, _graph->nodes()) n->attachStyle(); - foreach (Edge *e, _graph->edges()) e->updateControls(); - _tikzScene->setGraph(_graph); + setWindowTitle("TiKZiT - " + _tikzDocument->shortName()); + _tikzScene->setGraph(_tikzDocument->graph()); } else { statusBar()->showMessage("Cannot read TiKZ source"); - delete newGraph; } } diff --git a/tikzit/src/gui/mainwindow.h b/tikzit/src/gui/mainwindow.h index 2e52cd5..66df23f 100644 --- a/tikzit/src/gui/mainwindow.h +++ b/tikzit/src/gui/mainwindow.h @@ -4,6 +4,7 @@ #include "tikzscene.h" #include "tikzview.h" #include "graph.h" +#include "tikzdocument.h" #include #include @@ -31,8 +32,8 @@ protected: void changeEvent(QEvent *event); private: TikzScene *_tikzScene; + TikzDocument *_tikzDocument; Ui::MainWindow *ui; - Graph *_graph; QString _fileName; bool _pristine; int _windowId; diff --git a/tikzit/src/gui/nodeitem.cpp b/tikzit/src/gui/nodeitem.cpp index d91bfd6..6e21ea4 100644 --- a/tikzit/src/gui/nodeitem.cpp +++ b/tikzit/src/gui/nodeitem.cpp @@ -1,7 +1,10 @@ #include "tikzit.h" #include "nodeitem.h" +#include "tikzscene.h" +#include #include +#include #include #include #include @@ -13,6 +16,7 @@ NodeItem::NodeItem(Node *node) _node = node; setFlag(QGraphicsItem::ItemIsSelectable); setFlag(QGraphicsItem::ItemIsMovable); + setFlag(QGraphicsItem::ItemSendsGeometryChanges); syncPos(); } @@ -91,3 +95,17 @@ QRectF NodeItem::boundingRect() const { return shape().boundingRect().adjusted(-4,-4,4,4); } + +QVariant NodeItem::itemChange(GraphicsItemChange change, const QVariant &value) +{ + if (change == ItemPositionChange) { + QPointF newPos = value.toPointF(); + int gridSize = GLOBAL_SCALE / 8; + QPointF gridPos(round(newPos.x()/gridSize)*gridSize, round(newPos.y()/gridSize)*gridSize); + _node->setPoint(fromScreen(gridPos)); + + return gridPos; + } else { + return QGraphicsItem::itemChange(change, value); + } +} diff --git a/tikzit/src/gui/nodeitem.h b/tikzit/src/gui/nodeitem.h index 867d8a3..107871e 100644 --- a/tikzit/src/gui/nodeitem.h +++ b/tikzit/src/gui/nodeitem.h @@ -14,6 +14,7 @@ public: NodeItem(Node *node); void syncPos(); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + QVariant itemChange(GraphicsItemChange change, const QVariant &value); QPainterPath shape() const; QRectF boundingRect() const; private: diff --git a/tikzit/src/gui/propertypalette.cpp b/tikzit/src/gui/propertypalette.cpp index ea906a7..5fc763f 100644 --- a/tikzit/src/gui/propertypalette.cpp +++ b/tikzit/src/gui/propertypalette.cpp @@ -12,7 +12,6 @@ PropertyPalette::PropertyPalette(QWidget *parent) : ui(new Ui::PropertyPalette) { setWindowFlags(Qt::Window - | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint); //setFocusPolicy(Qt::NoFocus); diff --git a/tikzit/src/gui/tikzscene.cpp b/tikzit/src/gui/tikzscene.cpp index cf7cde5..058835d 100644 --- a/tikzit/src/gui/tikzscene.cpp +++ b/tikzit/src/gui/tikzscene.cpp @@ -59,6 +59,12 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { + //foreach (Edge *e, _graph->edges()) { e->updateControls(); } + foreach (EdgeItem *ei, edgeItems) { + ei->edge()->updateControls(); + ei->syncPos(); + } + QGraphicsScene::mouseMoveEvent(event); } -- cgit v1.2.3