Skip to content
Snippets Groups Projects
QGVScene.h 2.47 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

nicolas.bergont's avatar
nicolas.bergont committed
#include <QGVCore.h>
Nicolas's avatar
Nicolas committed
#include <QGraphicsScene>
#include <QGVNode.h>
#include <QGVEdge.h>
#include <QGVSubGraph.h>

nicolas.bergont's avatar
nicolas.bergont committed
/**
 * @brief GraphViz interactive scene
 *
 */
Nicolas's avatar
Nicolas committed
class QGVScene : public QGraphicsScene
{
    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();
nicolas.bergont's avatar
nicolas.bergont committed
    void clear();
Nicolas's avatar
Nicolas committed


signals:
    void nodeContextMenu(QGVNode* node);
    void nodeDoubleClick(QGVNode* node);

    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 drawBackground(QPainter * painter, const QRectF & rect);
private:
    friend class QGVNode;
    friend class QGVEdge;
    friend class QGVSubGraph;

    GVC_t *_context;
    Agraph_t *_graph;
    //QFont _font;

    QList<QGVNode*> _nodes;
    QList<QGVEdge*> _edges;
    QList<QGVSubGraph*> _subGraphs;
};

#endif // QGVSCENE_H