From d4be99f79b5b87594e246043b891fa384d117d8b Mon Sep 17 00:00:00 2001 From: oaq Date: Sat, 31 May 2025 02:14:42 +1000 Subject: [PATCH] gui tide correction options Expand the tide corrections options exposed in the gui apps. This just adds a list entry for each combination. An alternative would be to replace the pull down list with three check boxes. --- app/qtapp/appcmn_qt/navi_post_opt.cpp | 19 +++++++++++-------- app/qtapp/appcmn_qt/navi_post_opt.ui | 25 +++++++++++++++++++++++++ app/qtapp/rtknavi_qt/mondlg.cpp | 14 ++++++++++---- app/winapp/rtknavi/mondlg.cpp | 10 ++++++++-- app/winapp/rtknavi/naviopt.cpp | 10 ++++------ app/winapp/rtknavi/naviopt.dfm | 14 ++++++++++---- app/winapp/rtkpost/postmain.cpp | 3 +-- app/winapp/rtkpost/postopt.cpp | 5 ++--- app/winapp/rtkpost/postopt.dfm | 15 ++++++++++----- 9 files changed, 81 insertions(+), 34 deletions(-) diff --git a/app/qtapp/appcmn_qt/navi_post_opt.cpp b/app/qtapp/appcmn_qt/navi_post_opt.cpp index ca9c89be6..4f38fa85d 100644 --- a/app/qtapp/appcmn_qt/navi_post_opt.cpp +++ b/app/qtapp/appcmn_qt/navi_post_opt.cpp @@ -67,7 +67,12 @@ OptDialog::OptDialog(QWidget *parent, int opts) ui->cBTideCorrection->setItemData(0, tr("Not apply earth tides correction"), Qt::ToolTipRole); ui->cBTideCorrection->setItemData(1, tr("Apply solid earth tides correction"), Qt::ToolTipRole); - ui->cBTideCorrection->setItemData(2, tr("Apply solid earth tides, OTL (ocean tide loading) and pole tide corrections"), Qt::ToolTipRole); + ui->cBTideCorrection->setItemData(2, tr("Apply OTL (ocean tide loading)"), Qt::ToolTipRole); + ui->cBTideCorrection->setItemData(3, tr("Apply solid earth tides and OTL (ocean tide loading)"), Qt::ToolTipRole); + ui->cBTideCorrection->setItemData(4, tr("Apply pole tide corrections"), Qt::ToolTipRole); + ui->cBTideCorrection->setItemData(5, tr("Apply solid earth tides and pole tide corrections"), Qt::ToolTipRole); + ui->cBTideCorrection->setItemData(6, tr("Apply OTL (ocean tide loading) and pole tide corrections"), Qt::ToolTipRole); + ui->cBTideCorrection->setItemData(7, tr("Apply solid earth tides, OTL (ocean tide loading) and pole tide corrections"), Qt::ToolTipRole); ui->cBIonosphereOption->setItemData(IONOOPT_OFF, tr("Not apply ionospheric correction"), Qt::ToolTipRole); ui->cBIonosphereOption->setItemData(IONOOPT_BRDC, tr("Apply broadcast ionospheric model"), Qt::ToolTipRole); @@ -705,8 +710,7 @@ void OptDialog::updateOptions() processingOptions.ionoopt = ui->cBIonosphereOption->currentIndex(); processingOptions.tropopt = ui->cBTroposphereOption->currentIndex(); processingOptions.dynamics = ui->cBDynamicModel->currentIndex(); - processingOptions.tidecorr = ui->cBTideCorrection->currentIndex(); - if (processingOptions.tidecorr > 1) processingOptions.tidecorr = 7; + processingOptions.tidecorr = ui->cBTideCorrection->currentIndex() & 7; processingOptions.niter = ui->sBNumIteration->value(); // codesmooth processingOptions.intpref = ui->cBIntputReferenceObservation->currentIndex(); @@ -933,7 +937,7 @@ void OptDialog::updateUi(const prcopt_t &prcopt, const solopt_t &solopt, const f ui->cBIonosphereOption->setCurrentIndex(prcopt.ionoopt); ui->cBTroposphereOption->setCurrentIndex(prcopt.tropopt); ui->cBDynamicModel->setCurrentIndex(prcopt.dynamics); - ui->cBTideCorrection->setCurrentIndex(prcopt.tidecorr > 1 ? 2 : prcopt.tidecorr); + ui->cBTideCorrection->setCurrentIndex(prcopt.tidecorr & 7); ui->sBNumIteration->setValue(prcopt.niter); //prcopt.codesmooth if (options == PostOptions) { @@ -1132,8 +1136,7 @@ void OptDialog::save(const QString &file) procOpts.ionoopt = ui->cBIonosphereOption->currentIndex(); procOpts.tropopt = ui->cBTroposphereOption->currentIndex(); procOpts.dynamics = ui->cBDynamicModel->currentIndex(); - procOpts.tidecorr = ui->cBTideCorrection->currentIndex(); - if (procOpts.tidecorr > 1) procOpts.tidecorr = 7; + procOpts.tidecorr = ui->cBTideCorrection->currentIndex() & 7; procOpts.niter = ui->sBNumIteration->value(); // procOpts.codesmooth procOpts.intpref = ui->cBIntputReferenceObservation->currentIndex(); @@ -1312,7 +1315,7 @@ void OptDialog::saveOptions(QSettings &settings) settings.setValue("prcopt/ionoopt", ui->cBIonosphereOption->currentIndex()); settings.setValue("prcopt/tropopt", ui->cBTroposphereOption->currentIndex()); settings.setValue("prcopt/dynamics", ui->cBDynamicModel->currentIndex()); - settings.setValue("prcopt/tidecorr", ui->cBTideCorrection->currentIndex()); + settings.setValue("prcopt/tidecorr", ui->cBTideCorrection->currentIndex() & 7); settings.setValue("prcopt/niter", ui->sBNumIteration->value()); // settings.setValue("prcopt/codesmooth", processingOptions.codesmooth); settings.setValue("prcopt/intpref", ui->cBIntputReferenceObservation->currentIndex()); @@ -1511,7 +1514,7 @@ void OptDialog::loadOptions(QSettings &settings) ui->cBIonosphereOption->setCurrentIndex(settings.value("prcopt/ionoopt", IONOOPT_BRDC).toInt()); ui->cBTroposphereOption->setCurrentIndex(settings.value("prcopt/tropopt", TROPOPT_SAAS).toInt()); ui->cBDynamicModel->setCurrentIndex(settings.value("prcopt/dynamics", 0).toInt()); - ui->cBTideCorrection->setCurrentIndex(settings.value("prcopt/tidecorr", 0).toInt()); + ui->cBTideCorrection->setCurrentIndex(settings.value("prcopt/tidecorr", 0).toInt() & 7); ui->sBNumIteration->setValue(settings.value("prcopt/niter", 1).toInt()); // processingOptions.codesmooth = settings.value("prcopt/codesmooth", 0).toInt(); if (options == PostOptions) { diff --git a/app/qtapp/appcmn_qt/navi_post_opt.ui b/app/qtapp/appcmn_qt/navi_post_opt.ui index a69e2df57..e5c957bed 100644 --- a/app/qtapp/appcmn_qt/navi_post_opt.ui +++ b/app/qtapp/appcmn_qt/navi_post_opt.ui @@ -190,11 +190,36 @@ Solid + + + OTL + + Solid/OTL + + + S.Pole + + + + + Solid/S.Pole + + + + + OTL/S.Pole + + + + + Solid/OTL/S.Pole + + diff --git a/app/qtapp/rtknavi_qt/mondlg.cpp b/app/qtapp/rtknavi_qt/mondlg.cpp index cfa9bec1a..c83912a98 100644 --- a/app/qtapp/rtknavi_qt/mondlg.cpp +++ b/app/qtapp/rtknavi_qt/mondlg.cpp @@ -393,7 +393,7 @@ void MonitorDialog::setRtk() int width[] = {500, 500}; ui->tWConsole->setColumnCount(2); - ui->tWConsole->setRowCount(52 + NFREQ*2); + ui->tWConsole->setRowCount(53 + NFREQ*2); ui->tWConsole->setHorizontalHeaderLabels(header); for (int i = 0; (i < ui->tWConsole->columnCount()) && (i < 2); i++) @@ -486,7 +486,7 @@ void MonitorDialog::showRtk() if (rtk->opt.navsys & SYS_IRN) navsys = navsys + tr("NavIC "); if (rtk->opt.navsys & SYS_SBS) navsys = navsys + tr("SBAS "); - if (ui->tWConsole->rowCount() < 55) { + if (ui->tWConsole->rowCount() < 53 + NFREQ * 2) { free(rtk); return; } @@ -532,8 +532,14 @@ void MonitorDialog::showRtk() .arg(rtk->opt.snrmask.mask[2][3], 0).arg(rtk->opt.snrmask.mask[2][4], 0).arg(rtk->opt.snrmask.mask[2][5], 0) .arg(rtk->opt.snrmask.mask[2][6], 0).arg(rtk->opt.snrmask.mask[2][7], 0).arg(rtk->opt.snrmask.mask[2][8], 0)); - ui->tWConsole->item(row, 0)->setText(tr("Rec Dynamic/Earth Tides Correction")); - ui->tWConsole->item(row++, 1)->setText(QStringLiteral("%1, %2").arg(rtk->opt.dynamics ? tr("ON") : tr("OFF"), rtk->opt.tidecorr ? tr("ON") : tr("OFF"))); + ui->tWConsole->item(row, 0)->setText(tr("Rec Dynamics")); + ui->tWConsole->item(row++, 1)->setText(QStringLiteral("%1").arg(rtk->opt.dynamics ? tr("ON") : tr("OFF"))); + + ui->tWConsole->item(row, 0)->setText(tr("Earth Tides Correction")); + const char *tideopts[]={"OFF","Solid Earth","Ocean Loading","Solid Earth + Ocean Loading", + "Solid Pole","Solid Earth + Solid Pole","Ocean Loading + Sold Pole", + "Solid Earth + Ocean Loading + Solid Pole"}; + ui->tWConsole->item(row++, 1)->setText(QStringLiteral("%1").arg(tideopts[rtk->opt.tidecorr & 7])); ui->tWConsole->item(row, 0)->setText(tr("Ionosphere/Troposphere Model")); ui->tWConsole->item(row++, 1)->setText(QStringLiteral("%1, %2").arg(ionoopt[rtk->opt.ionoopt < 0 || rtk->opt.ionoopt > 6 ? 0 : rtk->opt.ionoopt], diff --git a/app/winapp/rtknavi/mondlg.cpp b/app/winapp/rtknavi/mondlg.cpp index 95cebbddb..f936dbec9 100644 --- a/app/winapp/rtknavi/mondlg.cpp +++ b/app/winapp/rtknavi/mondlg.cpp @@ -484,8 +484,14 @@ void __fastcall TMonitorDialog::ShowRtk(void) rtk->opt.snrmask.mask[3][0],rtk->opt.snrmask.mask[3][1],rtk->opt.snrmask.mask[3][2], rtk->opt.snrmask.mask[3][3],rtk->opt.snrmask.mask[3][4],rtk->opt.snrmask.mask[3][5], rtk->opt.snrmask.mask[3][6],rtk->opt.snrmask.mask[3][7],rtk->opt.snrmask.mask[3][8]); - Tbl->Cells[0][i ]="Rec Dynamic/Earth Tides Correction"; - Tbl->Cells[1][i++]=s.sprintf("%s, %s",rtk->opt.dynamics?"ON":"OFF",rtk->opt.tidecorr?"ON":"OFF"); + + Tbl->Cells[0][i ]="Rec Dynamics"; + Tbl->Cells[1][i++]=s.sprintf("%s",rtk->opt.dynamics?"ON":"OFF"); + + Tbl->Cells[0][i ]="Earth Tides Correction"; + const char *tideopts[]={"OFF","Solid Earth","Ocean Loading","Solid Earth + Ocean Loading","Solid Pole", + "Solid Earth + Solid Pole","Ocean Loading + Sold Pole","Solid Earth + Ocean Loading + Solid Pole"}; + Tbl->Cells[1][i++]=s.sprintf("%s", tideopts[rtk->opt.tidecorr & 7]); Tbl->Cells[0][i ]="Ionosphere/Troposphere Model"; Tbl->Cells[1][i++]=s.sprintf("%s, %s",ionoopt[rtk->opt.ionoopt],tropopt[rtk->opt.tropopt]); diff --git a/app/winapp/rtknavi/naviopt.cpp b/app/winapp/rtknavi/naviopt.cpp index 78fa19289..c974459d9 100644 --- a/app/winapp/rtknavi/naviopt.cpp +++ b/app/winapp/rtknavi/naviopt.cpp @@ -421,7 +421,7 @@ void __fastcall TOptDialog::GetOpt(void) Freq ->ItemIndex=PrcOpt.nf-1>NFREQ-1?NFREQ-1:PrcOpt.nf-1; ElMask ->Text =s.sprintf("%.0f",PrcOpt.elmin*R2D); DynamicModel ->ItemIndex=PrcOpt.dynamics; - TideCorr ->ItemIndex=PrcOpt.tidecorr > 1 ? 2 : PrcOpt.tidecorr; + TideCorr ->ItemIndex=PrcOpt.tidecorr & 7; IonoOpt ->ItemIndex=PrcOpt.ionoopt; TropOpt ->ItemIndex=PrcOpt.tropopt; SatEphem ->ItemIndex=PrcOpt.sateph; @@ -565,8 +565,7 @@ void __fastcall TOptDialog::SetOpt(void) PrcOpt.nf =Freq ->ItemIndex+1; PrcOpt.elmin =str2dbl(ElMask ->Text)*D2R; PrcOpt.dynamics =DynamicModel->ItemIndex; - PrcOpt.tidecorr =TideCorr ->ItemIndex; - if (PrcOpt.tidecorr > 1) PrcOpt.tidecorr = 7; + PrcOpt.tidecorr =TideCorr ->ItemIndex & 7; PrcOpt.ionoopt =IonoOpt ->ItemIndex; PrcOpt.tropopt =TropOpt ->ItemIndex; PrcOpt.sateph =SatEphem ->ItemIndex; @@ -752,7 +751,7 @@ void __fastcall TOptDialog::LoadOpt(AnsiString file) ElMask ->Text =s.sprintf("%.0f",prcopt.elmin*R2D); PrcOpt.snrmask =prcopt.snrmask; DynamicModel ->ItemIndex =prcopt.dynamics; - TideCorr ->ItemIndex =prcopt.tidecorr > 1 ? 2 : prcopt.tidecorr; + TideCorr ->ItemIndex =prcopt.tidecorr & 7; IonoOpt ->ItemIndex =prcopt.ionoopt; TropOpt ->ItemIndex =prcopt.tropopt; SatEphem ->ItemIndex =prcopt.sateph; @@ -994,8 +993,7 @@ void __fastcall TOptDialog::SaveOpt(AnsiString file) prcopt.elmin =str2dbl(ElMask ->Text)*D2R; prcopt.snrmask =PrcOpt.snrmask; prcopt.dynamics =DynamicModel->ItemIndex; - prcopt.tidecorr =TideCorr ->ItemIndex; - if (prcopt.tidecorr > 1) prcopt.tidecorr = 7; + prcopt.tidecorr =TideCorr ->ItemIndex & 7; prcopt.ionoopt =IonoOpt ->ItemIndex; prcopt.tropopt =TropOpt ->ItemIndex; prcopt.sateph =SatEphem ->ItemIndex; diff --git a/app/winapp/rtknavi/naviopt.dfm b/app/winapp/rtknavi/naviopt.dfm index 0be0683e1..f1763cda6 100644 --- a/app/winapp/rtknavi/naviopt.dfm +++ b/app/winapp/rtknavi/naviopt.dfm @@ -199,7 +199,7 @@ object OptDialog: TOptDialog object DynamicModel: TComboBox Left = 248 Top = 136 - Width = 75 + Width = 45 Height = 21 Style = csDropDownList ItemIndex = 0 @@ -210,9 +210,9 @@ object OptDialog: TOptDialog 'ON') end object TideCorr: TComboBox - Left = 325 + Left = 295 Top = 136 - Width = 75 + Width = 105 Height = 21 Style = csDropDownList ItemIndex = 0 @@ -220,7 +220,13 @@ object OptDialog: TOptDialog Text = 'OFF' Items.Strings = ( 'OFF' - 'Solid') + 'Solid Earth Tide' + 'Ocean Tide Loading' + 'Solid Earth + OTL' + 'Solid Pole' + 'Solid Earth + Pole' + 'OTL + Solid Pole' + 'Solid + OTL + Pole') end object IonoOpt: TComboBox Left = 248 diff --git a/app/winapp/rtkpost/postmain.cpp b/app/winapp/rtkpost/postmain.cpp index 1feccb1d3..273becd59 100644 --- a/app/winapp/rtkpost/postmain.cpp +++ b/app/winapp/rtkpost/postmain.cpp @@ -1000,8 +1000,7 @@ int __fastcall TMainForm::GetOption(prcopt_t &prcopt, solopt_t &solopt, prcopt.posopt[4]=PosOpt[4]; prcopt.posopt[5]=PosOpt[5]; prcopt.dynamics =DynamicModel; - prcopt.tidecorr =TideCorr; - if (prcopt.tidecorr > 1) prcopt.tidecorr = 7; + prcopt.tidecorr =TideCorr & 7; prcopt.armaxiter=ARIter; prcopt.niter =NumIter; prcopt.minfixsats=MinFixSats; diff --git a/app/winapp/rtkpost/postopt.cpp b/app/winapp/rtkpost/postopt.cpp index eec8cfaa6..2e31c813d 100644 --- a/app/winapp/rtkpost/postopt.cpp +++ b/app/winapp/rtkpost/postopt.cpp @@ -636,7 +636,7 @@ void __fastcall TOptDialog::LoadOpt(AnsiString file) ElMask ->Text =s.sprintf("%.0f",prcopt.elmin*R2D); SnrMask =prcopt.snrmask; DynamicModel ->ItemIndex =prcopt.dynamics; - TideCorr ->ItemIndex =prcopt.tidecorr > 1 ? 2 : prcopt.tidecorr; + TideCorr ->ItemIndex =prcopt.tidecorr & 7; IonoOpt ->ItemIndex =prcopt.ionoopt; TropOpt ->ItemIndex =prcopt.tropopt; SatEphem ->ItemIndex =prcopt.sateph; @@ -797,8 +797,7 @@ int ppp=PosMode->ItemIndex>=PMODE_PPP_KINEMA; prcopt.elmin =str2dbl(ElMask ->Text)*D2R; prcopt.snrmask =SnrMask; prcopt.dynamics =DynamicModel->ItemIndex; - prcopt.tidecorr =TideCorr ->ItemIndex; - if (prcopt.tidecorr > 1) prcopt.tidecorr = 7; + prcopt.tidecorr =TideCorr ->ItemIndex & 7; prcopt.ionoopt =IonoOpt ->ItemIndex; prcopt.tropopt =TropOpt ->ItemIndex; prcopt.sateph =SatEphem ->ItemIndex; diff --git a/app/winapp/rtkpost/postopt.dfm b/app/winapp/rtkpost/postopt.dfm index 14ba9f8aa..51eca576c 100644 --- a/app/winapp/rtkpost/postopt.dfm +++ b/app/winapp/rtkpost/postopt.dfm @@ -216,7 +216,7 @@ object OptDialog: TOptDialog object DynamicModel: TComboBox Left = 248 Top = 92 - Width = 75 + Width = 45 Height = 21 Style = csDropDownList ItemIndex = 0 @@ -228,9 +228,9 @@ object OptDialog: TOptDialog 'ON') end object TideCorr: TComboBox - Left = 325 + Left = 295 Top = 92 - Width = 75 + Width = 105 Height = 21 Style = csDropDownList ItemIndex = 0 @@ -238,8 +238,13 @@ object OptDialog: TOptDialog Text = 'OFF' Items.Strings = ( 'OFF' - 'Solid' - 'Solid/OTL') + 'Solid Earth Tide' + 'Ocean Tide Loading' + 'Solid Earth + OTL' + 'Solid Pole' + 'Solid Earth + Pole' + 'OTL + Solid Pole' + 'Solid + OTL + Pole') end object IonoOpt: TComboBox Left = 248