From 09c331761648541de907c866c56fb6084c6f7a9b Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Thu, 15 Feb 2018 16:32:33 +0100 Subject: added support for changing edge mode, and started working on windows support --- src/gui/mainmenu.cpp | 5 +++++ src/gui/mainmenu.h | 1 + src/gui/mainmenu.ui | 7 +++++++ src/gui/mainwindow.cpp | 17 +++++++++++++++-- src/gui/mainwindow.h | 4 ++++ src/gui/mainwindow.ui | 8 +++++++- src/gui/propertypalette.cpp | 2 +- src/gui/tikzscene.cpp | 24 +++++++++++++++++++----- src/gui/tikzscene.h | 5 ++++- src/gui/tikzview.cpp | 1 + src/gui/toolpalette.cpp | 10 +++++----- src/gui/undocommands.cpp | 22 ++++++++++++++++++++++ src/gui/undocommands.h | 11 +++++++++++ 13 files changed, 102 insertions(+), 15 deletions(-) (limited to 'src/gui') diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp index c9e83ba..714ed34 100644 --- a/src/gui/mainmenu.cpp +++ b/src/gui/mainmenu.cpp @@ -32,6 +32,11 @@ void MainMenu::on_actionSave_As_triggered() // TODO } +void MainMenu::on_actionExit_triggered() +{ + tikzit->quit(); +} + // Edit void MainMenu::on_actionUndo_triggered() diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h index d85e271..ee167e6 100644 --- a/src/gui/mainmenu.h +++ b/src/gui/mainmenu.h @@ -21,6 +21,7 @@ public slots: void on_actionClose_triggered(); void on_actionSave_triggered(); void on_actionSave_As_triggered(); + void on_actionExit_triggered(); // Edit void on_actionUndo_triggered(); diff --git a/src/gui/mainmenu.ui b/src/gui/mainmenu.ui index c9b6f44..2f15d5a 100644 --- a/src/gui/mainmenu.ui +++ b/src/gui/mainmenu.ui @@ -20,6 +20,8 @@ + + @@ -177,6 +179,11 @@ Ctrl+- + + + Exit + + diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 54474ae..eac7c44 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1,5 +1,7 @@ #include "mainwindow.h" #include "ui_mainwindow.h" + +#include "mainmenu.h" #include "tikzassembler.h" #include "toolpalette.h" #include "tikzit.h" @@ -22,11 +24,22 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose, true); _tikzDocument = new TikzDocument(this); - _tikzScene = new TikzScene(_tikzDocument, this); + + _tools = new ToolPalette(this); + addToolBar(_tools); + + _tikzScene = new TikzScene(_tikzDocument, _tools, this); ui->tikzView->setScene(_tikzScene); _fileName = ""; _pristine = true; + + // TODO: check if each window should have a menu + _menu = new MainMenu(); + _menu->setParent(this); + + setMenuBar(_menu); + // initially, the source view should be collapsed QList sz = ui->splitter->sizes(); sz[0] = sz[0] + sz[1]; @@ -59,7 +72,7 @@ void MainWindow::open(QString fileName) void MainWindow::closeEvent(QCloseEvent *event) { - //qDebug() << "got close event"; + qDebug() << "got close event"; QMainWindow::closeEvent(event); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 8adf1bc..ba680b0 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -9,6 +9,8 @@ #include "tikzview.h" #include "graph.h" #include "tikzdocument.h" +#include "mainmenu.h" +#include "toolpalette.h" #include #include @@ -38,6 +40,8 @@ protected: private: TikzScene *_tikzScene; TikzDocument *_tikzDocument; + MainMenu *_menu; + ToolPalette *_tools; Ui::MainWindow *ui; QString _fileName; bool _pristine; diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 56a5c2d..137d6cf 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -7,13 +7,19 @@ 0 0 640 - 480 + 580 TikZiT - untitled + + + 0 + 0 + + 0 diff --git a/src/gui/propertypalette.cpp b/src/gui/propertypalette.cpp index b06e866..3e4ba88 100644 --- a/src/gui/propertypalette.cpp +++ b/src/gui/propertypalette.cpp @@ -22,7 +22,7 @@ PropertyPalette::PropertyPalette(QWidget *parent) : d->setProperty("key 2", "value 2"); //QModelIndex i = d->index(0,0); - ui->treeView->setModel(d); + //ui->treeView->setModel(d); QSettings settings("tikzit", "tikzit"); QVariant geom = settings.value("property-palette-geometry"); diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp index 746e9dc..a3dd8ce 100644 --- a/src/gui/tikzscene.cpp +++ b/src/gui/tikzscene.cpp @@ -8,8 +8,8 @@ #include -TikzScene::TikzScene(TikzDocument *tikzDocument, QObject *parent) : - QGraphicsScene(parent), _tikzDocument(tikzDocument) +TikzScene::TikzScene(TikzDocument *tikzDocument, ToolPalette *tools, QObject *parent) : + QGraphicsScene(parent), _tikzDocument(tikzDocument), _tools(tools) { _modifyEdgeItem = 0; _edgeStartNodeItem = 0; @@ -73,7 +73,7 @@ void TikzScene::mousePressEvent(QGraphicsSceneMouseEvent *event) qreal cpR = GLOBAL_SCALEF * (0.05); qreal cpR2 = cpR * cpR; - switch (tikzit->toolPalette()->currentTool()) { + switch (_tools->currentTool()) { case ToolPalette::SELECT: // check if we grabbed a control point of an edge foreach (QGraphicsItem *gi, selectedItems()) { @@ -145,8 +145,10 @@ void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { // current mouse position, in scene coordinates QPointF mousePos = event->scenePos(); + QRectF rb = views()[0]->rubberBandRect(); + invalidate(-800,-800,1600,1600); - switch (tikzit->toolPalette()->currentTool()) { + switch (_tools->currentTool()) { case ToolPalette::SELECT: if (_modifyEdgeItem != 0) { Edge *e = _modifyEdgeItem->edge(); @@ -262,7 +264,7 @@ void TikzScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) // current mouse position, in scene coordinates QPointF mousePos = event->scenePos(); - switch (tikzit->toolPalette()->currentTool()) { + switch (_tools->currentTool()) { case ToolPalette::SELECT: if (_modifyEdgeItem != 0) { // finished dragging a control point @@ -361,6 +363,18 @@ void TikzScene::keyReleaseEvent(QKeyEvent *event) } } +void TikzScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + QPointF mousePos = event->scenePos(); + foreach (QGraphicsItem *gi, items(mousePos)) { + if (EdgeItem *ei = dynamic_cast(gi)) { + ChangeEdgeModeCommand *cmd = new ChangeEdgeModeCommand(this, ei->edge()); + _tikzDocument->undoStack()->push(cmd); + break; + } + } +} + void TikzScene::getSelection(QSet &selNodes, QSet &selEdges) { foreach (QGraphicsItem *gi, selectedItems()) { diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h index 5e236d7..cb684b2 100644 --- a/src/gui/tikzscene.h +++ b/src/gui/tikzscene.h @@ -10,6 +10,7 @@ #include "nodeitem.h" #include "edgeitem.h" #include "tikzdocument.h" +#include "toolpalette.h" #include #include @@ -23,7 +24,7 @@ class TikzScene : public QGraphicsScene { Q_OBJECT public: - TikzScene(TikzDocument *tikzDocument, QObject *parent); + TikzScene(TikzDocument *tikzDocument, ToolPalette *tools, QObject *parent); ~TikzScene(); Graph *graph(); QMap &nodeItems(); @@ -42,8 +43,10 @@ protected: void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; void keyReleaseEvent(QKeyEvent *event) override; + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; private: TikzDocument *_tikzDocument; + ToolPalette *_tools; QMap _nodeItems; QMap _edgeItems; QGraphicsLineItem *_drawEdgeItem; diff --git a/src/gui/tikzview.cpp b/src/gui/tikzview.cpp index fe6c401..b8ae1c0 100644 --- a/src/gui/tikzview.cpp +++ b/src/gui/tikzview.cpp @@ -2,6 +2,7 @@ #include "tikzit.h" #include +#include TikzView::TikzView(QWidget *parent) : QGraphicsView(parent) { diff --git a/src/gui/toolpalette.cpp b/src/gui/toolpalette.cpp index 3c08bce..430df3f 100644 --- a/src/gui/toolpalette.cpp +++ b/src/gui/toolpalette.cpp @@ -13,14 +13,14 @@ ToolPalette::ToolPalette(QWidget *parent) : | Qt::WindowDoesNotAcceptFocus); setOrientation(Qt::Vertical); setFocusPolicy(Qt::NoFocus); - setGeometry(100,200,30,195); + //setGeometry(100,200,30,195); tools = new QActionGroup(this); - select = new QAction(QIcon(":/images/select-rectangular.png"), "Select"); - vertex = new QAction(QIcon(":/images/draw-ellipse.png"), "Add Vertex"); - edge = new QAction(QIcon(":/images/draw-path.png"), "Add Edge"); - crop = new QAction(QIcon(":/images/transform-crop-and-resize.png"), "Bounding Box"); + select = new QAction(QIcon(":/images/Inkscape_icons_edit_select_all.svg"), "Select"); + vertex = new QAction(QIcon(":/images/Inkscape_icons_draw_ellipse.svg"), "Add Vertex"); + edge = new QAction(QIcon(":/images/Inkscape_icons_draw_path.svg"), "Add Edge"); + crop = new QAction(QIcon(":/images/Inkscape_icons_draw_rectangle.svg"), "Bounding Box"); tools->addAction(select); tools->addAction(vertex); diff --git a/src/gui/undocommands.cpp b/src/gui/undocommands.cpp index 0fb235d..9c6a9c3 100644 --- a/src/gui/undocommands.cpp +++ b/src/gui/undocommands.cpp @@ -183,4 +183,26 @@ void AddEdgeCommand::redo() EdgeItem *ei = new EdgeItem(_edge); _scene->edgeItems().insert(_edge, ei); _scene->addItem(ei); + + // edges should always be stacked below nodes + if (!_scene->graph()->nodes().isEmpty()) { + ei->stackBefore(_scene->nodeItems()[_scene->graph()->nodes().first()]); + } +} + +ChangeEdgeModeCommand::ChangeEdgeModeCommand(TikzScene *scene, Edge *edge) : + _scene(scene), _edge(edge) +{ +} + +void ChangeEdgeModeCommand::undo() +{ + _edge->setBasicBendMode(!_edge->basicBendMode()); + _scene->edgeItems()[_edge]->readPos(); +} + +void ChangeEdgeModeCommand::redo() +{ + _edge->setBasicBendMode(!_edge->basicBendMode()); + _scene->edgeItems()[_edge]->readPos(); } diff --git a/src/gui/undocommands.h b/src/gui/undocommands.h index 9032274..eea39ae 100644 --- a/src/gui/undocommands.h +++ b/src/gui/undocommands.h @@ -90,4 +90,15 @@ private: Edge *_edge; }; +class ChangeEdgeModeCommand : public QUndoCommand +{ +public: + explicit ChangeEdgeModeCommand(TikzScene *scene, Edge *edge); + void undo() override; + void redo() override; +private: + TikzScene *_scene; + Edge *_edge; +}; + #endif // UNDOCOMMANDS_H -- cgit v1.2.3