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 --- images/Inkscape_icons_draw_calligraphic.svg | 201 ++++ images/Inkscape_icons_draw_ellipse.svg | 117 ++ images/Inkscape_icons_draw_path.svg | 177 +++ images/Inkscape_icons_draw_rectangle.svg | 95 ++ images/Inkscape_icons_edit_select_all.svg | 1513 ++++++++++++++++++++++++++ images/Inkscape_icons_node_segment_curve.svg | 50 + images/crop.svg | 47 + images/document-new.svg | 448 ++++++++ images/document-open.svg | 535 +++++++++ images/edge.svg | 64 ++ images/node.svg | 39 + images/select.svg | 90 ++ qt.conf | 2 + src/data/edge.cpp | 5 + src/data/edge.h | 1 + src/data/graphelementdata.h | 1 + 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 + src/main.cpp | 5 + src/tikzit.cpp | 17 +- src/tikzit.h | 1 + stylepalette.cpp | 14 + stylepalette.h | 3 + stylepalette.ui | 7 +- tikzit.qrc | 15 + 36 files changed, 3543 insertions(+), 21 deletions(-) create mode 100644 images/Inkscape_icons_draw_calligraphic.svg create mode 100644 images/Inkscape_icons_draw_ellipse.svg create mode 100644 images/Inkscape_icons_draw_path.svg create mode 100644 images/Inkscape_icons_draw_rectangle.svg create mode 100644 images/Inkscape_icons_edit_select_all.svg create mode 100644 images/Inkscape_icons_node_segment_curve.svg create mode 100644 images/crop.svg create mode 100644 images/document-new.svg create mode 100644 images/document-open.svg create mode 100644 images/edge.svg create mode 100644 images/node.svg create mode 100644 images/select.svg create mode 100644 qt.conf diff --git a/images/Inkscape_icons_draw_calligraphic.svg b/images/Inkscape_icons_draw_calligraphic.svg new file mode 100644 index 0000000..e1b3352 --- /dev/null +++ b/images/Inkscape_icons_draw_calligraphic.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/images/Inkscape_icons_draw_ellipse.svg b/images/Inkscape_icons_draw_ellipse.svg new file mode 100644 index 0000000..26c4446 --- /dev/null +++ b/images/Inkscape_icons_draw_ellipse.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/images/Inkscape_icons_draw_path.svg b/images/Inkscape_icons_draw_path.svg new file mode 100644 index 0000000..b7cb2db --- /dev/null +++ b/images/Inkscape_icons_draw_path.svg @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/images/Inkscape_icons_draw_rectangle.svg b/images/Inkscape_icons_draw_rectangle.svg new file mode 100644 index 0000000..7504d56 --- /dev/null +++ b/images/Inkscape_icons_draw_rectangle.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/images/Inkscape_icons_edit_select_all.svg b/images/Inkscape_icons_edit_select_all.svg new file mode 100644 index 0000000..0da2e0b --- /dev/null +++ b/images/Inkscape_icons_edit_select_all.svg @@ -0,0 +1,1513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/Inkscape_icons_node_segment_curve.svg b/images/Inkscape_icons_node_segment_curve.svg new file mode 100644 index 0000000..fad6969 --- /dev/null +++ b/images/Inkscape_icons_node_segment_curve.svg @@ -0,0 +1,50 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/images/crop.svg b/images/crop.svg new file mode 100644 index 0000000..226faa8 --- /dev/null +++ b/images/crop.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/document-new.svg b/images/document-new.svg new file mode 100644 index 0000000..1bfdb16 --- /dev/null +++ b/images/document-new.svg @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + New Document + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/document-open.svg b/images/document-open.svg new file mode 100644 index 0000000..55e6177 --- /dev/null +++ b/images/document-open.svg @@ -0,0 +1,535 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Folder Icon Accept + 2005-01-31 + + + Jakub Steiner + + + + http://jimmac.musichall.cz + Active state - when files are being dragged to. + + + Novell, Inc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/edge.svg b/images/edge.svg new file mode 100644 index 0000000..f4a9716 --- /dev/null +++ b/images/edge.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/node.svg b/images/node.svg new file mode 100644 index 0000000..c728086 --- /dev/null +++ b/images/node.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/select.svg b/images/select.svg new file mode 100644 index 0000000..7ffc893 --- /dev/null +++ b/images/select.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qt.conf b/qt.conf new file mode 100644 index 0000000..81319bc --- /dev/null +++ b/qt.conf @@ -0,0 +1,2 @@ +[Platforms] +WindowsArguments = dpiawareness=1 diff --git a/src/data/edge.cpp b/src/data/edge.cpp index 6802b2d..e4d5d69 100644 --- a/src/data/edge.cpp +++ b/src/data/edge.cpp @@ -278,6 +278,11 @@ float Edge::cpDist() const return _cpDist; } +void Edge::setBasicBendMode(bool mode) +{ + _basicBendMode = mode; +} + void Edge::setBend(int bend) { _bend = bend; diff --git a/src/data/edge.h b/src/data/edge.h index d2913b8..595b094 100644 --- a/src/data/edge.h +++ b/src/data/edge.h @@ -50,6 +50,7 @@ public: bool basicBendMode() const; float cpDist() const; + void setBasicBendMode(bool mode); void setBend(int bend); void setInAngle(int inAngle); void setOutAngle(int outAngle); diff --git a/src/data/graphelementdata.h b/src/data/graphelementdata.h index 1139a00..0d43bb8 100644 --- a/src/data/graphelementdata.h +++ b/src/data/graphelementdata.h @@ -22,6 +22,7 @@ public: QString property(QString key); bool atom(QString atom); + QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; 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 diff --git a/src/main.cpp b/src/main.cpp index 6b14549..96069ef 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,8 +10,13 @@ #include + + int main(int argc, char *argv[]) { + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + //QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling); QApplication a(argc, argv); a.setQuitOnLastWindowClosed(false); tikzit = new Tikzit(); diff --git a/src/tikzit.cpp b/src/tikzit.cpp index a488b8a..746268c 100644 --- a/src/tikzit.cpp +++ b/src/tikzit.cpp @@ -22,8 +22,8 @@ Tikzit::Tikzit() loadStyles(); - _toolPalette->show(); - _propertyPalette->show(); + //_toolPalette->show(); + //_propertyPalette->show(); _stylePalette->show(); _windows << new MainWindow(); @@ -73,8 +73,11 @@ void Tikzit::removeWindow(MainWindow *w) { _windows.removeAll(w); if (_activeWindow == w) { - if (_windows.isEmpty()) _activeWindow = 0; - else _activeWindow = _windows[0]; + if (_windows.isEmpty()) { + _activeWindow = 0; + // TODO: check if we should quit when last window closed + quit(); + } else _activeWindow = _windows[0]; } } @@ -105,3 +108,9 @@ void Tikzit::open() } } } + +void Tikzit::quit() +{ + _stylePalette->close(); + QApplication::quit(); +} diff --git a/src/tikzit.h b/src/tikzit.h index a241a78..07878aa 100644 --- a/src/tikzit.h +++ b/src/tikzit.h @@ -76,6 +76,7 @@ public: void newDoc(); void open(); + void quit(); private: // void createMenu(); diff --git a/stylepalette.cpp b/stylepalette.cpp index 2781a90..312f675 100644 --- a/stylepalette.cpp +++ b/stylepalette.cpp @@ -2,12 +2,19 @@ #include "ui_stylepalette.h" #include +#include StylePalette::StylePalette(QWidget *parent) : QDockWidget(parent), ui(new Ui::StylePalette) { ui->setupUi(this); + + QSettings settings("tikzit", "tikzit"); + QVariant geom = settings.value("style-palette-geometry"); + if (geom != QVariant()) { + restoreGeometry(geom.toByteArray()); + } } StylePalette::~StylePalette() @@ -19,3 +26,10 @@ void StylePalette::on_buttonOpenProject_clicked() { qDebug() << "got click"; } + +void StylePalette::closeEvent(QCloseEvent *event) +{ + QSettings settings("tikzit", "tikzit"); + settings.setValue("style-palette-geometry", saveGeometry()); + QDockWidget::closeEvent(event); +} diff --git a/stylepalette.h b/stylepalette.h index 99afe51..b5c16f1 100644 --- a/stylepalette.h +++ b/stylepalette.h @@ -20,6 +20,9 @@ public slots: private: Ui::StylePalette *ui; + +protected: + void closeEvent(QCloseEvent *event) override; }; #endif // STYLEPALETTE_H diff --git a/stylepalette.ui b/stylepalette.ui index 941212b..8068ea4 100644 --- a/stylepalette.ui +++ b/stylepalette.ui @@ -16,6 +16,9 @@ 350 + + true + Styles @@ -70,7 +73,7 @@ - :/images/document-new.png:/images/document-new.png + :/images/document-new.svg:/images/document-new.svg @@ -90,7 +93,7 @@ - :/images/document-open.png:/images/document-open.png + :/images/document-open.svg:/images/document-open.svg diff --git a/tikzit.qrc b/tikzit.qrc index 484b399..65cfcd9 100644 --- a/tikzit.qrc +++ b/tikzit.qrc @@ -6,5 +6,20 @@ images/transform-crop-and-resize.png images/document-new.png images/document-open.png + images/document-new.svg + images/document-open.svg + images/Inkscape_icons_draw_calligraphic.svg + images/Inkscape_icons_draw_ellipse.svg + images/Inkscape_icons_draw_path.svg + images/Inkscape_icons_draw_rectangle.svg + images/Inkscape_icons_node_segment_curve.svg + images/Inkscape_icons_edit_select_all.svg + images/crop.svg + images/edge.svg + images/node.svg + images/select.svg + + + qt.conf -- cgit v1.2.3