Skip to content

Commit

Permalink
Merge pull request #162 from cneben/develop
Browse files Browse the repository at this point in the history
2.1.0
  • Loading branch information
cneben committed Aug 17, 2022
2 parents e40b81c + 3902d60 commit 9af64e6
Show file tree
Hide file tree
Showing 34 changed files with 973 additions and 157 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.5.0)

project(QuickQanava VERSION 0.11.0 LANGUAGES CXX)
project(QuickQanava VERSION 2.1.0 LANGUAGES CXX)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00)
Expand Down
2 changes: 1 addition & 1 deletion QuickContainers/include/qcmAdapter.h
Expand Up @@ -78,7 +78,7 @@ struct adapter< QList, T > {
inline static int indexOf(const QList<T>& c, const T& t) { return c.indexOf(t); }
};

#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) || defined(__clang__)
template <typename T>
struct adapter<QVector, T> {
inline static void reserve(QVector<T>& c, std::size_t size) { c.reserve(static_cast<int>(size)); }
Expand Down
6 changes: 4 additions & 2 deletions quickqanava.pro
Expand Up @@ -12,17 +12,19 @@ test-style.subdir = samples/style
test-dataflow.subdir = samples/dataflow
test-topology.subdir = samples/topology
test-cpp.subdir = samples/cpp
test-tools.subdir = samples/tools

# Uncomment to activate samples projects:
#SUBDIRS += test-nodes
#SUBDIRS += test-edges
SUBDIRS += test-connector
#SUBDIRS += test-connector
#SUBDIRS += test-groups
#SUBDIRS += test-selection
#SUBDIRS += test-style
SUBDIRS += test-topology
#SUBDIRS += test-topology
#SUBDIRS += test-dataflow
#SUBDIRS += test-cpp
SUBDIRS += test-tools

# Theses ones are test projects, not sample:
#SUBDIRS += test-resizer
Expand Down
9 changes: 9 additions & 0 deletions samples/tools/qtquickcontrols2.conf
@@ -0,0 +1,9 @@
[Material]
Primary=#03A9F4
Accent=#03A9F4
Theme=Light
Variant=Dense

[Universal]
Accent=#41cd52
Theme=Light
59 changes: 59 additions & 0 deletions samples/tools/tools.cpp
@@ -0,0 +1,59 @@
/*
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author or Destrat.io nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

//-----------------------------------------------------------------------------
// This file is a part of the QuickQanava software library.
//
// \file tools.cpp
// \author benoit@destrat.io
// \date 2022 08 10
//-----------------------------------------------------------------------------

// Qt headers
#include <QApplication>
#include <QQuickStyle>
#include <QIcon>

// QuickQanava headers
#include "../../src/QuickQanava.h"

using namespace qan;

int main(int argc, char** argv)
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(true);
QQuickStyle::setStyle("Material");
QQmlApplicationEngine engine;
engine.addPluginPath(QStringLiteral("../../src")); // Necessary only for development when plugin is not installed to QTDIR/qml
QuickQanava::initialize(&engine);
engine.load(QUrl("qrc:/tools.qml"));
return app.exec();
}

14 changes: 14 additions & 0 deletions samples/tools/tools.pro
@@ -0,0 +1,14 @@
TEMPLATE = app
TARGET = test-tools
CONFIG += qt warn_on thread c++14
QT += widgets core gui qml quick quickcontrols2

include(../../src/quickqanava.pri)

RESOURCES += ./tools.qrc

SOURCES += ./tools.cpp

HEADERS += ./tools.qml

OTHER_FILES += tools.qml
196 changes: 196 additions & 0 deletions samples/tools/tools.qml
@@ -0,0 +1,196 @@
/*
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the author or Destrat.io nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import QtQuick.Window 2.2
import QtQuick 2.13

import QtQuick.Controls 2.13

import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.1
import QtQuick.Shapes 1.0

import QuickQanava 2.0 as Qan
import "qrc:/QuickQanava" as Qan

ApplicationWindow {
id: window
visible: true
width: 1280
height: 720 // MPEG - 2 HD 720p - 1280 x 720 16:9
title: "Tools test"
Pane {
anchors.fill: parent
padding: 0
}

function centerItem(item) {
if (!item || !window.contentItem)
return
var windowCenter = Qt.point(
(window.contentItem.width - item.width) / 2.,
(window.contentItem.height - item.height) / 2.)
var graphNodeCenter = window.contentItem.mapToItem(
graphView.containerItem, windowCenter.x, windowCenter.y)
item.x = graphNodeCenter.x
item.y = graphNodeCenter.y
}

Qan.GraphView {
id: graphView
anchors.fill: parent
graph: topology
navigable: true
resizeHandlerColor: Material.accent
gridThickColor: Material.theme === Material.Dark ? "#4e4e4e" : "#c1c1c1"

Qan.Graph {
id: topology
objectName: "graph"
anchors.fill: parent
clip: true
connectorEnabled: true
selectionColor: Material.accent
connectorColor: Material.accent
connectorEdgeColor: Material.accent
onConnectorEdgeInserted: edge => {
//if (edge)
// edge.label = "My edge"
}
property Component faceNodeComponent: Qt.createComponent("qrc:/FaceNode.qml")

Component.onCompleted: {
var n1 = topology.insertNode()
n1.label = "n1"

var n2 = topology.insertNode()
n2.label = "n2"
n2.item.x = 150
n2.item.y = 55

graphView.centerOnPosition(Qt.point(0, 0));
}
} // Qan.Graph: graph
}

Qan.GraphPreview {
id: graphPreview
source: graphView
viewWindowColor: Material.accent
anchors.right: graphView.right
anchors.bottom: graphView.bottom
anchors.rightMargin: 8
anchors.bottomMargin: 8
width: previewMenu.mediumPreview.width
height: previewMenu.mediumPreview.height
Menu {
id: previewMenu
readonly property size smallPreview: Qt.size(150, 85)
readonly property size mediumPreview: Qt.size(250, 141)
readonly property size largePreview: Qt.size(350, 198)
MenuItem {
text: "Hide preview"
onTriggered: graphPreview.visible = false
}
MenuSeparator { }
MenuItem {
text: qsTr('Small')
checkable: true
checked: graphPreview.width === previewMenu.smallPreview.width &&
graphPreview.height === previewMenu.smallPreview.height
onTriggered: {
graphPreview.width = previewMenu.smallPreview.width
graphPreview.height = previewMenu.smallPreview.height
}
}
MenuItem {
text: qsTr('Medium')
checkable: true
checked: graphPreview.width === previewMenu.mediumPreview.width &&
graphPreview.height === previewMenu.mediumPreview.height
onTriggered: {
graphPreview.width = previewMenu.mediumPreview.width
graphPreview.height = previewMenu.mediumPreview.height
}
}
MenuItem {
text: qsTr('Large')
checkable: true
checked: graphPreview.width === previewMenu.largePreview.width &&
graphPreview.height === previewMenu.largePreview.height
onTriggered: {
graphPreview.width = previewMenu.largePreview.width
graphPreview.height = previewMenu.largePreview.height
}
}
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: previewMenu.open(mouse.x, mouse.y)
}
}

Qan.HeatMapPreview {
id: heatMapPreview
anchors.left: graphView.left
anchors.bottom: graphView.bottom
source: graphView
viewWindowColor: Material.accent
Menu {
id: heatMapMenu
MenuItem {
text: qsTr("Clear heat map")
onClicked: heatMapPreview.clearHeatMap()
}
MenuItem {
text: qsTr("Increase preview size")
onTriggered: {
heatMapPreview.width *= 1.15
heatMapPreview.height *= 1.15
}
}
MenuItem {
text: qsTr("Decrease preview size")
onTriggered: {
heatMapPreview.width *= Math.max(50, heatMapPreview.width * 0.85)
heatMapPreview.height *= Math.max(50, heatMapPreview.height * 0.85)
}
}
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton; preventStealing: true
onClicked: {
if (mouse.button === Qt.RightButton) {
heatMapMenu.x = mouse.x
heatMapMenu.y = mouse.y
heatMapMenu.open()
}
}
}
} // Qan.HeatMapPreview
} // ApplicationWindow
6 changes: 6 additions & 0 deletions samples/tools/tools.qrc
@@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/">
<file>tools.qml</file>
<file>qtquickcontrols2.conf</file>
</qresource>
</RCC>
2 changes: 1 addition & 1 deletion samples/topology/EdgesListView.qml
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 1 addition & 1 deletion samples/topology/NodesListView.qml
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 1 addition & 1 deletion samples/topology/ScreenshotPopup.qml
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 1 addition & 1 deletion samples/topology/qanFaceNode.cpp
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 1 addition & 1 deletion samples/topology/qanFaceNode.h
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 1 addition & 1 deletion samples/topology/topology.cpp
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 1 addition & 1 deletion samples/topology/topology.qml
@@ -1,5 +1,5 @@
/*
Copyright (c) 2020, Benoit AUTHEMAN All rights reserved.
Copyright (c) 2008-2022, Benoit AUTHEMAN All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Expand Down
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Expand Up @@ -22,6 +22,7 @@ set(qan_source_files
qanSelectable.cpp
qanStyle.cpp
qanStyleManager.cpp
qanAnalysisTimeHeatMap.cpp
qanUtils.cpp
)

Expand Down Expand Up @@ -49,6 +50,7 @@ set (qan_header_files
qanSelectable.h
qanStyle.h
qanStyleManager.h
qanAnalysisTimeHeatMap.cpp
qanUtils.h
QuickQanava.h
gtpo/container_adapter.h
Expand Down

0 comments on commit 9af64e6

Please sign in to comment.