void QgsCompoundColorWidget::on_mActionShowInButtons_toggled( bool state ) { QgsUserColorScheme *scheme = dynamic_cast< QgsUserColorScheme * >( mSchemeList->scheme() ); if ( scheme ) { scheme->setShowSchemeInMenu( state ); } }
void QgsColorDialogV2::importPalette() { QSettings s; QString lastDir = s.value( "/UI/lastGplPaletteDir", "" ).toString(); QString filePath = QFileDialog::getOpenFileName( this, tr( "Select palette file" ), lastDir, "GPL (*.gpl);;All files (*.*)" ); activateWindow(); if ( filePath.isEmpty() ) { return; } //check if file exists QFileInfo fileInfo( filePath ); if ( !fileInfo.exists() || !fileInfo.isReadable() ) { QMessageBox::critical( 0, tr( "Invalid file" ), tr( "Error, file does not exist or is not readable" ) ); return; } s.setValue( "/UI/lastGplPaletteDir", fileInfo.absolutePath() ); QFile file( filePath ); QgsNamedColorList importedColors; bool ok = false; QString paletteName; importedColors = QgsSymbolLayerV2Utils::importColorsFromGpl( file, ok, paletteName ); if ( !ok ) { QMessageBox::critical( 0, tr( "Invalid file" ), tr( "Palette file is not readable" ) ); return; } if ( importedColors.length() == 0 ) { //no imported colors QMessageBox::critical( 0, tr( "Invalid file" ), tr( "No colors found in palette file" ) ); return; } //TODO - handle conflicting file names, name for new palette QgsUserColorScheme* importedScheme = new QgsUserColorScheme( fileInfo.fileName() ); importedScheme->setName( paletteName ); importedScheme->setColors( importedColors ); QgsColorSchemeRegistry::instance()->addColorScheme( importedScheme ); //refresh combobox mSchemeComboBox->blockSignals( true ); mSchemeComboBox->clear(); QList<QgsColorScheme *> schemeList = QgsColorSchemeRegistry::instance()->schemes( QgsColorScheme::ShowInColorDialog ); QList<QgsColorScheme *>::const_iterator schemeIt = schemeList.constBegin(); for ( ; schemeIt != schemeList.constEnd(); ++schemeIt ) { mSchemeComboBox->addItem(( *schemeIt )->schemeName() ); } mSchemeComboBox->blockSignals( false ); mSchemeComboBox->setCurrentIndex( mSchemeComboBox->count() - 1 ); }
void QgsCompoundColorWidget::importPalette() { QgsSettings s; QString lastDir = s.value( QStringLiteral( "/UI/lastGplPaletteDir" ), QDir::homePath() ).toString(); QString filePath = QFileDialog::getOpenFileName( this, tr( "Select palette file" ), lastDir, QStringLiteral( "GPL (*.gpl);;All files (*.*)" ) ); activateWindow(); if ( filePath.isEmpty() ) { return; } //check if file exists QFileInfo fileInfo( filePath ); if ( !fileInfo.exists() || !fileInfo.isReadable() ) { QMessageBox::critical( nullptr, tr( "Invalid file" ), tr( "Error, file does not exist or is not readable" ) ); return; } s.setValue( QStringLiteral( "/UI/lastGplPaletteDir" ), fileInfo.absolutePath() ); QFile file( filePath ); QgsNamedColorList importedColors; bool ok = false; QString paletteName; importedColors = QgsSymbolLayerUtils::importColorsFromGpl( file, ok, paletteName ); if ( !ok ) { QMessageBox::critical( nullptr, tr( "Invalid file" ), tr( "Palette file is not readable" ) ); return; } if ( importedColors.length() == 0 ) { //no imported colors QMessageBox::critical( nullptr, tr( "Invalid file" ), tr( "No colors found in palette file" ) ); return; } //TODO - handle conflicting file names, name for new palette QgsUserColorScheme *importedScheme = new QgsUserColorScheme( fileInfo.fileName() ); importedScheme->setName( paletteName ); importedScheme->setColors( importedColors ); QgsApplication::colorSchemeRegistry()->addColorScheme( importedScheme ); //refresh combobox refreshSchemeComboBox(); mSchemeComboBox->setCurrentIndex( mSchemeComboBox->count() - 1 ); }
void QgsCompoundColorWidget::updateActionsForCurrentScheme() { QgsColorScheme *scheme = mSchemeList->scheme(); mActionImportColors->setEnabled( scheme->isEditable() ); mActionPasteColors->setEnabled( scheme->isEditable() ); mAddColorToSchemeButton->setEnabled( scheme->isEditable() ); mRemoveColorsFromSchemeButton->setEnabled( scheme->isEditable() ); QgsUserColorScheme *userScheme = dynamic_cast<QgsUserColorScheme *>( scheme ); mActionRemovePalette->setEnabled( userScheme ? true : false ); if ( userScheme ) { mActionShowInButtons->setEnabled( true ); whileBlocking( mActionShowInButtons )->setChecked( userScheme->flags() & QgsColorScheme::ShowInColorButtonMenu ); } else { whileBlocking( mActionShowInButtons )->setChecked( false ); mActionShowInButtons->setEnabled( false ); } }
void QgsCompoundColorWidget::newPalette() { bool ok = false; QString name = QInputDialog::getText( this, tr( "Create New Palette" ), tr( "Enter a name for the new palette:" ), QLineEdit::Normal, tr( "New palette" ), &ok ); if ( !ok || name.isEmpty() ) { //user canceled return; } //generate file name for new palette QDir palettePath( gplFilePath() ); QRegExp badChars( "[,^@={}\\[\\]~!?:&*\"|#%<>$\"'();`' /\\\\]" ); QString filename = name.simplified().toLower().replace( badChars, QStringLiteral( "_" ) ); if ( filename.isEmpty() ) { filename = tr( "new_palette" ); } QFileInfo destFileInfo( palettePath.filePath( filename + ".gpl" ) ); int fileNumber = 1; while ( destFileInfo.exists() ) { //try to generate a unique file name destFileInfo = QFileInfo( palettePath.filePath( filename + QStringLiteral( "%1.gpl" ).arg( fileNumber ) ) ); fileNumber++; } QgsUserColorScheme *newScheme = new QgsUserColorScheme( destFileInfo.fileName() ); newScheme->setName( name ); QgsApplication::colorSchemeRegistry()->addColorScheme( newScheme ); //refresh combobox and set new scheme as active refreshSchemeComboBox(); mSchemeComboBox->setCurrentIndex( mSchemeComboBox->count() - 1 ); }
void QgsCompoundColorWidget::removePalette() { //get current scheme QList<QgsColorScheme *> schemeList = QgsApplication::colorSchemeRegistry()->schemes( QgsColorScheme::ShowInColorDialog ); int prevIndex = mSchemeComboBox->currentIndex(); if ( prevIndex >= schemeList.length() ) { return; } //make user scheme is a user removable scheme QgsUserColorScheme *userScheme = dynamic_cast<QgsUserColorScheme *>( 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 canceled return; } //remove palette and associated gpl file if ( !userScheme->erase() ) { //something went wrong return; } //remove scheme from registry QgsApplication::colorSchemeRegistry()->removeColorScheme( userScheme ); refreshSchemeComboBox(); prevIndex = std::max( std::min( prevIndex, mSchemeComboBox->count() - 1 ), 0 ); mSchemeComboBox->setCurrentIndex( prevIndex ); }