Skip to content

Commit

Permalink
- First version of CMake support. - Also encapsulated all graphviz st…
Browse files Browse the repository at this point in the history
…uff into private objects, so that all public headers are free from graphviz headers - Defined QDECL_EXPORT macro for all public classes, to avoid auto import when using the library
  • Loading branch information
Joachim Langenbach authored and nbergont committed Apr 1, 2014
1 parent 564ed98 commit 5467b50
Show file tree
Hide file tree
Showing 32 changed files with 1,607 additions and 172 deletions.
388 changes: 388 additions & 0 deletions CMakeLists.txt

Large diffs are not rendered by default.

502 changes: 502 additions & 0 deletions LICENSE.txt

Large diffs are not rendered by default.

143 changes: 143 additions & 0 deletions QGVCore/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# enable all QT-Stuff we need
# see http://cmake.org/cmake/help/cmake2.6docs.html#module:FindQt4 for a complete list

SET(qgvlib_TS
)

SET(qgvlib_UI

)

# all files which may be mocced
SET(qgvlib_CPP
private/QGVCore.cpp
private/QGVGraphPrivate.cpp
private/QGVEdgePrivate.cpp
private/QGVGvcPrivate.cpp
private/QGVNodePrivate.cpp
QGVEdge.cpp
QGVNode.cpp
QGVScene.cpp
QGVSubGraph.cpp
)

# include with QT_USE selected library parts
INCLUDE(${QT_USE_FILE})

INCLUDE_DIRECTORIES(
${GRAPHVIZ_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/private
${CMAKE_CURRENT_BINARY_DIR}/private

)
# Activate Export macro for building the library itself
# if QGVCORE_LIB is not set or equal 0 (null), import macro is used
ADD_DEFINITIONS(-DQGVCORE_LIB)

IF(BINDINGS_QT4)
# QT5 does not declare and does not need QT_INCLUDES
SET(INCLUDE_DIRECTORIES ${INCLUDES_DIRECTORIES} ${QT_INCLUDES})
INCLUDE(${QT_USE_FILE})
ENDIF(BINDINGS_QT4)
ADD_DEFINITIONS(-DQVGCORE_LIB)

IF(BINDINGS_QT4)
QT4_AUTOMOC(${qgvlib_CPP})
QT4_WRAP_UI(qgvlib_UI_H ${qgvlib_UI})
QT4_ADD_TRANSLATION(qgvlib_TRANS ${qgvlib_TS})
# -binary is not working
# QT4_ADD_RESOURCES(RCCS "${QRCS}" OPTIONS "-binary")
# QT4_ADD_RESOURCES(qgvlib_RCCS ${qgvlib_QRC})
ENDIF(BINDINGS_QT4)
IF(BINDINGS_QT5)
QT5_WRAP_UI(qgvlib_UI_H ${qgvlib_UI})
QT5_ADD_TRANSLATION(qgvlib_TRANS ${qgvlib_TS})
QT5_ADD_RESOURCES(qgvlib_RCCS ${qgvlib_QRC})
ENDIF(BINDINGS_QT5)

ADD_LIBRARY(qgvcore SHARED
${qgvlib_CPP}
${qgvlib_UI_H}
${qgvlib_TRANS}
)

TARGET_LINK_LIBRARIES(qgvcore
${QT_LIBRARIES}
${GRAPHVIZ_GVC_LIBRARY}
${GRAPHVIZ_CGRAPH_LIBRARY}
${GRAPHVIZ_CDT_LIBRARY}
)

IF(BINDINGS_QT5)
qt5_use_modules(QVGCore Core Widgets)
ENDIF(BINDINGS_QT5)

SET_TARGET_PROPERTIES(qgvcore PROPERTIES
OUTPUT_NAME "QGVCore"
VERSION ${TARGET_VERSION_MAJOR}.${TARGET_VERSION_MINOR}.${${PROJECT_NAME}_PATCH_LEVEL}
SOVERSION ${TARGET_VERSION_MAJOR})
IF(WIN32)
# this extra install command is needed by the nsis installer
INSTALL(TARGETS qgvcore
RUNTIME DESTINATION ${LIB_INSTALL_DIR}
COMPONENT library
)
ELSE(WIN32)
INSTALL(TARGETS qgvcore
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
COMPONENT library
)
ENDIF(WIN32)

# The COMPONENT option only defines the internal belonging of the INSTALL'ed thing
# INSTALL(
# FILES ${qgvlib_TRANS}
# DESTINATION ${qm_DIR}
# COMPONENT library
# )

IF(WIN32)
# QuaZip
# FIND_FILE(PACK_zlib zlib.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# INSTALL(FILES ${QUAZIP_LIBRARIES} ${PACK_zlib} DESTINATION ${bin_DIR} COMPONENT library)

# Qt itself
# FIND_FILE(PACK_qtcore QtCore4.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# FIND_FILE(PACK_qtgui QtGui4.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# FIND_FILE(PACK_qtnetwork QtNetwork4.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# FIND_FILE(PACK_qtsql QtSql4.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# FIND_FILE(PACK_qtxml QtXml4.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# FIND_FILE(PACK_qtxml_patterns QtXmlPatterns4.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)

# FIND_FILE(PACK_mingwm10 mingwm10.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)
# FIND_FILE(PACK_libgcc_s_dw libgcc_s_dw2-1.dll PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH)

# INSTALL(
# FILES
# ${PACK_qtcore}
# ${PACK_qtgui}
# ${PACK_qtnetwork}
# ${PACK_qtsql}
# ${PACK_libmysql}
# ${PACK_qtxml}
# ${PACK_qtxml_patterns}
# ${PACK_mingwm10}
# ${PACK_libgcc_s_dw}
# ${LIBENGSAS_LIBRARIES}
# ${LIBENGSAS_EPARTEXE}
# DESTINATION ${bin_DIR}
# COMPONENT qtlibs
# )
ENDIF(WIN32)

IF(BUILD_DEV)
FILE(GLOB header "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
INSTALL(
FILES ${header}
DESTINATION ${include_DIR}
COMPONENT headerfiles
)
ENDIF(BUILD_DEV)
6 changes: 4 additions & 2 deletions QGVCore/GraphViz.pri
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
#GraphViz librairie
DEFINES += WITH_CGRAPH
INCLUDEPATH += private
QMAKE_CXXFLAGS += -DQGVCORE_LIB -DQMAKE_MOC

unix {
CONFIG += link_pkgconfig
PKGCONFIG += libcdt libgvc libcgraph libgraph
}
win32 {
#Configure Windows GraphViz path here :
GRAPHVIZ_PATH = "C:/Program Files (x86)/Graphviz2.36"
GRAPHVIZ_PATH = "D:/Program Files (x86)/Graphviz2.36/"
DEFINES += WIN32_DLL
DEFINES += GVDLL
INCLUDEPATH += $$GRAPHVIZ_PATH/include/graphviz
LIBS += -L$$GRAPHVIZ_PATH/lib/release/lib -lgvc -lcgraph -lgraph -lcdt
}
}
20 changes: 11 additions & 9 deletions QGVCore/QGVCore.pro
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,6 @@

QT += core

greaterThan(QT_MAJOR_VERSION, 4){
QT += widgets
}
lessThan(QT_MAJOR_VERSION, 5) {
QT += gui
}

TARGET = QGVCore
TEMPLATE = lib
CONFIG += shared
Expand All @@ -29,10 +22,19 @@ SOURCES += QGVScene.cpp \
QGVNode.cpp \
QGVEdge.cpp \
QGVSubGraph.cpp \
QGVCore.cpp
private/QGVCore.cpp \
private/QGVGraphPrivate.cpp \
private/QGVGvcPrivate.cpp \
private/QGVEdgePrivate.cpp \
private/QGVNodePrivate.cpp

HEADERS += QGVScene.h \
QGVNode.h \
QGVEdge.h \
QGVSubGraph.h \
QGVCore.h
private/QGVCore.h \
private/QGVGraphPrivate.h \
private/QGVGvcPrivate.h \
private/QGVEdgePrivate.h \
private/QGVNodePrivate.h \
qgv.h
18 changes: 11 additions & 7 deletions QGVCore/QGVEdge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,22 @@ You should have received a copy of the GNU Lesser General Public
License along with this library.
***************************************************************/
#include <QGVEdge.h>
#include <QGVCore.h>
#include <QGVScene.h>
#include <QGVGraphPrivate.h>
#include <QGVEdgePrivate.h>
#include <QDebug>
#include <QPainter>

QGVEdge::QGVEdge(Agedge_t *edge, QGVScene *scene) : _edge(edge), _scene(scene)
QGVEdge::QGVEdge(QGVEdgePrivate *edge, QGVScene *scene) : _edge(edge), _scene(scene)
{
setFlag(QGraphicsItem::ItemIsSelectable, true);
}

QGVEdge::~QGVEdge()
{
_scene->removeItem(this);
delete _edge;
}

QString QGVEdge::label() const
Expand Down Expand Up @@ -94,12 +98,12 @@ void QGVEdge::paint(QPainter * painter, const QStyleOptionGraphicsItem * option,

void QGVEdge::setAttribute(const QString &name, const QString &value)
{
agsafeset(_edge, name.toLocal8Bit().data(), value.toLocal8Bit().data(), "");
agsafeset(_edge->edge(), name.toLocal8Bit().data(), value.toLocal8Bit().data(), "");
}

QString QGVEdge::getAttribute(const QString &name) const
{
char* value = agget(_edge, name.toLocal8Bit().data());
char* value = agget(_edge->edge(), name.toLocal8Bit().data());
if(value)
return value;
return QString();
Expand All @@ -109,9 +113,9 @@ void QGVEdge::updateLayout()
{
prepareGeometryChange();

qreal gheight = QGVCore::graphHeight(_scene->_graph);
qreal gheight = QGVCore::graphHeight(_scene->_graph->graph());

const splines* spl = ED_spl(_edge);
const splines* spl = ED_spl(_edge->edge());
_path = QGVCore::toPath(spl, gheight);


Expand All @@ -134,12 +138,12 @@ void QGVEdge::updateLayout()
_pen.setStyle(QGVCore::toPenStyle(getAttribute("style")));

//Edge label
textlabel_t *xlabel = ED_xlabel(_edge);
textlabel_t *xlabel = ED_xlabel(_edge->edge());
if(xlabel)
{
_label = xlabel->text;
_label_rect.setSize(QSize(xlabel->dimen.x, xlabel->dimen.y));
_label_rect.moveCenter(QGVCore::toPoint(xlabel->pos, QGVCore::graphHeight(_scene->_graph)));
_label_rect.moveCenter(QGVCore::toPoint(xlabel->pos, QGVCore::graphHeight(_scene->_graph->graph())));
}

setToolTip(getAttribute("tooltip"));
Expand Down
9 changes: 5 additions & 4 deletions QGVCore/QGVEdge.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,19 @@ License along with this library.
#ifndef QGVEDGE_H
#define QGVEDGE_H

#include <QGVCore.h>
#include <qgv.h>
#include <QGraphicsItem>
#include <QPen>

class QGVNode;
class QGVScene;
class QGVEdgePrivate;

/**
* @brief Edge item
*
*/
class QGVEdge : public QGraphicsItem
class QGVCORE_EXPORT QGVEdge : public QGraphicsItem
{
public:
~QGVEdge();
Expand All @@ -54,15 +55,15 @@ class QGVEdge : public QGraphicsItem
}

private:
QGVEdge(Agedge_t *edge, QGVScene *scene);
QGVEdge(QGVEdgePrivate *edge, QGVScene *scene);

QPolygonF toArrow(const QLineF &normal) const;

friend class QGVScene;
//friend class QGVSubGraph;

QGVScene *_scene;
Agedge_t* _edge;
QGVEdgePrivate* _edge;

QPainterPath _path;
QPen _pen;
Expand Down
20 changes: 12 additions & 8 deletions QGVCore/QGVNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,22 @@ You should have received a copy of the GNU Lesser General Public
License along with this library.
***************************************************************/
#include <QGVNode.h>
#include <QGVCore.h>
#include <QGVScene.h>
#include <QGVGraphPrivate.h>
#include <QGVNodePrivate.h>
#include <QDebug>
#include <QPainter>

QGVNode::QGVNode(Agnode_t* node, QGVScene *scene): _node(node), _scene(scene)
QGVNode::QGVNode(QGVNodePrivate *node, QGVScene *scene): _node(node), _scene(scene)
{
setFlag(QGraphicsItem::ItemIsSelectable, true);
}

QGVNode::~QGVNode()
{
_scene->removeItem(this);
delete _node;
}

QString QGVNode::label() const
Expand Down Expand Up @@ -82,12 +86,12 @@ void QGVNode::paint(QPainter * painter, const QStyleOptionGraphicsItem * option,

void QGVNode::setAttribute(const QString &name, const QString &value)
{
agsafeset(_node, name.toLocal8Bit().data(), value.toLocal8Bit().data(), "");
agsafeset(_node->node(), name.toLocal8Bit().data(), value.toLocal8Bit().data(), "");
}

QString QGVNode::getAttribute(const QString &name) const
{
char* value = agget(_node, name.toLocal8Bit().data());
char* value = agget(_node->node(), name.toLocal8Bit().data());
if(value)
return value;
return QString();
Expand All @@ -101,18 +105,18 @@ void QGVNode::setIcon(const QImage &icon)
void QGVNode::updateLayout()
{
prepareGeometryChange();
qreal width = ND_width(_node)*DotDefaultDPI;
qreal height = ND_height(_node)*DotDefaultDPI;
qreal width = ND_width(_node->node())*DotDefaultDPI;
qreal height = ND_height(_node->node())*DotDefaultDPI;

//Node Position (center)
qreal gheight = QGVCore::graphHeight(_scene->_graph);
setPos(QGVCore::centerToOrigin(QGVCore::toPoint(ND_coord(_node), gheight), width, height));
qreal gheight = QGVCore::graphHeight(_scene->_graph->graph());
setPos(QGVCore::centerToOrigin(QGVCore::toPoint(ND_coord(_node->node()), gheight), width, height));

//Node on top
setZValue(1);

//Node path
_path = QGVCore::toPath(ND_shape(_node)->name, (polygon_t*)ND_shape_info(_node), width, height);
_path = QGVCore::toPath(ND_shape(_node->node())->name, (polygon_t*)ND_shape_info(_node->node()), width, height);
_pen.setWidth(1);

_brush.setStyle(QGVCore::toBrushStyle(getAttribute("style")));
Expand Down
Loading

0 comments on commit 5467b50

Please sign in to comment.