21#include <QDialogButtonBox> 
   27  mComboBoxMinScale->setScale( 10000000.0 );
 
   28  mComboBoxMaxScale->setScale( 1 );
 
   29  mSpinBoxMinSize->setShowClearButton( 
false );
 
   30  mSpinBoxMaxSize->setShowClearButton( 
false );
 
   31  connect( mCheckBoxMinScale, &QCheckBox::toggled, 
this, &QgsMapUnitScaleWidget::configureMinComboBox );
 
   32  connect( mCheckBoxMaxScale, &QCheckBox::toggled, 
this, &QgsMapUnitScaleWidget::configureMaxComboBox );
 
   37  connect( mCheckBoxMinSize, &QCheckBox::toggled, mSpinBoxMinSize, &QgsDoubleSpinBox::setEnabled );
 
   38  connect( mCheckBoxMaxSize, &QCheckBox::toggled, mSpinBoxMaxSize, &QgsDoubleSpinBox::setEnabled );
 
   41  connect( mCheckBoxMinScale, &QCheckBox::toggled, 
this, &QgsMapUnitScaleWidget::settingsChanged );
 
   42  connect( mCheckBoxMaxScale, &QCheckBox::toggled, 
this, &QgsMapUnitScaleWidget::settingsChanged );
 
   45  connect( mCheckBoxMinSize, &QCheckBox::toggled, 
this, &QgsMapUnitScaleWidget::settingsChanged );
 
   46  connect( mCheckBoxMaxSize, &QCheckBox::toggled, 
this, &QgsMapUnitScaleWidget::settingsChanged );
 
   47  connect( mSpinBoxMinSize, 
static_cast < void ( 
QgsDoubleSpinBox::* )( 
double ) 
> ( &QgsDoubleSpinBox::valueChanged ), 
this, &QgsMapUnitScaleWidget::settingsChanged );
 
   48  connect( mSpinBoxMaxSize, 
static_cast < void ( 
QgsDoubleSpinBox::* )( 
double ) 
> ( &QgsDoubleSpinBox::valueChanged ), 
this, &QgsMapUnitScaleWidget::settingsChanged );
 
   49  mBlockSignals = 
false;
 
 
   57  mComboBoxMinScale->setScale( scale.
minScale > 0.0 ? scale.
minScale : 10000000 );
 
   58  mCheckBoxMinScale->setChecked( scale.
minScale != 0.0 );
 
   59  mComboBoxMinScale->setEnabled( scale.
minScale != 0.0 );
 
   61  mCheckBoxMaxScale->setChecked( scale.
maxScale > 0.0 );
 
   62  mComboBoxMaxScale->setEnabled( scale.
maxScale > 0.0 );
 
   66  mSpinBoxMinSize->setValue( scale.
minSizeMM );
 
   70  mSpinBoxMaxSize->setValue( scale.
maxSizeMM );
 
   71  mBlockSignals = 
false;
 
 
   78  mComboBoxMinScale->setMapCanvas( canvas );
 
   79  mComboBoxMinScale->setShowCurrentScaleButton( 
true );
 
   80  mComboBoxMaxScale->setMapCanvas( canvas );
 
   81  mComboBoxMaxScale->setShowCurrentScaleButton( 
true );
 
 
   84void QgsMapUnitScaleWidget::configureMinComboBox()
 
   86  mComboBoxMinScale->setEnabled( mCheckBoxMinScale->isChecked() );
 
   87  if ( mCheckBoxMinScale->isChecked() && mComboBoxMinScale->scale() < mComboBoxMaxScale->scale() )
 
   89    mComboBoxMinScale->setScale( mComboBoxMaxScale->scale() );
 
   93void QgsMapUnitScaleWidget::configureMaxComboBox()
 
   95  mComboBoxMaxScale->setEnabled( mCheckBoxMaxScale->isChecked() );
 
   96  if ( mCheckBoxMaxScale->isChecked() && mComboBoxMaxScale->scale() > mComboBoxMinScale->scale() )
 
   98    mComboBoxMaxScale->setScale( mComboBoxMinScale->scale() );
 
  102void QgsMapUnitScaleWidget::settingsChanged()
 
  113  scale.
minScale = mCheckBoxMinScale->isChecked() ? mComboBoxMinScale->scale() : 0;
 
  114  scale.
maxScale = mCheckBoxMaxScale->isChecked() ? mComboBoxMaxScale->scale() : 0;
 
  116  scale.
minSizeMM = mSpinBoxMinSize->value();
 
  118  scale.
maxSizeMM = mSpinBoxMaxSize->value();
 
 
  133  mMapScaleButton->setVisible( 
false );
 
  134  mMapScaleButton->setToolTip( tr( 
"Adjust scaling range" ) );
 
  136  setFocusPolicy( Qt::StrongFocus );
 
  137  setFocusProxy( mUnitCombo );
 
  139  connect( mUnitCombo, 
static_cast < void ( QComboBox::* )( 
int ) 
> ( &QComboBox::currentIndexChanged ), 
this, &QgsUnitSelectionWidget::toggleUnitRangeButton );
 
  140  connect( mMapScaleButton, &QToolButton::clicked, 
this, &QgsUnitSelectionWidget::showDialog );
 
 
  146  blockSignals( 
true );
 
  147  mUnitCombo->addItems( units );
 
  148  mMapUnitIdx = mapUnitIdx;
 
  149  blockSignals( 
false );
 
 
  154  blockSignals( 
true );
 
  189  blockSignals( 
false );
 
 
  194  if ( mUnitCombo->count() == 0 )
 
  197  const QVariant currentData = mUnitCombo->currentData();
 
  198  if ( currentData.isValid() )
 
 
  208  blockSignals( 
true );
 
  209  mUnitCombo->setCurrentIndex( unitIndex );
 
  210  blockSignals( 
false );
 
 
  215  const int idx = mUnitCombo->findData( QVariant( 
static_cast< int >( 
unit ) ) );
 
  216  mUnitCombo->setCurrentIndex( idx == -1 ? 0 : idx );
 
 
  224void QgsUnitSelectionWidget::showDialog()
 
  239  dlg.setMapUnitScale( mMapUnitScale );
 
  240  dlg.setMapCanvas( mCanvas );
 
  241  if ( dlg.exec() == QDialog::Accepted )
 
  243    if ( mMapUnitScale != dlg.getMapUnitScale() )
 
  245      mMapUnitScale = dlg.getMapUnitScale();
 
  251void QgsUnitSelectionWidget::toggleUnitRangeButton()
 
  259    mMapScaleButton->setVisible( mShowMapScaleButton && mMapUnitIdx != -1 && mUnitCombo->currentIndex() == mMapUnitIdx );
 
  263void QgsUnitSelectionWidget::widgetChanged( 
const QgsMapUnitScale &scale )
 
  265  mMapUnitScale = scale;
 
  271  return mShowMapScaleButton;
 
 
  276  mShowMapScaleButton = show;
 
  278    mMapScaleButton->hide();
 
 
  286  QVBoxLayout *vLayout = 
new QVBoxLayout();
 
  288  vLayout->addWidget( mWidget );
 
  289  QDialogButtonBox *bbox = 
new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok, Qt::Horizontal );
 
  290  connect( bbox, &QDialogButtonBox::accepted, 
this, &QgsMapUnitScaleDialog::accept );
 
  291  connect( bbox, &QDialogButtonBox::rejected, 
this, &QgsMapUnitScaleDialog::reject );
 
  292  connect( bbox, &QDialogButtonBox::helpRequested, 
this, &QgsMapUnitScaleDialog::showHelp );
 
  293  vLayout->addWidget( bbox );
 
  294  setLayout( vLayout );
 
  295  setWindowTitle( tr( 
"Adjust Scaling Range" ) );
 
 
  313void QgsMapUnitScaleDialog::showHelp()
 
  315  QgsHelp::openHelp( QStringLiteral( 
"introduction/general_tools.html#unit-selector" ) );
 
RenderUnit
Rendering size units.
 
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size)
 
@ Millimeters
Millimeters.
 
@ Points
Points (e.g., for font sizes)
 
@ Unknown
Mixed or unknown units.
 
@ MetersInMapUnits
Meters value as Map units.
 
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value.
 
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
 
Map canvas is a class for displaying all GIS data types on a canvas.
 
A dialog which allows the user to choose the minimum and maximum scale of an object in map units and ...
 
QgsMapUnitScale getMapUnitScale() const
Returns a QgsMapUnitScale representing the settings shown in the dialog.
 
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the dialog.
 
void setMapUnitScale(const QgsMapUnitScale &scale)
Updates the dialog to reflect the settings from the specified QgsMapUnitScale object.
 
QgsMapUnitScaleDialog(QWidget *parent=nullptr)
Constructor for QgsMapUnitScaleDialog.
 
Struct for storing maximum and minimum scales for measurements in map units.
 
bool minSizeMMEnabled
Whether the minimum size in mm should be respected.
 
double maxScale
The maximum scale, or 0.0 if unset.
 
double minScale
The minimum scale, or 0.0 if unset.
 
double maxSizeMM
The maximum size in millimeters, or 0.0 if unset.
 
bool maxSizeMMEnabled
Whether the maximum size in mm should be respected.
 
double minSizeMM
The minimum size in millimeters, or 0.0 if unset.
 
QList< Qgis::RenderUnit > RenderUnitList
List of render units.