11/*
22 * Copyright 2012, 2013 Thomas Schöps
3- * Copyright 2012-2015 Kai Pastor
3+ * Copyright 2012-2020 Kai Pastor
44 *
55 * This file is part of OpenOrienteering.
66 *
@@ -41,9 +41,10 @@ namespace OpenOrienteering {
4141namespace {
4242
4343enum SpecialCRS {
44- SameAsMap = 1 ,
45- Local = 2 ,
46- Geographic = 3
44+ SameAsMap = 1 ,
45+ Local = 2 ,
46+ Geographic = 3 ,
47+ TemplateFile = 4 ,
4748};
4849
4950
@@ -52,34 +53,30 @@ enum SpecialCRS {
5253
5354
5455SelectCRSDialog::SelectCRSDialog (
56+ const TemplateImage::GeoreferencingOptions& options,
5557 const Georeferencing& georef,
5658 QWidget* parent,
57- GeorefAlternatives alternatives,
5859 const QString& description )
5960 : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint)
61+ , options(options)
6062 , georef(georef)
6163{
6264 setWindowModality (Qt::WindowModal);
6365 setWindowTitle (tr (" Select coordinate reference system" ));
6466
6567 crs_selector = new CRSSelector (georef, nullptr );
6668 if (georef.isLocal ())
67- crs_selector->clear ();
68-
69- if (alternatives.testFlag (TakeFromMap) && !georef.isLocal ())
70- {
71- crs_selector->addCustomItem (tr (" Same as map" ), SpecialCRS::SameAsMap);
72- crs_selector->setCurrentIndex (0 ); // TakeFromMap
73- }
74-
75- if (alternatives.testFlag (Local) || georef.isLocal ())
7669 {
70+ crs_selector->clear ();
7771 crs_selector->addCustomItem (tr (" Local" ), SpecialCRS::Local);
78- crs_selector->setCurrentIndex (0 ); // TakeFromMap or Local, both is fine.
7972 }
80-
81- if (alternatives.testFlag (Geographic) && !georef.isLocal ())
73+ else
74+ {
75+ if (!options.template_file .crs_spec .isEmpty ())
76+ crs_selector->addCustomItem (tr (" From template file" ), SpecialCRS::TemplateFile );
77+ crs_selector->addCustomItem (tr (" Same as map" ), SpecialCRS::SameAsMap);
8278 crs_selector->addCustomItem (tr (" Geographic coordinates (WGS84)" ), SpecialCRS::Geographic);
79+ }
8380
8481 status_label = new QLabel ();
8582 button_box = new QDialogButtonBox (QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
@@ -95,6 +92,20 @@ SelectCRSDialog::SelectCRSDialog(
9592 form_layout->addItem (Util::SpacerItem::create (this ));
9693 crs_selector->setDialogLayout (form_layout);
9794
95+ auto const & crs_spec = options.effective .crs_spec ;
96+ if (georef.isLocal ())
97+ crs_selector->setCurrentIndex (0 );
98+ else if (crs_spec.isEmpty ())
99+ crs_selector->setCurrentIndex (crs_selector->findData (SpecialCRS::SameAsMap));
100+ else if (crs_spec == options.template_file .crs_spec )
101+ crs_selector->setCurrentIndex (crs_selector->findData (SpecialCRS::TemplateFile));
102+ else if (crs_spec == georef.getProjectedCRSSpec ())
103+ crs_selector->setCurrentIndex (crs_selector->findData (SpecialCRS::SameAsMap));
104+ else if (crs_spec == Georeferencing::geographic_crs_spec)
105+ crs_selector->setCurrentIndex (crs_selector->findData (SpecialCRS::Geographic));
106+ else
107+ crs_selector->setCurrentCRS (CRSTemplateRegistry ().find (QString::fromLatin1 (" PROJ.4" )), { crs_spec });
108+
98109 auto layout = new QVBoxLayout ();
99110 layout->addLayout (form_layout, 1 );
100111 layout->addWidget (button_box, 0 );
@@ -121,6 +132,9 @@ QString SelectCRSDialog::currentCRSSpec() const
121132 case SpecialCRS::Geographic:
122133 spec = Georeferencing::geographic_crs_spec;
123134 break ;
135+ case SpecialCRS::TemplateFile:
136+ spec = options.template_file .crs_spec ;
137+ break ;
124138 default :
125139 spec = crs_selector->currentCRSSpec ();
126140 }
0 commit comments