QGIS API Documentation  2.99.0-Master (c558d51)
qgsscalerangewidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsscalerangewidget.cpp
3  --------------------------------------
4  Date : 25.04.2014
5  Copyright : (C) 2014 Denis Rouzaud
6  Email : [email protected]
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 "qgsscalerangewidget.h"
17 #include "qgsapplication.h"
18 #include "qgsproject.h"
19 #include "qgsscalewidget.h"
20 
22  : QWidget( parent )
23  , mCanvas( nullptr )
24 {
25  mLayout = new QGridLayout( this );
26  mLayout->setContentsMargins( 0, 0, 0, 0 );
27 
28  QLabel* minLbl = new QLabel( tr( "Minimum (exclusive)" ), this );
29  minLbl->setWordWrap( true );
30  minLbl->setAlignment( Qt::AlignTop );
31  minLbl->setToolTip( tr( "Minimum scale, i.e. maximum scale denominator. "
32  "This limit is exclusive, that means the layer will not be displayed on this scale." ) );
33  QLabel* maxLbl = new QLabel( tr( "Maximum (inclusive)" ), this );
34  maxLbl->setWordWrap( true );
35  maxLbl->setAlignment( Qt::AlignTop );
36  maxLbl->setToolTip( tr( "Maximum scale, i.e. minimum scale denominator. "
37  "This limit is inclusive, that means the layer will be displayed on this scale." ) );
38 
39  mMinimumScaleIconLabel = new QLabel( this );
40  mMinimumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( QStringLiteral( "/mActionZoomOut.svg" ) ) );
41  mMaximumScaleIconLabel = new QLabel( this );
42  mMaximumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( QStringLiteral( "/mActionZoomIn.svg" ) ) );
43 
44  mMinimumScaleWidget = new QgsScaleWidget( this );
45  mMaximumScaleWidget = new QgsScaleWidget( this );
46  connect( mMinimumScaleWidget, SIGNAL( scaleChanged( double ) ), mMaximumScaleWidget, SLOT( setMinScale( double ) ) );
47  mMinimumScaleWidget->setShowCurrentScaleButton( true );
48  mMaximumScaleWidget->setShowCurrentScaleButton( true );
50  // add start, add comprehension of scales by settings fake ordered values
51  mMinimumScaleWidget->setScale( 1.0 / 100000 );
52  mMaximumScaleWidget->setScale( 1.0 / 1000 );
53 
54  mLayout->addWidget( minLbl, 0, 0, 1, 2 );
55  mLayout->addWidget( mMinimumScaleIconLabel, 1, 0 );
56  mLayout->addWidget( mMinimumScaleWidget, 1, 1 );
57  mLayout->addWidget( maxLbl, 0, 2, 1, 2 );
58  mLayout->addWidget( mMaximumScaleIconLabel, 1, 2 );
59  mLayout->addWidget( mMaximumScaleWidget, 1, 3 );
60 
61  mLayout->setColumnStretch( 0, 0 );
62  mLayout->setColumnStretch( 1, 3 );
63  mLayout->setColumnStretch( 2, 0 );
64  mLayout->setColumnStretch( 3, 3 );
65 
66  connect( mMinimumScaleWidget, SIGNAL( scaleChanged( double ) ), this, SLOT( emitRangeChanged() ) );
67  connect( mMaximumScaleWidget, SIGNAL( scaleChanged( double ) ), this, SLOT( emitRangeChanged() ) );
68 }
69 
71 {
72 }
73 
75 {
76  bool projectScales = QgsProject::instance()->readBoolEntry( QStringLiteral( "Scales" ), QStringLiteral( "/useProjectScales" ) );
77  if ( projectScales )
78  {
79  QStringList scalesList = QgsProject::instance()->readListEntry( QStringLiteral( "Scales" ), QStringLiteral( "/ScalesList" ) );
80  mMinimumScaleWidget->updateScales( scalesList );
81  mMaximumScaleWidget->updateScales( scalesList );
82  }
83 }
84 
86 {
87  mMinimumScaleWidget->setMapCanvas( mapCanvas );
88  mMaximumScaleWidget->setMapCanvas( mapCanvas );
89 }
90 
92 {
93  if ( qIsInf( scale ) )
94  scale = 0;
95  mMinimumScaleWidget->setScale( scale );
96 }
97 
99 {
100  return mMinimumScaleWidget->scale();
101 }
102 
104 {
105  if ( qIsInf( scale ) )
106  scale = 0;
107  mMaximumScaleWidget->setScale( scale );
108 }
109 
111 {
112  return mMaximumScaleWidget->scale();
113 }
114 
116 {
117  double scale = maximumScale();
118  if ( scale == 0 )
119  return 0;
120  else
121  return qRound( 1.0 / scale );
122 }
123 
125 {
126  double scale = minimumScale();
127  if ( scale == 0 )
128  return 0;
129  else
130  return qRound( 1.0 / scale );
131 }
132 
134 {
135  setMaximumScale( max );
136  setMinimumScale( min );
137 }
138 
139 void QgsScaleRangeWidget::emitRangeChanged()
140 {
142 }
143 
double minimumScale()
return the minimum scale
QgsScaleRangeWidget(QWidget *parent=nullptr)
A combobox which lets the user select map scale from predefined list and highlights nearest to curren...
void setMaximumScale(double scale)
Set the maximum scale.
QStringList readListEntry(const QString &scope, const QString &key, const QStringList &def=QStringList(), bool *ok=nullptr) const
Key value accessors.
void setScale(double scale)
Function to set the selected scale from double.
double minimumScaleDenom()
Returns the minimum scale denominator ( = 1 / maximum scale ) In case of maximum scale = 0 it will al...
static QPixmap getThemePixmap(const QString &theName)
Helper to get a theme icon as a pixmap.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:106
void reloadProjectScales()
call to reload the project scales and apply them to the 2 scales combo boxes
void setShowCurrentScaleButton(bool showCurrentScaleButton)
shows a button to set the scale to the current scale of the map canvas next to the combobox ...
double maximumScaleDenom()
Returns the maximum scale denominator ( = 1 / minimum scale ) In case of minimum scale = 0 it will al...
void updateScales(const QStringList &scales=QStringList())
double maximumScale()
return the maximum scale
void setMinimumScale(double scale)
Set the minimum scale.
double ANALYSIS_EXPORT min(double x, double y)
Returns the minimum of two doubles or the first argument if both are equal.
Definition: MathUtils.cc:452
double ANALYSIS_EXPORT max(double x, double y)
Returns the maximum of two doubles or the first argument if both are equal.
Definition: MathUtils.cc:437
void setScaleRange(double min, double max)
static QgsProject * instance()
Returns the QgsProject singleton instance.
Definition: qgsproject.cpp:348
void setMapCanvas(QgsMapCanvas *canvas)
set the map canvas associated to the current button
bool readBoolEntry(const QString &scope, const QString &key, bool def=false, bool *ok=nullptr) const
void setMapCanvas(QgsMapCanvas *mapCanvas)
set the map canvas which will be used for the current scale buttons
void rangeChanged(double min, double max)
Emitted when the scale range set in the widget is changed.