2222#include " qgsgenericprojectionselector.h"
2323#include " qgscoordinatereferencesystem.h"
2424#include " qgstolerance.h"
25+ #include " qgsscaleutils.h"
2526#include " qgsnetworkaccessmanager.h"
2627#include " qgsproject.h"
2728
29+ #include < QInputDialog>
2830#include < QFileDialog>
2931#include < QSettings>
3032#include < QColorDialog>
@@ -416,6 +418,21 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
416418 cmbWheelAction->setCurrentIndex ( settings.value ( " /qgis/wheel_action" , 2 ).toInt () );
417419 spinZoomFactor->setValue ( settings.value ( " /qgis/zoom_factor" , 2 ).toDouble () );
418420
421+ // predefined scales for scale combobox
422+ myPaths = settings.value ( " Map/scales" , PROJECT_SCALES ).toString ();
423+ if ( !myPaths.isEmpty () )
424+ {
425+ QStringList myScalesList = myPaths.split ( " ," );
426+ QStringList::const_iterator scaleIt = myScalesList.constBegin ();
427+ for ( ; scaleIt != myScalesList.constEnd (); ++scaleIt )
428+ {
429+ QListWidgetItem* newItem = new QListWidgetItem ( mListGlobalScales );
430+ newItem->setText ( *scaleIt );
431+ newItem->setFlags ( Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
432+ mListGlobalScales ->addItem ( newItem );
433+ }
434+ }
435+
419436 //
420437 // Locale settings
421438 //
@@ -846,23 +863,19 @@ void QgsOptions::saveOptions()
846863 settings.setValue ( " /Raster/useStandardDeviation" , chkUseStandardDeviation->isChecked () );
847864 settings.setValue ( " /Raster/defaultStandardDeviation" , spnThreeBandStdDev->value () );
848865
849-
850866 settings.setValue ( " /Map/updateThreshold" , spinBoxUpdateThreshold->value () );
851867 // check behaviour so default projection when new layer is added with no
852868 // projection defined...
853869 if ( radPromptForProjection->isChecked () )
854870 {
855- //
856871 settings.setValue ( " /Projections/defaultBehaviour" , " prompt" );
857872 }
858873 else if ( radUseProjectProjection->isChecked () )
859874 {
860- //
861875 settings.setValue ( " /Projections/defaultBehaviour" , " useProject" );
862876 }
863877 else // assumes radUseGlobalProjection is checked
864878 {
865- //
866879 settings.setValue ( " /Projections/defaultBehaviour" , " useGlobal" );
867880 }
868881
@@ -884,11 +897,6 @@ void QgsOptions::saveOptions()
884897 }
885898 settings.setValue ( " /qgis/measure/ellipsoid" , getEllipsoidAcronym ( cmbEllipsoid->currentText () ) );
886899
887- if ( mDegreesRadioButton ->isChecked () )
888- {
889-
890- }
891-
892900 QString angleUnitString = " degrees" ;
893901 if ( mRadiansRadioButton ->isChecked () )
894902 {
@@ -900,14 +908,12 @@ void QgsOptions::saveOptions()
900908 }
901909 settings.setValue ( " /qgis/measure/angleunits" , angleUnitString );
902910
903-
904911 int decimalPlaces = mDecimalPlacesSpinBox ->value ();
905912 settings.setValue ( " /qgis/measure/decimalplaces" , decimalPlaces );
906913
907914 bool baseUnit = mKeepBaseUnitCheckBox ->isChecked ();
908915 settings.setValue ( " /qgis/measure/keepbaseunit" , baseUnit );
909916
910-
911917 // set the color for selections
912918 QColor myColor = pbnSelectionColor->color ();
913919 settings.setValue ( " /qgis/default_selection_color_red" , myColor.red () );
@@ -972,13 +978,23 @@ void QgsOptions::saveOptions()
972978 settings.setValue ( " /qgis/digitizing/offset_quad_seg" , mOffsetQuadSegSpinBox ->value () );
973979 settings.setValue ( " /qgis/digitizing/offset_miter_limit" , mCurveOffsetMiterLimitComboBox ->value () );
974980
981+ // default scale list
982+ for ( int i = 0 ; i < mListGlobalScales ->count (); ++i )
983+ {
984+ if ( i != 0 )
985+ {
986+ myPaths += " ," ;
987+ }
988+ myPaths += mListGlobalScales ->item ( i )->text ();
989+ }
990+ settings.setValue ( " Map/scales" , myPaths );
991+
975992 //
976993 // Locale settings
977994 //
978995 settings.setValue ( " locale/userLocale" , cboLocale->itemData ( cboLocale->currentIndex () ).toString () );
979996 settings.setValue ( " locale/overrideFlag" , grpLocale->isChecked () );
980997
981-
982998 // Gdal skip driver list
983999 if ( mLoadedGdalDriverList )
9841000 saveGdalDriverList ();
@@ -1183,7 +1199,6 @@ void QgsOptions::on_mBtnRemovePluginPath_clicked()
11831199 delete itemToRemove;
11841200}
11851201
1186-
11871202void QgsOptions::on_mBtnAddSVGPath_clicked ()
11881203{
11891204 QString myDir = QFileDialog::getExistingDirectory (
@@ -1422,3 +1437,99 @@ void QgsOptions::saveGdalDriverList()
14221437 QSettings mySettings;
14231438 mySettings.setValue ( " gdal/skipList" , QgsApplication::skippedGdalDrivers ().join ( " " ) );
14241439}
1440+
1441+ void QgsOptions::on_pbnAddScale_clicked ()
1442+ {
1443+ int myScale = QInputDialog::getInt (
1444+ this ,
1445+ tr ( " Enter scale" ),
1446+ tr ( " Scale denominator" ),
1447+ -1 ,
1448+ 1
1449+ );
1450+
1451+ if ( myScale != -1 )
1452+ {
1453+ QListWidgetItem* newItem = new QListWidgetItem ( mListGlobalScales );
1454+ newItem->setText ( QString ( " 1:%1" ).arg ( myScale ) );
1455+ newItem->setFlags ( Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
1456+ mListGlobalScales ->addItem ( newItem );
1457+ mListGlobalScales ->setCurrentItem ( newItem );
1458+ }
1459+ }
1460+
1461+ void QgsOptions::on_pbnRemoveScale_clicked ()
1462+ {
1463+ int currentRow = mListGlobalScales ->currentRow ();
1464+ QListWidgetItem* itemToRemove = mListGlobalScales ->takeItem ( currentRow );
1465+ delete itemToRemove;
1466+ }
1467+
1468+ void QgsOptions::on_pbnDefaultScaleValues_clicked ()
1469+ {
1470+ mListGlobalScales ->clear ();
1471+
1472+ QStringList myScalesList = PROJECT_SCALES.split ( " ," );
1473+ QStringList::const_iterator scaleIt = myScalesList.constBegin ();
1474+ for ( ; scaleIt != myScalesList.constEnd (); ++scaleIt )
1475+ {
1476+ QListWidgetItem* newItem = new QListWidgetItem ( mListGlobalScales );
1477+ newItem->setText ( *scaleIt );
1478+ newItem->setFlags ( Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
1479+ mListGlobalScales ->addItem ( newItem );
1480+ }
1481+ }
1482+
1483+ void QgsOptions::on_pbnImportScales_clicked ()
1484+ {
1485+ QString fileName = QFileDialog::getOpenFileName ( this , tr ( " Load scales" ), " ." ,
1486+ tr ( " XML files (*.xml *.XML)" ) );
1487+ if ( fileName.isEmpty () )
1488+ {
1489+ return ;
1490+ }
1491+
1492+ QString msg;
1493+ QStringList myScales;
1494+ if ( !QgsScaleUtils::loadScaleList ( fileName, myScales, msg ) )
1495+ {
1496+ QgsDebugMsg ( msg );
1497+ }
1498+
1499+ QStringList::const_iterator scaleIt = myScales.constBegin ();
1500+ for ( ; scaleIt != myScales.constEnd (); ++scaleIt )
1501+ {
1502+ QListWidgetItem* newItem = new QListWidgetItem ( mListGlobalScales );
1503+ newItem->setText ( *scaleIt );
1504+ newItem->setFlags ( Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
1505+ mListGlobalScales ->addItem ( newItem );
1506+ }
1507+ }
1508+
1509+ void QgsOptions::on_pbnExportScales_clicked ()
1510+ {
1511+ QString fileName = QFileDialog::getSaveFileName ( this , tr ( " Save scales" ), " ." ,
1512+ tr ( " XML files (*.xml *.XML)" ) );
1513+ if ( fileName.isEmpty () )
1514+ {
1515+ return ;
1516+ }
1517+
1518+ // ensure the user never ommited the extension from the file name
1519+ if ( !fileName.toLower ().endsWith ( " .xml" ) )
1520+ {
1521+ fileName += " .xml" ;
1522+ }
1523+
1524+ QStringList myScales;
1525+ for ( int i = 0 ; i < mListGlobalScales ->count (); ++i )
1526+ {
1527+ myScales.append ( mListGlobalScales ->item ( i )->text () );
1528+ }
1529+
1530+ QString msg;
1531+ if ( !QgsScaleUtils::saveScaleList ( fileName, myScales, msg ) )
1532+ {
1533+ QgsDebugMsg ( msg );
1534+ }
1535+ }
0 commit comments