Tulip  5.3.0
Large graphs analysis and drawing
NodeLinkDiagramComponent.h
1 /*
2  *
3  * This file is part of Tulip (http://tulip.labri.fr)
4  *
5  * Authors: David Auber and the Tulip development Team
6  * from LaBRI, University of Bordeaux
7  *
8  * Tulip is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation, either version 3
11  * of the License, or (at your option) any later version.
12  *
13  * Tulip is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU General Public License for more details.
17  *
18  */
19 ///@cond DOXYGEN_HIDDEN
20 
21 #ifndef _Tulip_NODELINKDIAGRAMCOMPONENT_H
22 #define _Tulip_NODELINKDIAGRAMCOMPONENT_H
23 
24 #include <tulip/GlMainView.h>
25 #include <tulip/Camera.h>
26 
27 namespace Ui {
28 class GridOptionsWidget;
29 }
30 
31 class QDialog;
32 class QAction;
33 
34 namespace tlp {
35 class GlGrid;
36 class GlCompositeHierarchyManager;
37 class PropertyInterface;
38 class StringProperty;
39 
40 class TLP_QT_SCOPE NodeLinkDiagramComponent : public tlp::GlMainView {
41  Q_OBJECT
42 
43  GlGrid *_grid;
44  QDialog *_gridOptions;
45  GlCompositeHierarchyManager *manager;
46  bool _hasHulls;
47 
48  void registerTriggers();
49  void updateGrid();
50 
51  Ui::GridOptionsWidget *grid_ui;
52 
53 public:
54  static const std::string viewName;
55  PLUGININFORMATION(NodeLinkDiagramComponent::viewName, "Tulip Team", "16/04/2008",
56  "The Node Link Diagram view is the standard representation of relational data, "
57  "where entities are represented as nodes, and their relation as edges.<br>"
58  "This view allows you to change the glyph used to represent nodes (e.g. "
59  "square, round, cross, ...), as well as the shape of the arrows indicating the "
60  "direction of the relationship.",
61  "1.0", "relational")
62 
63  NodeLinkDiagramComponent(const tlp::PluginContext *context = nullptr);
64  ~NodeLinkDiagramComponent() override;
65  std::string icon() const override {
66  return ":/tulip/gui/icons/32/node_link_diagram_view.png";
67  }
68  void setState(const tlp::DataSet &) override;
69  tlp::DataSet state() const override;
70 
71 public slots:
72  void draw() override;
73  void requestChangeGraph(Graph *graph);
74  const Camera &goInsideItem(node meta);
75 
76 protected slots:
77 
78  void deleteItem();
79  void editColor();
80  void editLabel();
81  void editShape();
82  void editSize();
83  void goInsideItem();
84  void ungroupItem();
85  void setZOrdering(bool);
86  void showGridControl();
87  void fillContextMenu(QMenu *menu, const QPointF &point) override;
88 
89  void addRemoveItemToSelection(bool pushGraph = true, bool toggleSelection = true,
90  bool selectValue = false, bool resetSelection = false);
91  void addRemoveInNodesToSelection(bool pushGraph = true, bool toggleSelection = true,
92  bool selectValue = false, bool resetSelection = false);
93  void addRemoveOutNodesToSelection(bool pushGraph = true, bool toggleSelection = true,
94  bool selectValue = false, bool resetSelection = false);
95  void addRemoveInEdgesToSelection(bool pushGraph = true, bool toggleSelection = true,
96  bool selectValue = false, bool resetSelection = false);
97  void addRemoveOutEdgesToSelection(bool pushGraph = true, bool toggleSelection = true,
98  bool selectValue = false, bool resetSelection = false);
99  void addRemoveNodeAndAllNeighbourNodesAndEdges(bool toggleSelection = true,
100  bool selectValue = false,
101  bool resetSelection = false);
102  void addRemoveExtremitiesToSelection(bool pushGraph = true, bool toggleSelection = true,
103  bool selectValue = false, bool resetSelection = false);
104  void addRemoveEdgeAndExtremitiesToSelection(bool toggleSelection = true, bool selectValue = false,
105  bool resetSelection = false);
106 
107  void selectItem();
108  void selectInNodes(bool pushGraph = true);
109  void selectOutNodes(bool pushGraph = true);
110  void selectInEdges(bool pushGraph = true);
111  void selectOutEdges(bool pushGraph = true);
112  void selectNodeAndAllNeighbourNodesAndEdges();
113  void selectExtremities(bool pushGraph = true);
114  void selectEdgeAndExtremities();
115 
116  void addItemToSelection();
117  void addInNodesToSelection(bool pushGraph = true);
118  void addOutNodesToSelection(bool pushGraph = true);
119  void addInEdgesToSelection(bool pushGraph = true);
120  void addOutEdgesToSelection(bool pushGraph = true);
121  void addNodeAndAllNeighbourNodesAndEdgesToSelection();
122  void addExtremitiesToSelection(bool pushGraph = true);
123  void addEdgeAndExtremitiesToSelection();
124 
125  void removeItemFromSelection();
126  void removeInNodesFromSelection(bool pushGraph = true);
127  void removeOutNodesFromSelection(bool pushGraph = true);
128  void removeInEdgesFromSelection(bool pushGraph = true);
129  void removeOutEdgesFromSelection(bool pushGraph = true);
130  void removeNodeAndAllNeighbourNodesAndEdgesFromSelection();
131  void removeExtremitiesFromSelection(bool pushGraph = true);
132  void removeEdgeAndExtremitiesFromSelection();
133 
134 protected:
135  bool isNode;
136  unsigned int itemId;
137 
138  void graphChanged(tlp::Graph *) override;
139 
140  void createScene(Graph *graph, DataSet dataSet);
141  DataSet sceneData() const;
142  void loadGraphOnScene(Graph *graph);
143  void useHulls(bool hasHulls);
144  bool hasHulls() const;
145  void editValue(PropertyInterface *pi);
146 };
147 } // namespace tlp
148 
149 #endif /* NODELINKDIAGRAMCOMPONENT_H_ */
150 
151 ///@endcond
An abstract view that displays a GlMainWidget as its central widget.
Definition: GlMainView.h:68
A container that can store data from any type.
Definition: DataSet.h:189
#define PLUGININFORMATION(NAME, AUTHOR, DATE, INFO, RELEASE, GROUP)
Declare meta-information for a plugin This is an helper macro that defines every function related to ...
Definition: Plugin.h:233