25 #include <QAbstractListModel>
28 #include <QFileDialog>
29 #include <QModelIndex>
30 #include <QPixmapCache>
61 if ( role == Qt::DecorationRole )
69 bool fillParam, outlineParam, outlineWidthParam;
80 else if ( role == Qt::UserRole || role == Qt::ToolTipRole )
97 for (
int i = 0; i < svgPaths.
size(); i++ )
99 QDir dir( svgPaths[i] );
120 createTree( baseGroup );
125 void QgsSvgSelectorGroupsModel::createTree(
QStandardItem* &parentGroup )
128 foreach (
QString item, parentDir.entryList( QDir::Dirs | QDir::NoDotAndDotDot ) )
150 mGroupsTreeView->setHeaderHidden(
true );
154 this, SLOT( svgSelectionChanged(
const QModelIndex& ) ) );
156 this, SLOT( populateIcons(
const QModelIndex& ) ) );
160 || settings.value(
"/Windows/SvgSelectorWidget/RelativePath" ).toBool() );
161 mRelativePathChkBx->setChecked( useRelativePath );
167 settings.
setValue(
"/Windows/SvgSelectorWidget/RelativePath", mRelativePathChkBx->isChecked() );
175 if ( !svgPath.
contains(
"://" ) || ( svgPath.
contains(
"file://", Qt::CaseInsensitive ) ) )
178 if ( !resolvedPath.
isNull() )
180 updatedPath = resolvedPath;
184 mCurrentSvgPath = updatedPath;
186 mFileLineEdit->blockSignals(
true );
187 mFileLineEdit->setText( updatedPath );
188 mFileLineEdit->blockSignals(
false );
190 mImagesListView->selectionModel()->blockSignals(
true );
193 for (
int i = 0; i < m->
rowCount(); i++ )
198 selModel->
select( idx, QItemSelectionModel::SelectCurrent );
200 mImagesListView->scrollTo( idx );
204 mImagesListView->selectionModel()->blockSignals(
false );
209 if ( mRelativePathChkBx->isChecked() )
212 return mCurrentSvgPath;
220 void QgsSvgSelectorWidget::updateCurrentSvgPath(
const QString& svgPath )
222 mCurrentSvgPath = svgPath;
226 void QgsSvgSelectorWidget::svgSelectionChanged(
const QModelIndex& idx )
229 mFileLineEdit->setText( filePath );
230 updateCurrentSvgPath( filePath );
233 void QgsSvgSelectorWidget::populateIcons(
const QModelIndex& idx )
238 mImagesListView->setModel( m );
241 this, SLOT( svgSelectionChanged(
const QModelIndex& ) ) );
244 void QgsSvgSelectorWidget::on_mFilePushButton_clicked()
249 QString lineEditText = mFileLineEdit->text();
252 QFileInfo openDirFileInfo( lineEditText );
253 openDir = openDirFileInfo.path();
257 tr(
"Select SVG file" ),
259 tr(
"SVG files" ) +
" (*.svg *.SVG)" );
267 if ( !fi.exists() || !fi.isReadable() )
269 updateCurrentSvgPath(
QString(
"" ) );
270 updateLineEditFeedback(
false );
273 settings.
setValue(
"/UI/lastSVGMarkerDir", fi.absolutePath() );
274 mFileLineEdit->setText( file );
275 updateCurrentSvgPath( file );
278 void QgsSvgSelectorWidget::updateLineEditFeedback(
bool ok,
QString tip )
281 mFileLineEdit->setStyleSheet(
QString( !ok ?
"QLineEdit{ color: rgb(225, 0, 0); }" :
"" ) );
282 mFileLineEdit->setToolTip( !ok ?
tr(
"File not found" ) : tip );
285 void QgsSvgSelectorWidget::on_mFileLineEdit_textChanged(
const QString& text )
288 bool validSVG = !resolvedPath.
isNull();
290 updateLineEditFeedback( validSVG, resolvedPath );
291 updateCurrentSvgPath( validSVG ? resolvedPath :
QString(
"" ) );
297 mGroupsTreeView->setModel( g );
300 for (
int i = 0; i < rows; i++ )
307 mImagesListView->setModel( m );
314 Qt::Orientation orientation )
318 Q_UNUSED( orientation );
QgsSvgSelectorWidget * mSvgSelector
static const QString pkgDataPath()
Returns the common root path of all application data directories.
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 const QStringList svgPaths()
Returns the pathes to svg directories.
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
bool readBoolEntry(const QString &scope, const QString &key, bool def=false, bool *ok=0) const
static const QString qgisSettingsDirPath()
Returns the path to the settings directory in user's home dir.
QString tr(const char *sourceText, const char *disambiguation, int n)
virtual void setData(const QVariant &value, int role)
QgsSvgSelectorDialog(QWidget *parent=0, Qt::WindowFlags fl=QgisGui::ModalDialogFlags, QDialogButtonBox::StandardButtons buttons=QDialogButtonBox::Close|QDialogButtonBox::Ok, Qt::Orientation orientation=Qt::Horizontal)
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
static QStringList listSvgFilesAt(QString directory)
Return a list of svg files at the specified directory.
QStandardItem * item(int row, int column) const
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
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)
virtual QVariant data(int role) const
void setEditable(bool editable)