Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
create scale widget (scale combo box + button to set scale from map c…
…anvas)
  • Loading branch information
3nids committed Jan 9, 2015
1 parent 8f70664 commit 127c882
Show file tree
Hide file tree
Showing 5 changed files with 202 additions and 0 deletions.
1 change: 1 addition & 0 deletions python/gui/gui.sip
Expand Up @@ -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
Expand Down
47 changes: 47 additions & 0 deletions python/gui/qgsscalewidget.sip
@@ -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() );

};

3 changes: 3 additions & 0 deletions src/gui/CMakeLists.txt
Expand Up @@ -215,6 +215,7 @@ qgsrubberband.cpp
qgsscalecombobox.cpp
qgsscalerangewidget.cpp
qgsscalevisibilitydialog.cpp
qgsscalewidget.cpp
qgssearchquerybuilder.cpp
qgsslider.cpp
qgssublayersdialog.cpp
Expand Down Expand Up @@ -412,6 +413,7 @@ qgsrelationmanagerdialog.h
qgsscalecombobox.h
qgsscalerangewidget.h
qgsscalevisibilitydialog.h
qgsscalewidget.h
qgssearchquerybuilder.h
qgsslider.h
qgssublayersdialog.h
Expand Down Expand Up @@ -491,6 +493,7 @@ qgsrubberband.h
qgsscalecombobox.h
qgsscalerangewidget.h
qgsscalevisibilitydialog.h
qgsscalewidget.h
qgssearchquerybuilder.h
qgsslider.h
qgssublayersdialog.h
Expand Down
69 changes: 69 additions & 0 deletions src/gui/qgsscalewidget.cpp
@@ -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 changes: 82 additions & 0 deletions src/gui/qgsscalewidget.h
@@ -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

0 comments on commit 127c882

Please sign in to comment.