QGIS API Documentation 3.39.0-Master (d85f3c2a281)
Loading...
Searching...
No Matches
qgssvgselectorwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssvgselectorwidget.h - group and preview selector for SVG files
3 built off of work in qgssymbollayerwidget
4
5 ---------------------
6 begin : April 2, 2013
7 copyright : (C) 2013 by Larry Shaffer
8 email : larrys at dakcarto dot com
9 ***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17#ifndef QGSSVGSELECTORWIDGET_H
18#define QGSSVGSELECTORWIDGET_H
19
20#include "ui_widget_svgselector.h"
21#include "qgis_sip.h"
22#include "qgis_gui.h"
23#include "qgsguiutils.h"
24#include "qgsproperty.h"
25
26#include <QSortFilterProxyModel>
27#include <QAbstractListModel>
28#include <QDialog>
29#include <QDialogButtonBox>
30#include <QLayout>
31#include <QStandardItemModel>
32#include <QWidget>
33#include <QThread>
34#include <QElapsedTimer>
35#include <QItemDelegate>
36
37
38class QCheckBox;
39class QLayout;
40class QLineEdit;
41class QListView;
42class QPushButton;
43class QTreeView;
44
48
49
50#ifndef SIP_RUN
52
53
60class GUI_EXPORT QgsSvgParametersModel : public QAbstractTableModel
61{
62 Q_OBJECT
63
64 public:
65 enum class Column : int
66 {
67 NameColumn = 0,
68 ExpressionColumn = 1,
69 };
70
71 QgsSvgParametersModel( QObject *parent = nullptr );
72
74 void setParameters( const QMap<QString, QgsProperty> &parameters );
76 QMap<QString, QgsProperty> parameters() const;
77
79 void removeParameters( const QModelIndexList &indexList );
80
82 void setLayer( QgsVectorLayer *layer );
84 QgsVectorLayer *layer() const {return mLayer;}
85
87 void setExpressionContextGenerator( const QgsExpressionContextGenerator *generator );
89 const QgsExpressionContextGenerator *expressionContextGenerator() const {return mExpressionContextGenerator;}
90
91 int rowCount( const QModelIndex &parent ) const override;
92 int columnCount( const QModelIndex &parent ) const override;
93 QVariant data( const QModelIndex &index, int role ) const override;
94 bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
95 QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
96 Qt::ItemFlags flags( const QModelIndex &index ) const override;
97
98 public slots:
100 void addParameter();
101
102 signals:
104 void parametersChanged( const QMap<QString, QgsProperty> &parameters );
105
106 private:
107 struct Parameter
108 {
109 Parameter( const QString &name, const QgsProperty &property )
110 : name( name ), property( property ) {}
111
112 QString name;
113 QgsProperty property;
114 };
115
116 QList<Parameter> mParameters;
117 QgsVectorLayer *mLayer = nullptr;
118 const QgsExpressionContextGenerator *mExpressionContextGenerator = nullptr;
119};
120
127class GUI_EXPORT QgsSvgParameterValueDelegate : public QItemDelegate
128{
129 Q_OBJECT
130
131 public:
132 QgsSvgParameterValueDelegate( QObject *parent = nullptr )
133 : QItemDelegate( parent )
134 {}
135
136 QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
137 void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
138 void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
139 void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
140};
141
142
143
149class GUI_EXPORT QgsSvgSelectorLoader : public QThread
150{
151 Q_OBJECT
152
153 public:
154
159 QgsSvgSelectorLoader( QObject *parent = nullptr );
160
161 ~QgsSvgSelectorLoader() override;
162
168 void run() override;
169
174 virtual void stop();
175
180 void setPath( const QString &path )
181 {
182 mPath = path;
183 }
184
185 signals:
186
192 void foundSvgs( QStringList svgs );
193
194 private:
195
196 QString mPath;
197 bool mCanceled = false;
198 QStringList mQueuedSvgs;
199
200 QElapsedTimer mTimer;
201 int mTimerThreshold = 0;
202 QSet< QString > mTraversedPaths;
203
204 void loadPath( const QString &path );
205 void loadImages( const QString &path );
206
207};
208
214class GUI_EXPORT QgsSvgGroupLoader : public QThread
215{
216 Q_OBJECT
217
218 public:
219
224 QgsSvgGroupLoader( QObject *parent = nullptr );
225
226 ~QgsSvgGroupLoader() override;
227
232 void run() override;
233
238 virtual void stop();
239
244 void setParentPaths( const QStringList &parentPaths )
245 {
246 mParentPaths = parentPaths;
247 }
248
249 signals:
250
256 void foundPath( const QString &parentPath, const QString &path );
257
258 private:
259
260 QStringList mParentPaths;
261 bool mCanceled = false;
262 QSet< QString > mTraversedPaths;
263
264 void loadGroup( const QString &parentPath );
265
266};
267
269#endif
270
279class GUI_EXPORT QgsSvgSelectorFilterModel : public QSortFilterProxyModel
280{
281 Q_OBJECT
282
283 public:
284
291 QgsSvgSelectorFilterModel( QObject *parent SIP_TRANSFERTHIS, const QString &path = QString(), int iconSize = 30 );
292
293 private:
294 QgsSvgSelectorListModel *mModel = nullptr;
295};
296
304class GUI_EXPORT QgsSvgSelectorListModel : public QAbstractListModel
305{
306 Q_OBJECT
307
308 public:
309
316 QgsSvgSelectorListModel( QObject *parent SIP_TRANSFERTHIS, int iconSize = 30 );
317
324 QgsSvgSelectorListModel( QObject *parent SIP_TRANSFERTHIS, const QString &path, int iconSize = 30 );
325
326 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
327 QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
328
329 protected:
330 QStringList mSvgFiles;
331
332 private:
333 QPixmap createPreview( const QString &entry ) const;
334 QgsSvgSelectorLoader *mSvgLoader = nullptr;
335
336 int mIconSize = 30;
337
338 private slots:
339
344 void addSvgs( const QStringList &svgs );
345
346};
347
348
356class GUI_EXPORT QgsSvgSelectorGroupsModel : public QStandardItemModel
357{
358 Q_OBJECT
359
360 public:
363
364 private:
365 QgsSvgGroupLoader *mLoader = nullptr;
366 QHash< QString, QStandardItem * > mPathItemHash;
367
368 private slots:
369
370 void addPath( const QString &parentPath, const QString &path );
371};
372
379class GUI_EXPORT QgsSvgSelectorWidget : public QWidget, private Ui::WidgetSvgSelector
380{
381 Q_OBJECT
382
383 public:
384
386 QgsSvgSelectorWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr );
387
392 void initParametersModel( const QgsExpressionContextGenerator *generator, QgsVectorLayer *layer = nullptr );
393
394 QString currentSvgPath() const;
395
400 QgsPictureSourceLineEditBase *sourceLineEdit() const {return mSourceLineEdit;}
401
406 void setAllowParameters( bool allow );
407
413 Q_DECL_DEPRECATED bool allowParamerters() const SIP_DEPRECATED {return mAllowParameters;} // spellok
414
419 bool allowParameters() const {return mAllowParameters;}
420
425 void setBrowserVisible( bool visible );
426
431 bool browserVisible() const {return mBrowserVisible;}
432
437 QgsPropertyOverrideButton *propertyOverrideToolButton() const;
438
439 public slots:
441 void setSvgPath( const QString &svgPath );
442
447 void setSvgParameters( const QMap<QString, QgsProperty> &parameters );
448
449 signals:
450
454 void svgSelected( const QString &path );
455
460 void svgParametersChanged( const QMap<QString, QgsProperty> &parameters );
461
462 protected:
463 void populateList();
464
465 private slots:
466 void populateIcons( const QModelIndex &idx );
467 void svgSelectionChanged( const QModelIndex &idx );
468 void updateCurrentSvgPath( const QString &svgPath );
469 void svgSourceChanged( const QString &text );
470
471 private:
472 int mIconSize = 30;
473 QString mCurrentSvgPath;
474 bool mAllowParameters = false;
475 bool mBrowserVisible = true;
476 QgsSvgParametersModel *mParametersModel = nullptr;
477};
478
483class GUI_EXPORT QgsSvgSelectorDialog : public QDialog
484{
485 Q_OBJECT
486 public:
487
491 QgsSvgSelectorDialog( QWidget *parent SIP_TRANSFERTHIS = nullptr,
492 Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags,
493 QDialogButtonBox::StandardButtons buttons = QDialogButtonBox::Close | QDialogButtonBox::Ok,
494 Qt::Orientation orientation = Qt::Horizontal );
495
497 QgsSvgSelectorWidget *svgSelector() { return mSvgSelector; }
498
499 protected:
500 QVBoxLayout *mLayout = nullptr;
501 QDialogButtonBox *mButtonBox = nullptr;
502 QgsSvgSelectorWidget *mSvgSelector = nullptr;
503};
504
505#endif // QGSSVGSELECTORWIDGET_H
Abstract interface for generating an expression context.
A line edit widget with toolbutton for setting a raster image path.
A button for controlling property overrides which may apply to a widget.
A store for object properties.
QgsSvgSelectorWidget * svgSelector()
Returns pointer to the embedded SVG selector widget.
A model for displaying SVG files with a preview icon which can be filtered by file name.
A model for displaying SVG search paths.
A model for displaying SVG files with a preview icon.
A widget allowing selection of an SVG file, and configuration of SVG related parameters.
QgsPictureSourceLineEditBase * sourceLineEdit() const
Returns the source line edit.
bool browserVisible() const
Returns if the SVG browser should be visible.
bool allowParameters() const
Returns if the group box to fill parameters is visible.
void svgParametersChanged(const QMap< QString, QgsProperty > &parameters)
Emitted when the parameters have changed.
void svgSelected(const QString &path)
Emitted when an SVG is selected in the widget.
Q_DECL_DEPRECATED bool allowParamerters() const
Returns if the group box to fill parameters is visible.
Represents a vector layer which manages a vector based data sets.
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53