Skip to content

Commit a3d919d

Browse files
committed
Use a real scale widget in vector save as dialog
1 parent e0d29e7 commit a3d919d

4 files changed

Lines changed: 40 additions & 28 deletions

File tree

‎src/app/ogr/qgsvectorlayersaveasdialog.cpp‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323
#include "qgseditorwidgetfactory.h"
2424
#include "qgseditorwidgetregistry.h"
2525
#include "qgssettings.h"
26+
#include "qgsmapcanvas.h"
2627
#include "qgsgui.h"
2728
#include <QMessageBox>
2829
#include <QFileDialog>
2930
#include <QTextCodec>
31+
#include <QSpinBox>
3032

3133
static const int COLUMN_IDX_NAME = 0;
3234
static const int COLUMN_IDX_TYPE = 1;
@@ -61,7 +63,7 @@ QgsVectorLayerSaveAsDialog::QgsVectorLayerSaveAsDialog( QgsVectorLayer *layer, i
6163
mSymbologyExportLabel->hide();
6264
mSymbologyExportComboBox->hide();
6365
mScaleLabel->hide();
64-
mScaleSpinBox->hide();
66+
mScaleWidget->hide();
6567
}
6668

6769
mSelectedOnly->setEnabled( layer && layer->selectedFeatureCount() != 0 );
@@ -814,14 +816,17 @@ int QgsVectorLayerSaveAsDialog::symbologyExport() const
814816
return mSymbologyExportComboBox->currentData().toInt();
815817
}
816818

817-
double QgsVectorLayerSaveAsDialog::scaleDenominator() const
819+
double QgsVectorLayerSaveAsDialog::scale() const
818820
{
819-
return mScaleSpinBox->value();
821+
return mScaleWidget->scale();
820822
}
821823

822-
void QgsVectorLayerSaveAsDialog::setCanvasExtent( const QgsRectangle &canvasExtent, const QgsCoordinateReferenceSystem &canvasCrs )
824+
void QgsVectorLayerSaveAsDialog::setMapCanvas( QgsMapCanvas *canvas )
823825
{
824-
mExtentGroupBox->setCurrentExtent( canvasExtent, canvasCrs );
826+
mMapCanvas = canvas;
827+
mScaleWidget->setMapCanvas( canvas );
828+
mScaleWidget->setShowCurrentScaleButton( true );
829+
mExtentGroupBox->setCurrentExtent( canvas->mapSettings().visibleExtent(), canvas->mapSettings().destinationCrs() );
825830
}
826831

827832
bool QgsVectorLayerSaveAsDialog::hasFilterExtent() const
@@ -889,7 +894,7 @@ void QgsVectorLayerSaveAsDialog::on_mSymbologyExportComboBox_currentIndexChanged
889894
{
890895
scaleEnabled = false;
891896
}
892-
mScaleSpinBox->setEnabled( scaleEnabled );
897+
mScaleWidget->setEnabled( scaleEnabled );
893898
mScaleLabel->setEnabled( scaleEnabled );
894899
}
895900

‎src/app/ogr/qgsvectorlayersaveasdialog.h‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,17 @@ class APP_EXPORT QgsVectorLayerSaveAsDialog : public QDialog, private Ui::QgsVec
6363
1: Feature symbology
6464
2: Symbol level symbology*/
6565
int symbologyExport() const;
66-
double scaleDenominator() const;
6766

68-
//! setup canvas extent - for the use in extent group box
69-
void setCanvasExtent( const QgsRectangle &canvasExtent, const QgsCoordinateReferenceSystem &canvasCrs );
67+
/**
68+
* Returns the specified map scale.
69+
* The scale value indicates the scale denominator, e.g. 1000.0 for a 1:1000 map.
70+
*/
71+
double scale() const;
72+
73+
/**
74+
* Sets a map \a canvas to associate with the dialog.
75+
*/
76+
void setMapCanvas( QgsMapCanvas *canvas );
7077

7178
bool hasFilterExtent() const;
7279
QgsRectangle filterExtent() const;
@@ -130,6 +137,7 @@ class APP_EXPORT QgsVectorLayerSaveAsDialog : public QDialog, private Ui::QgsVec
130137
QgsRectangle mLayerExtent;
131138
QgsCoordinateReferenceSystem mLayerCrs;
132139
QgsVectorLayer *mLayer = nullptr;
140+
QgsMapCanvas *mMapCanvas = nullptr;
133141
bool mAttributeTableItemChangedSlotEnabled;
134142
bool mReplaceRawFieldValuesStateChangedSlotEnabled;
135143
QgsVectorFileWriter::ActionOnExistingFile mActionOnExistingFile;

‎src/app/qgisapp.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6776,7 +6776,7 @@ void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOpt
67766776

67776777
QgsVectorLayerSaveAsDialog *dialog = new QgsVectorLayerSaveAsDialog( vlayer, options, this );
67786778

6779-
dialog->setCanvasExtent( mMapCanvas->mapSettings().visibleExtent(), mMapCanvas->mapSettings().destinationCrs() );
6779+
dialog->setMapCanvas( mMapCanvas );
67806780
dialog->setIncludeZ( QgsWkbTypes::hasZ( vlayer->wkbType() ) );
67816781

67826782
if ( dialog->exec() == QDialog::Accepted )
@@ -6835,7 +6835,7 @@ void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOpt
68356835
options.layerOptions = dialog->layerOptions();
68366836
options.skipAttributeCreation = dialog->selectedAttributes().isEmpty();
68376837
options.symbologyExport = static_cast< QgsVectorFileWriter::SymbologyExport >( dialog->symbologyExport() );
6838-
options.symbologyScale = dialog->scaleDenominator();
6838+
options.symbologyScale = dialog->scale();
68396839
if ( dialog->hasFilterExtent() )
68406840
options.filterExtent = filterExtent;
68416841
options.overrideGeometryType = autoGeometryType ? QgsWkbTypes::Unknown : forcedGeometryType;

‎src/ui/qgsvectorlayersaveasdialogbase.ui‎

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@
106106
<property name="geometry">
107107
<rect>
108108
<x>0</x>
109-
<y>0</y>
109+
<y>-303</y>
110110
<width>557</width>
111-
<height>922</height>
111+
<height>1004</height>
112112
</rect>
113113
</property>
114114
<layout class="QVBoxLayout" name="verticalLayout">
@@ -235,15 +235,9 @@
235235
</widget>
236236
</item>
237237
<item>
238-
<widget class="QSpinBox" name="mScaleSpinBox">
239-
<property name="prefix">
240-
<string>1:</string>
241-
</property>
242-
<property name="maximum">
243-
<number>999999999</number>
244-
</property>
245-
<property name="value">
246-
<number>50000</number>
238+
<widget class="QgsScaleWidget" name="mScaleWidget" native="true">
239+
<property name="focusPolicy">
240+
<enum>Qt::StrongFocus</enum>
247241
</property>
248242
</widget>
249243
</item>
@@ -469,6 +463,11 @@
469463
<header>qgsextentgroupbox.h</header>
470464
<container>1</container>
471465
</customwidget>
466+
<customwidget>
467+
<class>QgsScaleWidget</class>
468+
<extends>QWidget</extends>
469+
<header>qgsscalewidget.h</header>
470+
</customwidget>
472471
</customwidgets>
473472
<tabstops>
474473
<tabstop>mFormatComboBox</tabstop>
@@ -482,15 +481,15 @@
482481
<tabstop>mSelectAllAttributes</tabstop>
483482
<tabstop>mDeselectAllAttributes</tabstop>
484483
<tabstop>mSymbologyExportComboBox</tabstop>
485-
<tabstop>mScaleSpinBox</tabstop>
486-
<tabstop>mGeometryGroupBox</tabstop>
484+
<tabstop>mScaleWidget</tabstop>
487485
<tabstop>mGeometryTypeComboBox</tabstop>
488486
<tabstop>mForceMultiCheckBox</tabstop>
489487
<tabstop>mIncludeZCheckBox</tabstop>
490-
<tabstop>mExtentGroupBox</tabstop>
491-
<tabstop>mDatasourceOptionsGroupBox</tabstop>
492-
<tabstop>mLayerOptionsGroupBox</tabstop>
493-
<tabstop>mOgrOptionsGroupBox</tabstop>
488+
<tabstop>mAddToCanvas</tabstop>
489+
<tabstop>mAttributeTable</tabstop>
490+
<tabstop>mReplaceRawFieldValues</tabstop>
491+
<tabstop>mOgrDatasourceOptions</tabstop>
492+
<tabstop>mOgrLayerOptions</tabstop>
494493
</tabstops>
495494
<resources/>
496495
<connections>

0 commit comments

Comments
 (0)