Skip to content
Snippets Groups Projects
QGVScene.h 2.79 KiB
Newer Older
nicolas.bergont's avatar
nicolas.bergont committed
/***************************************************************
QGVCore
Copyright (c) 2014, Bergont Nicolas, All rights reserved.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library.
***************************************************************/
Nicolas's avatar
Nicolas committed
#ifndef QGVSCENE_H
#define QGVSCENE_H

Janosch Machowinski's avatar
Janosch Machowinski committed
#include "qgv.h"
Nicolas's avatar
Nicolas committed
#include <QGraphicsScene>

class QGVNode;
class QGVEdge;
class QGVSubGraph;

class QGVGraphPrivate;
class QGVGvcPrivate;
nicolas.bergont's avatar
nicolas.bergont committed
/**
 * @brief GraphViz interactive scene
 *
 */
class QGVCORE_EXPORT QGVScene : public QGraphicsScene
Nicolas's avatar
Nicolas committed
{
    Q_OBJECT
public:

    explicit QGVScene(const QString &name, QObject *parent = 0);
    ~QGVScene();

    void setGraphAttribute(const QString &name, const QString &value);
    void setNodeAttribute(const QString &name, const QString &value);
    void setEdgeAttribute(const QString &name, const QString &value);

    QGVNode* addNode(const QString& label);
    QGVEdge* addEdge(QGVNode* source, QGVNode* target, const QString& label=QString());
nicolas.bergont's avatar
nicolas.bergont committed
    QGVSubGraph* addSubGraph(const QString& name, bool cluster=true);
Nicolas's avatar
Nicolas committed

    void setRootNode(QGVNode *node);

    void loadLayout(const QString &text);
    void applyLayout(const QString &algorithm = "dot");
    void render (const QString &algorithm);
    void freeLayout();
nicolas.bergont's avatar
nicolas.bergont committed
    void clear();
Nicolas's avatar
Nicolas committed


signals:
    void nodeContextMenu(QGVNode* node);
    void nodeDoubleClick(QGVNode* node);
    void nodeChanged (QGVNode* node);
    void nodeMouseRelease (QGVNode* node);
Nicolas's avatar
Nicolas committed

    void edgeContextMenu(QGVEdge* edge);
    void edgeDoubleClick(QGVEdge* edge);
nicolas.bergont's avatar
nicolas.bergont committed

    void subGraphContextMenu(QGVSubGraph* graph);
    void subGraphDoubleClick(QGVSubGraph* graph);

    void graphContextMenuEvent();
Nicolas's avatar
Nicolas committed
    
public slots:

protected:
    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent * contextMenuEvent);
    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * mouseEvent);
    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent);
Nicolas's avatar
Nicolas committed
    virtual void drawBackground(QPainter * painter, const QRectF & rect);
private:
    friend class QGVNode;
    friend class QGVEdge;
    friend class QGVSubGraph;

		QGVGvcPrivate *_context;
		QGVGraphPrivate *_graph;
Nicolas's avatar
Nicolas committed
    //QFont _font;

    QList<QGVNode*> _nodes;
    QList<QGVEdge*> _edges;
    QList<QGVSubGraph*> _subGraphs;
    QGraphicsTextItem* _label;
Nicolas's avatar
Nicolas committed
};

#endif // QGVSCENE_H