25 #include <QAbstractListModel>
28 #include <QFileDialog>
29 #include <QModelIndex>
30 #include <QPixmapCache>
61 if ( role == Qt::DecorationRole )
69 bool fillParam, outlineParam, outlineWidthParam;
70 bool hasDefaultFillColor =
false, hasDefaultOutlineColor =
false, hasDefaultOutlineWidth =
false;
72 outlineParam, hasDefaultOutlineColor, outline,
73 outlineWidthParam, hasDefaultOutlineWidth, outlineWidth );
76 if ( !hasDefaultFillColor )
77 fill =
QColor( 200, 200, 200 );
78 if ( !hasDefaultOutlineColor )
80 if ( !hasDefaultOutlineWidth )
91 else if ( role == Qt::UserRole || role == Qt::ToolTipRole )
108 for (
int i = 0; i < svgPaths.
size(); i++ )
110 QDir dir( svgPaths[i] );
131 createTree( baseGroup );
136 void QgsSvgSelectorGroupsModel::createTree(
QStandardItem* &parentGroup )
139 Q_FOREACH (
const QString&
item, parentDir.entryList( QDir::Dirs | QDir::NoDotAndDotDot ) )
161 mGroupsTreeView->setHeaderHidden(
true );
165 this, SLOT( svgSelectionChanged(
const QModelIndex& ) ) );
167 this, SLOT( populateIcons(
const QModelIndex& ) ) );
171 || settings.value(
"/Windows/SvgSelectorWidget/RelativePath" ).toBool() );
172 mRelativePathChkBx->setChecked( useRelativePath );
178 settings.
setValue(
"/Windows/SvgSelectorWidget/RelativePath", mRelativePathChkBx->isChecked() );
186 if ( !svgPath.
contains(
"://" ) || ( svgPath.
contains(
"file://", Qt::CaseInsensitive ) ) )
189 if ( !resolvedPath.
isNull() )
191 updatedPath = resolvedPath;
195 mCurrentSvgPath = updatedPath;
197 mFileLineEdit->blockSignals(
true );
198 mFileLineEdit->setText( updatedPath );
199 mFileLineEdit->blockSignals(
false );
201 mImagesListView->selectionModel()->blockSignals(
true );
204 for (
int i = 0; i < m->
rowCount(); i++ )
209 selModel->
select( idx, QItemSelectionModel::SelectCurrent );
211 mImagesListView->scrollTo( idx );
215 mImagesListView->selectionModel()->blockSignals(
false );
220 if ( mRelativePathChkBx->isChecked() )
223 return mCurrentSvgPath;
231 void QgsSvgSelectorWidget::updateCurrentSvgPath(
const QString& svgPath )
233 mCurrentSvgPath = svgPath;
237 void QgsSvgSelectorWidget::svgSelectionChanged(
const QModelIndex& idx )
240 mFileLineEdit->setText( filePath );
241 updateCurrentSvgPath( filePath );
244 void QgsSvgSelectorWidget::populateIcons(
const QModelIndex& idx )
249 mImagesListView->setModel( m );
252 this, SLOT( svgSelectionChanged(
const QModelIndex& ) ) );
255 void QgsSvgSelectorWidget::on_mFilePushButton_clicked()
260 QString lineEditText = mFileLineEdit->text();
263 QFileInfo openDirFileInfo( lineEditText );
264 openDir = openDirFileInfo.path();
268 tr(
"Select SVG file" ),
270 tr(
"SVG files" ) +
" (*.svg *.SVG)" );
278 if ( !fi.exists() || !fi.isReadable() )
280 updateCurrentSvgPath(
QString() );
281 updateLineEditFeedback(
false );
284 settings.
setValue(
"/UI/lastSVGMarkerDir", fi.absolutePath() );
285 mFileLineEdit->setText( file );
286 updateCurrentSvgPath( file );
289 void QgsSvgSelectorWidget::updateLineEditFeedback(
bool ok,
const QString& tip )
292 mFileLineEdit->setStyleSheet(
QString( !ok ?
"QLineEdit{ color: rgb(225, 0, 0); }" :
"" ) );
293 mFileLineEdit->setToolTip( !ok ?
tr(
"File not found" ) : tip );
296 void QgsSvgSelectorWidget::on_mFileLineEdit_textChanged(
const QString& text )
299 bool validSVG = !resolvedPath.
isNull();
301 updateLineEditFeedback( validSVG, resolvedPath );
302 updateCurrentSvgPath( validSVG ? resolvedPath :
QString() );
308 mGroupsTreeView->setModel( g );
311 for (
int i = 0; i < rows; i++ )
318 mImagesListView->setModel( m );
325 Qt::Orientation orientation )
329 Q_UNUSED( orientation );
QgsSvgSelectorWidget * mSvgSelector
QByteArray toByteArray() const
virtual int rowCount(const QModelIndex &parent) const =0
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const =0
void setIcon(const QIcon &icon)
static QString qgisSettingsDirPath()
Returns the path to the settings directory in user's home dir.
QStandardItem * invisibleRootItem() const
const T & at(int i) const
QgsSvgSelectorGroupsModel(QObject *parent)
QPixmap fromImage(const QImage &image, QFlags< Qt::ImageConversionFlag > flags)
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
static QStringList listSvgFilesAt(const QString &directory)
Return a list of svg files at the specified directory.
bool readBoolEntry(const QString &scope, const QString &key, bool def=false, bool *ok=0) const
QString tr(const char *sourceText, const char *disambiguation, int n)
virtual void setData(const QVariant &value, int role)
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasOutlineParam, QColor &defaultOutlineColor, bool &hasOutlineWidthParam, double &defaultOutlineWidth) const
Tests if an svg file contains parameters for fill, outline color, outline width.
static QgsSvgCache * instance()
void setValue(const QString &key, const QVariant &value)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
const QImage & svgAsImage(const QString &file, double size, const QColor &fill, const QColor &outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor, bool &fitsInCache)
Get SVG as QImage.
static QString symbolPathToName(QString path)
Get symbols's name from its path.
int count(const T &value) const
QModelIndex indexFromItem(const QStandardItem *item) const
QDialogButtonBox * mButtonBox
void appendRow(const QList< QStandardItem * > &items)
static QStringList listSvgFiles()
Return a list of all available svg files.
virtual void select(const QModelIndex &index, QFlags< QItemSelectionModel::SelectionFlag > command)
static QString symbolNameToPath(QString name)
Get symbol's path from its name.
virtual QVariant data(const QModelIndex &index, int role) const =0
QStandardItem * item(int row, int column) const
static QString pkgDataPath()
Returns the common root path of all application data directories.
bool contains(QChar ch, Qt::CaseSensitivity cs) const
QgsSvgSelectorListModel(QObject *parent)
QVariant value(const QString &key, const QVariant &defaultValue) const
QVariant data(int role) const
static QgsProject * instance()
access to canonical QgsProject instance
QPixmap * find(const QString &key)
virtual int rowCount(const QModelIndex &parent) const
static QStringList svgPaths()
Returns the pathes to svg directories.
void setCurrentIndex(const QModelIndex &index, QFlags< QItemSelectionModel::SelectionFlag > command)
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
bool insert(const QString &key, const QPixmap &pixmap)
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void setCheckable(bool checkable)
QgsSvgSelectorDialog(QWidget *parent=0, const Qt::WindowFlags &fl=QgisGui::ModalDialogFlags, const QDialogButtonBox::StandardButtons &buttons=QDialogButtonBox::Close|QDialogButtonBox::Ok, Qt::Orientation orientation=Qt::Horizontal)
virtual QVariant data(int role) const
void setEditable(bool editable)