Tulip  4.10.0
Better Visualization Through Research
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 LineEditEditorCreator: 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 MultiLinesEditEditorCreator: 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  virtual QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
87  bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
88 };
89 
90 class TLP_QT_SCOPE BooleanEditorCreator: public TulipItemEditorCreator {
91 public:
92  virtual QWidget* createWidget(QWidget*) const;
93  virtual void setEditorData(QWidget*,const QVariant&,bool,tlp::Graph*);
94  virtual QVariant editorData(QWidget*,tlp::Graph*);
95  virtual QString displayText(const QVariant &) const;
96 };
97 
98 class TLP_QT_SCOPE CoordEditorCreator: public StringDisplayEditorCreator<tlp::PointType> {
99  bool editSize;
100 public:
101  CoordEditorCreator():editSize(false) {}
102  QWidget* createWidget(QWidget*) const;
103  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
104  virtual QVariant editorData(QWidget*,tlp::Graph*);
105  virtual void setPropertyToEdit(tlp::PropertyInterface* prop);
106 };
107 
108 template<typename PROP>
109 class PropertyEditorCreator: public tlp::TulipItemEditorCreator {
110 public:
111  QWidget* createWidget(QWidget*) const;
112  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
113  virtual QVariant editorData(QWidget*,tlp::Graph*);
114  virtual QString displayText(const QVariant &) const;
115 };
116 
117 class TLP_QT_SCOPE PropertyInterfaceEditorCreator: 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 NumericPropertyEditorCreator: 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 ColorScaleEditorCreator: public tlp::TulipItemEditorCreator {
134 public:
135  QWidget* createWidget(QWidget*) const;
136  bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
137  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
138  virtual QVariant editorData(QWidget*,tlp::Graph*);
139 };
140 
141 class TLP_QT_SCOPE StringCollectionEditorCreator: public tlp::TulipItemEditorCreator {
142 public:
143  QWidget* createWidget(QWidget*) const;
144  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
145  virtual QVariant editorData(QWidget*,tlp::Graph*);
146  virtual QString displayText(const QVariant &) const;
147 };
148 
149 class TLP_QT_SCOPE TulipFileDescriptorEditorCreator: 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 bool paint(QPainter *, const QStyleOptionViewItem &, const QVariant &) const;
155  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
156 };
157 
158 class TLP_QT_SCOPE TextureFileEditorCreator: public tlp::TulipItemEditorCreator {
159 public:
160  QWidget* createWidget(QWidget*) const;
161  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
162  virtual QVariant editorData(QWidget*,tlp::Graph*);
163  virtual bool paint(QPainter *, const QStyleOptionViewItem &, const QVariant &) const;
164  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
165 };
166 
167 class TLP_QT_SCOPE TulipFontAwesomeIconCreator: public tlp::TulipItemEditorCreator {
168 public:
169  QWidget* createWidget(QWidget*) const;
170  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
171  virtual QVariant editorData(QWidget*,tlp::Graph*);
172  virtual bool paint(QPainter *, const QStyleOptionViewItem &, const QVariant &) const;
173  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
174  virtual QString displayText(const QVariant &) const;
175 };
176 
177 class TLP_QT_SCOPE NodeShapeEditorCreator: public tlp::TulipItemEditorCreator {
178 public:
179  QWidget* createWidget(QWidget*) const;
180  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
181  virtual QVariant editorData(QWidget*,tlp::Graph*);
182  virtual QString displayText(const QVariant &) const;
183  virtual bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
184  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
185 };
186 
187 class TLP_QT_SCOPE EdgeExtremityShapeEditorCreator: public tlp::TulipItemEditorCreator {
188 public:
189  QWidget* createWidget(QWidget*) const;
190  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
191  virtual QVariant editorData(QWidget*,tlp::Graph*);
192  virtual QString displayText(const QVariant &) const;
193  virtual bool paint(QPainter*, const QStyleOptionViewItem&, const QVariant&) const;
194  QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const;
195 };
196 
197 class TLP_QT_SCOPE EdgeShapeEditorCreator: public tlp::TulipItemEditorCreator {
198 public:
199  QWidget* createWidget(QWidget*) const;
200  virtual void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
201  virtual QVariant editorData(QWidget*,tlp::Graph*);
202  virtual QString displayText(const QVariant &) const;
203 };
204 
205 template<typename ElementType>
206 class VectorEditorCreator : public tlp::TulipItemEditorCreator {
207 public:
208  QWidget* createWidget(QWidget* parent) const;
209  virtual void setEditorData(QWidget* editor, const QVariant& data,bool,tlp::Graph*);
210  virtual QVariant editorData(QWidget* editor,tlp::Graph*);
211  virtual QString displayText(const QVariant &data) const;
212 };
213 
214 class QVectorBoolEditorCreator : 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 TLP_QT_SCOPE TulipFontEditorCreator: public tlp::TulipItemEditorCreator {
223 public:
224  QWidget* createWidget(QWidget*) const;
225  void setEditorData(QWidget*, const QVariant&,bool,tlp::Graph*);
226  QVariant editorData(QWidget*,tlp::Graph*);
227  QString displayText(const QVariant &) const;
228 };
229 
230 class TLP_QT_SCOPE TulipLabelPositionEditorCreator: public tlp::TulipItemEditorCreator {
231  static QVector<QString> POSITION_LABEL;
232 public:
233  QWidget* createWidget(QWidget*) const;
234  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
235  QVariant editorData(QWidget*,tlp::Graph*);
236  QString displayText(const QVariant &) const;
237 };
238 
239 class TLP_QT_SCOPE GraphEditorCreator: public tlp::TulipItemEditorCreator {
240 public:
241  QWidget* createWidget(QWidget* parent) 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 EdgeSetEditorCreator: 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 QStringEditorCreator: 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  void setPropertyToEdit(tlp::PropertyInterface* prop);
262 
263 protected:
264  std::string propName;
265 };
266 
267 class TLP_QT_SCOPE StdStringEditorCreator: public QStringEditorCreator {
268 public:
269  void setEditorData(QWidget*w, const QVariant&var, bool, tlp::Graph*);
270  QVariant editorData(QWidget*,tlp::Graph*);
271  QString displayText(const QVariant &) const;
272 };
273 
274 class TLP_QT_SCOPE QStringListEditorCreator: public tlp::TulipItemEditorCreator {
275 public:
276  QWidget* createWidget(QWidget* parent) const;
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 TLP_QT_SCOPE void addIconToPool(const QString &iconName, const QIcon &icon);
283 
284 }
285 
286 
287 #if defined(__clang__)
288 template class tlp::StringDisplayEditorCreator<tlp::PointType>;
289 template class tlp::StringDisplayEditorCreator<tlp::SizeType>;
290 #endif
291 
292 inline QString& truncateText(QString &text, const QString &trailingChars = " ...", int maxChars=45) {
293  if (text.size() > maxChars) {
294  text.truncate(maxChars - trailingChars.length());
295  text.append(trailingChars);
296  }
297 
298  return text;
299 }
300 
301 #include "cxx/TulipItemEditorCreators.cxx"
302 
303 #endif // TULIPITEMEDITORCREATORS_H
304 ///@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