diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2017-02-03 16:11:29 +0100 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2017-02-03 16:11:29 +0100 |
commit | e1756ba69dd626073e22fd0a4f4c5fda42c88829 (patch) | |
tree | d79f72a648f89ca9201681b4c5443fceeb8faad9 /tikzit | |
parent | b392859bb192a2e02aec09f2eacf5ecdf44fdfe4 (diff) |
drawing grid
Diffstat (limited to 'tikzit')
-rw-r--r-- | tikzit/src/gui/mainwindow.cpp | 89 | ||||
-rw-r--r-- | tikzit/src/gui/mainwindow.h | 12 | ||||
-rw-r--r-- | tikzit/src/gui/mainwindow.ui | 184 | ||||
-rw-r--r-- | tikzit/src/gui/nodeitem.cpp | 17 | ||||
-rw-r--r-- | tikzit/src/gui/nodeitem.h | 18 | ||||
-rw-r--r-- | tikzit/src/gui/propertypalette.cpp | 10 | ||||
-rw-r--r-- | tikzit/src/gui/tikzscene.cpp | 78 | ||||
-rw-r--r-- | tikzit/src/gui/tikzscene.h | 21 | ||||
-rw-r--r-- | tikzit/src/gui/tikzview.cpp | 20 | ||||
-rw-r--r-- | tikzit/src/gui/tikzview.h | 22 | ||||
-rw-r--r-- | tikzit/src/gui/toolpalette.cpp | 2 | ||||
-rw-r--r-- | tikzit/src/main.cpp | 6 | ||||
-rw-r--r-- | tikzit/tikzit.pro | 8 | ||||
-rw-r--r-- | tikzit/tikzit.pro.user | 4 |
14 files changed, 472 insertions, 19 deletions
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 <QDebug> +#include <QFile> +#include <QList> +#include <QSettings> +#include <QMessageBox> +#include <QFileDialog> + +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<int> 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 <QMainWindow> #include <QGraphicsView> @@ -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 @@ <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <widget class="QGraphicsView" name="tikzView"/> + <widget class="TikzView" name="tikzView"/> <widget class="QTextEdit" name="tikzSource"> + <property name="font"> + <font> + <family>Courier New</family> + <pointsize>10</pointsize> + </font> + </property> + <property name="lineWrapMode"> + <enum>QTextEdit::NoWrap</enum> + </property> <property name="html"> <string><!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></string> +</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></string> + </property> + <property name="tabStopWidth"> + <number>20</number> </property> </widget> </widget> @@ -60,8 +72,44 @@ p, li { white-space: pre-wrap; } <string>File</string> </property> <addaction name="actionNew"/> + <addaction name="actionOpen"/> + <addaction name="separator"/> + <addaction name="actionClose"/> + <addaction name="actionSave"/> + <addaction name="actionSave_As"/> + </widget> + <widget class="QMenu" name="menuEdit"> + <property name="title"> + <string>Edit</string> + </property> + <addaction name="actionUndo"/> + <addaction name="actionRedo"/> + <addaction name="separator"/> + <addaction name="actionCut"/> + <addaction name="actionCopy"/> + <addaction name="actionPase"/> + <addaction name="actionDelete"/> + <addaction name="separator"/> + <addaction name="actionSelect_All"/> + <addaction name="actionDeselect_All"/> + </widget> + <widget class="QMenu" name="menuTikz"> + <property name="title"> + <string>Tikz</string> + </property> + <addaction name="actionParse"/> + </widget> + <widget class="QMenu" name="menuView"> + <property name="title"> + <string>View</string> + </property> + <addaction name="actionZoom_In"/> + <addaction name="actionZoom_Out"/> </widget> <addaction name="menuFile"/> + <addaction name="menuEdit"/> + <addaction name="menuView"/> + <addaction name="menuTikz"/> </widget> <widget class="QStatusBar" name="statusBar"/> <action name="actionNew"> @@ -69,8 +117,136 @@ p, li { white-space: pre-wrap; } <string>New...</string> </property> </action> + <action name="actionOpen"> + <property name="text"> + <string>Open...</string> + </property> + </action> + <action name="actionClose"> + <property name="text"> + <string>Close</string> + </property> + </action> + <action name="actionSave"> + <property name="text"> + <string>Save</string> + </property> + </action> + <action name="actionSave_As"> + <property name="text"> + <string>Save As...</string> + </property> + </action> + <action name="actionUndo"> + <property name="text"> + <string>Undo</string> + </property> + </action> + <action name="actionRedo"> + <property name="text"> + <string>Redo</string> + </property> + </action> + <action name="actionCut"> + <property name="text"> + <string>Cut</string> + </property> + </action> + <action name="actionCopy"> + <property name="text"> + <string>Copy</string> + </property> + </action> + <action name="actionPase"> + <property name="text"> + <string>Paste</string> + </property> + </action> + <action name="actionDelete"> + <property name="text"> + <string>Delete</string> + </property> + </action> + <action name="actionSelect_All"> + <property name="text"> + <string>Select All</string> + </property> + </action> + <action name="actionDeselect_All"> + <property name="text"> + <string>Deselect All</string> + </property> + </action> + <action name="actionParse"> + <property name="text"> + <string>Parse</string> + </property> + <property name="shortcut"> + <string>Ctrl+T</string> + </property> + </action> + <action name="actionZoom_In"> + <property name="text"> + <string>Zoom In</string> + </property> + <property name="shortcut"> + <string>Ctrl+=</string> + </property> + </action> + <action name="actionZoom_Out"> + <property name="text"> + <string>Zoom Out</string> + </property> + <property name="shortcut"> + <string>Ctrl+-</string> + </property> + </action> </widget> <layoutdefault spacing="6" margin="11"/> + <customwidgets> + <customwidget> + <class>TikzView</class> + <extends>QGraphicsView</extends> + <header>tikzview.h</header> + <slots> + <slot>zoomIn()</slot> + <slot>zoomOut()</slot> + </slots> + </customwidget> + </customwidgets> <resources/> - <connections/> + <connections> + <connection> + <sender>actionZoom_In</sender> + <signal>triggered()</signal> + <receiver>tikzView</receiver> + <slot>zoomIn()</slot> + <hints> + <hint type="sourcelabel"> + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel"> + <x>237</x> + <y>103</y> + </hint> + </hints> + </connection> + <connection> + <sender>actionZoom_Out</sender> + <signal>triggered()</signal> + <receiver>tikzView</receiver> + <slot>zoomOut()</slot> + <hints> + <hint type="sourcelabel"> + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel"> + <x>237</x> + <y>103</y> + </hint> + </hints> + </connection> + </connections> </ui> 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 <QPen> +#include <QBrush> + +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 <QObject> +#include <QGraphicsEllipseItem> + +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 <QPen> +#include <QBrush> + +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 <QWidget> #include <QGraphicsScene> +#include <QPainter> +#include <QRectF> +#include <QVector> +#include <QGraphicsEllipseItem> 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<NodeItem*> 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 <QDebug> + +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 <QObject> +#include <QWidget> +#include <QGraphicsView> +#include <QPainter> +#include <QGraphicsItem> +#include <QStyleOptionGraphicsItem> +#include <QRectF> + +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 <QVector> #include <QLayout> #include <QVBoxLayout> +#include <QDebug> 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 <QApplication> + 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 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> -<!-- Written by QtCreator 4.2.0, 2017-01-21T19:04:54. --> +<!-- Written by QtCreator 4.2.0, 2017-02-02T17:06:07. --> <qtcreator> <data> <variable>EnvironmentId</variable> @@ -62,7 +62,7 @@ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.1 clang 64bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.1 clang 64bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.clang_64_kit</value> - <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">3</value> + <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> |