create scale widget (scale combo box + button to set scale from map canvas)

This commit is contained in:
Denis Rouzaud 2015-01-09 07:34:30 +01:00
parent 8f70664472
commit 127c882e98
5 changed files with 202 additions and 0 deletions

View File

@ -100,6 +100,7 @@
%Include qgsrubberband.sip
%Include qgsscalecombobox.sip
%Include qgsscalerangewidget.sip
%Include qgsscalewidget.sip
%Include qgsscalevisibilitydialog.sip
%Include qgssearchquerybuilder.sip
%Include qgstextannotationitem.sip

View File

@ -0,0 +1,47 @@
/** A combobox which lets the user select map scale from predefined list
* and highlights nearest to current scale value
*/
class QgsScaleWidget : QWidget
{
%TypeHeaderCode
#include <qgsscalewidget.h>
%End
public:
QgsScaleWidget( QWidget* parent = 0 );
~QgsScaleWidget();
//! shows a button to set the scale to the current scale of the map canvas next to the combobox
//! @note the map canvas must be defined to show the button
void setShowCurrentScaleButton( bool showCurrentScaleButton );
bool showCurrentScaleButton();
//! set the map canvas associated to the current button
void setMapCanvas( QgsMapCanvas* canvas );
//! Function to read the selected scale as text
QString scaleString();
//! Function to set the selected scale from text
bool setScaleString( QString scaleTxt );
//! Function to read the selected scale as double
double scale();
//! Function to set the selected scale from double
void setScale( double scale );
//! Helper function to convert a double to scale string
// Performs rounding, so an exact representation is not to
// be expected.
static QString toString( double scale );
//! Helper function to convert a scale string to double
static double toDouble( QString scaleString, bool *ok = NULL );
signals:
//! Signal is emitted when *user* has finished editing/selecting a new scale.
void scaleChanged();
public slots:
void updateScales( const QStringList &scales = QStringList() );
};

View File

@ -215,6 +215,7 @@ qgsrubberband.cpp
qgsscalecombobox.cpp
qgsscalerangewidget.cpp
qgsscalevisibilitydialog.cpp
qgsscalewidget.cpp
qgssearchquerybuilder.cpp
qgsslider.cpp
qgssublayersdialog.cpp
@ -412,6 +413,7 @@ qgsrelationmanagerdialog.h
qgsscalecombobox.h
qgsscalerangewidget.h
qgsscalevisibilitydialog.h
qgsscalewidget.h
qgssearchquerybuilder.h
qgsslider.h
qgssublayersdialog.h
@ -491,6 +493,7 @@ qgsrubberband.h
qgsscalecombobox.h
qgsscalerangewidget.h
qgsscalevisibilitydialog.h
qgsscalewidget.h
qgssearchquerybuilder.h
qgsslider.h
qgssublayersdialog.h

View File

@ -0,0 +1,69 @@
/***************************************************************************
qgsscalewidget.cpp
--------------------------------------
Date : 08.01.2015
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <QHBoxLayout>
#include "qgsapplication.h"
#include "qgsscalewidget.h"
#include "qgsmapcanvas.h"
QgsScaleWidget::QgsScaleWidget( QWidget *parent )
: QWidget( parent )
, mShowCurrentScaleButton( false )
, mCanvas( NULL )
{
QHBoxLayout* layout = new QHBoxLayout( this );
layout->setContentsMargins( 0, 0, 0, 0 );
layout->setSpacing( 2 );
mScaleComboBox = new QgsScaleComboBox( this );
layout->addWidget( mScaleComboBox );
mCurrentScaleButton = new QToolButton( this );
mCurrentScaleButton->setIcon( QgsApplication::getThemeIcon( "/mActionMapIdentification.svg" ) );
layout->addWidget( mCurrentScaleButton );
mCurrentScaleButton->hide();
connect( mScaleComboBox, SIGNAL( scaleChanged() ), this, SIGNAL( scaleChanged() ) );
connect( mCurrentScaleButton, SIGNAL( clicked() ), this, SLOT( setScaleFromCanvas() ) );
}
QgsScaleWidget::~QgsScaleWidget()
{
}
void QgsScaleWidget::setShowCurrentScaleButton( bool showCurrentScaleButton )
{
mShowCurrentScaleButton = showCurrentScaleButton;
mCurrentScaleButton->setVisible( mShowCurrentScaleButton && mCanvas );
}
void QgsScaleWidget::setMapCanvas( QgsMapCanvas* canvas )
{
mCanvas = canvas;
mCurrentScaleButton->setVisible( mShowCurrentScaleButton && mCanvas );
}
void QgsScaleWidget::setScaleFromCanvas()
{
if ( !mCanvas )
return;
setScale( mCanvas->scale() );
}

82
src/gui/qgsscalewidget.h Normal file
View File

@ -0,0 +1,82 @@
/***************************************************************************
qgsscalewidget.h
--------------------------------------
Date : 08.01.2015
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSSCALEWIDGET_H
#define QGSSCALEWIDGET_H
#include <QWidget>
#include <QToolButton>
#include "qgsscalecombobox.h"
class QgsMapCanvas;
/** \ingroup gui
* A combobox which lets the user select map scale from predefined list
* and highlights nearest to current scale value
**/
class GUI_EXPORT QgsScaleWidget : public QWidget
{
Q_OBJECT
Q_PROPERTY( bool showCurrentScaleButton READ showCurrentScaleButton WRITE setShowCurrentScaleButton )
public:
explicit QgsScaleWidget(QWidget *parent = 0);
virtual ~QgsScaleWidget();
//! shows a button to set the scale to the current scale of the map canvas next to the combobox
//! @note the map canvas must be defined to show the button
void setShowCurrentScaleButton( bool showCurrentScaleButton );
bool showCurrentScaleButton(){ return mShowCurrentScaleButton;}
//! set the map canvas associated to the current button
void setMapCanvas( QgsMapCanvas* canvas );
//! Function to read the selected scale as text
QString scaleString(){return mScaleComboBox->scaleString();}
//! Function to set the selected scale from text
bool setScaleString( QString scaleTxt ){return mScaleComboBox->setScaleString(scaleTxt);}
//! Function to read the selected scale as double
double scale(){return mScaleComboBox->scale();}
//! Function to set the selected scale from double
void setScale( double scale ){return mScaleComboBox->setScale(scale);}
//! Helper function to convert a double to scale string
// Performs rounding, so an exact representation is not to
// be expected.
static QString toString( double scale ){return QgsScaleComboBox::toString(scale);}
//! Helper function to convert a scale string to double
static double toDouble( QString scaleString, bool *ok = NULL ){return QgsScaleComboBox::toDouble(scaleString, ok);}
public slots:
void updateScales( const QStringList &scales = QStringList() ){return mScaleComboBox->updateScales(scales);}
//! assign the current scale from the map canvas
void setScaleFromCanvas();
signals:
//! Signal is emitted when *user* has finished editing/selecting a new scale.
void scaleChanged();
private:
QgsScaleComboBox* mScaleComboBox;
QToolButton* mCurrentScaleButton;
QgsMapCanvas* mCanvas;
bool mShowCurrentScaleButton;
};
#endif // QGSSCALEWIDGET_H