QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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
22#include "qgis_gui.h"
23#include "qgis_sip.h"
24#include "qgsguiutils.h"
25#include "qgsproperty.h"
26
27#include <QAbstractListModel>
28#include <QDialog>
29#include <QDialogButtonBox>
30#include <QElapsedTimer>
31#include <QItemDelegate>
32#include <QLayout>
33#include <QSortFilterProxyModel>
34#include <QStandardItemModel>
35#include <QThread>
36#include <QWidget>
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
148class GUI_EXPORT QgsSvgSelectorLoader : public QThread
149{
150 Q_OBJECT
151
152 public:
157 QgsSvgSelectorLoader( QObject *parent = nullptr );
158
159 ~QgsSvgSelectorLoader() override;
160
166 void run() override;
167
172 virtual void stop();
173
178 void setPath( const QString &path )
179 {
180 mPath = path;
181 }
182
183 signals:
184
190 void foundSvgs( QStringList svgs );
191
192 private:
193 QString mPath;
194 bool mCanceled = false;
195 QStringList mQueuedSvgs;
196
197 QElapsedTimer mTimer;
198 int mTimerThreshold = 0;
199 QSet<QString> mTraversedPaths;
200
201 void loadPath( const QString &path );
202 void loadImages( const QString &path );
203};
204
210class GUI_EXPORT QgsSvgGroupLoader : public QThread
211{
212 Q_OBJECT
213
214 public:
219 QgsSvgGroupLoader( QObject *parent = nullptr );
220
221 ~QgsSvgGroupLoader() override;
222
227 void run() override;
228
233 virtual void stop();
234
239 void setParentPaths( const QStringList &parentPaths )
240 {
241 mParentPaths = parentPaths;
242 }
243
244 signals:
245
251 void foundPath( const QString &parentPath, const QString &path );
252
253 private:
254 QStringList mParentPaths;
255 bool mCanceled = false;
256 QSet<QString> mTraversedPaths;
257
258 void loadGroup( const QString &parentPath );
259};
260
262#endif
263
273class GUI_EXPORT QgsSvgSelectorFilterModel : public QSortFilterProxyModel
274{
275 Q_OBJECT
276
277 public:
284 QgsSvgSelectorFilterModel( QObject *parent SIP_TRANSFERTHIS, const QString &path = QString(), int iconSize = 30 );
285
286 private:
287 QgsSvgSelectorListModel *mModel = nullptr;
288};
289
299class GUI_EXPORT QgsSvgSelectorListModel : public QAbstractListModel
300{
301 Q_OBJECT
302
303 public:
310 QgsSvgSelectorListModel( QObject *parent SIP_TRANSFERTHIS, int iconSize = 30 );
311
318 QgsSvgSelectorListModel( QObject *parent SIP_TRANSFERTHIS, const QString &path, int iconSize = 30 );
319
320 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
321 QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
322
323 protected:
324 QStringList mSvgFiles;
325
326 private:
327 QPixmap createPreview( const QString &entry ) const;
328 QgsSvgSelectorLoader *mSvgLoader = nullptr;
329
330 int mIconSize = 30;
331
332 private slots:
333
338 void addSvgs( const QStringList &svgs );
339
341};
342
343
353class GUI_EXPORT QgsSvgSelectorGroupsModel : public QStandardItemModel
354{
355 Q_OBJECT
356
357 public:
360
361 private:
362 QgsSvgGroupLoader *mLoader = nullptr;
363 QHash<QString, QStandardItem *> mPathItemHash;
364
365 private slots:
366
367 void addPath( const QString &parentPath, const QString &path );
368};
369
376class GUI_EXPORT QgsSvgSelectorWidget : public QWidget, private Ui::WidgetSvgSelector
377{
378 Q_OBJECT
379
380 public:
382 QgsSvgSelectorWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr );
383
388 void initParametersModel( const QgsExpressionContextGenerator *generator, QgsVectorLayer *layer = nullptr );
389
390 QString currentSvgPath() const;
391
396 QgsPictureSourceLineEditBase *sourceLineEdit() const { return mSourceLineEdit; }
397
402 void setAllowParameters( bool allow );
403
409 Q_DECL_DEPRECATED bool allowParamerters() const SIP_DEPRECATED { return mAllowParameters; } // spellok
410
415 bool allowParameters() const { return mAllowParameters; }
416
421 void setBrowserVisible( bool visible );
422
427 bool browserVisible() const { return mBrowserVisible; }
428
433 QgsPropertyOverrideButton *propertyOverrideToolButton() const;
434
435 public slots:
437 void setSvgPath( const QString &svgPath );
438
443 void setSvgParameters( const QMap<QString, QgsProperty> &parameters );
444
445 signals:
446
450 void svgSelected( const QString &path );
451
456 void svgParametersChanged( const QMap<QString, QgsProperty> &parameters );
457
458 protected:
459 void populateList();
460
461 private slots:
462 void populateIcons( const QModelIndex &idx );
463 void svgSelectionChanged( const QModelIndex &idx );
464 void updateCurrentSvgPath( const QString &svgPath );
465 void svgSourceChanged( const QString &text );
466
467 private:
468 int mIconSize = 30;
469 QString mCurrentSvgPath;
470 bool mAllowParameters = false;
471 bool mBrowserVisible = true;
472 QgsSvgParametersModel *mParametersModel = nullptr;
473};
474
480class GUI_EXPORT QgsSvgSelectorDialog : public QDialog
481{
482 Q_OBJECT
483 public:
487 QgsSvgSelectorDialog( QWidget *parent SIP_TRANSFERTHIS = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags, QDialogButtonBox::StandardButtons buttons = QDialogButtonBox::Close | QDialogButtonBox::Ok, Qt::Orientation orientation = Qt::Horizontal );
488
491
492 protected:
493 QVBoxLayout *mLayout = nullptr;
494 QDialogButtonBox *mButtonBox = nullptr;
496};
497
498#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.
QgsSvgSelectorDialog(QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags, QDialogButtonBox::StandardButtons buttons=QDialogButtonBox::Close|QDialogButtonBox::Ok, Qt::Orientation orientation=Qt::Horizontal)
Constructor for QgsSvgSelectorDialog.
QgsSvgSelectorWidget * svgSelector()
Returns pointer to the embedded SVG selector widget.
QDialogButtonBox * mButtonBox
QgsSvgSelectorWidget * mSvgSelector
QgsSvgSelectorFilterModel(QObject *parent, const QString &path=QString(), int iconSize=30)
Constructor for creating a model for SVG files in a specific path.
A model for displaying SVG files with a preview icon.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QgsSvgSelectorListModel(QObject *parent, int iconSize=30)
Constructor for QgsSvgSelectorListModel.
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.
void initParametersModel(const QgsExpressionContextGenerator *generator, QgsVectorLayer *layer=nullptr)
Initialize the parameters model so the context and the layer are referenced.
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.
QgsSvgSelectorWidget(QWidget *parent=nullptr)
Constructor for QgsSvgSelectorWidget.
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 dataset.
#define SIP_DEPRECATED
Definition qgis_sip.h:114
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53