Skip to content

Commit aa896df

Browse files
author
timlinux
committed
Various changes relating to projection selector: Renamed QgsLayerProjectionSelector to QgsGenericProjectionSelector so that it can be used in other contexts too. Added setSelectedEpsg call to projection selector. Added setMessage() call to generic projection selector. Updated python bindings accordingly.
git-svn-id: http://svn.osgeo.org/qgis/trunk@9011 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 4f015a3 commit aa896df

20 files changed

+230
-179
lines changed

python/gui/gui.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
%Include qgisinterface.sip
1212
%Include qgsencodingfiledialog.sip
13-
%Include qgslayerprojectionselector.sip
13+
%Include qgsgenericprojectionselector.sip
1414
%Include qgsmapcanvas.sip
1515
%Include qgsmapcanvasitem.sip
1616
%Include qgsmapcanvasmap.sip

python/gui/qgslayerprojectionselector.sip renamed to python/gui/qgsgenericprojectionselector.sip

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,37 @@
11

22
/**
3-
* \class QgsLayerProjectionSelector
4-
* \brief Set Projection system for a layer
3+
* \class QgsGenericProjectionSelector
4+
* \brief A generic dialog to prompt the user for a Coordinate Reference System
55
*/
6-
7-
class QgsLayerProjectionSelector : QDialog //, private Ui::QgsLayerProjectionSelectorBase
6+
class QgsGenericProjectionSelector : QDialog //, private Ui::QgsGenericProjectionSelectorBase
87
{
98
%TypeHeaderCode
10-
#include <qgslayerprojectionselector.h>
9+
#include <qgsgenericprojectionselector.h>
1110
%End
1211

1312
public:
1413
/**
1514
* Constructor
1615
*/
17-
QgsLayerProjectionSelector(QWidget *parent = 0,
16+
QgsGenericProjectionSelector(QWidget *parent = 0,
1817
Qt::WFlags fl = QgisGui::ModalDialogFlags);
1918

2019
//! Destructor
21-
~QgsLayerProjectionSelector();
20+
~QgsGenericProjectionSelector();
2221

2322
public slots:
24-
QString getCurrentProj4String();
25-
long getCurrentSRSID();
26-
long getCurrentEpsg();
23+
/** If no paramter is passed, the message will be a generic
24+
* 'define the CRS for this layer'.
25+
*/
26+
void setMessage(QString theMessage="");
27+
28+
QString getSelectedProj4String();
29+
long getSelectedSRSID();
30+
long getSelectedEpsg();
2731

2832
void setSelectedSRSName(QString theName);
2933
void setSelectedSRSID(long theID);
34+
void setSelectedEpsg(long theID);
3035

3136
/**
3237
* \brief filters this dialog by the given CRSs

python/gui/qgsprojectionselector.sip

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,24 @@ class QgsProjectionSelector: QWidget //, private Ui::QgsProjectionSelectorBase
5454
const QString stringSQLSafe(const QString theSQL);
5555

5656
//! Gets the current EPSG-style projection identifier
57-
long getCurrentEpsg();
57+
long getSelectedEpsg();
5858

5959
public slots:
6060
void setSelectedSRSName(QString theSRSName);
6161

6262
QString getSelectedName();
6363

6464
void setSelectedSRSID(long theSRSID);
65+
66+
void setSelectedEpsg(long epsg);
6567

66-
QString getCurrentProj4String();
68+
QString getSelectedProj4String();
6769

6870
//! Gets the current PostGIS-style projection identifier
69-
long getCurrentSRID();
71+
long getSelectedSRID();
7072

7173
//! Gets the current QGIS projection identfier
72-
long getCurrentSRSID();
74+
long getSelectedSRSID();
7375

7476
/**
7577
* \brief filters this widget by the given CRSs

src/app/qgisapp.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
#include "qgsfeature.h"
9797
#include "qgsgeomtypedialog.h"
9898
#include "qgshelpviewer.h"
99-
#include "qgslayerprojectionselector.h"
99+
#include "qgsgenericprojectionselector.h"
100100
#include "qgslegend.h"
101101
#include "qgslegendlayerfile.h"
102102
#include "qgslegendlayer.h"
@@ -264,7 +264,8 @@ static void customSrsValidation_(QgsSpatialRefSys* srs)
264264
//@note this class is not a descendent of QWidget so we cant pass
265265
//it in the ctor of the layer projection selector
266266

267-
QgsLayerProjectionSelector * mySelector = new QgsLayerProjectionSelector();
267+
QgsGenericProjectionSelector * mySelector = new QgsGenericProjectionSelector();
268+
mySelector->setMessage(); //shows a generic message
268269
proj4String = QgsProject::instance()->readEntry("SpatialRefSys","//ProjectSRSProj4String",GEOPROJ4);
269270
QgsSpatialRefSys defaultSRS;
270271
if(defaultSRS.createFromProj4(proj4String))
@@ -274,8 +275,8 @@ static void customSrsValidation_(QgsSpatialRefSys* srs)
274275

275276
if(mySelector->exec())
276277
{
277-
QgsDebugMsg("Layer srs set from dialog: " + QString::number(mySelector->getCurrentSRSID()));
278-
srs->createFromProj4(mySelector->getCurrentProj4String());
278+
QgsDebugMsg("Layer srs set from dialog: " + QString::number(mySelector->getSelectedSRSID()));
279+
srs->createFromProj4(mySelector->getSelectedProj4String());
279280
srs->debugPrint();
280281
}
281282
else

src/app/qgsoptions.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include "qgsoptions.h"
2121
#include "qgis.h"
2222
#include "qgisapp.h"
23-
#include "qgslayerprojectionselector.h"
23+
#include "qgsgenericprojectionselector.h"
2424
#include "qgsspatialrefsys.h"
2525

2626
#include <QFileDialog>
@@ -365,7 +365,7 @@ void QgsOptions::saveOptions()
365365
void QgsOptions::on_pbnSelectProjection_clicked()
366366
{
367367
QSettings settings;
368-
QgsLayerProjectionSelector * mySelector = new QgsLayerProjectionSelector(this);
368+
QgsGenericProjectionSelector * mySelector = new QgsGenericProjectionSelector(this);
369369

370370
//find out srs id of current proj4 string
371371
QgsSpatialRefSys refSys;
@@ -380,7 +380,7 @@ void QgsOptions::on_pbnSelectProjection_clicked()
380380
std::cout << "------ Global Default Projection Selection Set ----------" << std::endl;
381381
#endif
382382
//! @todo changes this control name in gui to txtGlobalProjString
383-
txtGlobalWKT->setText(mySelector->getCurrentProj4String());
383+
txtGlobalWKT->setText(mySelector->getSelectedProj4String());
384384
#ifdef QGISDEBUG
385385
std::cout << "------ Global Default Projection now set to ----------\n" << mGlobalSRSID << std::endl;
386386
#endif

src/app/qgsprojectproperties.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,15 +245,15 @@ void QgsProjectProperties::apply()
245245
// selected that has an srid. This prevents error if the user
246246
// selects a top-level node rather than an actual coordinate
247247
// system
248-
long mySRSID = projectionSelector->getCurrentSRSID();
248+
long mySRSID = projectionSelector->getSelectedSRSID();
249249
if (mySRSID)
250250
{
251251
QgsSpatialRefSys srs(mySRSID, QgsSpatialRefSys::QGIS_SRSID);
252252
myRender->setDestinationSrs(srs);
253253

254254
// write the currently selected projections _proj string_ to project settings
255-
std::cout << "SpatialRefSys/ProjectSRSProj4String: " << projectionSelector->getCurrentProj4String().toLocal8Bit().data() << std::endl;
256-
QgsProject::instance()->writeEntry("SpatialRefSys","/ProjectSRSProj4String",projectionSelector->getCurrentProj4String());
255+
std::cout << "SpatialRefSys/ProjectSRSProj4String: " << projectionSelector->getSelectedProj4String().toLocal8Bit().data() << std::endl;
256+
QgsProject::instance()->writeEntry("SpatialRefSys","/ProjectSRSProj4String",projectionSelector->getSelectedProj4String());
257257

258258
// Set the map units to the projected coordinates if we are projecting
259259
if (isProjected())

src/app/qgsrasterlayerproperties.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include "qgisapp.h"
2121
#include "qgscoordinatetransform.h"
2222
#include "qgsrasterlayerproperties.h"
23-
#include "qgslayerprojectionselector.h"
23+
#include "qgsgenericprojectionselector.h"
2424
#include "qgsproject.h"
2525
#include "qgsrasterbandstats.h"
2626
#include "qgsrasterlayer.h"
@@ -1704,11 +1704,11 @@ void QgsRasterLayerProperties::on_pbnAddValuesManually_clicked()
17041704
void QgsRasterLayerProperties::on_pbnChangeSpatialRefSys_clicked()
17051705
{
17061706

1707-
QgsLayerProjectionSelector * mySelector = new QgsLayerProjectionSelector(this);
1707+
QgsGenericProjectionSelector * mySelector = new QgsGenericProjectionSelector(this);
17081708
mySelector->setSelectedSRSID(mRasterLayer->srs().srsid());
17091709
if(mySelector->exec())
17101710
{
1711-
QgsSpatialRefSys srs(mySelector->getCurrentSRSID(), QgsSpatialRefSys::QGIS_SRSID);
1711+
QgsSpatialRefSys srs(mySelector->getSelectedSRSID(), QgsSpatialRefSys::QGIS_SRSID);
17121712
mRasterLayer->setSrs(srs);
17131713
}
17141714
else

src/app/qgsserversourceselect.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
#include "qgsserversourceselect.h"
2020

21-
#include "qgslayerprojectionselector.h"
21+
#include "qgsgenericprojectionselector.h"
2222

2323
#include "qgsnewhttpconnection.h"
2424
#include "qgsnumericsortlistviewitem.h"
@@ -429,8 +429,9 @@ void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked()
429429

430430
QSet<QString> crsFilter = mWmsProvider->supportedCrsForLayers(m_selectedLayers);
431431

432-
QgsLayerProjectionSelector * mySelector =
433-
new QgsLayerProjectionSelector(this);
432+
QgsGenericProjectionSelector * mySelector =
433+
new QgsGenericProjectionSelector(this);
434+
mySelector->setMessage();
434435

435436
mySelector->setOgcWmsCrsFilter(crsFilter);
436437

@@ -443,15 +444,15 @@ void QgsServerSourceSelect::on_btnChangeSpatialRefSys_clicked()
443444

444445
if (mySelector->exec())
445446
{
446-
m_Epsg = mySelector->getCurrentEpsg();
447+
m_Epsg = mySelector->getSelectedEpsg();
447448
}
448449
else
449450
{
450451
// NOOP
451452
}
452453

453454
labelCoordRefSys->setText( descriptionForEpsg(m_Epsg) );
454-
// labelCoordRefSys->setText( mySelector->getCurrentProj4String() );
455+
// labelCoordRefSys->setText( mySelector->getSelectedProj4String() );
455456

456457
delete mySelector;
457458

src/app/qgsvectorlayerproperties.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
#include "qgsgraduatedsymboldialog.h"
2828
#include "qgslabeldialog.h"
2929
#include "qgslabel.h"
30-
#include "qgslayerprojectionselector.h"
30+
#include "qgsgenericprojectionselector.h"
3131
#include "qgslogger.h"
3232
#include "qgsproject.h"
3333
#include "qgssinglesymboldialog.h"
@@ -609,11 +609,12 @@ QString QgsVectorLayerProperties::getMetadata()
609609

610610
void QgsVectorLayerProperties::on_pbnChangeSpatialRefSys_clicked()
611611
{
612-
QgsLayerProjectionSelector * mySelector = new QgsLayerProjectionSelector(this);
612+
QgsGenericProjectionSelector * mySelector = new QgsGenericProjectionSelector(this);
613+
mySelector->setMessage();
613614
mySelector->setSelectedSRSID(layer->srs().srsid());
614615
if(mySelector->exec())
615616
{
616-
QgsSpatialRefSys srs(mySelector->getCurrentSRSID(), QgsSpatialRefSys::QGIS_SRSID);
617+
QgsSpatialRefSys srs(mySelector->getSelectedSRSID(), QgsSpatialRefSys::QGIS_SRSID);
617618
layer->setSrs(srs);
618619
}
619620
else

src/gui/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ qgsdetaileditemwidget.cpp
99
qgsdetaileditemdata.cpp
1010
qgsencodingfiledialog.cpp
1111
qgsfiledropedit.cpp
12-
qgslayerprojectionselector.cpp
12+
qgsgenericprojectionselector.cpp
1313
qgsmapcanvas.cpp
1414
qgsmapcanvasitem.cpp
1515
qgsmapcanvasmap.cpp
@@ -32,7 +32,7 @@ qgsdetaileditemdelegate.h
3232
qgsdetaileditemwidget.h
3333
qgisinterface.h
3434
qgsencodingfiledialog.h
35-
qgslayerprojectionselector.h
35+
qgsgenericprojectionselector.h
3636
qgsmapcanvas.h
3737
qgsmapoverviewcanvas.h
3838
qgsmaptoolemitpoint.h
@@ -101,7 +101,7 @@ qgscolorbutton.h
101101
qgscursors.h
102102
qgsencodingfiledialog.h
103103
qgsfiledropedit.h
104-
qgslayerprojectionselector.h
104+
qgsgenericprojectionselector.h
105105
qgsmapcanvas.h
106106
qgsmapcanvasitem.h
107107
qgsmapcanvasmap.h
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/***************************************************************************
2+
qgsgenericprojectionselector.cpp
3+
Set user defined CRS using projection selector widget
4+
-------------------
5+
begin : May 28, 2004
6+
copyright : (C) 2004 by Gary E.Sherman
7+
email : sherman at mrcc.com
8+
***************************************************************************/
9+
10+
/***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************/
18+
/* $Id$ */
19+
#include "qgsgenericprojectionselector.h"
20+
#include <QApplication>
21+
22+
/**
23+
* \class QgsGenericProjectionSelector
24+
* \brief A generic dialog to prompt the user for a Coordinate Reference System
25+
*/
26+
QgsGenericProjectionSelector::QgsGenericProjectionSelector(QWidget *parent,
27+
Qt::WFlags fl)
28+
: QDialog(parent, fl)
29+
{
30+
setupUi(this);
31+
32+
33+
connect(pbnOK, SIGNAL(clicked()), this, SLOT( accept()));
34+
//we will show this only when a message is set
35+
textEdit->hide();
36+
QApplication::restoreOverrideCursor();
37+
}
38+
39+
void QgsGenericProjectionSelector::setMessage(QString theMessage)
40+
{
41+
//short term kludge to make the layer selector default to showing
42+
//a layer projection selection message. If you want the selector
43+
if (theMessage.isEmpty())
44+
{
45+
// Set up text edit pane
46+
QString format("<h2>%1</h2>%2 %3");
47+
QString header = tr("Define this layer's projection:");
48+
QString sentence1 = tr("This layer appears to have no projection specification.");
49+
QString sentence2 = tr("By default, this layer will now have its projection set to that of the project"
50+
", but you may override this by selecting a different projection below.");
51+
textEdit->setHtml(format.arg(header).arg(sentence1)
52+
.arg(sentence2));
53+
}
54+
else
55+
{
56+
textEdit->setHtml(theMessage);
57+
}
58+
textEdit->show();
59+
60+
}
61+
//! Destructor
62+
QgsGenericProjectionSelector::~QgsGenericProjectionSelector()
63+
{}
64+
65+
void QgsGenericProjectionSelector::setSelectedSRSName(QString theName)
66+
{
67+
projectionSelector->setSelectedSRSName(theName);
68+
}
69+
70+
void QgsGenericProjectionSelector::setSelectedSRSID(long theID)
71+
{
72+
projectionSelector->setSelectedSRSID(theID);
73+
}
74+
75+
void QgsGenericProjectionSelector::setSelectedEpsg(long theID)
76+
{
77+
projectionSelector->setSelectedEpsg(theID);
78+
}
79+
80+
QString QgsGenericProjectionSelector::getSelectedProj4String()
81+
{
82+
//@NOTE dont use getSelectedWKT as that just returns the name part!
83+
return projectionSelector->getSelectedProj4String();
84+
}
85+
86+
long QgsGenericProjectionSelector::getSelectedSRSID()
87+
{
88+
//@NOTE dont use getSelectedWKT as that just returns the name part!
89+
return projectionSelector->getSelectedSRSID();
90+
}
91+
92+
long QgsGenericProjectionSelector::getSelectedEpsg()
93+
{
94+
return projectionSelector->getSelectedEpsg();
95+
}
96+
97+
void QgsGenericProjectionSelector::setOgcWmsCrsFilter(QSet<QString> crsFilter)
98+
{
99+
projectionSelector->setOgcWmsCrsFilter(crsFilter);
100+
}
101+

0 commit comments

Comments
 (0)