29#include "moc_qgsscalewidget.cpp"
31using namespace Qt::StringLiterals;
36 QHBoxLayout *layout =
new QHBoxLayout(
this );
37 layout->setContentsMargins( 0, 0, 0, 0 );
38 layout->setSpacing( 6 );
41 layout->addWidget( mScaleComboBox );
43 mCurrentScaleButton =
new QToolButton(
this );
44 mCurrentScaleButton->setToolTip( tr(
"Set to current canvas scale" ) );
47 mMenu =
new QMenu(
this );
48 mCurrentScaleButton->setMenu( mMenu );
49 mCurrentScaleButton->setPopupMode( QToolButton::MenuButtonPopup );
50 connect( mMenu, &QMenu::aboutToShow,
this, &QgsScaleWidget::menuAboutToShow );
52 layout->addWidget( mCurrentScaleButton );
53 mCurrentScaleButton->hide();
62 mCurrentScaleButton->setVisible( mShowCurrentScaleButton && mCanvas );
68 mCurrentScaleButton->setVisible( mShowCurrentScaleButton && mCanvas );
73 return mScaleComboBox->isNull();
78 mScaleComboBox->setAllowNull(
allowNull );
83 return mScaleComboBox->allowNull();
88 mScaleComboBox->setPredefinedScales( scales );
101 mScaleComboBox->setNull();
106 mScaleComboBox->setScale(
scale );
109void QgsScaleWidget::menuAboutToShow()
115 connect( canvasScaleAction, &QAction::triggered,
this, [
this,
scale] {
setScale(
scale ); } );
116 mMenu->addAction( canvasScaleAction );
121 const QList<QgsPrintLayout *> layouts = manager->printLayouts();
122 for (
const QgsPrintLayout *layout : layouts )
124 QList<QgsLayoutItemMap *> maps;
125 layout->layoutItems( maps );
130 mMenu->addSeparator();
134 QMenu *layoutMenu =
new QMenu( layout->name(), mMenu );
135 for (
const QgsLayoutItemMap *map : std::as_const( maps ) )
137 scale = map->scale();
138 QAction *mapScaleAction =
new QAction( tr(
"%1 (1:%2)" ).arg( map->displayName(),
qgsDoubleToString(
scale, 0 ) ), mMenu );
139 connect( mapScaleAction, &QAction::triggered,
this, [
this,
scale] {
setScale(
scale ); } );
140 layoutMenu->addAction( mapScaleAction );
142 mMenu->addMenu( layoutMenu );
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
Map canvas is a class for displaying all GIS data types on a canvas.
double scale() const
Returns the last reported scale of the canvas.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A combobox which lets the user select map scale from predefined list and highlights nearest to curren...
void scaleChanged(double scale)
Emitted when user has finished editing/selecting a new scale.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.