Skip to content

Commit deb18c4

Browse files
committed
color ramp button widget for gradiant fill and categorized renderer
1 parent fa16e3e commit deb18c4

15 files changed

+80
-137
lines changed

python/core/qgscolorramp.sip

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class QgsColorRamp
4848
*/
4949
virtual QString type() const = 0;
5050

51-
virtual void invert() = 0;
51+
virtual void invert();
5252

5353
/** Creates a clone of the color ramp.
5454
*/
@@ -226,8 +226,6 @@ class QgsLimitedRandomColorRamp : QgsColorRamp
226226

227227
virtual QString type() const;
228228

229-
virtual void invert();
230-
231229
virtual QgsLimitedRandomColorRamp* clone() const /Factory/;
232230

233231
virtual QgsStringMap properties() const;
@@ -287,8 +285,6 @@ class QgsRandomColorRamp : QgsColorRamp
287285

288286
QString type() const;
289287

290-
virtual void invert();
291-
292288
virtual QgsRandomColorRamp* clone() const /Factory/;
293289

294290
QgsStringMap properties() const;

python/core/symbology-ng/qgscategorizedsymbolrenderer.sip

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,11 @@ class QgsCategorizedSymbolRenderer : QgsFeatureRenderer
157157
*/
158158
void setSourceColorRamp( QgsColorRamp* ramp /Transfer/ );
159159

160-
//! @note added in 2.1
161-
bool invertedColorRamp();
162-
void setInvertedColorRamp( bool inverted );
163-
164160
/** Update the color ramp used and all symbols colors.
165161
* @param ramp color ramp. Ownership is transferred to the renderer
166-
* @param inverted set to true to invert ramp colors
167162
* @note added in 2.5
168163
*/
169-
void updateColorRamp( QgsColorRamp* ramp /Transfer/, bool inverted = false );
164+
void updateColorRamp( QgsColorRamp* ramp /Transfer/ );
170165

171166
//! items of symbology items in legend should be checkable
172167
//! @note added in 2.5

python/gui/gui.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
%Include qgscharacterselectdialog.sip
4242
%Include qgscolorbrewercolorrampdialog.sip
4343
%Include qgscolorbutton.sip
44-
%Include qgscolorbutton.sip
44+
%Include qgscolorrampbutton.sip
4545
%Include qgscolordialog.sip
4646
%Include qgscolorschemelist.sip
4747
%Include qgscolorswatchgrid.sip

python/gui/symbology-ng/qgscategorizedsymbolrendererwidget.sip

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ class QgsCategorizedSymbolRendererWidget : QgsRendererWidget
7272

7373
void changeCategorySymbol();
7474

75-
QgsColorRamp* getColorRamp();
76-
7775
QList<QgsSymbol*> selectedSymbols();
7876
QgsCategoryList selectedCategoryList();
7977
void refreshSymbolView();

src/core/qgscolorramp.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ class CORE_EXPORT QgsColorRamp
5151
virtual QString type() const = 0;
5252

5353

54-
virtual void invert() = 0;
54+
/** Inverts the ordering of the color ramp.
55+
*/
56+
virtual void invert() {}
5557

5658
/** Creates a clone of the color ramp.
5759
*/
@@ -259,7 +261,6 @@ class CORE_EXPORT QgsLimitedRandomColorRamp : public QgsColorRamp
259261
virtual double value( int index ) const override;
260262
virtual QColor color( double value ) const override;
261263
virtual QString type() const override { return QStringLiteral( "random" ); }
262-
virtual void invert() override { return; }
263264
virtual QgsLimitedRandomColorRamp* clone() const override;
264265
virtual QgsStringMap properties() const override;
265266
int count() const override { return mCount; }
@@ -375,8 +376,6 @@ class CORE_EXPORT QgsRandomColorRamp: public QgsColorRamp
375376

376377
QString type() const override;
377378

378-
virtual void invert() override { return; }
379-
380379
QgsRandomColorRamp* clone() const override;
381380

382381
QgsStringMap properties() const override;

src/core/symbology-ng/qgscategorizedsymbolrenderer.cpp

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ void QgsRendererCategory::toSld( QDomDocument &doc, QDomElement &element, QgsStr
152152
QgsCategorizedSymbolRenderer::QgsCategorizedSymbolRenderer( const QString& attrName, const QgsCategoryList& categories )
153153
: QgsFeatureRenderer( QStringLiteral( "categorizedSymbol" ) )
154154
, mAttrName( attrName )
155-
, mInvertedColorRamp( false )
156155
, mAttrNum( -1 )
157156
, mCounting( false )
158157
{
@@ -472,7 +471,6 @@ QgsCategorizedSymbolRenderer* QgsCategorizedSymbolRenderer::clone() const
472471
if ( mSourceColorRamp.data() )
473472
{
474473
r->setSourceColorRamp( mSourceColorRamp->clone() );
475-
r->setInvertedColorRamp( mInvertedColorRamp );
476474
}
477475
r->setUsingSymbolLevels( usingSymbolLevels() );
478476

@@ -631,9 +629,6 @@ QgsFeatureRenderer* QgsCategorizedSymbolRenderer::create( QDomElement& element )
631629
if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( QStringLiteral( "name" ) ) == QLatin1String( "[source]" ) )
632630
{
633631
r->setSourceColorRamp( QgsSymbolLayerUtils::loadColorRamp( sourceColorRampElem ) );
634-
QDomElement invertedColorRampElem = element.firstChildElement( QStringLiteral( "invertedcolorramp" ) );
635-
if ( !invertedColorRampElem.isNull() )
636-
r->setInvertedColorRamp( invertedColorRampElem.attribute( QStringLiteral( "value" ) ) == QLatin1String( "1" ) );
637632
}
638633

639634
QDomElement rotationElem = element.firstChildElement( QStringLiteral( "rotation" ) );
@@ -721,9 +716,6 @@ QDomElement QgsCategorizedSymbolRenderer::save( QDomDocument& doc )
721716
{
722717
QDomElement colorRampElem = QgsSymbolLayerUtils::saveColorRamp( QStringLiteral( "[source]" ), mSourceColorRamp.data(), doc );
723718
rendererElem.appendChild( colorRampElem );
724-
QDomElement invertedElem = doc.createElement( QStringLiteral( "invertedcolorramp" ) );
725-
invertedElem.setAttribute( QStringLiteral( "value" ), mInvertedColorRamp );
726-
rendererElem.appendChild( invertedElem );
727719
}
728720

729721
QDomElement rotationElem = doc.createElement( QStringLiteral( "rotation" ) );
@@ -864,10 +856,9 @@ void QgsCategorizedSymbolRenderer::setSourceColorRamp( QgsColorRamp* ramp )
864856
mSourceColorRamp.reset( ramp );
865857
}
866858

867-
void QgsCategorizedSymbolRenderer::updateColorRamp( QgsColorRamp* ramp, bool inverted )
859+
void QgsCategorizedSymbolRenderer::updateColorRamp( QgsColorRamp* ramp )
868860
{
869861
setSourceColorRamp( ramp );
870-
setInvertedColorRamp( inverted );
871862
double num = mCategories.count() - 1;
872863
double count = 0;
873864

@@ -882,7 +873,6 @@ void QgsCategorizedSymbolRenderer::updateColorRamp( QgsColorRamp* ramp, bool inv
882873
Q_FOREACH ( const QgsRendererCategory &cat, mCategories )
883874
{
884875
double value = count / num;
885-
if ( mInvertedColorRamp ) value = 1.0 - value;
886876
cat.symbol()->setColor( mSourceColorRamp->color( value ) );
887877
count += 1;
888878
}

src/core/symbology-ng/qgscategorizedsymbolrenderer.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,16 +167,11 @@ class CORE_EXPORT QgsCategorizedSymbolRenderer : public QgsFeatureRenderer
167167
*/
168168
void setSourceColorRamp( QgsColorRamp* ramp );
169169

170-
//! @note added in 2.1
171-
bool invertedColorRamp() { return mInvertedColorRamp; }
172-
void setInvertedColorRamp( bool inverted ) { mInvertedColorRamp = inverted; }
173-
174170
/** Update the color ramp used and all symbols colors.
175171
* @param ramp color ramp. Ownership is transferred to the renderer
176-
* @param inverted set to true to invert ramp colors
177172
* @note added in 2.5
178173
*/
179-
void updateColorRamp( QgsColorRamp* ramp, bool inverted = false );
174+
void updateColorRamp( QgsColorRamp* ramp );
180175

181176
virtual bool legendSymbolItemsCheckable() const override;
182177
virtual bool legendSymbolItemChecked( const QString& key ) override;
@@ -194,7 +189,6 @@ class CORE_EXPORT QgsCategorizedSymbolRenderer : public QgsFeatureRenderer
194189
QgsCategoryList mCategories;
195190
QScopedPointer<QgsSymbol> mSourceSymbol;
196191
QScopedPointer<QgsColorRamp> mSourceColorRamp;
197-
bool mInvertedColorRamp;
198192
QScopedPointer<QgsExpression> mExpression;
199193

200194
//! attribute index (derived from attribute name in startRender)

src/gui/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ SET(QGIS_GUI_SRCS
188188
qgscollapsiblegroupbox.cpp
189189
qgscolorbrewercolorrampdialog.cpp
190190
qgscolorbutton.cpp
191+
qgscolorrampbutton.cpp
191192
qgscolordialog.cpp
192193
qgscolorschemelist.cpp
193194
qgscolorswatchgrid.cpp
@@ -356,6 +357,7 @@ SET(QGIS_GUI_MOC_HDRS
356357
qgscollapsiblegroupbox.h
357358
qgscolorbrewercolorrampdialog.h
358359
qgscolorbutton.h
360+
qgscolorrampbutton.h
359361
qgscolordialog.h
360362
qgscolorschemelist.h
361363
qgscolorswatchgrid.h

src/gui/symbology-ng/qgscategorizedsymbolrendererwidget.cpp

Lines changed: 12 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "qgssymbol.h"
2222
#include "qgssymbollayerutils.h"
2323
#include "qgscolorramp.h"
24+
#include "qgscolorrampbutton.h"
2425
#include "qgsstyle.h"
2526
#include "qgslogger.h"
2627

@@ -410,21 +411,15 @@ QgsCategorizedSymbolRendererWidget::QgsCategorizedSymbolRendererWidget( QgsVecto
410411

411412
mExpressionWidget->setLayer( mLayer );
412413

413-
cboCategorizedColorRamp->populate( mStyle );
414-
int randomIndex = cboCategorizedColorRamp->findText( tr( "Random colors" ) );
415-
if ( randomIndex != -1 )
416-
{
417-
cboCategorizedColorRamp->setCurrentIndex( randomIndex );
418-
mButtonEditRamp->setEnabled( false );
419-
}
414+
// initiate color ramp button to random
415+
btnColorRamp->setShowRandomColorRamp( true );
416+
btnColorRamp->setRandomColorRamp();
420417

421418
// set project default color ramp
422419
QString defaultColorRamp = QgsProject::instance()->readEntry( QStringLiteral( "DefaultStyles" ), QStringLiteral( "/ColorRamp" ), QLatin1String( "" ) );
423420
if ( defaultColorRamp != QLatin1String( "" ) )
424421
{
425-
int index = cboCategorizedColorRamp->findText( defaultColorRamp, Qt::MatchCaseSensitive );
426-
if ( index >= 0 )
427-
cboCategorizedColorRamp->setCurrentIndex( index );
422+
btnColorRamp->setColorRampFromName( defaultColorRamp );
428423
}
429424

430425
mCategorizedSymbol = QgsSymbol::defaultSymbol( mLayer->geometryType() );
@@ -455,10 +450,8 @@ QgsCategorizedSymbolRendererWidget::QgsCategorizedSymbolRendererWidget( QgsVecto
455450
connect( btnDeleteCategories, SIGNAL( clicked() ), this, SLOT( deleteCategories() ) );
456451
connect( btnDeleteAllCategories, SIGNAL( clicked() ), this, SLOT( deleteAllCategories() ) );
457452
connect( btnAddCategory, SIGNAL( clicked() ), this, SLOT( addCategory() ) );
458-
connect( cbxInvertedColorRamp, SIGNAL( toggled( bool ) ), this, SLOT( applyColorRamp() ) );
459-
connect( cboCategorizedColorRamp, SIGNAL( currentIndexChanged( int ) ), this, SLOT( applyColorRamp() ) );
460-
connect( cboCategorizedColorRamp, SIGNAL( sourceRampEdited() ), this, SLOT( applyColorRamp() ) );
461-
connect( mButtonEditRamp, SIGNAL( clicked() ), cboCategorizedColorRamp, SLOT( editSourceRamp() ) );
453+
454+
connect( btnColorRamp, &QgsColorRampButton::colorRampChanged, this, &QgsCategorizedSymbolRendererWidget::applyColorRamp );
462455

463456
// menus for data-defined rotation/size
464457
QMenu* advMenu = new QMenu;
@@ -501,17 +494,11 @@ void QgsCategorizedSymbolRendererWidget::updateUiFromRenderer()
501494
updateCategorizedSymbolIcon();
502495
}
503496

504-
// set source color ramp
497+
// if a color ramp attached to the renderer, enable the color ramp button
505498
if ( mRenderer->sourceColorRamp() )
506499
{
507-
cboCategorizedColorRamp->setSourceColorRamp( mRenderer->sourceColorRamp() );
508-
cbxInvertedColorRamp->setChecked( mRenderer->invertedColorRamp() );
500+
btnColorRamp->setColorRamp( mRenderer->sourceColorRamp() );
509501
}
510-
511-
if ( cboCategorizedColorRamp->currentText() == tr( "Random colors" ) )
512-
mButtonEditRamp->setEnabled( false );
513-
else
514-
mButtonEditRamp->setEnabled( true );
515502
}
516503

517504
QgsFeatureRenderer* QgsCategorizedSymbolRendererWidget::renderer()
@@ -628,20 +615,6 @@ static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, Q
628615
}
629616
}
630617

631-
QgsColorRamp* QgsCategorizedSymbolRendererWidget::getColorRamp()
632-
{
633-
QgsColorRamp* ramp = cboCategorizedColorRamp->currentColorRamp();
634-
if ( !ramp )
635-
{
636-
if ( cboCategorizedColorRamp->count() == 0 )
637-
QMessageBox::critical( this, tr( "Error" ), tr( "There are no available color ramps. You can add them in Style Manager." ) );
638-
else if ( !cboCategorizedColorRamp->createNewColorRampSelected() )
639-
QMessageBox::critical( this, tr( "Error" ), tr( "The selected color ramp is not available." ) );
640-
}
641-
return ramp;
642-
}
643-
644-
645618
void QgsCategorizedSymbolRendererWidget::addCategories()
646619
{
647620
QString attrName = mExpressionWidget->currentField();
@@ -759,8 +732,7 @@ void QgsCategorizedSymbolRendererWidget::addCategories()
759732
// recreate renderer
760733
QgsCategorizedSymbolRenderer *r = new QgsCategorizedSymbolRenderer( attrName, cats );
761734
r->setSourceSymbol( mCategorizedSymbol->clone() );
762-
r->setInvertedColorRamp( cbxInvertedColorRamp->isChecked() );
763-
QScopedPointer< QgsColorRamp > ramp( getColorRamp() );
735+
QScopedPointer< QgsColorRamp > ramp( btnColorRamp->colorRamp() );
764736
if ( ramp )
765737
r->setSourceColorRamp( ramp->clone() );
766738

@@ -777,15 +749,9 @@ void QgsCategorizedSymbolRendererWidget::addCategories()
777749

778750
void QgsCategorizedSymbolRendererWidget::applyColorRamp()
779751
{
780-
if ( cboCategorizedColorRamp->currentText() == tr( "Random colors" ) )
781-
mButtonEditRamp->setEnabled( false );
782-
else
783-
mButtonEditRamp->setEnabled( true );
784-
785-
QgsColorRamp* ramp = getColorRamp();
786-
if ( ramp )
752+
if ( !btnColorRamp->isNull() )
787753
{
788-
mRenderer->updateColorRamp( ramp, cbxInvertedColorRamp->isChecked() );
754+
mRenderer->updateColorRamp( btnColorRamp->colorRamp()->clone() );
789755
}
790756
mModel->updateSymbology();
791757
}

src/gui/symbology-ng/qgscategorizedsymbolrendererwidget.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ class GUI_EXPORT QgsCategorizedSymbolRendererWidget : public QgsRendererWidget,
107107
void categoriesDoubleClicked( const QModelIndex & idx );
108108
void addCategory();
109109
void addCategories();
110+
111+
/** Applies the color ramp passed on by the color ramp button
112+
*/
110113
void applyColorRamp();
114+
111115
void deleteCategories();
112116
void deleteAllCategories();
113117

@@ -156,8 +160,6 @@ class GUI_EXPORT QgsCategorizedSymbolRendererWidget : public QgsRendererWidget,
156160

157161
void changeCategorySymbol();
158162

159-
QgsColorRamp* getColorRamp();
160-
161163
QList<QgsSymbol*> selectedSymbols() override;
162164
QgsCategoryList selectedCategoryList();
163165
void refreshSymbolView() override;

0 commit comments

Comments
 (0)