QGIS API Documentation  2.14.0-Essen
qgsblendmodecombobox.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsblendmodecombobox.cpp
3  ------------------------
4  begin : March 21, 2013
5  copyright : (C) 2013 by Nyall Dawson
6  email : [email protected]
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgis.h"
19 #include "qgslogger.h"
20 #include "qgsblendmodecombobox.h"
21 
22 #include <QAbstractItemView>
23 #include <QLocale>
24 #include <QSettings>
25 #include <QLineEdit>
26 
28 {
29  updateModes();
30 }
31 
33 {
34 }
35 
36 /* Returns a QStringList of the translated blend modes
37 * "-" is used to indicate the position of a separator in the list
38 * This list is designed to emulate GIMP's layer modes, where
39 * blending modes are grouped by their effect (lightening, darkening, etc)
40 */
41 QStringList QgsBlendModeComboBox::blendModesList() const
42 {
43  return QStringList() << tr( "Normal" )
44  << "-"
45  << tr( "Lighten" )
46  << tr( "Screen" )
47  << tr( "Dodge" )
48  << tr( "Addition" )
49  << "-"
50  << tr( "Darken" )
51  << tr( "Multiply" )
52  << tr( "Burn" )
53  << "-"
54  << tr( "Overlay" )
55  << tr( "Soft light" )
56  << tr( "Hard light" )
57  << "-"
58  << tr( "Difference" )
59  << tr( "Subtract" );
60 }
61 
62 /* Populates the blend mode combo box, and sets up mapping for
63 * blend modes to combo box indexes
64 */
66 {
67  blockSignals( true );
68  clear();
69 
70  QStringList myBlendModesList = blendModesList();
71  QStringList::const_iterator blendModeIt = myBlendModesList.constBegin();
72 
73  mBlendModeToListIndex.resize( myBlendModesList.count() );
74  mListIndexToBlendMode.resize( myBlendModesList.count() );
75 
76  // Loop through blend modes
77  int index = 0;
78  int blendModeIndex = 0;
79  for ( ; blendModeIt != myBlendModesList.constEnd(); ++blendModeIt )
80  {
81  if ( *blendModeIt == "-" )
82  {
83  // Add separator
84  insertSeparator( index );
85  }
86  else
87  {
88  // Not a separator, so store indexes for translation
89  // between blend modes and combo box item index
90  addItem( *blendModeIt );
91  mListIndexToBlendMode[ index ] = blendModeIndex;
92  mBlendModeToListIndex[ blendModeIndex ] = index;
93  blendModeIndex++;
94  }
95  index++;
96  }
97 
98  blockSignals( false );
99 }
100 
102 QPainter::CompositionMode QgsBlendModeComboBox::blendMode()
103 {
104  return QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode ) mListIndexToBlendMode[ currentIndex()] );
105 }
106 
108 void QgsBlendModeComboBox::setBlendMode( QPainter::CompositionMode blendMode )
109 {
110  setCurrentIndex( mBlendModeToListIndex[( int ) QgsMapRenderer::getBlendModeEnum( blendMode )] );
111 }
112 
static unsigned index
void clear()
static QgsMapRenderer::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
QString tr(const char *sourceText, const char *disambiguation, int n)
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer...
void addItem(const QString &text, const QVariant &userData)
int count(const T &value) const
void insertSeparator(int index)
static QPainter::CompositionMode getCompositionMode(BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
void setBlendMode(QPainter::CompositionMode blendMode)
Function to set the selected blend mode from QPainter::CompositionMode.
bool blockSignals(bool block)
QPainter::CompositionMode blendMode()
Function to read the selected blend mode as QPainter::CompositionMode.
QgsBlendModeComboBox(QWidget *parent=nullptr)
int currentIndex() const
const_iterator constEnd() const
const_iterator constBegin() const