Tulip  5.2.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 class ViewToolTipAndUrlManager;
40 
41 class TLP_QT_SCOPE NodeLinkDiagramComponent : public tlp::GlMainView {
42  Q_OBJECT
43 
44  GlGrid *_grid;
45  QDialog *_gridOptions;
46  GlCompositeHierarchyManager *manager;
47  bool _hasHulls;
48 
49  void registerTriggers();
50  void updateGrid();
51 
52  Ui::GridOptionsWidget *grid_ui;
53 
54 public:
55  static const std::string viewName;
56  PLUGININFORMATION(NodeLinkDiagramComponent::viewName, "Tulip Team", "16/04/2008",
57  "The Node Link Diagram view is the standard representation of relational data, "
58  "where entities are represented as nodes, and their relation as edges.<br>"
59  "This view allows you to change the glyph used to represent nodes (e.g. "
60  "square, round, cross, ...), as well as the shape of the arrows indicating the "
61  "direction of the relationship.",
62  "1.0", "relational")
63 
64  NodeLinkDiagramComponent(const tlp::PluginContext *context = nullptr);
65  ~NodeLinkDiagramComponent() override;
66  std::string icon() const override {
67  return ":/tulip/gui/icons/32/node_link_diagram_view.png";
68  }
69  void setState(const tlp::DataSet &) override;
70  tlp::DataSet state() const override;
71 
72 public slots:
73  void draw() override;
74  void requestChangeGraph(Graph *graph);
75  const Camera &goInsideItem(node meta);
76 
77 protected slots:
78 
79  void deleteItem();
80  void editColor();
81  void editLabel();
82  void editShape();
83  void editSize();
84  void goInsideItem();
85  void ungroupItem();
86  void setZOrdering(bool);
87  void showGridControl();
88  void fillContextMenu(QMenu *menu, const QPointF &point) override;
89 
90  void addRemoveItemToSelection(bool pushGraph = true, bool toggleSelection = true,
91  bool selectValue = false, bool resetSelection = false);
92  void addRemoveInNodesToSelection(bool pushGraph = true, bool toggleSelection = true,
93  bool selectValue = false, bool resetSelection = false);
94  void addRemoveOutNodesToSelection(bool pushGraph = true, bool toggleSelection = true,
95  bool selectValue = false, bool resetSelection = false);
96  void addRemoveInEdgesToSelection(bool pushGraph = true, bool toggleSelection = true,
97  bool selectValue = false, bool resetSelection = false);
98  void addRemoveOutEdgesToSelection(bool pushGraph = true, bool toggleSelection = true,
99  bool selectValue = false, bool resetSelection = false);
100  void addRemoveNodeAndAllNeighbourNodesAndEdges(bool toggleSelection = true,
101  bool selectValue = false,
102  bool resetSelection = false);
103  void addRemoveExtremitiesToSelection(bool pushGraph = true, bool toggleSelection = true,
104  bool selectValue = false, bool resetSelection = false);
105  void addRemoveEdgeAndExtremitiesToSelection(bool toggleSelection = true, bool selectValue = false,
106  bool resetSelection = false);
107 
108  void selectItem();
109  void selectInNodes(bool pushGraph = true);
110  void selectOutNodes(bool pushGraph = true);
111  void selectInEdges(bool pushGraph = true);
112  void selectOutEdges(bool pushGraph = true);
113  void selectNodeAndAllNeighbourNodesAndEdges();
114  void selectExtremities(bool pushGraph = true);
115  void selectEdgeAndExtremities();
116 
117  void addItemToSelection();
118  void addInNodesToSelection(bool pushGraph = true);
119  void addOutNodesToSelection(bool pushGraph = true);
120  void addInEdgesToSelection(bool pushGraph = true);
121  void addOutEdgesToSelection(bool pushGraph = true);
122  void addNodeAndAllNeighbourNodesAndEdgesToSelection();
123  void addExtremitiesToSelection(bool pushGraph = true);
124  void addEdgeAndExtremitiesToSelection();
125 
126  void removeItemFromSelection();
127  void removeInNodesFromSelection(bool pushGraph = true);
128  void removeOutNodesFromSelection(bool pushGraph = true);
129  void removeInEdgesFromSelection(bool pushGraph = true);
130  void removeOutEdgesFromSelection(bool pushGraph = true);
131  void removeNodeAndAllNeighbourNodesAndEdgesFromSelection();
132  void removeExtremitiesFromSelection(bool pushGraph = true);
133  void removeEdgeAndExtremitiesFromSelection();
134 
135 protected:
136  bool isNode;
137  unsigned int itemId;
138  ViewToolTipAndUrlManager *_tturlManager;
139 
140  void graphChanged(tlp::Graph *) override;
141 
142  void createScene(Graph *graph, DataSet dataSet);
143  DataSet sceneData() const;
144  void loadGraphOnScene(Graph *graph);
145  void useHulls(bool hasHulls);
146  bool hasHulls() const;
147  void setupWidget() override;
148  void editValue(PropertyInterface *pi);
149 };
150 }
151 
152 #endif /* NODELINKDIAGRAMCOMPONENT_H_ */
153 
154 ///@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