diff --git a/python/gui/symbology-ng/qgssymbolslistwidget.sip b/python/gui/symbology-ng/qgssymbolslistwidget.sip index cc947b6dd48..e407b363c90 100644 --- a/python/gui/symbology-ng/qgssymbolslistwidget.sip +++ b/python/gui/symbology-ng/qgssymbolslistwidget.sip @@ -51,6 +51,7 @@ class QgsSymbolsListWidget : QWidget void setMarkerSize( double size ); void setLineWidth( double width ); void addSymbolToStyle(); + void saveSymbol(); void symbolAddedToStyle( const QString& name, QgsSymbolV2* symbol ); void on_mSymbolUnitWidget_changed(); void on_mTransparencySlider_valueChanged( int value ); diff --git a/python/gui/symbology-ng/qgssymbolv2selectordialog.sip b/python/gui/symbology-ng/qgssymbolv2selectordialog.sip index ce32b1003ea..09360b3b4c7 100644 --- a/python/gui/symbology-ng/qgssymbolv2selectordialog.sip +++ b/python/gui/symbology-ng/qgssymbolv2selectordialog.sip @@ -64,9 +64,10 @@ class QgsSymbolV2SelectorDialog : QDialog void addLayer(); void removeLayer(); - void saveSymbol(); void lockLayer(); + void saveSymbol() /Deprecated/; + //! Duplicates the current symbol layer and places the duplicated layer above the current symbol layer //! @note added in QGIS 2.14 void duplicateLayer(); diff --git a/src/gui/symbology-ng/qgssymbolslistwidget.cpp b/src/gui/symbology-ng/qgssymbolslistwidget.cpp index df419e8ffad..46f20ea20de 100644 --- a/src/gui/symbology-ng/qgssymbolslistwidget.cpp +++ b/src/gui/symbology-ng/qgssymbolslistwidget.cpp @@ -118,6 +118,8 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbolV2* symbol, QgsStyleV2* sty btnColor->setAllowAlpha( true ); btnColor->setColorDialogTitle( tr( "Select color" ) ); btnColor->setContext( "symbology" ); + + connect( btnSaveSymbol, SIGNAL( clicked() ), this, SLOT( saveSymbol() ) ); } QgsSymbolsListWidget::~QgsSymbolsListWidget() @@ -360,6 +362,34 @@ void QgsSymbolsListWidget::addSymbolToStyle() populateSymbolView(); } +void QgsSymbolsListWidget::saveSymbol() +{ + bool ok; + QString name = QInputDialog::getText( this, tr( "Symbol name" ), + tr( "Please enter name for the symbol:" ), QLineEdit::Normal, tr( "New symbol" ), &ok ); + if ( !ok || name.isEmpty() ) + return; + + // check if there is no symbol with same name + if ( mStyle->symbolNames().contains( name ) ) + { + int res = QMessageBox::warning( this, tr( "Save symbol" ), + tr( "Symbol with name '%1' already exists. Overwrite?" ) + .arg( name ), + QMessageBox::Yes | QMessageBox::No ); + if ( res != QMessageBox::Yes ) + { + return; + } + } + + // add new symbol to style and re-populate the list + mStyle->addSymbol( name, mSymbol->clone() ); + + // make sure the symbol is stored + mStyle->saveSymbol( name, mSymbol->clone(), 0, QStringList() ); +} + void QgsSymbolsListWidget::on_mSymbolUnitWidget_changed() { if ( mSymbol ) diff --git a/src/gui/symbology-ng/qgssymbolslistwidget.h b/src/gui/symbology-ng/qgssymbolslistwidget.h index 5d93f81e4b3..373154d6b99 100644 --- a/src/gui/symbology-ng/qgssymbolslistwidget.h +++ b/src/gui/symbology-ng/qgssymbolslistwidget.h @@ -81,6 +81,7 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW void setMarkerSize( double size ); void setLineWidth( double width ); void addSymbolToStyle(); + void saveSymbol(); void symbolAddedToStyle( const QString& name, QgsSymbolV2* symbol ); void on_mSymbolUnitWidget_changed(); void on_mTransparencySlider_valueChanged( int value ); diff --git a/src/gui/symbology-ng/qgssymbolv2selectordialog.cpp b/src/gui/symbology-ng/qgssymbolv2selectordialog.cpp index 5f90d2eff65..b46e7f3abca 100644 --- a/src/gui/symbology-ng/qgssymbolv2selectordialog.cpp +++ b/src/gui/symbology-ng/qgssymbolv2selectordialog.cpp @@ -262,7 +262,6 @@ QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsSt connect( btnRemoveLayer, SIGNAL( clicked() ), this, SLOT( removeLayer() ) ); connect( btnLock, SIGNAL( clicked() ), this, SLOT( lockLayer() ) ); connect( btnDuplicate, SIGNAL( clicked() ), this, SLOT( duplicateLayer() ) ); - connect( btnSaveSymbol, SIGNAL( clicked() ), this, SLOT( saveSymbol() ) ); updateUi(); diff --git a/src/gui/symbology-ng/qgssymbolv2selectordialog.h b/src/gui/symbology-ng/qgssymbolv2selectordialog.h index ced905dfbb7..223465bb79e 100644 --- a/src/gui/symbology-ng/qgssymbolv2selectordialog.h +++ b/src/gui/symbology-ng/qgssymbolv2selectordialog.h @@ -136,9 +136,10 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb void addLayer(); void removeLayer(); - void saveSymbol(); void lockLayer(); + Q_DECL_DEPRECATED void saveSymbol(); + //! Duplicates the current symbol layer and places the duplicated layer above the current symbol layer //! @note added in QGIS 2.14 void duplicateLayer(); diff --git a/src/ui/qgssymbolv2selectordialogbase.ui b/src/ui/qgssymbolv2selectordialogbase.ui index 478d45bd3c4..9a23161694c 100644 --- a/src/ui/qgssymbolv2selectordialogbase.ui +++ b/src/ui/qgssymbolv2selectordialogbase.ui @@ -159,22 +159,6 @@ - - - - - 70 - 16777215 - - - - Save symbol - - - Save - - - diff --git a/src/ui/symbollayer/widget_symbolslist.ui b/src/ui/symbollayer/widget_symbolslist.ui index 69d23ff9182..e2877360d60 100644 --- a/src/ui/symbollayer/widget_symbolslist.ui +++ b/src/ui/symbollayer/widget_symbolslist.ui @@ -337,6 +337,22 @@ + + + + + 70 + 16777215 + + + + Save symbol + + + Save + + + @@ -391,6 +407,7 @@ groupsCombo openStyleManagerButton viewSymbols + btnSaveSymbol btnAdvanced