Tulip  5.0.0
Large graphs analysis and drawing
TulipItemEditorCreators.h
1 /*
2  *
3  * This file is part of Tulip (www.tulip-software.org)
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 TULIPITEMEDITORCREATORS_H
22 #define TULIPITEMEDITORCREATORS_H
23 
24 #include <tulip/tulipconf.h>
25 #include <tulip/PropertyTypes.h>
26 #include <tulip/TlpQtTools.h>
27 
28 #include <QVariant>
29 #include <QSize>
30 
31 class QWidget;
32 class QPainter;
33 class QStyleOptionViewItem;
34 class QModelIndex;
35 
36 namespace tlp {
37 
38 class PropertyInterface;
39 
40 class TLP_QT_SCOPE TulipItemEditorCreator {
41 public:
42  virtual ~TulipItemEditorCreator() {}
43  virtual QWidget* createWidget(QWidget*) const=0;
44  virtual bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
45  virtual QString displayText(const QVariant &) const {
46  return "";
47  }
48 
49  virtual QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
50 
51  virtual void setEditorData(QWidget*,const QVariant&,bool isMandatory,tlp::Graph* g=NULL)=0;
52  virtual QVariant editorData(QWidget*,tlp::Graph* g=NULL)=0;
53  virtual void setPropertyToEdit(tlp::PropertyInterface*) {}
54 };
55 
56 template<typename T>
57 class TLP_QT_SCOPE StringDisplayEditorCreator: public TulipItemEditorCreator {
58 public:
59  inline QString displayText(const QVariant& v) const {
60  return tlpStringToQString(T::toString(v.value<typename T::RealType>()));
61  }
62 };
63 
64 class TLP_QT_SCOPE ColorEditorCreator: public tlp::TulipItemEditorCreator {
65 public:
66  QWidget* createWidget(QWidget*) const;
67  bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
68  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
69  virtual QVariant editorData(QWidget*,tlp::Graph*);
70 };
71 
72 template<typename T>
73 class NumberEditorCreator: public StringDisplayEditorCreator<T> {
74 public:
75  QWidget* createWidget(QWidget*) const;
76  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
77  virtual QVariant editorData(QWidget*,tlp::Graph*);
78 };
79 
80 template<typename T>
81 class LineEditEditorCreator: public StringDisplayEditorCreator<T> {
82 public:
83  QWidget* createWidget(QWidget*) const;
84  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
85  virtual QVariant editorData(QWidget*,tlp::Graph*);
86 };
87 
88 template<typename T>
89 class MultiLinesEditEditorCreator: public StringDisplayEditorCreator<T> {
90 public:
91  QWidget* createWidget(QWidget*) const;
92  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
93  virtual QVariant editorData(QWidget*,tlp::Graph*);
94  virtual QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
95  bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
96 };
97 
98 class TLP_QT_SCOPE BooleanEditorCreator: public TulipItemEditorCreator {
99 public:
100  virtual QWidget* createWidget(QWidget*) const;
101  virtual void setEditorData(QWidget*,const QVariant&,bool,tlp::Graph*);
102  virtual QVariant editorData(QWidget*,tlp::Graph*);
103  virtual QString displayText(const QVariant &) const;
104 };
105 
106 class TLP_QT_SCOPE CoordEditorCreator: public StringDisplayEditorCreator<tlp::PointType> {
107  bool editSize;
108 public:
109  CoordEditorCreator():editSize(false) {}
110  QWidget* createWidget(QWidget*) const;
111  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
112  virtual QVariant editorData(QWidget*,tlp::Graph*);
113  virtual void setPropertyToEdit(tlp::PropertyInterface* prop);
114 };
115 
116 template<typename PROP>
117 class PropertyEditorCreator: public tlp::TulipItemEditorCreator {
118 public:
119  QWidget* createWidget(QWidget*) const;
120  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
121  virtual QVariant editorData(QWidget*,tlp::Graph*);
122  virtual QString displayText(const QVariant &) const;
123 };
124 
125 class TLP_QT_SCOPE PropertyInterfaceEditorCreator: public tlp::TulipItemEditorCreator {
126 public:
127  QWidget* createWidget(QWidget*) const;
128  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
129  virtual QVariant editorData(QWidget*,tlp::Graph*);
130  virtual QString displayText(const QVariant &) const;
131 };
132 
133 class TLP_QT_SCOPE NumericPropertyEditorCreator: public tlp::TulipItemEditorCreator {
134 public:
135  QWidget* createWidget(QWidget*) const;
136  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
137  virtual QVariant editorData(QWidget*,tlp::Graph*);
138  virtual QString displayText(const QVariant &) const;
139 };
140 
141 class TLP_QT_SCOPE ColorScaleEditorCreator: public tlp::TulipItemEditorCreator {
142 public:
143  QWidget* createWidget(QWidget*) const;
144  bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
145  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
146  virtual QVariant editorData(QWidget*,tlp::Graph*);
147 };
148 
149 class TLP_QT_SCOPE StringCollectionEditorCreator: public tlp::TulipItemEditorCreator {
150 public:
151  QWidget* createWidget(QWidget*) const;
152  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
153  virtual QVariant editorData(QWidget*,tlp::Graph*);
154  virtual QString displayText(const QVariant &) const;
155 };
156 
157 class TLP_QT_SCOPE TulipFileDescriptorEditorCreator: public tlp::TulipItemEditorCreator {
158 public:
159  QWidget* createWidget(QWidget*) const;
160  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
161  virtual QVariant editorData(QWidget*,tlp::Graph*);
162  virtual bool paint(QPainter *, const QStyleOptionViewItem &, const QVariant &) const;
163  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
164 };
165 
166 class TLP_QT_SCOPE TextureFileEditorCreator: public tlp::TulipItemEditorCreator {
167 public:
168  QWidget* createWidget(QWidget*) const;
169  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
170  virtual QVariant editorData(QWidget*,tlp::Graph*);
171  virtual bool paint(QPainter *, const QStyleOptionViewItem &, const QVariant &) const;
172  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
173 };
174 
175 class TLP_QT_SCOPE TulipFontIconCreator: public tlp::TulipItemEditorCreator {
176 public:
177  QWidget* createWidget(QWidget*) const;
178  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
179  virtual QVariant editorData(QWidget*,tlp::Graph*);
180  virtual bool paint(QPainter *, const QStyleOptionViewItem &, const QVariant &) const;
181  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
182  virtual QString displayText(const QVariant &) const;
183 };
184 
185 class TLP_QT_SCOPE NodeShapeEditorCreator: public tlp::TulipItemEditorCreator {
186 public:
187  QWidget* createWidget(QWidget*) const;
188  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
189  virtual QVariant editorData(QWidget*,tlp::Graph*);
190  virtual QString displayText(const QVariant &) const;
191  virtual bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
192  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
193 };
194 
195 class TLP_QT_SCOPE EdgeExtremityShapeEditorCreator: public tlp::TulipItemEditorCreator {
196 public:
197  QWidget* createWidget(QWidget*) const;
198  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
199  virtual QVariant editorData(QWidget*,tlp::Graph*);
200  virtual QString displayText(const QVariant &) const;
201  virtual bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
202  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
203 };
204 
205 class TLP_QT_SCOPE EdgeShapeEditorCreator: public tlp::TulipItemEditorCreator {
206 public:
207  QWidget* createWidget(QWidget*) const;
208  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
209  virtual QVariant editorData(QWidget*,tlp::Graph*);
210  virtual QString displayText(const QVariant &) const;
211 };
212 
213 template<typename ElementType>
214 class VectorEditorCreator : public tlp::TulipItemEditorCreator {
215 public:
216  QWidget* createWidget(QWidget* parent) const;
217  virtual void setEditorData(QWidget* editor, const QVariant& data,bool,tlp::Graph*);
218  virtual QVariant editorData(QWidget* editor,tlp::Graph*);
219  virtual QString displayText(const QVariant &data) const;
220 };
221 
222 class QVectorBoolEditorCreator : public tlp::TulipItemEditorCreator {
223 public:
224  QWidget* createWidget(QWidget* parent) const;
225  virtual void setEditorData(QWidget* editor, const QVariant& data,bool,tlp::Graph*);
226  virtual QVariant editorData(QWidget* editor,tlp::Graph*);
227  virtual QString displayText(const QVariant &data) const;
228 };
229 
230 class TLP_QT_SCOPE TulipFontEditorCreator: public tlp::TulipItemEditorCreator {
231 public:
232  QWidget* createWidget(QWidget*) const;
233  void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
234  QVariant editorData(QWidget*,tlp::Graph*);
235  QString displayText(const QVariant &) const;
236 };
237 
238 class TLP_QT_SCOPE TulipLabelPositionEditorCreator: public tlp::TulipItemEditorCreator {
239  static QVector<QString> POSITION_LABEL;
240 public:
241  QWidget* createWidget(QWidget*) const;
242  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
243  QVariant editorData(QWidget*,tlp::Graph*);
244  QString displayText(const QVariant &) const;
245 };
246 
247 class TLP_QT_SCOPE GraphEditorCreator: public tlp::TulipItemEditorCreator {
248 public:
249  QWidget* createWidget(QWidget* parent) const;
250  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
251  QVariant editorData(QWidget*,tlp::Graph*);
252  QString displayText(const QVariant &) const;
253 };
254 
255 class TLP_QT_SCOPE EdgeSetEditorCreator: public tlp::TulipItemEditorCreator {
256 public:
257  QWidget* createWidget(QWidget* parent) const;
258  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
259  QVariant editorData(QWidget*,tlp::Graph*);
260  QString displayText(const QVariant &) const;
261 };
262 
263 class TLP_QT_SCOPE QStringEditorCreator: public tlp::TulipItemEditorCreator {
264 public:
265  QWidget* createWidget(QWidget* parent) const;
266  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
267  QVariant editorData(QWidget*,tlp::Graph*);
268  QString displayText(const QVariant &) const;
269  void setPropertyToEdit(tlp::PropertyInterface* prop);
270 
271 protected:
272  std::string propName;
273 };
274 
275 class TLP_QT_SCOPE StdStringEditorCreator: public QStringEditorCreator {
276 public:
277  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
278  QVariant editorData(QWidget*,tlp::Graph*);
279  QString displayText(const QVariant &) const;
280 };
281 
282 class TLP_QT_SCOPE QStringListEditorCreator: public tlp::TulipItemEditorCreator {
283 public:
284  QWidget* createWidget(QWidget* parent) const;
285  void setEditorData(QWidget*w, const QVariant& var, bool, tlp::Graph*);
286  QVariant editorData(QWidget*,tlp::Graph*);
287  QString displayText(const QVariant &) const;
288 };
289 
290 TLP_QT_SCOPE void addIconToPool(const QString &iconName, const QIcon &icon);
291 
292 }
293 
294 
295 #if defined(__clang__)
296 template class tlp::StringDisplayEditorCreator<tlp::PointType>;
297 template class tlp::StringDisplayEditorCreator<tlp::SizeType>;
298 #endif
299 
300 inline QString& truncateText(QString &text, const QString &trailingChars = " ...", int maxChars=45) {
301  if (text.size() > maxChars) {
302  text.truncate(maxChars - trailingChars.length());
303  text.append(trailingChars);
304  }
305 
306  return text;
307 }
308 
309 #include "cxx/TulipItemEditorCreators.cxx"
310 
311 #endif // TULIPITEMEDITORCREATORS_H
312 ///@endcond
PropertyInterface describes the interface of a graph property.
QString tlpStringToQString(const std::string &toConvert)
Convert a Tulip UTF-8 encoded std::string to a QString.
Definition: TlpQtTools.h:54