1 /***************************************************************************
2     qgslimitedrandomcolorrampdialog.cpp
3     ---------------------
4     begin                : November 2009
5     copyright            : (C) 2009 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 
16 #include "qgslimitedrandomcolorrampdialog.h"
17 
18 #include "qgssymbollayerutils.h"
19 #include "qgscolorramp.h"
20 #include "qgshelp.h"
21 
22 #include <QColorDialog>
23 #include <QDialogButtonBox>
24 
25 
QgsLimitedRandomColorRampWidget(const QgsLimitedRandomColorRamp & ramp,QWidget * parent)26 QgsLimitedRandomColorRampWidget::QgsLimitedRandomColorRampWidget( const QgsLimitedRandomColorRamp &ramp, QWidget *parent )
27   : QgsPanelWidget( parent )
28   , mRamp( ramp )
29 {
30   setupUi( this );
31   spinCount->setClearValue( 10 );
32   spinHue1->setClearValue( 0 );
33   spinHue2->setClearValue( 359 );
34   spinSat1->setClearValue( 100 );
35   spinSat2->setClearValue( 240 );
36   spinVal1->setClearValue( 200 );
37   spinVal2->setClearValue( 240 );
38 
39   updateUi();
40 
41   connect( spinCount, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setCount );
42   connect( spinHue1, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setHue1 );
43   connect( spinHue2, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setHue2 );
44   connect( spinSat1, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setSat1 );
45   connect( spinSat2, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setSat2 );
46   connect( spinVal1, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setVal1 );
47   connect( spinVal2, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLimitedRandomColorRampWidget::setVal2 );
48 }
49 
setRamp(const QgsLimitedRandomColorRamp & ramp)50 void QgsLimitedRandomColorRampWidget::setRamp( const QgsLimitedRandomColorRamp &ramp )
51 {
52   mRamp = ramp;
53   updateUi();
54   emit changed();
55 }
56 
updatePreview()57 void QgsLimitedRandomColorRampWidget::updatePreview()
58 {
59   mRamp.updateColors();
60 
61   const QSize size( 300, 40 );
62   lblPreview->setPixmap( QgsSymbolLayerUtils::colorRampPreviewPixmap( &mRamp, size ) );
63 }
64 
updateUi()65 void QgsLimitedRandomColorRampWidget::updateUi()
66 {
67   spinCount->setValue( mRamp.count() );
68   spinHue1->setValue( mRamp.hueMin() );
69   spinHue2->setValue( mRamp.hueMax() );
70   spinSat1->setValue( mRamp.satMin() );
71   spinSat2->setValue( mRamp.satMax() );
72   spinVal1->setValue( mRamp.valMin() );
73   spinVal2->setValue( mRamp.valMax() );
74   updatePreview();
75 }
76 
setCount(int val)77 void QgsLimitedRandomColorRampWidget::setCount( int val )
78 {
79   mRamp.setCount( val );
80   updatePreview();
81   emit changed();
82 }
83 
setHue1(int val)84 void QgsLimitedRandomColorRampWidget::setHue1( int val )
85 {
86   mRamp.setHueMin( val );
87   updatePreview();
88   emit changed();
89 }
90 
setHue2(int val)91 void QgsLimitedRandomColorRampWidget::setHue2( int val )
92 {
93   mRamp.setHueMax( val );
94   updatePreview();
95   emit changed();
96 }
97 
setSat1(int val)98 void QgsLimitedRandomColorRampWidget::setSat1( int val )
99 {
100   mRamp.setSatMin( val );
101   updatePreview();
102   emit changed();
103 }
104 
setSat2(int val)105 void QgsLimitedRandomColorRampWidget::setSat2( int val )
106 {
107   mRamp.setSatMax( val );
108   updatePreview();
109   emit changed();
110 }
111 
setVal1(int val)112 void QgsLimitedRandomColorRampWidget::setVal1( int val )
113 {
114   mRamp.setValMin( val );
115   updatePreview();
116   emit changed();
117 }
118 
setVal2(int val)119 void QgsLimitedRandomColorRampWidget::setVal2( int val )
120 {
121   mRamp.setValMax( val );
122   updatePreview();
123   emit changed();
124 }
125 
QgsLimitedRandomColorRampDialog(const QgsLimitedRandomColorRamp & ramp,QWidget * parent)126 QgsLimitedRandomColorRampDialog::QgsLimitedRandomColorRampDialog( const QgsLimitedRandomColorRamp &ramp, QWidget *parent )
127   : QDialog( parent )
128 {
129   QVBoxLayout *vLayout = new QVBoxLayout();
130   mWidget = new QgsLimitedRandomColorRampWidget( ramp );
131 
132   connect( mWidget, &QgsPanelWidget::panelAccepted, this, &QDialog::reject );
133 
134   vLayout->addWidget( mWidget );
135   mButtonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok, Qt::Horizontal );
136   connect( mButtonBox, &QDialogButtonBox::accepted, this, &QDialog::accept );
137   connect( mButtonBox, &QDialogButtonBox::rejected, this, &QDialog::reject );
138   connect( mButtonBox, &QDialogButtonBox::helpRequested, this, &QgsLimitedRandomColorRampDialog::showHelp );
139   vLayout->addWidget( mButtonBox );
140   setLayout( vLayout );
141   setWindowTitle( tr( "Random Color Ramp" ) );
142   connect( mWidget, &QgsLimitedRandomColorRampWidget::changed, this, &QgsLimitedRandomColorRampDialog::changed );
143 }
144 
buttonBox() const145 QDialogButtonBox *QgsLimitedRandomColorRampDialog::buttonBox() const
146 {
147   return mButtonBox;
148 }
149 
showHelp()150 void QgsLimitedRandomColorRampDialog::showHelp()
151 {
152   QgsHelp::openHelp( QStringLiteral( "style_library/style_manager.html#setting-a-color-ramp" ) );
153 }
154