From e1756ba69dd626073e22fd0a4f4c5fda42c88829 Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Fri, 3 Feb 2017 16:11:29 +0100 Subject: drawing grid --- tikzit/src/gui/mainwindow.cpp | 89 ++++++++++++++++-- tikzit/src/gui/mainwindow.h | 12 +++ tikzit/src/gui/mainwindow.ui | 184 ++++++++++++++++++++++++++++++++++++- tikzit/src/gui/nodeitem.cpp | 17 ++++ tikzit/src/gui/nodeitem.h | 18 ++++ tikzit/src/gui/propertypalette.cpp | 10 +- tikzit/src/gui/tikzscene.cpp | 78 +++++++++++++++- tikzit/src/gui/tikzscene.h | 21 ++++- tikzit/src/gui/tikzview.cpp | 20 ++++ tikzit/src/gui/tikzview.h | 22 +++++ tikzit/src/gui/toolpalette.cpp | 2 + tikzit/src/main.cpp | 6 +- tikzit/tikzit.pro | 8 +- tikzit/tikzit.pro.user | 4 +- 14 files changed, 472 insertions(+), 19 deletions(-) create mode 100644 tikzit/src/gui/nodeitem.cpp create mode 100644 tikzit/src/gui/nodeitem.h create mode 100644 tikzit/src/gui/tikzview.cpp create mode 100644 tikzit/src/gui/tikzview.h diff --git a/tikzit/src/gui/mainwindow.cpp b/tikzit/src/gui/mainwindow.cpp index ef73a20..f7357ec 100644 --- a/tikzit/src/gui/mainwindow.cpp +++ b/tikzit/src/gui/mainwindow.cpp @@ -1,23 +1,100 @@ #include "mainwindow.h" #include "ui_mainwindow.h" +#include "tikzgraphassembler.h" #include +#include +#include +#include +#include +#include + +int MainWindow::_numWindows = 0; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { + _numWindows++; ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); - tikzScene = new TikzScene(this); + _graph = new Graph(this); + tikzScene = new TikzScene(_graph, this); ui->tikzView->setScene(tikzScene); - //tikzView = new QGraphicsView(tikzScene); - //setCentralWidget(tikzView); - //resize(700, 500); - // badger? + _fileName = ""; + _pristine = true; + + // initially, the source view should be collapsed + QList sz = ui->splitter->sizes(); + sz[0] = sz[0] + sz[1]; + sz[1] = 0; + ui->splitter->setSizes(sz); } MainWindow::~MainWindow() { - qDebug() << "~MainWindow"; + //qDebug() << "~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()); + + 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)) { + statusBar()->showMessage("TiKZ parsed successfully", 2000); + tikzScene->setGraph(newGraph); + delete _graph; + _graph = newGraph; + } else { + statusBar()->showMessage("Cannot read TiKZ source"); + delete newGraph; + } + } + +void MainWindow::closeEvent(QCloseEvent *event) +{ + //qDebug() << "got close event"; + QMainWindow::closeEvent(event); +} + +void MainWindow::on_actionOpen_triggered() +{ + QSettings settings("tikzit", "tikzit"); + QString fileName = QFileDialog::getOpenFileName( + this, + tr("Open File"), + settings.value("previous-file-path").toString(), + tr("TiKZ Files (*.tikz)")); + + if (!fileName.isEmpty()) { + if (_pristine) { + open(fileName); + } else { + MainWindow *w = new MainWindow(); + w->show(); + w->open(fileName); + } + } +} + + diff --git a/tikzit/src/gui/mainwindow.h b/tikzit/src/gui/mainwindow.h index d33a89d..f48fd64 100644 --- a/tikzit/src/gui/mainwindow.h +++ b/tikzit/src/gui/mainwindow.h @@ -2,6 +2,7 @@ #define MAINWINDOW_H #include "tikzscene.h" +#include "graph.h" #include #include @@ -17,9 +18,20 @@ class MainWindow : public QMainWindow public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); + + void open(QString fileName); + +protected: + void closeEvent(QCloseEvent *event); private: TikzScene *tikzScene; Ui::MainWindow *ui; + Graph *_graph; + QString _fileName; + bool _pristine; + static int _numWindows; +public slots: + void on_actionOpen_triggered(); }; #endif // MAINWINDOW_H diff --git a/tikzit/src/gui/mainwindow.ui b/tikzit/src/gui/mainwindow.ui index 6439ee8..a2655e6 100644 --- a/tikzit/src/gui/mainwindow.ui +++ b/tikzit/src/gui/mainwindow.ui @@ -32,14 +32,26 @@ Qt::Vertical - + + + + Courier New + 10 + + + + QTextEdit::NoWrap + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'.SF NS Text'; font-size:13pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Stuff written here</p></body></html> +</style></head><body style=" font-family:'Courier New'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'.SF NS Text'; font-size:13pt;"><br /></p></body></html> + + + 20 @@ -60,8 +72,44 @@ p, li { white-space: pre-wrap; } File + + + + + + + + + Edit + + + + + + + + + + + + + + + Tikz + + + + + + View + + + + + + @@ -69,8 +117,136 @@ p, li { white-space: pre-wrap; } 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+- + + + + + TikzView + QGraphicsView +
tikzview.h
+ + zoomIn() + zoomOut() + +
+
- + + + actionZoom_In + triggered() + tikzView + zoomIn() + + + -1 + -1 + + + 237 + 103 + + + + + actionZoom_Out + triggered() + tikzView + zoomOut() + + + -1 + -1 + + + 237 + 103 + + + + diff --git a/tikzit/src/gui/nodeitem.cpp b/tikzit/src/gui/nodeitem.cpp new file mode 100644 index 0000000..e817d98 --- /dev/null +++ b/tikzit/src/gui/nodeitem.cpp @@ -0,0 +1,17 @@ +#include "nodeitem.h" + +#include +#include + +NodeItem::NodeItem(Node *node) +{ + _node = node; + setPen(QPen(Qt::black)); + setBrush(QBrush(Qt::white)); + syncPos(); +} + +void NodeItem::syncPos() +{ + setRect(80*_node->point().x() - 8, -80*_node->point().y() - 8, 16, 16); +} diff --git a/tikzit/src/gui/nodeitem.h b/tikzit/src/gui/nodeitem.h new file mode 100644 index 0000000..60b2c05 --- /dev/null +++ b/tikzit/src/gui/nodeitem.h @@ -0,0 +1,18 @@ +#ifndef NODEITEM_H +#define NODEITEM_H + +#include "node.h" + +#include +#include + +class NodeItem : public QGraphicsEllipseItem +{ +public: + NodeItem(Node *node); + void syncPos(); +private: + Node *_node; +}; + +#endif // NODEITEM_H diff --git a/tikzit/src/gui/propertypalette.cpp b/tikzit/src/gui/propertypalette.cpp index e3eec17..ea0e90e 100644 --- a/tikzit/src/gui/propertypalette.cpp +++ b/tikzit/src/gui/propertypalette.cpp @@ -11,6 +11,11 @@ PropertyPalette::PropertyPalette(QWidget *parent) : QDockWidget(parent), ui(new Ui::PropertyPalette) { + setWindowFlags(Qt::Window + | Qt::WindowStaysOnTopHint + | Qt::CustomizeWindowHint + | Qt::WindowTitleHint); + //setFocusPolicy(Qt::NoFocus); ui->setupUi(this); GraphElementData *d = new GraphElementData(); d->setProperty("key 1", "value 1"); @@ -22,7 +27,10 @@ PropertyPalette::PropertyPalette(QWidget *parent) : ui->treeView->setModel(d); QSettings settings("tikzit", "tikzit"); - restoreGeometry(settings.value("property-palette-geometry").toByteArray()); + QVariant geom = settings.value("property-palette-geometry"); + if (geom != QVariant()) { + restoreGeometry(geom.toByteArray()); + } } PropertyPalette::~PropertyPalette() diff --git a/tikzit/src/gui/tikzscene.cpp b/tikzit/src/gui/tikzscene.cpp index 60939dd..11d5a72 100644 --- a/tikzit/src/gui/tikzscene.cpp +++ b/tikzit/src/gui/tikzscene.cpp @@ -1,6 +1,82 @@ #include "tikzscene.h" -TikzScene::TikzScene(QObject *parent) : QGraphicsScene(parent) +#include +#include + +TikzScene::TikzScene(Graph *graph, QObject *parent) : + QGraphicsScene(parent), _graph(graph) +{ + +} + +Graph *TikzScene::graph() const +{ + return _graph; +} + +void TikzScene::setGraph(Graph *graph) +{ + _graph = graph; + graphReplaced(); +} + +void TikzScene::graphReplaced() { + foreach (NodeItem *ni, nodeItems) { + removeItem(ni); + delete ni; + } + nodeItems.clear(); + + QPen blackPen(Qt::black); + QBrush redBrush(Qt::red); + + foreach (Node *n, _graph->nodes()) { + NodeItem *ni = new NodeItem(n); + nodeItems << ni; + addItem(ni); + } +} + +void TikzScene::drawBackground(QPainter *painter, const QRectF &rect) +{ + // draw the grid + int step = 10; + + QPen pen; + pen.setWidth(2); + pen.setCosmetic(true); + pen.setColor(QColor(245,245,255)); + + painter->setPen(pen); + for (int x = step; x < rect.right(); x += step) { + if (x % (step * 8) != 0) { + painter->drawLine(x, rect.top(), x, rect.bottom()); + painter->drawLine(-x, rect.top(), -x, rect.bottom()); + } + } + + for (int y = step; y < rect.bottom(); y += step) { + if (y % (step * 8) != 0) { + painter->drawLine(rect.left(), y, rect.right(), y); + painter->drawLine(rect.left(), -y, rect.right(), -y); + } + } + + pen.setColor(QColor(240,240,245)); + painter->setPen(pen); + for (int x = step*8; x < rect.right(); x += step*8) { + painter->drawLine(x, rect.top(), x, rect.bottom()); + painter->drawLine(-x, rect.top(), -x, rect.bottom()); + } + + for (int y = step*8; y < rect.bottom(); y += step*8) { + painter->drawLine(rect.left(), y, rect.right(), y); + painter->drawLine(rect.left(), -y, rect.right(), -y); + } + pen.setColor(QColor(230,230,240)); + painter->setPen(pen); + painter->drawLine(rect.left(), 0, rect.right(), 0); + painter->drawLine(0, rect.top(), 0, rect.bottom()); } diff --git a/tikzit/src/gui/tikzscene.h b/tikzit/src/gui/tikzscene.h index dd3cba7..c7039e6 100644 --- a/tikzit/src/gui/tikzscene.h +++ b/tikzit/src/gui/tikzscene.h @@ -1,13 +1,32 @@ #ifndef TIKZSCENE_H #define TIKZSCENE_H +#include "graph.h" +#include "nodeitem.h" + #include #include +#include +#include +#include +#include class TikzScene : public QGraphicsScene { + Q_OBJECT public: - TikzScene(QObject *parent); + TikzScene(Graph *graph, QObject *parent); + Graph *graph() const; + void setGraph(Graph *graph); +public slots: + void graphReplaced(); + +private: + Graph *_graph; + QVector nodeItems; + +protected: + void drawBackground(QPainter *painter, const QRectF &rect); }; #endif // TIKZSCENE_H diff --git a/tikzit/src/gui/tikzview.cpp b/tikzit/src/gui/tikzview.cpp new file mode 100644 index 0000000..d2a769c --- /dev/null +++ b/tikzit/src/gui/tikzview.cpp @@ -0,0 +1,20 @@ +#include "tikzview.h" + +#include + +TikzView::TikzView(QWidget *parent) : QGraphicsView(parent) +{ + setRenderHint(QPainter::Antialiasing); + qDebug() << "TikzView()"; +} + +void TikzView::zoomIn() +{ + scale(1.6,1.6); +} + +void TikzView::zoomOut() +{ + scale(0.625,0.625); +} + diff --git a/tikzit/src/gui/tikzview.h b/tikzit/src/gui/tikzview.h new file mode 100644 index 0000000..032b9c4 --- /dev/null +++ b/tikzit/src/gui/tikzview.h @@ -0,0 +1,22 @@ +#ifndef TIKZVIEW_H +#define TIKZVIEW_H + +#include +#include +#include +#include +#include +#include +#include + +class TikzView : public QGraphicsView +{ + Q_OBJECT +public: + explicit TikzView(QWidget *parent = 0); +public slots: + void zoomIn(); + void zoomOut(); +}; + +#endif // TIKZVIEW_H diff --git a/tikzit/src/gui/toolpalette.cpp b/tikzit/src/gui/toolpalette.cpp index fbbc8fd..61b6cbf 100644 --- a/tikzit/src/gui/toolpalette.cpp +++ b/tikzit/src/gui/toolpalette.cpp @@ -3,6 +3,7 @@ #include #include #include +#include ToolPalette::ToolPalette(QWidget *parent) : QToolBar(parent) @@ -38,3 +39,4 @@ ToolPalette::ToolPalette(QWidget *parent) : addAction(edge); addAction(crop); } + diff --git a/tikzit/src/main.cpp b/tikzit/src/main.cpp index 0de5fd8..e004529 100644 --- a/tikzit/src/main.cpp +++ b/tikzit/src/main.cpp @@ -6,11 +6,10 @@ #include + int main(int argc, char *argv[]) { QApplication a(argc, argv); - MainWindow *w = new MainWindow(); - w->show(); ToolPalette *tp = new ToolPalette(new QMainWindow()); tp->show(); @@ -19,5 +18,8 @@ int main(int argc, char *argv[]) PropertyPalette *pp = new PropertyPalette; pp->show(); + MainWindow *w = new MainWindow(); + w->show(); + return a.exec(); } diff --git a/tikzit/tikzit.pro b/tikzit/tikzit.pro index 2e7d463..41bc6a3 100644 --- a/tikzit/tikzit.pro +++ b/tikzit/tikzit.pro @@ -38,7 +38,9 @@ SOURCES += src/gui/mainwindow.cpp \ src/data/tikzgraphassembler.cpp \ src/data/graphelementdata.cpp \ src/data/graphelementproperty.cpp \ - src/gui/propertypalette.cpp + src/gui/propertypalette.cpp \ + src/gui/tikzview.cpp \ + src/gui/nodeitem.cpp HEADERS += src/gui/mainwindow.h \ src/gui/toolpalette.h \ @@ -50,7 +52,9 @@ HEADERS += src/gui/mainwindow.h \ src/data/graphelementdata.h \ src/data/graphelementproperty.h \ src/gui/propertypalette.h \ - src/data/tikzparserdefs.h + src/data/tikzparserdefs.h \ + src/gui/tikzview.h \ + src/gui/nodeitem.h FORMS += src/gui/mainwindow.ui \ src/gui/propertypalette.ui diff --git a/tikzit/tikzit.pro.user b/tikzit/tikzit.pro.user index 397eee1..6d72c88 100644 --- a/tikzit/tikzit.pro.user +++ b/tikzit/tikzit.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -62,7 +62,7 @@ Desktop Qt 5.7.1 clang 64bit Desktop Qt 5.7.1 clang 64bit qt.57.clang_64_kit - 3 + 0 0 0 -- cgit v1.2.3