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