QGIS API Documentation  2.99.0-Master (b681b7b)
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  bool projectScales = QgsProject::instance()->readBoolEntry( QStringLiteral( "Scales" ), QStringLiteral( "/useProjectScales" ) );
73  if ( projectScales )
74  {
75  QStringList scalesList = QgsProject::instance()->readListEntry( QStringLiteral( "Scales" ), QStringLiteral( "/ScalesList" ) );
76  mMinimumScaleWidget->updateScales( scalesList );
77  mMaximumScaleWidget->updateScales( scalesList );
78  }
79 }
80 
82 {
83  mMinimumScaleWidget->setMapCanvas( mapCanvas );
84  mMaximumScaleWidget->setMapCanvas( mapCanvas );
85 }
86 
88 {
89  if ( qIsInf( scale ) )
90  scale = 0;
91  mMinimumScaleWidget->setScale( scale );
92 }
93 
95 {
96  return mMinimumScaleWidget->scale();
97 }
98 
100 {
101  if ( qIsInf( scale ) )
102  scale = 0;
103  mMaximumScaleWidget->setScale( scale );
104 }
105 
107 {
108  return mMaximumScaleWidget->scale();
109 }
110 
112 {
113  double scale = maximumScale();
114  if ( scale == 0 )
115  return 0;
116  else
117  return qRound( 1.0 / scale );
118 }
119 
121 {
122  double scale = minimumScale();
123  if ( scale == 0 )
124  return 0;
125  else
126  return qRound( 1.0 / scale );
127 }
128 
130 {
131  setMaximumScale( max );
132  setMinimumScale( min );
133 }
134 
135 void QgsScaleRangeWidget::emitRangeChanged()
136 {
138 }
139 
double minimumScale()
return the minimum scale
bool readBoolEntry(const QString &scope, const QString &key, bool def=false, bool *ok=nullptr) const
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.
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...
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:72
static QPixmap getThemePixmap(const QString &name)
Helper to get a theme icon as a pixmap.
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
QStringList readListEntry(const QString &scope, const QString &key, const QStringList &def=QStringList(), bool *ok=nullptr) const
Key value accessors.
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:355
void setMapCanvas(QgsMapCanvas *canvas)
set the map canvas associated to the current button
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.