QGIS API Documentation  2.11.0-Master
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 : denis.rouzaud@gmail.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 "qgsscalerangewidget.h"
17 #include "qgsapplication.h"
18 #include "qgsproject.h"
19 
20 
22  : QWidget( parent )
23  , mCanvas( 0 )
24 {
25  mLayout = new QGridLayout( this );
26  mLayout->setContentsMargins( 0, 0, 0, 0 );
27 
28  QLabel* minLbl = new QLabel( tr( "Minimum\n(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\n(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( "/mActionZoomOut.svg" ) );
41  mMaximumScaleIconLabel = new QLabel( this );
42  mMaximumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( "/mActionZoomIn.svg" ) );
43 
44  mMinimumScaleWidget = new QgsScaleWidget( this );
45  mMaximumScaleWidget = new QgsScaleWidget( this );
46  mMinimumScaleWidget->setShowCurrentScaleButton( true );
47  mMaximumScaleWidget->setShowCurrentScaleButton( true );
49  // add start, add comprehension of scales by settings fake ordered values
50  mMinimumScaleWidget->setScale( 1.0 / 100000 );
51  mMaximumScaleWidget->setScale( 1.0 / 1000 );
52 
53  mLayout->addWidget( minLbl, 0, 0, 2, 1 );
54  mLayout->addWidget( mMinimumScaleIconLabel, 0, 1 );
55  mLayout->addWidget( mMinimumScaleWidget, 0, 2 );
56  mLayout->addWidget( maxLbl, 0, 3, 2, 1 );
57  mLayout->addWidget( mMaximumScaleIconLabel, 0, 4 );
58  mLayout->addWidget( mMaximumScaleWidget, 0, 5 );
59 
60  mLayout->setColumnStretch( 0, 0 );
61  mLayout->setColumnStretch( 1, 0 );
62  mLayout->setColumnStretch( 2, 3 );
63  mLayout->setColumnStretch( 3, 0 );
64  mLayout->setColumnStretch( 4, 0 );
65  mLayout->setColumnStretch( 5, 3 );
66 }
67 
69 {
70 }
71 
73 {
74  bool projectScales = QgsProject::instance()->readBoolEntry( "Scales", "/useProjectScales" );
75  if ( projectScales )
76  {
77  QStringList scalesList = QgsProject::instance()->readListEntry( "Scales", "/ScalesList" );
78  mMinimumScaleWidget->updateScales( scalesList );
79  mMaximumScaleWidget->updateScales( scalesList );
80  }
81 }
82 
84 {
85  mMinimumScaleWidget->setMapCanvas( mapCanvas );
86  mMaximumScaleWidget->setMapCanvas( mapCanvas );
87 }
88 
90 {
91  mMinimumScaleWidget->setScale( scale );
92 }
93 
95 {
96  return mMinimumScaleWidget->scale();
97 }
98 
100 {
101  mMaximumScaleWidget->setScale( scale );
102 }
103 
105 {
106  return mMaximumScaleWidget->scale();
107 }
108 
110 {
111  return qRound( 1.0 / maximumScale() );
112 }
113 
115 {
116  return qRound( 1.0 / minimumScale() );
117 }
118 
120 {
121  setMaximumScale( max );
122  setMinimumScale( min );
123 }
124 
double minimumScale()
return the minimum scale
void setContentsMargins(int left, int top, int right, int bottom)
void addWidget(QWidget *widget, int row, int column, QFlags< Qt::AlignmentFlag > alignment)
double scale()
Function to read the selected scale as double.
A combobox which lets the user select map scale from predefined list and highlights nearest to curren...
void setMaximumScale(double scale)
void setPixmap(const QPixmap &)
void setAlignment(QFlags< Qt::AlignmentFlag >)
void setScale(double scale)
Function to set the selected scale from double.
bool readBoolEntry(const QString &scope, const QString &key, bool def=false, bool *ok=0) const
QString tr(const char *sourceText, const char *disambiguation, int n)
double minimumScaleDenom()
return the minimum scale denominator ( = 1 / maximum scale )
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:105
double ANALYSIS_EXPORT max(double x, double y)
Returns the maximum of two doubles or the first argument if both are equal.
QStringList readListEntry(const QString &scope, const QString &key, QStringList def=QStringList(), bool *ok=0) const
Key value accessors.
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()
return the maximum scale denominator ( = 1 / minimum scale )
void updateScales(const QStringList &scales=QStringList())
double maximumScale()
return the maximum scale
void setMinimumScale(double scale)
void setScaleRange(double min, double max)
QgsScaleRangeWidget(QWidget *parent=0)
void setColumnStretch(int column, int stretch)
static QgsProject * instance()
access to canonical QgsProject instance
Definition: qgsproject.cpp:351
void setMapCanvas(QgsMapCanvas *canvas)
set the map canvas associated to the current button
void setToolTip(const QString &)
double ANALYSIS_EXPORT min(double x, double y)
Returns the minimum of two doubles or the first argument if both are equal.
void setMapCanvas(QgsMapCanvas *mapCanvas)
set the map canvas which will be used for the current scale buttons
void setWordWrap(bool on)