TemplateTrack::TemplateTrack(const QString& path, Map* map) : Template(path, map) { // set default value track_crs_spec = QString::fromLatin1("+proj=latlong +datum=WGS84"); const Georeferencing& georef = map->getGeoreferencing(); connect(&georef, SIGNAL(projectionChanged()), this, SLOT(updateGeoreferencing())); connect(&georef, SIGNAL(transformationChanged()), this, SLOT(updateGeoreferencing())); connect(&georef, SIGNAL(stateChanged()), this, SLOT(updateGeoreferencing())); connect(&georef, SIGNAL(declinationChanged()), this, SLOT(updateGeoreferencing())); }
void TargetsDialog::teardownConnections() { disconnect(ui->closeStelWindow, SIGNAL(clicked()), this, SLOT(close())); disconnect(ui->targetsListView->selectionModel() , SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SLOT(populateFormWithIndex(QModelIndex))); disconnect(ui->typeComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(targetTypeChanged(const QString&))); disconnect(ui->addTargetButton, SIGNAL(clicked()), this, SLOT(insertNewTarget())); disconnect(ui->deleteTargetButton, SIGNAL(clicked()), this, SLOT(deleteSelectedTarget())); disconnect(ui->addFromSelectionButton, SIGNAL(clicked()), this, SLOT(createTargetFromSelection())); disconnect(ui->aliasLineEdit, SIGNAL(editingFinished()), this, SLOT(aliasChanged())); disconnect(ui->catalogNumberLineEdit, SIGNAL(editingFinished()), this, SLOT(catalogNumberChanged())); disconnect(ui->j2000DecLineEdit, SIGNAL(editingFinished()), this, SLOT(declinationChanged())); disconnect(ui->j2000RALineEdit, SIGNAL(editingFinished()), this, SLOT(rightAscentionChanged())); disconnect(ui->distanceLineEdit, SIGNAL(editingFinished()), this, SLOT(distanceChanged())); disconnect(ui->magnitudeLineEdit, SIGNAL(editingFinished()), this, SLOT(magnitudeChanged())); disconnect(ui->sizeLineEdit, SIGNAL(editingFinished()), this, SLOT(sizeChanged())); disconnect(ui->notesTextEdit, SIGNAL(textChanged()), this, SLOT(notesChanged())); }
GeoreferencingDialog::GeoreferencingDialog( QWidget* parent, MapEditorController* controller, Map* map, const Georeferencing* initial, bool allow_no_georeferencing ) : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint) , controller(controller) , map(map) , initial_georef(initial ? initial : &map->getGeoreferencing()) , georef(new Georeferencing(*initial_georef)) , allow_no_georeferencing(allow_no_georeferencing) , tool_active(false) , declination_query_in_progress(false) , grivation_locked(!initial_georef->isValid() || initial_georef->getState() != Georeferencing::Normal) , original_declination(0.0) { if (!grivation_locked) original_declination = initial_georef->getDeclination(); setWindowTitle(tr("Map Georeferencing")); setWindowModality(Qt::WindowModal); // Create widgets QLabel* map_crs_label = Util::Headline::create(tr("Map coordinate reference system")); crs_selector = new CRSSelector(*georef, nullptr); crs_selector->addCustomItem(tr("- local -"), Georeferencing::Local); status_label = new QLabel(tr("Status:")); status_field = new QLabel(); QLabel* reference_point_label = Util::Headline::create(tr("Reference point")); ref_point_button = new QPushButton(tr("&Pick on map")); int ref_point_button_width = ref_point_button->sizeHint().width(); QLabel* geographic_datum_label = new QLabel(tr("(Datum: WGS84)")); int geographic_datum_label_width = geographic_datum_label->sizeHint().width(); map_x_edit = Util::SpinBox::create<MapCoordF>(tr("mm")); map_y_edit = Util::SpinBox::create<MapCoordF>(tr("mm")); ref_point_button->setEnabled(controller != nullptr); QHBoxLayout* map_ref_layout = new QHBoxLayout(); map_ref_layout->addWidget(map_x_edit, 1); map_ref_layout->addWidget(new QLabel(tr("X", "x coordinate")), 0); map_ref_layout->addWidget(map_y_edit, 1); map_ref_layout->addWidget(new QLabel(tr("Y", "y coordinate")), 0); if (ref_point_button_width < geographic_datum_label_width) map_ref_layout->addSpacing(geographic_datum_label_width - ref_point_button_width); map_ref_layout->addWidget(ref_point_button, 0); easting_edit = Util::SpinBox::create<Util::RealMeters>(tr("m")); northing_edit = Util::SpinBox::create<Util::RealMeters>(tr("m")); QHBoxLayout* projected_ref_layout = new QHBoxLayout(); projected_ref_layout->addWidget(easting_edit, 1); projected_ref_layout->addWidget(new QLabel(tr("E", "west / east")), 0); projected_ref_layout->addWidget(northing_edit, 1); projected_ref_layout->addWidget(new QLabel(tr("N", "north / south")), 0); projected_ref_layout->addSpacing(qMax(ref_point_button_width, geographic_datum_label_width)); projected_ref_label = new QLabel(); lat_edit = Util::SpinBox::create(8, -90.0, +90.0, trUtf8("°")); lon_edit = Util::SpinBox::create(8, -180.0, +180.0, trUtf8("°")); QHBoxLayout* geographic_ref_layout = new QHBoxLayout(); geographic_ref_layout->addWidget(lat_edit, 1); geographic_ref_layout->addWidget(new QLabel(tr("N", "north")), 0); geographic_ref_layout->addWidget(lon_edit, 1); geographic_ref_layout->addWidget(new QLabel(tr("E", "east")), 0); if (geographic_datum_label_width < ref_point_button_width) geographic_ref_layout->addSpacing(ref_point_button_width - geographic_datum_label_width); geographic_ref_layout->addWidget(geographic_datum_label, 0); show_refpoint_label = new QLabel(tr("Show reference point in:")); link_label = new QLabel(); link_label->setOpenExternalLinks(true); keep_projected_radio = new QRadioButton(tr("Projected coordinates")); keep_geographic_radio = new QRadioButton(tr("Geographic coordinates")); if (georef->getState() == Georeferencing::Normal && georef->isValid()) { keep_geographic_radio->setChecked(true); } else { keep_geographic_radio->setEnabled(false); keep_projected_radio->setCheckable(true); } QLabel* map_north_label = Util::Headline::create(tr("Map north")); declination_edit = Util::SpinBox::create(Georeferencing::declinationPrecision(), -180.0, +180.0, trUtf8("°")); declination_button = new QPushButton(""); QHBoxLayout* declination_layout = new QHBoxLayout(); declination_layout->addWidget(declination_edit, 1); #if defined(QT_NETWORK_LIB) declination_layout->addWidget(declination_button, 0); #else connect(this, &QObject::destroyed, declination_button, &QObject::deleteLater); #endif grivation_label = new QLabel(); buttons_box = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Reset | QDialogButtonBox::Help, Qt::Horizontal); reset_button = buttons_box->button(QDialogButtonBox::Reset); reset_button->setEnabled(initial != nullptr); QPushButton* help_button = buttons_box->button(QDialogButtonBox::Help); auto edit_layout = new QFormLayout(); edit_layout->addRow(map_crs_label); edit_layout->addRow(tr("&Coordinate reference system:"), crs_selector); crs_selector->setDialogLayout(edit_layout); edit_layout->addRow(status_label, status_field); edit_layout->addItem(Util::SpacerItem::create(this)); edit_layout->addRow(reference_point_label); edit_layout->addRow(tr("Map coordinates:"), map_ref_layout); edit_layout->addRow(projected_ref_label, projected_ref_layout); edit_layout->addRow(tr("Geographic coordinates:"), geographic_ref_layout); edit_layout->addRow(show_refpoint_label, link_label); edit_layout->addRow(show_refpoint_label, link_label); edit_layout->addRow(tr("On CRS changes, keep:"), keep_projected_radio); edit_layout->addRow("", keep_geographic_radio); edit_layout->addItem(Util::SpacerItem::create(this)); edit_layout->addRow(map_north_label); edit_layout->addRow(tr("Declination:"), declination_layout); edit_layout->addRow(tr("Grivation:"), grivation_label); QVBoxLayout* layout = new QVBoxLayout(); layout->addLayout(edit_layout); layout->addStretch(); layout->addSpacing(16); layout->addWidget(buttons_box); setLayout(layout); connect(crs_selector, &CRSSelector::crsChanged, this, &GeoreferencingDialog::crsEdited); using TakingDoubleArgument = void (QDoubleSpinBox::*)(double); connect(map_x_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::mapRefChanged); connect(map_y_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::mapRefChanged); connect(ref_point_button, &QPushButton::clicked, this, &GeoreferencingDialog::selectMapRefPoint); connect(easting_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::eastingNorthingEdited); connect(northing_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::eastingNorthingEdited); connect(lat_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::latLonEdited); connect(lon_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::latLonEdited); connect(keep_geographic_radio, &QRadioButton::toggled, this, &GeoreferencingDialog::keepCoordsChanged); connect(declination_edit, (TakingDoubleArgument)&QDoubleSpinBox::valueChanged, this, &GeoreferencingDialog::declinationEdited); connect(declination_button, &QPushButton::clicked, this, &GeoreferencingDialog::requestDeclination); connect(buttons_box, &QDialogButtonBox::accepted, this, &GeoreferencingDialog::accept); connect(buttons_box, &QDialogButtonBox::rejected, this, &GeoreferencingDialog::reject); connect(reset_button, &QPushButton::clicked, this, &GeoreferencingDialog::reset); connect(help_button, &QPushButton::clicked, this, &GeoreferencingDialog::showHelp); connect(georef.data(), &Georeferencing::stateChanged, this, &GeoreferencingDialog::georefStateChanged); connect(georef.data(), &Georeferencing::transformationChanged, this, &GeoreferencingDialog::transformationChanged); connect(georef.data(), &Georeferencing::projectionChanged, this, &GeoreferencingDialog::projectionChanged); connect(georef.data(), &Georeferencing::declinationChanged, this, &GeoreferencingDialog::declinationChanged); transformationChanged(); georefStateChanged(); declinationChanged(); }