From 46c75994a50f9534865aa9212391853f2bb8b27f Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 18 Sep 2014 20:29:00 +1000 Subject: [PATCH] Add support for removing user palettes from color picker --- python/core/qgscolorscheme.sip | 5 +++ src/core/qgscolorscheme.cpp | 12 ++++++ src/core/qgscolorscheme.h | 5 +++ src/gui/qgscolordialog.cpp | 78 +++++++++++++++++++++++++++------- src/gui/qgscolordialog.h | 5 +++ src/ui/qgscolordialog.ui | 8 ++++ 6 files changed, 97 insertions(+), 16 deletions(-) diff --git a/python/core/qgscolorscheme.sip b/python/core/qgscolorscheme.sip index b1e460e207e..c14ee1850ad 100755 --- a/python/core/qgscolorscheme.sip +++ b/python/core/qgscolorscheme.sip @@ -143,6 +143,11 @@ class QgsUserColorScheme : QgsGplColorScheme */ void setName( const QString name ); + /**Erases the associated gpl palette file from the users "palettes" folder + * @returns true if erase was successful + */ + bool erase(); + protected: virtual QString gplFilePath(); diff --git a/src/core/qgscolorscheme.cpp b/src/core/qgscolorscheme.cpp index ec3368ba3ce..e24466b32ed 100644 --- a/src/core/qgscolorscheme.cpp +++ b/src/core/qgscolorscheme.cpp @@ -338,6 +338,18 @@ QgsColorScheme *QgsUserColorScheme::clone() const return new QgsUserColorScheme( mFilename ); } +bool QgsUserColorScheme::erase() +{ + QString filePath = gplFilePath(); + if ( filePath.isEmpty() ) + { + return false; + } + + //try to erase gpl file + return QFile::remove( filePath ); +} + QString QgsUserColorScheme::gplFilePath() { QString palettesDir = QgsApplication::qgisSettingsDirPath() + "/palettes"; diff --git a/src/core/qgscolorscheme.h b/src/core/qgscolorscheme.h index ff5dafb8099..cc28e2caa5f 100644 --- a/src/core/qgscolorscheme.h +++ b/src/core/qgscolorscheme.h @@ -155,6 +155,11 @@ class CORE_EXPORT QgsUserColorScheme : public QgsGplColorScheme */ void setName( const QString name ) { mName = name; } + /**Erases the associated gpl palette file from the users "palettes" folder + * @returns true if erase was successful + */ + bool erase(); + protected: QString mName; diff --git a/src/gui/qgscolordialog.cpp b/src/gui/qgscolordialog.cpp index 8e635a61a64..595c78ef710 100644 --- a/src/gui/qgscolordialog.cpp +++ b/src/gui/qgscolordialog.cpp @@ -80,14 +80,10 @@ QgsColorDialogV2::QgsColorDialogV2( QWidget *parent, Qt::WindowFlags fl, const Q mSchemeList->setColumnWidth( 0, 44 ); //get schemes with ShowInColorDialog set + refreshSchemeComboBox(); QList schemeList = QgsColorSchemeRegistry::instance()->schemes( QgsColorScheme::ShowInColorDialog ); - QList::const_iterator schemeIt = schemeList.constBegin(); - for ( ; schemeIt != schemeList.constEnd(); ++schemeIt ) - { - mSchemeComboBox->addItem(( *schemeIt )->schemeName() ); - } - int activeScheme = qMin( settings.value( "/Windows/ColorDialog/activeScheme", 0 ).toInt(), schemeList.length() - 1 ); - if ( activeScheme < schemeList.length() ) + int activeScheme = settings.value( "/Windows/ColorDialog/activeScheme", 0 ).toInt(); + if ( activeScheme < mSchemeComboBox->count() ) { mSchemeList->setScheme( schemeList.at( activeScheme ) ); mSchemeComboBox->setCurrentIndex( activeScheme ); @@ -95,12 +91,15 @@ QgsColorDialogV2::QgsColorDialogV2( QWidget *parent, Qt::WindowFlags fl, const Q mActionPasteColors->setEnabled( schemeList.at( activeScheme )->isEditable() ); mAddColorToSchemeButton->setEnabled( schemeList.at( activeScheme )->isEditable() ); mRemoveColorsFromSchemeButton->setEnabled( schemeList.at( activeScheme )->isEditable() ); + QgsUserColorScheme* userScheme = dynamic_cast( schemeList.at( activeScheme ) ); + mActionRemovePalette->setEnabled( userScheme ? true : false ); } connect( mActionPasteColors, SIGNAL( triggered() ), mSchemeList, SLOT( pasteColors() ) ); connect( mActionExportColors, SIGNAL( triggered() ), this, SLOT( exportColors() ) ); connect( mActionImportColors, SIGNAL( triggered() ), this, SLOT( importColors() ) ); connect( mActionImportPalette, SIGNAL( triggered() ), this, SLOT( importPalette() ) ); + connect( mActionRemovePalette, SIGNAL( triggered() ), this, SLOT( removePalette() ) ); connect( mRemoveColorsFromSchemeButton, SIGNAL( clicked() ), mSchemeList, SLOT( removeSelection() ) ); QMenu* schemeMenu = new QMenu( mSchemeToolButton ); @@ -109,6 +108,7 @@ QgsColorDialogV2::QgsColorDialogV2( QWidget *parent, Qt::WindowFlags fl, const Q schemeMenu->addAction( mActionExportColors ); schemeMenu->addSeparator(); schemeMenu->addAction( mActionImportPalette ); + schemeMenu->addAction( mActionRemovePalette ); mSchemeToolButton->setMenu( schemeMenu ); connect( mSchemeComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( schemeIndexChanged( int ) ) ); @@ -385,6 +385,19 @@ void QgsColorDialogV2::importColors() } } +void QgsColorDialogV2::refreshSchemeComboBox() +{ + mSchemeComboBox->blockSignals( true ); + mSchemeComboBox->clear(); + QList schemeList = QgsColorSchemeRegistry::instance()->schemes( QgsColorScheme::ShowInColorDialog ); + QList::const_iterator schemeIt = schemeList.constBegin(); + for ( ; schemeIt != schemeList.constEnd(); ++schemeIt ) + { + mSchemeComboBox->addItem(( *schemeIt )->schemeName() ); + } + mSchemeComboBox->blockSignals( false ); +} + void QgsColorDialogV2::importPalette() { QSettings s; @@ -432,18 +445,49 @@ void QgsColorDialogV2::importPalette() QgsColorSchemeRegistry::instance()->addColorScheme( importedScheme ); //refresh combobox - mSchemeComboBox->blockSignals( true ); - mSchemeComboBox->clear(); - QList schemeList = QgsColorSchemeRegistry::instance()->schemes( QgsColorScheme::ShowInColorDialog ); - QList::const_iterator schemeIt = schemeList.constBegin(); - for ( ; schemeIt != schemeList.constEnd(); ++schemeIt ) - { - mSchemeComboBox->addItem(( *schemeIt )->schemeName() ); - } - mSchemeComboBox->blockSignals( false ); + refreshSchemeComboBox(); mSchemeComboBox->setCurrentIndex( mSchemeComboBox->count() - 1 ); } +void QgsColorDialogV2::removePalette() +{ + //get current scheme + QList schemeList = QgsColorSchemeRegistry::instance()->schemes( QgsColorScheme::ShowInColorDialog ); + int prevIndex = mSchemeComboBox->currentIndex(); + if ( prevIndex >= schemeList.length() ) + { + return; + } + + //make user scheme is a user removable scheme + QgsUserColorScheme* userScheme = dynamic_cast( schemeList.at( prevIndex ) ); + if ( !userScheme ) + { + return; + } + + if ( QMessageBox::question( this, tr( "Remove Color Palette" ), + QString( tr( "Are you sure you want to remove %1?" ) ).arg( userScheme->schemeName() ), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes ) + { + //user cancelled + return; + } + + //remove palette and associated gpl file + if ( !userScheme->erase() ) + { + //something went wrong + return; + } + + //remove scheme from registry + QgsColorSchemeRegistry::instance()->removeColorScheme( userScheme ); + refreshSchemeComboBox(); + prevIndex = qMax( qMin( prevIndex, mSchemeComboBox->count() - 1 ), 0 ); + mSchemeComboBox->setCurrentIndex( prevIndex ); +} + void QgsColorDialogV2::exportColors() { QSettings s; @@ -494,6 +538,8 @@ void QgsColorDialogV2::schemeIndexChanged( int index ) mActionPasteColors->setEnabled( scheme->isEditable() ); mAddColorToSchemeButton->setEnabled( scheme->isEditable() ); mRemoveColorsFromSchemeButton->setEnabled( scheme->isEditable() ); + QgsUserColorScheme* userScheme = dynamic_cast( scheme ); + mActionRemovePalette->setEnabled( userScheme ? true : false ); } void QgsColorDialogV2::on_mAddCustomColorButton_clicked() diff --git a/src/gui/qgscolordialog.h b/src/gui/qgscolordialog.h index 5b6d7adcd66..a062032912a 100644 --- a/src/gui/qgscolordialog.h +++ b/src/gui/qgscolordialog.h @@ -161,6 +161,7 @@ class GUI_EXPORT QgsColorDialogV2 : public QDialog, private Ui::QgsColorDialogBa void exportColors(); void importColors(); void importPalette(); + void removePalette(); void schemeIndexChanged( int index ); @@ -200,6 +201,10 @@ class GUI_EXPORT QgsColorDialogV2 : public QDialog, private Ui::QgsColorDialogBa * @returns average color from sampled position */ QColor sampleColor( const QPoint &point ) const; + + /**Repopulates the scheme combo box with current color schemes + */ + void refreshSchemeComboBox(); }; #endif // #ifndef QGSCOLORDIALOG_H diff --git a/src/ui/qgscolordialog.ui b/src/ui/qgscolordialog.ui index fc5302b0b9f..4dc1719dfa9 100755 --- a/src/ui/qgscolordialog.ui +++ b/src/ui/qgscolordialog.ui @@ -819,6 +819,14 @@ Import palette from file + + + Remove Palette + + + Remove current palette + +