summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGard Spreemann <gspr@nonempty.org>2020-04-14 09:07:12 +0200
committerGard Spreemann <gspr@nonempty.org>2020-04-14 09:07:12 +0200
commit45669f894014e853d5add401c8d52e6ed8ffda73 (patch)
tree0b1f0927b39be726221422f258a2927909b6cf4c
parent7c4e0d98192d20e67f91edeaf0236d3b9cdc4b73 (diff)
parentccf98283025f9d5cc2083c87352993dce4545e71 (diff)
Merge tag 'v2.1.5' into debian/sid
-rw-r--r--.appveyor.yml88
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml2
-rw-r--r--src/gui/mainmenu.cpp36
-rw-r--r--src/gui/mainmenu.h7
-rw-r--r--src/gui/mainmenu.ui77
-rw-r--r--src/gui/nodeitem.cpp8
-rw-r--r--src/gui/stylepalette.cpp85
-rw-r--r--src/gui/stylepalette.h15
-rw-r--r--src/gui/tikzscene.cpp55
-rw-r--r--src/gui/tikzscene.h6
-rw-r--r--src/tikzit.h2
-rw-r--r--tex/sample/figures/fig.tikz4
-rw-r--r--tex/sample/sample.tikzstyles1
-rw-r--r--tikzit.pro2
15 files changed, 321 insertions, 68 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
index 9f2828f..93060cd 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -5,37 +5,73 @@ branches:
- master
image:
+ - macos
- Ubuntu1804
- Visual Studio 2015
configuration:
- release
-install:
- - cmd: choco install winflexbison
- - cmd: 'C:\Qt\5.11.2\mingw53_32\bin\qtenv2.bat'
- - cmd: cd C:\projects\tikzit
- - sh: sudo apt-get update
- - sh: sudo apt-get -y install flex bison qt5-default libpoppler-dev libpoppler-qt5-dev
-
-before_build:
- - ps: (new-object net.webclient).DownloadFile('http://tikzit.github.io/download/win32-deps.zip', 'c:\projects\tikzit\win32-deps.zip')
- - cmd: 7z x win32-deps.zip
-
-build_script:
- - qmake -v
- - qmake
- - cmd: mingw32-make
- - sh: make
-
-after_build:
- - sh: ./deploy-linux.sh
- - sh: mv dist/tikzit.tar.gz tikzit-linux.tar.gz
- #- sh: appveyor PushArtifact tikzit-linux.tar.gz
- - sh: python scripts/gh-push.py tikzit-linux.tar.gz
- - cmd: deploy-win.bat
- - cmd: move dist\tikzit.zip tikzit-win.zip
- - cmd: python scripts\gh-push.py tikzit-win.zip
- #- cmd: appveyor PushArtifact tikzit-win.zip
+for:
+-
+ matrix:
+ only:
+ - image: macos
+
+ install:
+ - brew update
+ - brew install qt5
+ - brew link --force qt5
+ - brew install poppler
+
+ build_script:
+ - qmake -v
+ - qmake -r
+ - make
+
+ after_build:
+ - '(chmod +x deploy-osx.sh && ./deploy-osx.sh && mv tikzit.dmg tikzit-osx.dmg)'
+ - python scripts/gh-push.py tikzit-osx.dmg
+-
+ matrix:
+ only:
+ - image: Ubuntu1804
+
+ install:
+ - sudo apt-get update
+ - sudo apt-get -y install flex bison qt5-default libpoppler-dev libpoppler-qt5-dev
+
+ build_script:
+ - qmake -v
+ - qmake
+ - make
+
+ after_build:
+ - ./deploy-linux.sh
+ - mv dist/tikzit.tar.gz tikzit-linux.tar.gz
+ - python scripts/gh-push.py tikzit-linux.tar.gz
+-
+ matrix:
+ only:
+ - image: Visual Studio 2015
+
+ install:
+ - choco install winflexbison
+ - 'C:\Qt\5.12\mingw73_32\bin\qtenv2.bat'
+ - cd C:\projects\tikzit
+
+ before_build:
+ - ps: (new-object net.webclient).DownloadFile('http://tikzit.github.io/download/win32-deps.zip', 'c:\projects\tikzit\win32-deps.zip')
+ - 7z x win32-deps.zip
+
+ build_script:
+ - qmake -v
+ - qmake
+ - mingw32-make
+
+ after_build:
+ - deploy-win.bat
+ - move dist\tikzit.zip tikzit-win.zip
+ - python scripts\gh-push.py tikzit-win.zip
diff --git a/.gitignore b/.gitignore
index 2f1a07c..d7d4bb5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+*.pro.user*
scripts/*.pyc
tex/sample/Output
tex/sample/sample.pdf
diff --git a/.travis.yml b/.travis.yml
index 056b543..787a6cf 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -15,7 +15,7 @@ install:
- brew update
- brew install qt5
- brew link --force qt5
-- brew install poppler --with-qt
+- brew install poppler
script:
- qmake -v
- qmake -r
diff --git a/src/gui/mainmenu.cpp b/src/gui/mainmenu.cpp
index 35ab736..7b7623b 100644
--- a/src/gui/mainmenu.cpp
+++ b/src/gui/mainmenu.cpp
@@ -282,6 +282,36 @@ void MainMenu::on_actionRun_LaTeX_triggered()
tikzit->makePreview();
}
+void MainMenu::on_actionPrevious_Node_Style_triggered()
+{
+ tikzit->activeWindow()->stylePalette()->previousNodeStyle();
+}
+
+void MainMenu::on_actionNext_Node_Style_triggered()
+{
+ tikzit->activeWindow()->stylePalette()->nextNodeStyle();
+}
+
+void MainMenu::on_actionClear_Node_Style_triggered()
+{
+ tikzit->activeWindow()->stylePalette()->toggleClearNodeStyle();
+}
+
+void MainMenu::on_actionPrevious_Edge_Style_triggered()
+{
+ tikzit->activeWindow()->stylePalette()->previousEdgeStyle();
+}
+
+void MainMenu::on_actionNext_Edge_Style_triggered()
+{
+ tikzit->activeWindow()->stylePalette()->nextEdgeStyle();
+}
+
+void MainMenu::on_actionClear_Edge_Style_triggered()
+{
+ tikzit->activeWindow()->stylePalette()->toggleClearEdgeStyle();
+}
+
void MainMenu::on_actionPreferences_triggered()
{
PreferenceDialog *d = new PreferenceDialog(this);
@@ -301,6 +331,12 @@ void MainMenu::on_actionZoom_Out_triggered()
if (tikzit->activeWindow() != 0) tikzit->activeWindow()->tikzView()->zoomOut();
}
+void MainMenu::on_actionShow_Node_Labels_triggered()
+{
+ tikzit->activeWindow()->tikzScene()->setDrawNodeLabels(ui.actionShow_Node_Labels->isChecked());
+ tikzit->activeWindow()->tikzScene()->invalidate();
+}
+
void MainMenu::on_actionAbout_triggered()
{
QMessageBox::about(this,
diff --git a/src/gui/mainmenu.h b/src/gui/mainmenu.h
index 51d7d3c..8268802 100644
--- a/src/gui/mainmenu.h
+++ b/src/gui/mainmenu.h
@@ -73,11 +73,18 @@ public slots:
void on_actionRevert_triggered();
void on_actionJump_to_Selection_triggered();
void on_actionRun_LaTeX_triggered();
+ void on_actionPrevious_Node_Style_triggered();
+ void on_actionNext_Node_Style_triggered();
+ void on_actionClear_Node_Style_triggered();
+ void on_actionPrevious_Edge_Style_triggered();
+ void on_actionNext_Edge_Style_triggered();
+ void on_actionClear_Edge_Style_triggered();
void on_actionPreferences_triggered();
// View
void on_actionZoom_In_triggered();
void on_actionZoom_Out_triggered();
+ void on_actionShow_Node_Labels_triggered();
// Help
void on_actionAbout_triggered();
diff --git a/src/gui/mainmenu.ui b/src/gui/mainmenu.ui
index 692f82e..46f4881 100644
--- a/src/gui/mainmenu.ui
+++ b/src/gui/mainmenu.ui
@@ -79,11 +79,25 @@
<property name="title">
<string>Tools</string>
</property>
+ <widget class="QMenu" name="menuNode_Style">
+ <property name="title">
+ <string>Set Style</string>
+ </property>
+ <addaction name="actionPrevious_Node_Style"/>
+ <addaction name="actionNext_Node_Style"/>
+ <addaction name="actionClear_Node_Style"/>
+ <addaction name="separator"/>
+ <addaction name="actionPrevious_Edge_Style"/>
+ <addaction name="actionNext_Edge_Style"/>
+ <addaction name="actionClear_Edge_Style"/>
+ </widget>
<addaction name="actionParse"/>
<addaction name="actionRevert"/>
<addaction name="actionJump_to_Selection"/>
<addaction name="actionRun_LaTeX"/>
<addaction name="separator"/>
+ <addaction name="menuNode_Style"/>
+ <addaction name="separator"/>
<addaction name="actionPreferences"/>
</widget>
<widget class="QMenu" name="menuView">
@@ -92,6 +106,7 @@
</property>
<addaction name="actionZoom_In"/>
<addaction name="actionZoom_Out"/>
+ <addaction name="actionShow_Node_Labels"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
@@ -383,6 +398,68 @@
<string>Ctrl+M</string>
</property>
</action>
+ <action name="actionShow_Node_Labels">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Show Node Labels</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Shift+L</string>
+ </property>
+ </action>
+ <action name="actionPrevious_Node_Style">
+ <property name="text">
+ <string>Previous Node Style</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+,</string>
+ </property>
+ </action>
+ <action name="actionNext_Node_Style">
+ <property name="text">
+ <string>Next Node Style</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+.</string>
+ </property>
+ </action>
+ <action name="actionClear_Node_Style">
+ <property name="text">
+ <string>Clear Node Style</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Space</string>
+ </property>
+ </action>
+ <action name="actionPrevious_Edge_Style">
+ <property name="text">
+ <string>Previous Edge Style</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Shift+,</string>
+ </property>
+ </action>
+ <action name="actionNext_Edge_Style">
+ <property name="text">
+ <string>Next Edge Style</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Shift+.</string>
+ </property>
+ </action>
+ <action name="actionClear_Edge_Style">
+ <property name="text">
+ <string>Clear Edge Style</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Shift+Space</string>
+ </property>
+ </action>
<addaction name="menuFile"/>
<addaction name="menuEdit"/>
<addaction name="menuView"/>
diff --git a/src/gui/nodeitem.cpp b/src/gui/nodeitem.cpp
index 82692f2..7ae4c4a 100644
--- a/src/gui/nodeitem.cpp
+++ b/src/gui/nodeitem.cpp
@@ -91,7 +91,13 @@ void NodeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidge
painter->drawPath(shape());
}
- if (_node->label() != "") {
+ bool drawLabel = _node->label() != "";
+ if (scene()) {
+ TikzScene *sc = static_cast<TikzScene*>(scene());
+ drawLabel= drawLabel && sc->drawNodeLabels();
+ }
+
+ if (drawLabel) {
QRectF rect = labelRect();
QPen pen(QColor(200,0,0,120));
QVector<qreal> d;
diff --git a/src/gui/stylepalette.cpp b/src/gui/stylepalette.cpp
index 15ed4c2..b862902 100644
--- a/src/gui/stylepalette.cpp
+++ b/src/gui/stylepalette.cpp
@@ -34,6 +34,8 @@ StylePalette::StylePalette(QWidget *parent) :
ui(new Ui::StylePalette)
{
ui->setupUi(this);
+ _lastStyleIndex = 0;
+ _lastEdgeStyleIndex = 0;
ui->styleListView->setModel(tikzit->styles()->nodeStyles());
ui->styleListView->setViewMode(QListView::IconMode);
@@ -73,31 +75,95 @@ void StylePalette::reloadStyles()
ui->currentCategory->addItems(tikzit->styles()->categories());
ui->currentCategory->setCurrentText(cat);
}
+
+ clearNodeStyle();
+ clearEdgeStyle();
}
-void StylePalette::changeNodeStyle(int increment)
+int StylePalette::styleIndex()
{
QModelIndexList i = ui->styleListView->selectionModel()->selectedIndexes();
- int row = 0;
- if (!i.isEmpty()) {
- int row = (i[0].row()+increment)% tikzit->styles()->nodeStyles()->numInCategory();
- if (row < 0) row += tikzit->styles()->nodeStyles()->numInCategory();
+ if (!i.isEmpty()) return i[0].row();
+ else return 0;
+}
+
+void StylePalette::setStyleIndex(int i)
+{
+ _lastStyleIndex = styleIndex();
+ if (i < 0) {
+ i = 0;
+ } else {
+ int max = tikzit->styles()->nodeStyles()->numInCategory();
+ if (i >= max) i = max - 1;
}
- //QModelIndex i1 = ui->styleListView->rootIndex().child(row, 0);
- QModelIndex i1 =tikzit->styles()->nodeStyles()->index(row,0);
+ QModelIndex i1 =tikzit->styles()->nodeStyles()->index(i,0);
ui->styleListView->selectionModel()->select(i1, QItemSelectionModel::ClearAndSelect);
ui->styleListView->scrollTo(i1);
}
+int StylePalette::edgeStyleIndex()
+{
+ QModelIndexList i = ui->edgeStyleListView->selectionModel()->selectedIndexes();
+ if (!i.isEmpty()) return i[0].row();
+ else return 0;
+}
+
+void StylePalette::setEdgeStyleIndex(int i)
+{
+ _lastEdgeStyleIndex = edgeStyleIndex();
+ if (i < 0) {
+ i = 0;
+ } else {
+ int max = tikzit->styles()->edgeStyles()->numInCategory();
+ if (i >= max) i = max - 1;
+ }
+
+ QModelIndex i1 =tikzit->styles()->edgeStyles()->index(i,0);
+ ui->edgeStyleListView->selectionModel()->select(i1, QItemSelectionModel::ClearAndSelect);
+ ui->edgeStyleListView->scrollTo(i1);
+}
+
void StylePalette::nextNodeStyle()
{
- changeNodeStyle(1);
+ setStyleIndex(styleIndex()+1);
}
void StylePalette::previousNodeStyle()
{
- changeNodeStyle(-1);
+ setStyleIndex(styleIndex()-1);
+}
+
+void StylePalette::clearNodeStyle()
+{
+ setStyleIndex(0);
+}
+
+void StylePalette::toggleClearNodeStyle()
+{
+ if (styleIndex() == 0) setStyleIndex(_lastStyleIndex);
+ else setStyleIndex(0);
+}
+
+void StylePalette::nextEdgeStyle()
+{
+ setEdgeStyleIndex(edgeStyleIndex()+1);
+}
+
+void StylePalette::previousEdgeStyle()
+{
+ setEdgeStyleIndex(edgeStyleIndex()-1);
+}
+
+void StylePalette::clearEdgeStyle()
+{
+ setEdgeStyleIndex(0);
+}
+
+void StylePalette::toggleClearEdgeStyle()
+{
+ if (edgeStyleIndex() == 0) setEdgeStyleIndex(_lastEdgeStyleIndex);
+ else setEdgeStyleIndex(0);
}
QString StylePalette::activeNodeStyleName()
@@ -164,6 +230,7 @@ void StylePalette::on_currentCategory_currentTextChanged(const QString &cat)
{
//tikzit->styles()->refreshModels(_nodeModel, _edgeModel, cat);
tikzit->styles()->nodeStyles()->setCategory(cat);
+ clearNodeStyle();
}
//void StylePalette::on_buttonApplyNodeStyle_clicked()
diff --git a/src/gui/stylepalette.h b/src/gui/stylepalette.h
index f27cd4b..6e16812 100644
--- a/src/gui/stylepalette.h
+++ b/src/gui/stylepalette.h
@@ -36,10 +36,14 @@ public:
void reloadStyles();
void nextNodeStyle();
void previousNodeStyle();
+ void clearNodeStyle();
+ void toggleClearNodeStyle();
+ void nextEdgeStyle();
+ void previousEdgeStyle();
+ void clearEdgeStyle();
+ void toggleClearEdgeStyle();
QString activeNodeStyleName();
QString activeEdgeStyleName();
-
-
public slots:
void nodeStyleDoubleClicked(const QModelIndex &);
void edgeStyleDoubleClicked(const QModelIndex &);
@@ -51,7 +55,12 @@ public slots:
//void on_buttonApplyNodeStyle_clicked();
private:
- void changeNodeStyle(int increment);
+ int _lastStyleIndex;
+ int _lastEdgeStyleIndex;
+ int styleIndex();
+ void setStyleIndex(int i);
+ int edgeStyleIndex();
+ void setEdgeStyleIndex(int i);
Ui::StylePalette *ui;
diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp
index 4577981..087f621 100644
--- a/src/gui/tikzscene.cpp
+++ b/src/gui/tikzscene.cpp
@@ -38,6 +38,7 @@ TikzScene::TikzScene(TikzDocument *tikzDocument, ToolPalette *tools,
{
_modifyEdgeItem = nullptr;
_edgeStartNodeItem = nullptr;
+ _drawNodeLabels = true;
_drawEdgeItem = new QGraphicsLineItem();
_rubberBandItem = new QGraphicsRectItem();
_enabled = true;
@@ -707,25 +708,6 @@ void TikzScene::keyReleaseEvent(QKeyEvent *event)
}
- if (event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) {
- deleteSelectedItems();
- } else if (mod == Qt::NoModifier) {
- switch(event->key()) {
- case Qt::Key_S:
- tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::SELECT);
- break;
- case Qt::Key_V:
- case Qt::Key_N:
- tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::VERTEX);
- break;
- case Qt::Key_E:
- tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::EDGE);
- break;
- case Qt::Key_B:
- tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::CROP);
- break;
- }
- }
foreach (QGraphicsItem *it, selectedItems()) it->update();
}
@@ -739,11 +721,6 @@ void TikzScene::keyPressEvent(QKeyEvent *event)
// slower, but seems to be more reliable than event->modifiers()
Qt::KeyboardModifiers mod = QApplication::queryKeyboardModifiers();
- if (event->key() == Qt::Key_QuoteLeft) {
- capture = true;
- _styles->nextNodeStyle();
- }
-
if (mod & Qt::ControlModifier) {
QSet<Node*> selNodes;
QSet<Edge*> selEdges;
@@ -865,6 +842,26 @@ void TikzScene::keyPressEvent(QKeyEvent *event)
_tikzDocument->undoStack()->endMacro();
}
}
+ } else { // no CTRL key
+ if (event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete) {
+ deleteSelectedItems();
+ } else if (!event->isAutoRepeat()) {
+ switch(event->key()) {
+ case Qt::Key_S:
+ tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::SELECT);
+ break;
+ case Qt::Key_V:
+ case Qt::Key_N:
+ tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::VERTEX);
+ break;
+ case Qt::Key_E:
+ tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::EDGE);
+ break;
+ case Qt::Key_B:
+ tikzit->activeWindow()->toolPalette()->setCurrentTool(ToolPalette::CROP);
+ break;
+ }
+ }
}
foreach (QGraphicsItem *it, selectedItems()) it->update();
@@ -907,6 +904,16 @@ void TikzScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
}
}
+bool TikzScene::drawNodeLabels() const
+{
+ return _drawNodeLabels;
+}
+
+void TikzScene::setDrawNodeLabels(bool drawNodeLabels)
+{
+ _drawNodeLabels = drawNodeLabels;
+}
+
bool TikzScene::highlightTails() const
{
return _highlightTails && getSelectedNodes().isEmpty();
diff --git a/src/gui/tikzscene.h b/src/gui/tikzscene.h
index f8dc7ec..2e7baa5 100644
--- a/src/gui/tikzscene.h
+++ b/src/gui/tikzscene.h
@@ -90,6 +90,9 @@ public:
bool highlightHeads() const;
bool highlightTails() const;
+ bool drawNodeLabels() const;
+ void setDrawNodeLabels(bool drawNodeLabels);
+
public slots:
void graphReplaced();
void refreshZIndices();
@@ -115,6 +118,7 @@ private:
bool _firstControlPoint;
QPointF _mouseDownPos;
bool _draggingNodes;
+ bool _drawNodeLabels;
QMap<Node*,QPointF> _oldNodePositions;
qreal _oldWeight;
@@ -126,6 +130,8 @@ private:
bool _highlightHeads;
bool _highlightTails;
bool _smartTool;
+
+ bool _ctrlWasPressed;
};
#endif // TIKZSCENE_H
diff --git a/src/tikzit.h b/src/tikzit.h
index 94aba9d..d27d416 100644
--- a/src/tikzit.h
+++ b/src/tikzit.h
@@ -49,7 +49,7 @@
#ifndef TIKZIT_H
#define TIKZIT_H
-#define TIKZIT_VERSION "2.1.4"
+#define TIKZIT_VERSION "2.1.5"
#include "mainwindow.h"
#include "mainmenu.h"
diff --git a/tex/sample/figures/fig.tikz b/tex/sample/figures/fig.tikz
index f454de2..4a30037 100644
--- a/tex/sample/figures/fig.tikz
+++ b/tex/sample/figures/fig.tikz
@@ -1,9 +1,9 @@
-\begin{tikzpicture}[tikzfig]
+\begin{tikzpicture}
\begin{pgfonlayer}{nodelayer}
\node [style=red node] (0) at (0, 1) {};
\node [style=blue node 2] (1) at (1, 0) {};
\node [style=blue node] (2) at (-1, 0) {};
- \node [style=yellow square] (3) at (0, -1) {\anglevec{\alpha}};
+ \node [style=yellow square] (3) at (0, -1) {\param{\alpha}};
\end{pgfonlayer}
\begin{pgfonlayer}{edgelayer}
\draw [in=-90, out=0] (3) to (1);
diff --git a/tex/sample/sample.tikzstyles b/tex/sample/sample.tikzstyles
index f32728c..2a3bb7f 100644
--- a/tex/sample/sample.tikzstyles
+++ b/tex/sample/sample.tikzstyles
@@ -8,6 +8,7 @@
\tikzstyle{blue node}=[fill=blue, shape=circle, draw=black, tikzit category=nodes]
\tikzstyle{green node}=[tikzit fill=green, fill=green, shape=circle, draw=black, tikzit category=nodes]
\tikzstyle{yellow square}=[draw=black, fill=yellow, shape=rectangle]
+\tikzstyle{blue node 2}=[fill={rgb,255: red,128; green,0; blue,128}, draw=black, shape=circle, tikzit fill=blue]
% Edge styles
\tikzstyle{dashed edge}=[<->, dashed]
diff --git a/tikzit.pro b/tikzit.pro
index 6fe8471..e0f3544 100644
--- a/tikzit.pro
+++ b/tikzit.pro
@@ -2,7 +2,7 @@
QT += core gui widgets network
-VERSION = 2.1.4
+VERSION = 2.1.5
test {
CONFIG += testcase