source: ntrip/trunk/BNC/src/pppWidgets.cpp@ 7948

Last change on this file since 7948 was 7943, checked in by stuerze, 10 years ago

the approach how to wait for clock corrections in PPP mode, which was well proven in BNC verson 2.11 is now re-implemented

File size: 27.8 KB
Line 
1// Part of BNC, a utility for retrieving decoding and
2// converting GNSS data streams from NTRIP broadcasters.
3//
4// Copyright (C) 2007
5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
7// Czech Technical University Prague, Department of Geodesy
8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
25/* -------------------------------------------------------------------------
26 * BKG NTRIP Client
27 * -------------------------------------------------------------------------
28 *
29 * Class: t_pppWidgets
30 *
31 * Purpose: This class stores widgets for PPP options
32 *
33 * Author: L. Mervart
34 *
35 * Created: 29-Jul-2014
36 *
37 * Changes:
38 *
39 * -----------------------------------------------------------------------*/
40
41#include <iostream>
42
43#include "pppWidgets.h"
44#include "qtfilechooser.h"
45#include "bncsettings.h"
46#include "bnccore.h"
47
48using namespace std;
49
50// Constructor
51////////////////////////////////////////////////////////////////////////////
52t_pppWidgets::t_pppWidgets() {
53
54 _dataSource = new QComboBox(); _dataSource ->setObjectName("PPP/dataSource"); _widgets << _dataSource;
55 _rinexObs = new qtFileChooser(); _rinexObs ->setObjectName("PPP/rinexObs"); _widgets << _rinexObs;
56 _rinexNav = new qtFileChooser(); _rinexNav ->setObjectName("PPP/rinexNav"); _widgets << _rinexNav;
57 _corrMount = new QLineEdit(); _corrMount ->setObjectName("PPP/corrMount"); _widgets << _corrMount;
58 _corrFile = new qtFileChooser(); _corrFile ->setObjectName("PPP/corrFile"); _widgets << _corrFile;
59 _crdFile = new qtFileChooser(); _crdFile ->setObjectName("PPP/crdFile"); _widgets << _crdFile;
60 _antexFile = new qtFileChooser(); _antexFile ->setObjectName("PPP/antexFile"); _widgets << _antexFile;
61 _logPath = new QLineEdit(); _logPath ->setObjectName("PPP/logPath"); _widgets << _logPath;
62 _nmeaPath = new QLineEdit(); _nmeaPath ->setObjectName("PPP/nmeaPath"); _widgets << _nmeaPath;
63 _snxtroPath = new QLineEdit(); _snxtroPath ->setObjectName("PPP/snxtroPath"); _widgets << _snxtroPath;
64 _snxtroSampl = new QSpinBox(); _snxtroSampl ->setObjectName("PPP/snxtroSampl"); _widgets << _snxtroSampl;
65 _snxtroIntr = new QComboBox(); _snxtroIntr ->setObjectName("PPP/snxtroIntr"); _widgets << _snxtroIntr;
66 _snxtroAc = new QLineEdit(); _snxtroAc ->setObjectName("PPP/snxtroAc"); _widgets << _snxtroAc;
67 _snxtroSol = new QLineEdit(); _snxtroSol ->setObjectName("PPP/snxtroSol"); _widgets << _snxtroSol;
68 _v3filenames = new QCheckBox(); _v3filenames ->setObjectName("PPP/v3filenames"); _widgets << _v3filenames;
69 _staTable = new QTableWidget(); _staTable ->setObjectName("PPP/staTable"); _widgets << _staTable;
70 _lcGPS = new QComboBox(); _lcGPS ->setObjectName("PPP/lcGPS"); _widgets << _lcGPS;
71 _lcGLONASS = new QComboBox(); _lcGLONASS ->setObjectName("PPP/lcGLONASS"); _widgets << _lcGLONASS;
72 _lcGalileo = new QComboBox(); _lcGalileo ->setObjectName("PPP/lcGalileo"); _widgets << _lcGalileo;
73 _lcBDS = new QComboBox(); _lcBDS ->setObjectName("PPP/lcBDS"); _widgets << _lcBDS;
74 _sigmaC1 = new QLineEdit(); _sigmaC1 ->setObjectName("PPP/sigmaC1"); _widgets << _sigmaC1;
75 _sigmaL1 = new QLineEdit(); _sigmaL1 ->setObjectName("PPP/sigmaL1"); _widgets << _sigmaL1;
76 _maxResC1 = new QLineEdit(); _maxResC1 ->setObjectName("PPP/maxResC1"); _widgets << _maxResC1;
77 _maxResL1 = new QLineEdit(); _maxResL1 ->setObjectName("PPP/maxResL1"); _widgets << _maxResL1;
78 _minObs = new QSpinBox(); _minObs ->setObjectName("PPP/minObs"); _widgets << _minObs;
79 _minEle = new QSpinBox(); _minEle ->setObjectName("PPP/minEle"); _widgets << _minEle;
80 _eleWgtCode = new QCheckBox(); _eleWgtCode ->setObjectName("PPP/eleWgtCode"); _widgets << _eleWgtCode;
81 _eleWgtPhase = new QCheckBox(); _eleWgtPhase ->setObjectName("PPP/eleWgtPhase"); _widgets << _eleWgtPhase;
82 _seedingTime = new QLineEdit(); _seedingTime ->setObjectName("PPP/seedingTime"); _widgets << _seedingTime;
83 _corrWaitTime = new QSpinBox(); _corrWaitTime->setObjectName("PPP/corrWaitTime"); _widgets << _corrWaitTime;
84
85 _addStaButton = new QPushButton("Add Station"); _widgets << _addStaButton;
86 _delStaButton = new QPushButton("Delete Station"); _widgets << _delStaButton;
87
88 _addStaButton->setWhatsThis(tr("<p>Hit the 'Add Station' button to add a new line to the Station table.</p>"));
89 _delStaButton->setWhatsThis(tr("<p>Hit the 'Delete Station' button to delete a highlighted row from the Station table.</p>"));
90
91 _plotCoordinates = new QLineEdit; _plotCoordinates ->setObjectName("PPP/plotCoordinates"); _widgets << _plotCoordinates;
92 _mapWinButton = new QPushButton; _mapWinButton ->setObjectName("PPP/mapWinButton"); _widgets << _mapWinButton;
93 _useGoogleMap = new QRadioButton; _useGoogleMap ->setObjectName("PPP/useGoogleMap"); _widgets << _useGoogleMap;
94 _useOpenStreetMap = new QRadioButton; _useOpenStreetMap->setObjectName("PPP/useOpenStreetMap"); _widgets << _useOpenStreetMap;
95 _audioResponse = new QLineEdit; _audioResponse ->setObjectName("PPP/audioResponse"); _widgets << _audioResponse;
96 _mapWinDotSize = new QLineEdit; _mapWinDotSize ->setObjectName("PPP/mapWinDotSize"); _widgets << _mapWinDotSize;
97 _mapWinDotColor = new QComboBox; _mapWinDotColor ->setObjectName("PPP/mapWinDotColor"); _widgets << _mapWinDotColor;
98 _mapSpeedSlider = new QSlider; _mapSpeedSlider ->setObjectName("PPP/mapSpeedSlider"); _widgets << _mapSpeedSlider;
99
100 _dataSource->setEditable(false);
101 _dataSource->addItems(QString(",Real-Time Streams,RINEX Files").split(","));
102 connect(_dataSource, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
103
104 connect(_snxtroPath, SIGNAL(textChanged(const QString &)),
105 this, SLOT(slotPPPTextChanged()));
106
107 connect(_snxtroAc, SIGNAL(textChanged(const QString &)),
108 this, SLOT(slotPPPTextChanged()));
109
110 connect(_snxtroSol, SIGNAL(textChanged(const QString &)),
111 this, SLOT(slotPPPTextChanged()));
112
113 slotEnableWidgets();
114
115 _lcGPS->setEditable(false);
116#ifdef USE_PPP_SSR_I
117 _lcGPS->addItems(QString("P3,P3&L3").split(","));
118#else
119 _lcGPS->addItems(QString("no,P1,L1,P1&L1,P2,L2,P2&L2,Pi,Li,Pi&Li,P3,L3,P3&L3").split(","));
120#endif
121
122 _lcGLONASS->setEditable(false);
123#ifdef USE_PPP_SSR_I
124 _lcGLONASS->addItems(QString("no,P3,L3,P3&L3").split(","));
125#else
126 _lcGLONASS->addItems(QString("no,P1,L1,P1&L1,P2,L2,P2&L2,Pi,Li,Pi&Li,P3,L3,P3&L3").split(","));
127#endif
128
129 _lcGalileo->setEditable(false);
130#ifdef USE_PPP_SSR_I
131 _lcGalileo->addItems(QString("no,P3,L3,P3&L3").split(","));
132#else
133 _lcGalileo->addItems(QString("no,P1,L1,P1&L1,P5,L5,P5&L5,Pi,Li,Pi&Li,P3,L3,P3&L3").split(","));
134#endif
135
136 _lcBDS->setEditable(false);
137#ifdef USE_PPP_SSR_I
138 _lcBDS->addItems(QString("no,P3,L3,P3&L3").split(","));
139#else
140 _lcBDS->addItems(QString("no,P2,L2,P2&L2,P7,L7,P7&L7,Pi,Li,Pi&Li,P3,L3,P3&L3").split(","));
141#endif
142
143 _snxtroSampl->setMinimum(0);
144 _snxtroSampl->setMaximum(300);
145 _snxtroSampl->setSingleStep(30);
146 _snxtroSampl->setSuffix(" sec");
147
148 _snxtroIntr->setEditable(false);
149 _snxtroIntr->addItems(QString("1 min,2 min,5 min,10 min,15 min,30 min,1 hour,1 day").split(","));
150 _snxtroIntr->setCurrentIndex(6);
151
152 _minObs->setMinimum(4);
153 _minObs->setMaximum(6);
154 _minObs->setSingleStep(1);
155
156 _minEle->setMinimum(0);
157 _minEle->setMaximum(20);
158 _minEle->setSingleStep(1);
159 _minEle->setSuffix(" deg");
160
161 _corrWaitTime->setMinimum(0);
162 _corrWaitTime->setMaximum(20);
163 _corrWaitTime->setSingleStep(1);
164 _corrWaitTime->setSuffix(" sec");
165
166 _staTable->setColumnCount(10);
167 _staTable->setRowCount(0);
168 _staTable->setHorizontalHeaderLabels(
169 QString("Station,Sigma N,Sigma E,Sigma H,Noise N,Noise E,Noise H,Tropo Sigma,Tropo Noise, NMEA Port").split(","));
170 _staTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
171 _staTable->setSelectionBehavior(QAbstractItemView::SelectRows);
172 _staTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
173 _staTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
174
175 connect(_addStaButton, SIGNAL(clicked()), this, SLOT(slotAddStation()));
176 connect(_delStaButton, SIGNAL(clicked()), this, SLOT(slotDelStation()));
177
178 _mapWinButton->setText("Open Map");
179
180 _mapWinDotColor->setEditable(false);
181 _mapWinDotColor->addItems(QString("red,yellow").split(","));
182
183 _mapSpeedSlider->setOrientation(Qt::Horizontal);
184 _mapSpeedSlider->setRange(1, 100);
185 _mapSpeedSlider->setTickPosition(QSlider::TicksBelow);
186 _mapSpeedSlider->setTickInterval(10);
187 connect(_mapSpeedSlider, SIGNAL(valueChanged(int)), BNC_CORE, SIGNAL(mapSpeedSliderChanged(int)));
188
189 // WhatsThis, PPP (2)
190 // ------------------
191 _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Stations North, East and Height coordinate components in meters. Specify also a Sigma in meters for a priori model based Tropospheric delays and a Sigma in meters per second for the delay's Noise.</p><p>Specifying one record per Station is mandatory. BNC will only process data for stations which are listed here. To define a station, specify the 'Mountpoint' when in 'Real-Time Streams' mode or the 4-character station ID when in 'RINEX Files' mode.</p><p>'Sigma' is meant to describe the uncertainty of a single coordinate or tropospheric delay estimated for one epoch. 'Noise' is meant to describe the variation of estimates from epoch to epoch.</p><p><ul><li>A Sigma of 100.0 meters may be an appropriate choice e.g. for the initial N/E/H coordinates. However, this value may be significantly smaller (i.e. 0.01) for stations with well-known a priori coordinates.</li><li>A Noise of 100.0 meters for the estimated N/E/H coordinates may also be appropriate considering the potential movement of a rover position.</li><li>A value of 0.1 meters may be an appropriate Sigma for the a priori model based Tropospheric delay estimation.</li><li>Specify a Noise to describe the expected variation of the tropospheric effect over time. Supposing 1Hz observation data, specifying a value of 3e-6 would mean that the tropospheric effect may vary 3600 * 3e-6 = 0.01 meters per hour.</li></ul></p><p>You can also specify a 'NMEA Port' to output coordinates in NMEA format through an IP port of your local host.</p>"));
192
193 // WhatsThis, PPP (3)
194 // ------------------
195 _corrWaitTime->setWhatsThis(tr("<p>Zero value means that BNC processes each epoch of data immediately after its arrival using satellite clock corrections available at that time.</p><p> Specifying a non-zero value (i.e. 5 sec) means that the epochs of data are buffered and the processing of each epoch is postponed till the satellite clock corrections not older than '5 sec' (example) become available.<p>"));
196 _seedingTime->setWhatsThis(tr("<p>Enter the length of a startup period in seconds for which you want to fix the PPP solutions to known a priori coordinates as introduced through option 'Coordinates file'. Adjust 'Sigma N/E/H' in the PPP Stations table according to the coordinate's precision. Fixing a priori coordinates is done in BNC through setting 'Sigma N/E/H' temporarily to zero.</p><p>This option allows the PPP solution to rapidly converge. It requires that the antenna remains unmoved on the a priori known position throughout the startup period.</p><p>A value of 60 is likely to be an appropriate choice.</p><p>Default is an empty option field, meaning that you don't want BNC to fix PPP solutions during startup to an a priori coordinate.</p>"));
197
198 // WhatsThis, PPP (4)
199 // ------------------
200 _plotCoordinates->setWhatsThis(tr("<p>For one of your PPP Stations BNC can produce a time series plot of coordinate displacements in the 'PPP Plot' tab below. Specify a 'Mountpoint' (when in 'Real-Time Streams' mode) or the 4-character station ID (when in 'RINEX Files' mode) to define the station whose coordinate displacements you would like to see plotted.</p><p>Note that this option makes only sense for a stationary receiver with known a priori marker coordinates as specified through PPP option 'Coordinates file'.</p><p>Default is an empty option field, meaning that BNC shall not produce a time series plot of PPP coordinate displacements.</p>"));
201 _audioResponse->setWhatsThis(tr("<p>Specify an 'Audio response' threshold in meters. A beep is produced by BNC whenever a horizontal PPP coordinate component differs by more than the threshold value from the a priori marker coordinate.</p><p>Default is an empty option field, meaning that you don't want BNC to produce alarm signals.</p>"));
202 _mapWinButton->setWhatsThis(tr("<p>You may like to track your rover position using Google Maps or Open Street Map as a background map. A 'Track map' can be produced with BNC in 'Real-Time Streams' or 'RINEX files' PPP mode.</p><p>The 'Open Map' button opens a windows showing a map according to specified options.</p><p>Even in 'RINEX files' post processing mode you should not forget to specify a proxy under the 'Network' tab if that is operated in front of BNC because the program needs to download the map data.</p>"));
203 _useGoogleMap->setWhatsThis(tr("<p>Specify Google Maps as the background for your rover positions.</p>"));
204 _useOpenStreetMap->setWhatsThis(tr("<p>Specify Open Street Map as the background for your rover positions.</p>"));
205 _mapWinDotSize->setWhatsThis(tr("<p>Specify the size of dots showing rover positions on the track map.</p><p>A dot size of '3' may be appropriate. The maximum possible dot size is '10'. An empty option field or a size of '0' would mean that you don't want BNC to show the rover's track on the map.</p>"));
206 _mapWinDotColor->setWhatsThis(tr("<p>Specify the color of dots showing the rover track on the map.</p>"));
207 _mapSpeedSlider->setWhatsThis(tr("<p>With BNC in 'RINEX files' PPP post processing mode you can specify the speed of computations as appropriate for 'Track map' visualization.</p><p>Note that you can adjust 'Post-processing speed' on-the-fly while BNC is already processing your observations.</p>"));
208
209 readOptions();
210}
211
212//
213////////////////////////////////////////////////////////////////////////////
214t_pppWidgets::~t_pppWidgets() {
215 delete _dataSource;
216 delete _rinexObs;
217 delete _rinexNav;
218 delete _corrMount;
219 delete _corrFile;
220 delete _crdFile;
221 delete _antexFile;
222 delete _logPath;
223 delete _nmeaPath;
224 delete _snxtroPath;
225 delete _snxtroSampl;
226 delete _snxtroIntr;
227 delete _snxtroAc;
228 delete _snxtroSol;
229 delete _v3filenames;
230 for (int iRow = _staTable->rowCount()-1; iRow >=0; iRow--) {
231 _staTable->removeRow(iRow);
232 }
233 delete _staTable;
234 delete _lcGPS;
235 delete _lcGLONASS;
236 delete _lcGalileo;
237 delete _lcBDS;
238 delete _sigmaC1;
239 delete _sigmaL1;
240 delete _maxResC1;
241 delete _maxResL1;
242 delete _minObs;
243 delete _minEle;
244 delete _eleWgtCode;
245 delete _eleWgtPhase;
246 delete _seedingTime;
247 delete _corrWaitTime;
248 delete _addStaButton;
249 delete _delStaButton;
250 delete _plotCoordinates;
251 delete _mapWinButton;
252 delete _useGoogleMap;
253 delete _useOpenStreetMap;
254 delete _audioResponse;
255 delete _mapWinDotSize;
256 delete _mapWinDotColor;
257 delete _mapSpeedSlider;
258}
259
260//
261////////////////////////////////////////////////////////////////////////////
262void t_pppWidgets::readOptions() {
263
264 bncSettings settings;
265
266 // ComboBoxes
267 // ----------
268 int ii = _dataSource->findText(settings.value(_dataSource->objectName()).toString());
269 if (ii != -1) {
270 _dataSource->setCurrentIndex(ii);
271 }
272 ii = _lcGPS->findText(settings.value(_lcGPS->objectName()).toString());
273 if (ii != -1) {
274 _lcGPS->setCurrentIndex(ii);
275 }
276 ii = _lcGLONASS->findText(settings.value(_lcGLONASS->objectName()).toString());
277 if (ii != -1) {
278 _lcGLONASS->setCurrentIndex(ii);
279 }
280 ii = _lcGalileo->findText(settings.value(_lcGalileo->objectName()).toString());
281 if (ii != -1) {
282 _lcGalileo->setCurrentIndex(ii);
283 }
284 ii = _lcBDS->findText(settings.value(_lcBDS->objectName()).toString());
285 if (ii != -1) {
286 _lcBDS->setCurrentIndex(ii);
287 }
288 ii = _snxtroIntr->findText(settings.value(_snxtroIntr->objectName()).toString());
289 if (ii != -1) {
290 _snxtroIntr->setCurrentIndex(ii);
291 }
292
293 // FileChoosers
294 // ------------
295 _rinexObs ->setFileName(settings.value(_rinexObs ->objectName()).toString());
296 _rinexNav ->setFileName(settings.value(_rinexNav ->objectName()).toString());
297 _corrFile ->setFileName(settings.value(_corrFile ->objectName()).toString());
298 _crdFile ->setFileName(settings.value(_crdFile ->objectName()).toString());
299 _antexFile->setFileName(settings.value(_antexFile->objectName()).toString());
300
301 // LineEdits
302 // ---------
303 _corrMount ->setText(settings.value(_corrMount ->objectName()).toString());
304 _logPath ->setText(settings.value(_logPath ->objectName()).toString());
305 _nmeaPath ->setText(settings.value(_nmeaPath ->objectName()).toString());
306 _snxtroPath ->setText(settings.value(_snxtroPath ->objectName()).toString());
307 _snxtroAc ->setText(settings.value(_snxtroAc ->objectName()).toString());
308 _snxtroSol ->setText(settings.value(_snxtroSol ->objectName()).toString());
309
310 if (!settings.value(_sigmaC1->objectName()).toString().isEmpty()) {
311 _sigmaC1->setText(settings.value(_sigmaC1->objectName()).toString());
312 }
313 else {
314 _sigmaC1->setText("2.0");
315 }
316
317 if (!settings.value(_sigmaL1->objectName()).toString().isEmpty()) {
318 _sigmaL1->setText(settings.value(_sigmaL1->objectName()).toString());
319 }
320 else {
321 _sigmaL1->setText("0.01");
322 }
323
324 if (!settings.value(_maxResC1->objectName()).toString().isEmpty()) {
325 _maxResC1->setText(settings.value(_maxResC1->objectName()).toString());
326 }
327 else {
328 _maxResC1->setText("4.0");
329 }
330
331 if (!settings.value(_maxResL1->objectName()).toString().isEmpty()) {
332 _maxResL1->setText(settings.value(_maxResL1->objectName()).toString());
333 }
334 else {
335 _maxResL1->setText("0.03");
336 }
337
338 if (!settings.value(_seedingTime->objectName()).toString().isEmpty()) {
339 _seedingTime->setText(settings.value(_seedingTime->objectName()).toString());
340 }
341 else {
342 _seedingTime->setText("0");
343 }
344
345 // CheckBoxes
346 // ----------
347 _eleWgtCode ->setCheckState(Qt::CheckState(settings.value(_eleWgtCode ->objectName()).toInt()));
348 _eleWgtPhase->setCheckState(Qt::CheckState(settings.value(_eleWgtPhase->objectName()).toInt()));
349 _v3filenames->setCheckState(Qt::CheckState(settings.value(_v3filenames->objectName()).toInt()));
350
351 // SpinBoxex
352 // ---------
353 _minObs->setValue(settings.value(_minObs->objectName()).toInt());
354 _minEle->setValue(settings.value(_minEle->objectName()).toInt());
355 _corrWaitTime->setValue(settings.value(_corrWaitTime->objectName()).toInt());
356 _snxtroSampl->setValue(settings.value(_snxtroSampl->objectName()).toInt());
357
358 // Table with stations
359 // -------------------
360 for (int iRow = _staTable->rowCount()-1; iRow >=0; iRow--) {
361 _staTable->removeRow(iRow);
362 }
363 int iRow = -1;
364 QListIterator<QString> it(settings.value(_staTable->objectName()).toStringList());
365 while (it.hasNext()) {
366 QStringList hlp = it.next().split(",");
367 ++iRow;
368 _staTable->insertRow(iRow);
369 for (int iCol = 0; iCol < hlp.size(); iCol++) {
370 _staTable->setItem(iRow, iCol, new QTableWidgetItem(hlp[iCol]));
371 }
372 }
373
374 // Plots and Maps
375 // --------------
376 _plotCoordinates ->setText(settings.value(_plotCoordinates->objectName()).toString());
377 _audioResponse ->setText(settings.value(_audioResponse->objectName()).toString());
378 _useGoogleMap ->setChecked(settings.value(_useGoogleMap->objectName()).toBool());
379 _useOpenStreetMap->setChecked(settings.value(_useOpenStreetMap->objectName()).toBool());
380 _mapWinDotSize ->setText(settings.value(_mapWinDotSize->objectName()).toString());
381
382 ii = _mapWinDotColor->findText(settings.value(_mapWinDotColor->objectName()).toString());
383 if (ii != -1) {
384 _mapWinDotColor->setCurrentIndex(ii);
385 }
386
387 int speed = settings.value(_mapSpeedSlider->objectName()).toInt();
388 if (speed == 0) speed = _mapSpeedSlider->maximum();
389 _mapSpeedSlider->setSliderPosition(speed);
390}
391
392//
393////////////////////////////////////////////////////////////////////////////
394void t_pppWidgets::saveOptions() {
395
396 bncSettings settings;
397
398 settings.setValue(_dataSource ->objectName(), _dataSource ->currentText());
399 settings.setValue(_rinexObs ->objectName(), _rinexObs ->fileName());
400 settings.setValue(_rinexNav ->objectName(), _rinexNav ->fileName());
401 settings.setValue(_corrMount ->objectName(), _corrMount ->text());
402 settings.setValue(_corrFile ->objectName(), _corrFile ->fileName());
403 settings.setValue(_crdFile ->objectName(), _crdFile ->fileName());
404 settings.setValue(_antexFile ->objectName(), _antexFile ->fileName());
405 settings.setValue(_logPath ->objectName(), _logPath ->text());
406 settings.setValue(_nmeaPath ->objectName(), _nmeaPath ->text());
407 settings.setValue(_snxtroPath ->objectName(), _snxtroPath ->text());
408 settings.setValue(_snxtroSampl ->objectName(), _snxtroSampl ->value());
409 settings.setValue(_snxtroIntr ->objectName(), _snxtroIntr ->currentText());
410 settings.setValue(_snxtroAc ->objectName(), _snxtroAc ->text());
411 settings.setValue(_snxtroSol ->objectName(), _snxtroSol ->text());
412 settings.setValue(_v3filenames ->objectName(), _v3filenames ->checkState());
413 settings.setValue(_lcGPS ->objectName(), _lcGPS ->currentText());
414 settings.setValue(_lcGLONASS ->objectName(), _lcGLONASS ->currentText());
415 settings.setValue(_lcGalileo ->objectName(), _lcGalileo ->currentText());
416 settings.setValue(_lcBDS ->objectName(), _lcBDS ->currentText());
417 settings.setValue(_sigmaC1 ->objectName(), _sigmaC1 ->text());
418 settings.setValue(_sigmaL1 ->objectName(), _sigmaL1 ->text());
419 settings.setValue(_corrWaitTime->objectName(), _corrWaitTime->value());
420 settings.setValue(_maxResC1 ->objectName(), _maxResC1 ->text());
421 settings.setValue(_maxResL1 ->objectName(), _maxResL1 ->text());
422 settings.setValue(_seedingTime ->objectName(), _seedingTime ->text());
423 settings.setValue(_minObs ->objectName(), _minObs ->value());
424 settings.setValue(_minEle ->objectName(), _minEle ->value());
425 settings.setValue(_eleWgtCode ->objectName(), _eleWgtCode ->checkState());
426 settings.setValue(_eleWgtPhase ->objectName(), _eleWgtPhase ->checkState());
427
428 QStringList staList;
429 for (int iRow = 0; iRow < _staTable->rowCount(); iRow++) {
430 QString hlp;
431 for (int iCol = 0; iCol < _staTable->columnCount(); iCol++) {
432 if (_staTable->item(iRow, iCol)) {
433 hlp += _staTable->item(iRow, iCol)->text() + ",";
434 }
435 }
436 if (!hlp.isEmpty()) {
437 staList << hlp;
438 }
439 }
440 settings.setValue(_staTable->objectName(), staList);
441
442 settings.setValue(_plotCoordinates ->objectName(), _plotCoordinates ->text());
443 settings.setValue(_audioResponse ->objectName(), _audioResponse ->text());
444 settings.setValue(_useGoogleMap ->objectName(), _useGoogleMap ->isChecked());
445 settings.setValue(_useOpenStreetMap->objectName(), _useOpenStreetMap->isChecked());
446 settings.setValue(_mapWinDotSize ->objectName(), _mapWinDotSize ->text());
447 settings.setValue(_mapWinDotColor ->objectName(), _mapWinDotColor ->currentText());
448 settings.setValue(_mapSpeedSlider ->objectName(), _mapSpeedSlider ->value());
449}
450
451//
452////////////////////////////////////////////////////////////////////////////
453void t_pppWidgets::slotEnableWidgets() {
454
455 const static QPalette paletteWhite(QColor(255, 255, 255));
456 const static QPalette paletteGray(QColor(230, 230, 230));
457
458 bool allDisabled = _dataSource->currentText() == "";
459 bool realTime = _dataSource->currentText() == "Real-Time Streams";
460 bool rinexFiles = _dataSource->currentText() == "RINEX Files";
461
462 QListIterator<QWidget*> it(_widgets);
463 while (it.hasNext()) {
464 QWidget* widget = it.next();
465 widget->setEnabled(!allDisabled);
466 }
467
468 if (realTime) {
469 _rinexObs->setEnabled(false);
470 _rinexNav->setEnabled(false);
471 _corrFile->setEnabled(false);
472 }
473 else if (rinexFiles) {
474 _corrMount->setEnabled(false);
475// _plotCoordinates->setEnabled(false);
476// _audioResponse->setEnabled(false);
477 }
478
479 if ( _snxtroPath->text() != "" && !allDisabled) {
480 _snxtroSampl->setEnabled(true);
481 _snxtroIntr ->setEnabled(true);
482 _snxtroAc ->setEnabled(true);
483 _snxtroSol ->setEnabled(true);
484 }
485 else {
486 _snxtroSampl->setEnabled(false);
487 _snxtroIntr ->setEnabled(false);
488 _snxtroAc ->setEnabled(false);
489 _snxtroSol ->setEnabled(false);
490 }
491
492 _dataSource->setEnabled(true);
493
494 it.toFront();
495 while (it.hasNext()) {
496 QWidget* widget = it.next();
497 if (widget->isEnabled()) {
498 widget->setPalette(paletteWhite);
499 }
500 else {
501 widget->setPalette(paletteGray);
502 }
503 }
504}
505
506//
507////////////////////////////////////////////////////////////////////////////
508void t_pppWidgets::slotAddStation() {
509 int iRow = _staTable->rowCount();
510 _staTable->insertRow(iRow);
511 for (int iCol = 0; iCol < _staTable->columnCount(); iCol++) {
512 if (iCol == 0) _staTable->setItem(iRow, iCol, new QTableWidgetItem(""));
513 if (iCol == 1) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
514 if (iCol == 2) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
515 if (iCol == 3) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
516 if (iCol == 4) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
517 if (iCol == 5) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
518 if (iCol == 6) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
519 if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
520 if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("3e-6"));
521 if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0"));
522 }
523}
524
525//
526////////////////////////////////////////////////////////////////////////////
527void t_pppWidgets::slotDelStation() {
528 int nRows = _staTable->rowCount();
529 bool flg[nRows];
530 for (int iRow = 0; iRow < nRows; iRow++) {
531 if (_staTable->isItemSelected(_staTable->item(iRow,1))) {
532 flg[iRow] = true;
533 }
534 else {
535 flg[iRow] = false;
536 }
537 }
538 for (int iRow = nRows-1; iRow >= 0; iRow--) {
539 if (flg[iRow]) {
540 _staTable->removeRow(iRow);
541 }
542 }
543}
544
545// PPP Text
546////////////////////////////////////////////////////////////////////////////
547void t_pppWidgets::slotPPPTextChanged(){
548
549 const static QPalette paletteWhite(QColor(255, 255, 255));
550 const static QPalette paletteGray(QColor(230, 230, 230));
551
552 // SNX TRO file sampling
553 // ---------------------
554 if (sender() == 0 || sender() == _snxtroPath) {
555 if ( _snxtroPath->text() != "" ) {
556 _snxtroSampl->setEnabled(true);
557 _snxtroIntr ->setEnabled(true);
558 _snxtroAc ->setEnabled(true);
559 _snxtroSol ->setEnabled(true);
560 _snxtroSampl->setPalette(paletteWhite);
561 _snxtroIntr ->setPalette(paletteWhite);
562 _snxtroAc ->setPalette(paletteWhite);
563 _snxtroSol ->setPalette(paletteWhite);
564 }
565 else {
566 _snxtroSampl->setEnabled(false);
567 _snxtroIntr ->setEnabled(false);
568 _snxtroAc ->setEnabled(false);
569 _snxtroSol ->setEnabled(false);
570 _snxtroSampl->setPalette(paletteGray);
571 _snxtroIntr ->setPalette(paletteGray);
572 _snxtroAc ->setPalette(paletteGray);
573 _snxtroSol ->setPalette(paletteGray);
574 }
575 }
576}
Note: See TracBrowser for help on using the repository browser.