QGIS API Documentation  2.10.1-Pisa
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgscolorrampcombobox.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgscolorrampcombobox.cpp
3  ---------------------
4  begin : October 2010
5  copyright : (C) 2010 by Martin Dobias
6  email : wonder dot sk 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 #include "qgscolorrampcombobox.h"
16 
17 #include "qgssymbollayerv2utils.h"
18 #include "qgsvectorcolorrampv2.h"
19 #include "qgsstylev2.h"
21 
23 
25  QComboBox( parent ), mStyle( NULL ), mSourceColorRamp( NULL ), mShowGradientOnly( false )
26 {
27 }
28 
30 {
31  delete mSourceColorRamp;
32 }
33 
35 {
36  if ( count() != 0 )
37  return; // already populated!
38 
39  mStyle = style;
40 
42 
43  QStringList rampNames = mStyle->colorRampNames();
44  for ( QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it )
45  {
46  QgsVectorColorRampV2* ramp = style->colorRamp( *it );
47 
48  if ( !mShowGradientOnly || ramp->type() == "gradient" )
49  {
51 
52  addItem( icon, *it );
53  }
54  delete ramp;
55  }
56 
57  if ( !mShowGradientOnly )
58  addItem( tr( "Random colors" ) );
59  addItem( tr( "New color ramp..." ) );
60  connect( this, SIGNAL( activated( int ) ), SLOT( colorRampChanged( int ) ) );
61 }
62 
64 {
65  QString rampName = currentText();
66 
67  if ( rampName == tr( "Random colors" ) )
68  {
69  return new QgsRandomColorsV2();
70  }
71  else if ( rampName == "[source]" && mSourceColorRamp )
72  return mSourceColorRamp->clone();
73  else
74  return mStyle->colorRamp( rampName );
75 }
76 
78 {
79  int index = currentIndex();
80  return index == count() - 1; //create new ramp is last item in combobox
81 }
82 
84 {
85  mSourceColorRamp = sourceRamp->clone();
86 
88  if ( itemText( 0 ) == "[source]" )
89  setItemIcon( 0, icon );
90  else
91  insertItem( 0, icon, "[source]" );
92  setCurrentIndex( 0 );
93 }
94 
96 {
97  if ( index != count() - 1 )
98  return;
99 
100  // last item: "new color ramp..."
101  QString rampName;
102  if ( !mShowGradientOnly )
103  {
105  }
106  else
107  {
108  rampName = QgsStyleV2ManagerDialog::addColorRampStatic( this, mStyle, "Gradient" );
109  }
110  if ( rampName.isEmpty() )
111  return;
112 
113  // put newly added ramp into the combo
114  QgsVectorColorRampV2* ramp = mStyle->colorRamp( rampName );
116 
117  blockSignals( true ); // avoid calling this method again!
118  insertItem( index, icon, rampName );
119  blockSignals( false );
120 
121  delete ramp;
122 
123  // ... and set it as active
124  setCurrentIndex( index );
125 
126  // make sure the color ramp is stored
127  mStyle->save();
128 }
QgsVectorColorRampV2 * currentColorRamp()
return new instance of the current color ramp or NULL if there is no active color ramp ...
static unsigned index
static QIcon colorRampPreviewIcon(QgsVectorColorRampV2 *ramp, QSize size)
virtual QString type() const =0
QStyle * style() const
void setIconSize(const QSize &size)
QString itemText(int index) const
const QPixmap * icon() const
QStringList colorRampNames()
return a list of names of color ramps
Definition: qgsstylev2.cpp:276
QString tr(const char *sourceText, const char *disambiguation, int n)
void insertItem(int index, const QString &text, const QVariant &userData)
bool save(QString filename=QString())
save style into a file (will use current filename if empty string is passed)
Definition: qgsstylev2.cpp:360
void addItem(const QString &text, const QVariant &userData)
int count() const
virtual QgsVectorColorRampV2 * clone() const =0
bool isEmpty() const
void activated(int index)
void colorRampChanged(int index)
iterator end()
bool blockSignals(bool block)
QgsColorRampComboBox(QWidget *parent=0)
void setSourceColorRamp(QgsVectorColorRampV2 *sourceRamp)
add/select color ramp which was used previously by the renderer
bool createNewColorRampSelected() const
Returns true if the current selection in the combo box is the option for creating a new color ramp...
QgsVectorColorRampV2 * mSourceColorRamp
void setItemIcon(int index, const QIcon &icon)
int currentIndex() const
static QString addColorRampStatic(QWidget *parent, QgsStyleV2 *style, QString RampType=QString())
open add color ramp dialog, return color ramp's name if the ramp has been added
QgsVectorColorRampV2 * colorRamp(QString name)
return a NEW copy of color ramp
Definition: qgsstylev2.cpp:260
QString currentText() const
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
iterator begin()
void populate(QgsStyleV2 *style)
initialize the combo box with color ramps from the style