QGIS API Documentation  3.13.0-Master (788156190c)
qgscolorrampbutton.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgscolorrampbutton.cpp - Color ramp button
3  --------------------------------------
4  Date : November 27, 2016
5  Copyright : (C) 2016 by Mathieu Pellerin
6  Email : nirvn dot asia at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #include "qgscolorrampbutton.h"
17 #include "qgscolorramp.h"
18 #include "qgsapplication.h"
19 #include "qgslogger.h"
20 #include "qgssymbollayerutils.h"
21 #include "qgsstyle.h"
22 
23 #include "qgsstylesavedialog.h"
29 
30 #include <QAction>
31 #include <QInputDialog>
32 #include <QMessageBox>
33 #include <QMouseEvent>
34 #include <QMenu>
35 #include <QPainter>
36 #include <QPushButton>
37 #include <QWidget>
38 
39 QgsColorRampButton::QgsColorRampButton( QWidget *parent, const QString &dialogTitle )
40  : QToolButton( parent )
41  , mColorRampDialogTitle( dialogTitle.isEmpty() ? tr( "Select Color Ramp" ) : dialogTitle )
42 {
43  setAcceptDrops( true );
44  setMinimumSize( QSize( 24, 16 ) );
45  connect( this, &QPushButton::clicked, this, &QgsColorRampButton::buttonClicked );
46 
47  //setup drop-down menu
48  mMenu = new QMenu( this );
49  connect( mMenu, &QMenu::aboutToShow, this, &QgsColorRampButton::prepareMenu );
50  setMenu( mMenu );
51 
52  mAllRampsMenu = new QMenu( mMenu );
53  mAllRampsMenu->setTitle( tr( "All Color Ramps" ) );
54 
55  setPopupMode( QToolButton::MenuButtonPopup );
56 
57  mStyle = QgsStyle::defaultStyle();
58 }
59 
61 {
62  delete mColorRamp;
63  delete mDefaultColorRamp;
64 }
65 
67 {
68  //make sure height of button looks good under different platforms
69 #ifdef Q_OS_WIN
70  return QSize( 120, static_cast<int>( std::max( Qgis::UI_SCALE_FACTOR * fontMetrics().height( ), 22.0 ) ) );
71 #else
72  // Adjust height for HiDPI screens
73  return QSize( 120, static_cast<int>( std::max( Qgis::UI_SCALE_FACTOR * fontMetrics().height( ) * 1.4, 28.0 ) ) );
74 #endif
75 }
76 
77 void QgsColorRampButton::showColorRampDialog()
78 {
80  bool panelMode = panel && panel->dockMode();
81 
82  std::unique_ptr< QgsColorRamp > currentRamp( colorRamp() );
83  if ( !currentRamp )
84  return;
85 
86  setColorRampName( QString() );
87 
88  if ( currentRamp->type() == QLatin1String( "gradient" ) )
89  {
90  QgsGradientColorRamp *gradRamp = static_cast<QgsGradientColorRamp *>( currentRamp.get() );
91  QgsGradientColorRampDialog dlg( *gradRamp, this );
92  dlg.setWindowTitle( mColorRampDialogTitle );
93  if ( dlg.exec() )
94  {
95  setColorRamp( dlg.ramp().clone() );
96  }
97  }
98  else if ( currentRamp->type() == QLatin1String( "random" ) )
99  {
100  QgsLimitedRandomColorRamp *randRamp = static_cast<QgsLimitedRandomColorRamp *>( currentRamp.get() );
101  if ( panelMode )
102  {
103  QgsLimitedRandomColorRampWidget *widget = new QgsLimitedRandomColorRampWidget( *randRamp, this );
104  widget->setPanelTitle( tr( "Edit Ramp" ) );
105  connect( widget, &QgsLimitedRandomColorRampWidget::changed, this, &QgsColorRampButton::rampWidgetUpdated );
106  panel->openPanel( widget );
107  }
108  else
109  {
110  QgsLimitedRandomColorRampDialog dlg( *randRamp, this );
111  if ( dlg.exec() )
112  {
113  setColorRamp( dlg.ramp().clone() );
114  }
115  }
116  }
117  else if ( currentRamp->type() == QLatin1String( "preset" ) )
118  {
119  QgsPresetSchemeColorRamp *presetRamp = static_cast<QgsPresetSchemeColorRamp *>( currentRamp.get() );
120  if ( panelMode )
121  {
122  QgsPresetColorRampWidget *widget = new QgsPresetColorRampWidget( *presetRamp, this );
123  widget->setPanelTitle( tr( "Edit Ramp" ) );
124  connect( widget, &QgsPresetColorRampWidget::changed, this, &QgsColorRampButton::rampWidgetUpdated );
125  panel->openPanel( widget );
126  }
127  else
128  {
129  QgsPresetColorRampDialog dlg( *presetRamp, this );
130  if ( dlg.exec() )
131  {
132  setColorRamp( dlg.ramp().clone() );
133  }
134  }
135  }
136  else if ( currentRamp->type() == QLatin1String( "colorbrewer" ) )
137  {
138  QgsColorBrewerColorRamp *brewerRamp = static_cast<QgsColorBrewerColorRamp *>( currentRamp.get() );
139  if ( panelMode )
140  {
141  QgsColorBrewerColorRampWidget *widget = new QgsColorBrewerColorRampWidget( *brewerRamp, this );
142  widget->setPanelTitle( tr( "Edit Ramp" ) );
143  connect( widget, &QgsColorBrewerColorRampWidget::changed, this, &QgsColorRampButton::rampWidgetUpdated );
144  panel->openPanel( widget );
145  }
146  else
147  {
148  QgsColorBrewerColorRampDialog dlg( *brewerRamp, this );
149  if ( dlg.exec() )
150  {
151  setColorRamp( dlg.ramp().clone() );
152  }
153  }
154  }
155  else if ( currentRamp->type() == QLatin1String( "cpt-city" ) )
156  {
157  QgsCptCityColorRamp *cptCityRamp = static_cast<QgsCptCityColorRamp *>( currentRamp.get() );
158  QgsCptCityColorRampDialog dlg( *cptCityRamp, this );
159  if ( dlg.exec() )
160  {
161  if ( dlg.saveAsGradientRamp() )
162  {
163  setColorRamp( dlg.ramp().cloneGradientRamp() );
164  }
165  else
166  {
167  setColorRamp( dlg.ramp().clone() );
168  }
169  }
170  }
171 }
172 
174 {
175  if ( !mDefaultColorRamp )
176  {
177  return;
178  }
179 
180  setColorRamp( mDefaultColorRamp );
181 }
182 
184 {
185  setColorRamp( nullptr );
186 }
187 
188 bool QgsColorRampButton::event( QEvent *e )
189 {
190  if ( e->type() == QEvent::ToolTip )
191  {
192  if ( !colorRampName().isEmpty() )
193  {
194  setToolTip( colorRampName() );
195  }
196  }
197  return QToolButton::event( e );
198 }
199 
201 {
202  if ( e->button() == Qt::RightButton )
203  {
204  QToolButton::showMenu();
205  return;
206  }
207  QToolButton::mousePressEvent( e );
208 }
209 
210 QPixmap QgsColorRampButton::createMenuIcon( QgsColorRamp *colorramp )
211 {
212  //create an icon pixmap
213  const int iconSize = QgsGuiUtils::scaleIconSize( 16 );
214  QPixmap pixmap = QgsSymbolLayerUtils::colorRampPreviewPixmap( colorramp, QSize( iconSize, iconSize ) );
215  return pixmap;
216 }
217 
218 void QgsColorRampButton::buttonClicked()
219 {
220  if ( !isRandomColorRamp() && !isNull() )
221  {
222  showColorRampDialog();
223  }
224  else
225  {
226  QToolButton::showMenu();
227  }
228 }
229 
230 void QgsColorRampButton::prepareMenu()
231 {
232  mMenu->clear();
233 
234  QAction *invertAction = new QAction( tr( "Invert Color Ramp" ), this );
235  invertAction->setEnabled( !isNull() && !isRandomColorRamp() );
236  mMenu->addAction( invertAction );
237  connect( invertAction, &QAction::triggered, this, &QgsColorRampButton::invertColorRamp );
238 
239  if ( mShowNull )
240  {
241  QAction *nullAction = new QAction( tr( "Clear Current Ramp" ), this );
242  mMenu->addAction( nullAction );
243  connect( nullAction, &QAction::triggered, this, &QgsColorRampButton::setToNull );
244  }
245 
246  mMenu->addSeparator();
247 
248  //show default color option if set
249  if ( mDefaultColorRamp )
250  {
251  QAction *defaultColorRampAction = new QAction( tr( "Default Color Ramp" ), this );
252  defaultColorRampAction->setIcon( createMenuIcon( mDefaultColorRamp ) );
253  mMenu->addAction( defaultColorRampAction );
254  connect( defaultColorRampAction, &QAction::triggered, this, &QgsColorRampButton::setToDefaultColorRamp );
255  }
256 
257  if ( mShowRandomColorRamp )
258  {
259  QAction *randomColorRampAction = new QAction( tr( "Random Color Ramp" ), this );
260  randomColorRampAction->setCheckable( true );
261  randomColorRampAction->setChecked( isRandomColorRamp() );
262  mMenu->addAction( randomColorRampAction );
263  connect( randomColorRampAction, &QAction::triggered, this, &QgsColorRampButton::setRandomColorRamp );
264 
265  if ( isRandomColorRamp() || dynamic_cast<QgsLimitedRandomColorRamp *>( mColorRamp ) )
266  {
267  QAction *shuffleRandomColorRampAction = new QAction( tr( "Shuffle Random Colors" ), this );
268  mMenu->addAction( shuffleRandomColorRampAction );
269  connect( shuffleRandomColorRampAction, &QAction::triggered, this, &QgsColorRampButton::colorRampChanged );
270  }
271  }
272 
273  mMenu->addSeparator();
274 
275  QStringList rampNames = mStyle->symbolsOfFavorite( QgsStyle::ColorrampEntity );
276  rampNames.sort();
277  const int iconSize = QgsGuiUtils::scaleIconSize( 16 );
278  for ( QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it )
279  {
280  std::unique_ptr< QgsColorRamp > ramp( mStyle->colorRamp( *it ) );
281 
282  if ( !mShowGradientOnly || ( ramp->type() == QLatin1String( "gradient" ) || ramp->type() == QLatin1String( "cpt-city" ) ) )
283  {
284  QIcon icon = QgsSymbolLayerUtils::colorRampPreviewIcon( ramp.get(), QSize( iconSize, iconSize ) );
285  QAction *ra = new QAction( *it, this );
286  ra->setIcon( icon );
287  connect( ra, &QAction::triggered, this, &QgsColorRampButton::loadColorRamp );
288  mMenu->addAction( ra );
289  }
290  }
291 
292  mMenu->addSeparator();
293 
294  mAllRampsMenu->clear();
295  mMenu->addMenu( mAllRampsMenu );
296  rampNames = mStyle->colorRampNames();
297  rampNames.sort();
298  for ( QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it )
299  {
300  std::unique_ptr< QgsColorRamp > ramp( mStyle->colorRamp( *it ) );
301 
302  if ( !mShowGradientOnly || ( ramp->type() == QLatin1String( "gradient" ) || ramp->type() == QLatin1String( "cpt-city" ) ) )
303  {
304  QIcon icon = QgsSymbolLayerUtils::colorRampPreviewIcon( ramp.get(), QSize( iconSize, iconSize ) );
305  QAction *ra = new QAction( *it, this );
306  ra->setIcon( icon );
307  connect( ra, &QAction::triggered, this, &QgsColorRampButton::loadColorRamp );
308  mAllRampsMenu->addAction( ra );
309  }
310  }
311 
312  mMenu->addSeparator();
313 
314  QAction *newColorRampAction = new QAction( tr( "Create New Color Ramp…" ), this );
315  connect( newColorRampAction, &QAction::triggered, this, &QgsColorRampButton::createColorRamp );
316  mMenu->addAction( newColorRampAction );
317 
318  QAction *editColorRampAction = new QAction( tr( "Edit Color Ramp…" ), this );
319  editColorRampAction->setEnabled( !isNull() && !isRandomColorRamp() );
320  connect( editColorRampAction, &QAction::triggered, this, &QgsColorRampButton::showColorRampDialog );
321  mMenu->addAction( editColorRampAction );
322 
323  QAction *saveColorRampAction = new QAction( tr( "Save Color Ramp…" ), this );
324  saveColorRampAction->setEnabled( !isNull() && !isRandomColorRamp() );
325  connect( saveColorRampAction, &QAction::triggered, this, &QgsColorRampButton::saveColorRamp );
326  mMenu->addAction( saveColorRampAction );
327 }
328 
329 void QgsColorRampButton::loadColorRamp()
330 {
331  QAction *selectedItem = qobject_cast<QAction *>( sender() );
332  if ( selectedItem )
333  {
334  QString name = selectedItem->iconText();
335  setColorRampName( name );
336  setColorRampFromName( name );
337  }
338 }
339 
340 void QgsColorRampButton::createColorRamp()
341 {
342  QStringList rampTypes;
343  QString rampType;
344  bool ok = true;
345 
346  if ( mShowGradientOnly )
347  {
348  rampTypes << tr( "Gradient" ) << tr( "Catalog: cpt-city" );
349  }
350  else
351  {
352  rampTypes << tr( "Gradient" ) << tr( "Color presets" ) << tr( "Random" ) << tr( "Catalog: cpt-city" );
353  rampTypes << tr( "Catalog: ColorBrewer" );
354  }
355  rampType = QInputDialog::getItem( this, tr( "Color ramp type" ),
356  tr( "Please select color ramp type:" ), rampTypes, 0, false, &ok );
357 
358  if ( !ok || rampType.isEmpty() )
359  return;
360 
361  QgsColorRamp *ramp = nullptr;
362  if ( rampType == tr( "Gradient" ) )
363  {
364  ramp = new QgsGradientColorRamp();
365  }
366  else if ( rampType == tr( "Random" ) )
367  {
368  ramp = new QgsLimitedRandomColorRamp();
369  }
370  else if ( rampType == tr( "Catalog: ColorBrewer" ) )
371  {
372  ramp = new QgsColorBrewerColorRamp();
373  }
374  else if ( rampType == tr( "Color presets" ) )
375  {
376  ramp = new QgsPresetSchemeColorRamp();
377  }
378  else if ( rampType == tr( "Catalog: cpt-city" ) )
379  {
380  ramp = new QgsCptCityColorRamp( QString(), QString() );
381  }
382  else
383  {
384  QgsDebugMsg( "invalid ramp type " + rampType );
385  return;
386  }
387 
388  setColorRamp( ramp );
389  delete ramp;
390 
391  showColorRampDialog();
392 }
393 
394 void QgsColorRampButton::saveColorRamp()
395 {
396  QgsStyleSaveDialog saveDlg( this, QgsStyle::ColorrampEntity );
397  if ( !saveDlg.exec() || saveDlg.name().isEmpty() )
398  {
399  return;
400  }
401 
402  // check if there is no symbol with same name
403  if ( mStyle->symbolNames().contains( saveDlg.name() ) )
404  {
405  int res = QMessageBox::warning( this, tr( "Save Color Ramp" ),
406  tr( "Color ramp with name '%1' already exists. Overwrite?" )
407  .arg( saveDlg.name() ),
408  QMessageBox::Yes | QMessageBox::No );
409  if ( res != QMessageBox::Yes )
410  {
411  return;
412  }
413  mStyle->removeColorRamp( saveDlg.name() );
414  }
415 
416  QStringList colorRampTags = saveDlg.tags().split( ',' );
417 
418  // add new symbol to style and re-populate the list
419  QgsColorRamp *ramp = colorRamp();
420  mStyle->addColorRamp( saveDlg.name(), ramp );
421  mStyle->saveColorRamp( saveDlg.name(), ramp, saveDlg.isFavorite(), colorRampTags );
422 
423  setColorRampName( saveDlg.name() );
424 }
425 
426 void QgsColorRampButton::invertColorRamp()
427 {
428  mColorRamp->invert();
430  emit colorRampChanged();
431 }
432 
434 {
435  if ( e->type() == QEvent::EnabledChange )
436  {
438  }
439  QToolButton::changeEvent( e );
440 }
441 
442 #if 0 // causes too many cyclical updates, but may be needed on some platforms
443 void QgsColorRampButton::paintEvent( QPaintEvent *e )
444 {
445  QToolButton::paintEvent( e );
446 
447  if ( !mBackgroundSet )
448  {
450  }
451 }
452 #endif
453 
454 void QgsColorRampButton::showEvent( QShowEvent *e )
455 {
457  QToolButton::showEvent( e );
458 }
459 
460 void QgsColorRampButton::resizeEvent( QResizeEvent *event )
461 {
462  QToolButton::resizeEvent( event );
463  //recalculate icon size and redraw icon
464  mIconSize = QSize();
465  setButtonBackground( mColorRamp );
466 }
467 
469 {
470  QgsColorRamp *oldColorRamp = mColorRamp;
471  mColorRamp = colorramp->clone();
472 
473  // handle when initially set color is same as default (Qt::black); consider it a color change
474  if ( ( oldColorRamp != mColorRamp ) || !mColorRampSet )
475  {
477  if ( isEnabled() )
478  {
479  emit colorRampChanged();
480  }
481  }
482  delete oldColorRamp;
483  mColorRampSet = true;
484 }
485 
486 void QgsColorRampButton::setColorRampFromName( const QString &name )
487 {
488  if ( !name.isEmpty() )
489  {
490  std::unique_ptr< QgsColorRamp > ramp( mStyle->colorRamp( name ) );
491  if ( ramp )
492  {
493  setColorRamp( ramp.get() );
494  }
495  }
496 }
497 
499 {
500  if ( !isRandomColorRamp() )
501  {
502  std::unique_ptr< QgsRandomColorRamp > newRamp( new QgsRandomColorRamp() );
503  setColorRamp( newRamp.get() );
504  }
505 }
506 
508 {
509  QgsColorRamp *backgroundColorRamp = colorramp;
510  if ( !colorramp )
511  {
512  backgroundColorRamp = mColorRamp;
513  }
514 
515  QSize currentIconSize;
516  //icon size is button size with a small margin
517  if ( menu() )
518  {
519  if ( !mIconSize.isValid() )
520  {
521  //calculate size of push button part of widget (ie, without the menu drop-down button part)
522  QStyleOptionToolButton opt;
523  initStyleOption( &opt );
524  QRect buttonSize = QApplication::style()->subControlRect( QStyle::CC_ToolButton, &opt, QStyle::SC_ToolButton,
525  this );
526  //make sure height of icon looks good under different platforms
527 #ifdef Q_OS_WIN
528  mIconSize = QSize( buttonSize.width() - 10, height() - 6 );
529 #else
530  mIconSize = QSize( buttonSize.width() - 10, height() - 12 );
531 #endif
532  }
533  currentIconSize = mIconSize;
534  }
535  else
536  {
537  //no menu
538 #ifdef Q_OS_WIN
539  currentIconSize = QSize( width() - 10, height() - 6 );
540 #else
541  currentIconSize = QSize( width() - 10, height() - 12 );
542 #endif
543  }
544 
545  if ( !currentIconSize.isValid() || currentIconSize.width() <= 0 || currentIconSize.height() <= 0 )
546  {
547  return;
548  }
549 
550  QPixmap pm;
551  if ( isRandomColorRamp() )
552  {
553  //create a "random colors" label
554  pm = QPixmap( currentIconSize );
555  pm.fill( Qt::transparent );
556 
557  QPainter painter;
558  QPen pen = ( palette().buttonText().color() );
559 
560  painter.begin( &pm );
561  painter.setPen( pen );
562  painter.drawText( QRect( 0, 0, currentIconSize.width(), currentIconSize.height() ), Qt::AlignCenter, QStringLiteral( "Random colors" ) );
563  painter.end();
564  }
565  else
566  {
567  //create an icon pixmap
568  if ( backgroundColorRamp )
569  {
570  pm = QgsSymbolLayerUtils::colorRampPreviewPixmap( backgroundColorRamp, currentIconSize );
571  }
572  }
573 
574  setIconSize( currentIconSize );
575  setIcon( pm );
576 }
577 
579 {
580  return mColorRamp ? mColorRamp->clone() : nullptr;
581 }
582 
584 {
585  mColorRampDialogTitle = title;
586 }
587 
589 {
590  return mColorRampDialogTitle;
591 }
592 
593 void QgsColorRampButton::setShowMenu( const bool showMenu )
594 {
595  setMenu( showMenu ? mMenu : nullptr );
596  setPopupMode( showMenu ? QToolButton::MenuButtonPopup : QToolButton::DelayedPopup );
597  //force recalculation of icon size
598  mIconSize = QSize();
599  setButtonBackground( mColorRamp );
600 }
601 
603 {
604  delete mDefaultColorRamp;
605  mDefaultColorRamp = colorramp->clone();
606 }
607 
609 {
610  return dynamic_cast<QgsRandomColorRamp *>( mColorRamp );
611 }
612 
613 void QgsColorRampButton::setShowNull( bool showNull )
614 {
615  mShowNull = showNull;
616 }
617 
619 {
620  return mShowNull;
621 }
622 
624 {
625  return !mColorRamp;
626 }
627 
628 void QgsColorRampButton::rampWidgetUpdated()
629 {
630  QgsLimitedRandomColorRampWidget *limitedRampWidget = qobject_cast< QgsLimitedRandomColorRampWidget * >( sender() );
631  if ( limitedRampWidget )
632  {
633  setColorRamp( limitedRampWidget->ramp().clone() );
634  emit colorRampChanged();
635  return;
636  }
637  QgsColorBrewerColorRampWidget *colorBrewerRampWidget = qobject_cast< QgsColorBrewerColorRampWidget * >( sender() );
638  if ( colorBrewerRampWidget )
639  {
640  setColorRamp( colorBrewerRampWidget->ramp().clone() );
641  emit colorRampChanged();
642  return;
643  }
644  QgsPresetColorRampWidget *presetRampWidget = qobject_cast< QgsPresetColorRampWidget * >( sender() );
645  if ( presetRampWidget )
646  {
647  setColorRamp( presetRampWidget->ramp().clone() );
648  emit colorRampChanged();
649  return;
650  }
651 }
QgsColorRampButton::~QgsColorRampButton
~QgsColorRampButton() override
Definition: qgscolorrampbutton.cpp:60
QgsColorRampButton::setDefaultColorRamp
void setDefaultColorRamp(QgsColorRamp *colorramp)
Sets the default color ramp for the button, which is shown in the button's drop-down menu for the "de...
Definition: qgscolorrampbutton.cpp:602
QgsColorRamp
Abstract base class for color ramps.
Definition: qgscolorramp.h:31
QgsPresetSchemeColorRamp::clone
QgsPresetSchemeColorRamp * clone() const override
Creates a clone of the color ramp.
Definition: qgscolorramp.cpp:892
QgsColorRampButton::setShowMenu
void setShowMenu(bool showMenu)
Sets whether the drop-down menu should be shown for the button.
Definition: qgscolorrampbutton.cpp:593
QgsPresetColorRampDialog
Definition: qgspresetcolorrampdialog.h:86
QgsStyle::ColorrampEntity
@ ColorrampEntity
Color ramps.
Definition: qgsstyle.h:181
QgsGradientColorRamp
Gradient color ramp, which smoothly interpolates between two colors and also supports optional extra ...
Definition: qgscolorramp.h:139
QgsColorBrewerColorRamp::clone
QgsColorBrewerColorRamp * clone() const override
Creates a clone of the color ramp.
Definition: qgscolorramp.cpp:570
QgsPresetColorRampWidget::ramp
QgsPresetSchemeColorRamp ramp
Definition: qgspresetcolorrampdialog.h:37
QgsPanelWidget::findParentPanel
static QgsPanelWidget * findParentPanel(QWidget *widget)
Traces through the parents of a widget to find if it is contained within a QgsPanelWidget widget.
Definition: qgspanelwidget.cpp:49
QgsStyle::symbolsOfFavorite
QStringList symbolsOfFavorite(StyleEntity type) const
Returns the symbol names which are flagged as favorite.
Definition: qgsstyle.cpp:887
QgsColorRampButton::colorRamp
QgsColorRamp * colorRamp() const
Returns a copy of the current color ramp.
Definition: qgscolorrampbutton.cpp:578
QgsColorRampButton::isRandomColorRamp
bool isRandomColorRamp() const
Returns true if the current color is null.
Definition: qgscolorrampbutton.cpp:608
QgsColorRampButton::setColorRampName
void setColorRampName(const QString &name)
Sets the name of the current color ramp when it's available in the style manager.
Definition: qgscolorrampbutton.h:205
QgsPresetSchemeColorRamp
A scheme based color ramp consisting of a list of predefined colors.
Definition: qgscolorramp.h:471
qgssymbollayerutils.h
QgsGradientColorRampDialog
Definition: qgsgradientcolorrampdialog.h:38
QgsLimitedRandomColorRampWidget::ramp
QgsLimitedRandomColorRamp ramp
Definition: qgslimitedrandomcolorrampdialog.h:37
QgsPanelWidget::openPanel
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
Definition: qgspanelwidget.cpp:79
QgsColorRampButton::sizeHint
QSize sizeHint() const override
Definition: qgscolorrampbutton.cpp:66
QgsColorRampButton::colorRampDialogTitle
QString colorRampDialogTitle
Definition: qgscolorrampbutton.h:40
QgsDebugMsg
#define QgsDebugMsg(str)
Definition: qgslogger.h:38
QgsStyle::saveColorRamp
bool saveColorRamp(const QString &name, QgsColorRamp *ramp, bool favorite, const QStringList &tags)
Adds the colorramp to the DB.
Definition: qgsstyle.cpp:302
QgsPresetColorRampWidget
Definition: qgspresetcolorrampdialog.h:34
QgsColorRampButton::setButtonBackground
void setButtonBackground(QgsColorRamp *colorramp=nullptr)
Sets the background pixmap for the button based upon current color ramp.
Definition: qgscolorrampbutton.cpp:507
QgsLimitedRandomColorRamp
Constrained random color ramp, which returns random colors based on preset parameters.
Definition: qgscolorramp.h:283
QgsPanelWidget::dockMode
bool dockMode()
Returns the dock mode state.
Definition: qgspanelwidget.h:83
QgsColorRampButton::setRandomColorRamp
void setRandomColorRamp()
Sets the current color ramp for the button to random colors.
Definition: qgscolorrampbutton.cpp:498
qgsstylesavedialog.h
QgsColorBrewerColorRamp
Color ramp utilising "Color Brewer" preset color schemes.
Definition: qgscolorramp.h:535
QgsSymbolLayerUtils::colorRampPreviewPixmap
static QPixmap colorRampPreviewPixmap(QgsColorRamp *ramp, QSize size, int padding=0)
Returns a pixmap preview for a color ramp.
Definition: qgssymbollayerutils.cpp:874
QgsStyle::addColorRamp
bool addColorRamp(const QString &name, QgsColorRamp *colorRamp, bool update=false)
Adds a color ramp to the style.
Definition: qgsstyle.cpp:236
QgsGuiUtils::iconSize
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
Definition: qgsguiutils.cpp:264
QgsColorBrewerColorRampWidget
Definition: qgscolorbrewercolorrampdialog.h:35
QgsStyle::defaultStyle
static QgsStyle * defaultStyle()
Returns default application-wide style.
Definition: qgsstyle.cpp:74
QgsRandomColorRamp
Totally random color ramp. Returns colors generated at random, but constrained to some hardcoded satu...
Definition: qgscolorramp.h:427
qgsapplication.h
qgscolorbrewercolorrampdialog.h
QgsPresetColorRampWidget::changed
void changed()
Emitted when the dialog settings change.
QgsColorRampButton::event
bool event(QEvent *e) override
Definition: qgscolorrampbutton.cpp:188
QgsColorBrewerColorRampDialog
Definition: qgscolorbrewercolorrampdialog.h:86
QgsColorRampButton::setShowNull
void setShowNull(bool showNull)
Sets whether a set to null (clear) option is shown in the button's drop-down menu.
Definition: qgscolorrampbutton.cpp:613
QgsColorRampButton::setToDefaultColorRamp
void setToDefaultColorRamp()
Sets color ramp to the button's default color ramp, if set.
Definition: qgscolorrampbutton.cpp:173
QgsColorBrewerColorRampWidget::changed
void changed()
Emitted when the dialog settings change.
QgsLimitedRandomColorRamp::clone
QgsLimitedRandomColorRamp * clone() const override
Creates a clone of the color ramp.
Definition: qgscolorramp.cpp:357
QgsPanelWidget
Base class for any widget that can be shown as a inline panel.
Definition: qgspanelwidget.h:29
QgsColorRampButton::setToNull
void setToNull()
Sets color ramp to null.
Definition: qgscolorrampbutton.cpp:183
QgsCptCityColorRampDialog
Definition: qgscptcitycolorrampdialog.h:42
QgsColorRampButton::QgsColorRampButton
QgsColorRampButton(QWidget *parent=nullptr, const QString &dialogTitle=QString())
Construct a new color ramp button.
Definition: qgscolorrampbutton.cpp:39
qgscolorramp.h
QgsColorRampButton::isNull
bool isNull() const
Returns true if the current color is null.
Definition: qgscolorrampbutton.cpp:623
QgsColorRampButton::changeEvent
void changeEvent(QEvent *e) override
Definition: qgscolorrampbutton.cpp:433
QgsColorRampButton::showNull
bool showNull() const
Returns whether the set to null (clear) option is shown in the button's drop-down menu.
Definition: qgscolorrampbutton.cpp:618
QgsColorBrewerColorRampWidget::ramp
QgsColorBrewerColorRamp ramp
Definition: qgscolorbrewercolorrampdialog.h:38
Qgis::UI_SCALE_FACTOR
static const double UI_SCALE_FACTOR
UI scaling factor.
Definition: qgis.h:195
QgsLimitedRandomColorRampDialog
Definition: qgslimitedrandomcolorrampdialog.h:98
QgsColorRampButton::setColorRampFromName
void setColorRampFromName(const QString &name=QString())
Sets the current color ramp for the button using a saved color ramp name.
Definition: qgscolorrampbutton.cpp:486
QgsPanelWidget::setPanelTitle
void setPanelTitle(const QString &panelTitle)
Set the title of the panel when shown in the interface.
Definition: qgspanelwidget.h:44
QgsColorRampButton::colorRampName
QString colorRampName() const
Returns the name of the current color ramp when it's available in the style manager.
Definition: qgscolorrampbutton.h:211
QgsColorRamp::clone
virtual QgsColorRamp * clone() const =0
Creates a clone of the color ramp.
qgsstyle.h
QgsStyle::symbolNames
QStringList symbolNames() const
Returns a list of names of symbols.
Definition: qgsstyle.cpp:230
QgsColorRampButton::mousePressEvent
void mousePressEvent(QMouseEvent *e) override
Reimplemented to detect right mouse button clicks on the color ramp button.
Definition: qgscolorrampbutton.cpp:200
QgsStyle::removeColorRamp
bool removeColorRamp(const QString &name)
Removes color ramp from style (and delete it)
Definition: qgsstyle.cpp:335
QgsColorRampButton::resizeEvent
void resizeEvent(QResizeEvent *event) override
Definition: qgscolorrampbutton.cpp:460
qgslimitedrandomcolorrampdialog.h
qgsgradientcolorrampdialog.h
QgsColorRamp::invert
virtual void invert()
Inverts the ordering of the color ramp.
Definition: qgscolorramp.h:82
QgsStyle::colorRampNames
QStringList colorRampNames() const
Returns a list of names of color ramps.
Definition: qgsstyle.cpp:372
QgsLimitedRandomColorRampWidget
Definition: qgslimitedrandomcolorrampdialog.h:34
QgsCptCityColorRamp
Definition: qgscolorramp.h:626
qgscolorrampbutton.h
qgslogger.h
qgscptcitycolorrampdialog.h
QgsGuiUtils::scaleIconSize
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
Definition: qgsguiutils.cpp:257
qgspresetcolorrampdialog.h
QgsColorRampButton::showMenu
bool showMenu
Definition: qgscolorrampbutton.h:42
QgsStyle::colorRamp
QgsColorRamp * colorRamp(const QString &name) const
Returns a new copy of the specified color ramp.
Definition: qgsstyle.cpp:356
QgsLimitedRandomColorRampWidget::changed
void changed()
Emitted when the dialog settings change.
QgsColorRampButton::setColorRampDialogTitle
void setColorRampDialogTitle(const QString &title)
Set the title for the color ramp dialog window.
Definition: qgscolorrampbutton.cpp:583
QgsColorRampButton::setColorRamp
void setColorRamp(QgsColorRamp *colorramp)
Sets the current color ramp for the button.
Definition: qgscolorrampbutton.cpp:468
QgsSymbolLayerUtils::colorRampPreviewIcon
static QIcon colorRampPreviewIcon(QgsColorRamp *ramp, QSize size, int padding=0)
Returns an icon preview for a color ramp.
Definition: qgssymbollayerutils.cpp:869
QgsColorRampButton::colorRampChanged
void colorRampChanged()
Emitted whenever a new color ramp is set for the button.
QgsColorRampButton::showEvent
void showEvent(QShowEvent *e) override
Definition: qgscolorrampbutton.cpp:454