mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
create scale widget (scale combo box + button to set scale from map canvas)
This commit is contained in:
parent
8f70664472
commit
127c882e98
@ -100,6 +100,7 @@
|
|||||||
%Include qgsrubberband.sip
|
%Include qgsrubberband.sip
|
||||||
%Include qgsscalecombobox.sip
|
%Include qgsscalecombobox.sip
|
||||||
%Include qgsscalerangewidget.sip
|
%Include qgsscalerangewidget.sip
|
||||||
|
%Include qgsscalewidget.sip
|
||||||
%Include qgsscalevisibilitydialog.sip
|
%Include qgsscalevisibilitydialog.sip
|
||||||
%Include qgssearchquerybuilder.sip
|
%Include qgssearchquerybuilder.sip
|
||||||
%Include qgstextannotationitem.sip
|
%Include qgstextannotationitem.sip
|
||||||
|
47
python/gui/qgsscalewidget.sip
Normal file
47
python/gui/qgsscalewidget.sip
Normal 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() );
|
||||||
|
|
||||||
|
};
|
||||||
|
|
@ -215,6 +215,7 @@ qgsrubberband.cpp
|
|||||||
qgsscalecombobox.cpp
|
qgsscalecombobox.cpp
|
||||||
qgsscalerangewidget.cpp
|
qgsscalerangewidget.cpp
|
||||||
qgsscalevisibilitydialog.cpp
|
qgsscalevisibilitydialog.cpp
|
||||||
|
qgsscalewidget.cpp
|
||||||
qgssearchquerybuilder.cpp
|
qgssearchquerybuilder.cpp
|
||||||
qgsslider.cpp
|
qgsslider.cpp
|
||||||
qgssublayersdialog.cpp
|
qgssublayersdialog.cpp
|
||||||
@ -412,6 +413,7 @@ qgsrelationmanagerdialog.h
|
|||||||
qgsscalecombobox.h
|
qgsscalecombobox.h
|
||||||
qgsscalerangewidget.h
|
qgsscalerangewidget.h
|
||||||
qgsscalevisibilitydialog.h
|
qgsscalevisibilitydialog.h
|
||||||
|
qgsscalewidget.h
|
||||||
qgssearchquerybuilder.h
|
qgssearchquerybuilder.h
|
||||||
qgsslider.h
|
qgsslider.h
|
||||||
qgssublayersdialog.h
|
qgssublayersdialog.h
|
||||||
@ -491,6 +493,7 @@ qgsrubberband.h
|
|||||||
qgsscalecombobox.h
|
qgsscalecombobox.h
|
||||||
qgsscalerangewidget.h
|
qgsscalerangewidget.h
|
||||||
qgsscalevisibilitydialog.h
|
qgsscalevisibilitydialog.h
|
||||||
|
qgsscalewidget.h
|
||||||
qgssearchquerybuilder.h
|
qgssearchquerybuilder.h
|
||||||
qgsslider.h
|
qgsslider.h
|
||||||
qgssublayersdialog.h
|
qgssublayersdialog.h
|
||||||
|
69
src/gui/qgsscalewidget.cpp
Normal file
69
src/gui/qgsscalewidget.cpp
Normal 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
82
src/gui/qgsscalewidget.h
Normal 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
|
Loading…
x
Reference in New Issue
Block a user