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

Last change on this file since 7203 was 7180, checked in by stuerze, 10 years ago

NMEA TCP port functionlity removed into bncgetthread class in order to have it available for each PPP station

File size: 23.9 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 _logFile = new QLineEdit(); _logFile ->setObjectName("PPP/logFilePPP"); _widgets << _logFile;
62 _nmeaFile = new QLineEdit(); _nmeaFile ->setObjectName("PPP/nmeaFile"); _widgets << _nmeaFile;
63 _snxtroFile = new QLineEdit(); _snxtroFile ->setObjectName("PPP/snxtroFile"); _widgets << _snxtroFile;
64 _snxtroSampl = new QSpinBox(); _snxtroSampl ->setObjectName("PPP/snxtroSampl"); _widgets << _snxtroSampl;
65 _staTable = new QTableWidget(); _staTable ->setObjectName("PPP/staTable"); _widgets << _staTable;
66 _lcGPS = new QComboBox(); _lcGPS ->setObjectName("PPP/lcGPS"); _widgets << _lcGPS;
67 _lcGLONASS = new QComboBox(); _lcGLONASS ->setObjectName("PPP/lcGLONASS"); _widgets << _lcGLONASS;
68 _lcGalileo = new QComboBox(); _lcGalileo ->setObjectName("PPP/lcGalileo"); _widgets << _lcGalileo;
69 _lcBDS = new QComboBox(); _lcBDS ->setObjectName("PPP/lcBDS"); _widgets << _lcBDS;
70 _sigmaC1 = new QLineEdit(); _sigmaC1 ->setObjectName("PPP/sigmaC1"); _widgets << _sigmaC1;
71 _sigmaL1 = new QLineEdit(); _sigmaL1 ->setObjectName("PPP/sigmaL1"); _widgets << _sigmaL1;
72 _maxResC1 = new QLineEdit(); _maxResC1 ->setObjectName("PPP/maxResC1"); _widgets << _maxResC1;
73 _maxResL1 = new QLineEdit(); _maxResL1 ->setObjectName("PPP/maxResL1"); _widgets << _maxResL1;
74 _minObs = new QSpinBox(); _minObs ->setObjectName("PPP/minObs"); _widgets << _minObs;
75 _minEle = new QSpinBox(); _minEle ->setObjectName("PPP/minEle"); _widgets << _minEle;
76 _eleWgtCode = new QCheckBox(); _eleWgtCode ->setObjectName("PPP/eleWgtCode"); _widgets << _eleWgtCode;
77 _eleWgtPhase = new QCheckBox(); _eleWgtPhase ->setObjectName("PPP/eleWgtPhase"); _widgets << _eleWgtPhase;
78 _seedingTime = new QLineEdit(); _seedingTime ->setObjectName("PPP/seedingTime"); _widgets << _seedingTime;
79 _corrWaitTime = new QSpinBox(); _corrWaitTime->setObjectName("PPP/corrWaitTime"); _widgets << _corrWaitTime;
80
81 _addStaButton = new QPushButton("Add Station"); _widgets << _addStaButton;
82 _delStaButton = new QPushButton("Delete Station"); _widgets << _delStaButton;
83
84 _addStaButton->setWhatsThis(tr("<p>Hit the 'Add Station' button to add a new line to the Station table.</p>"));
85 _delStaButton->setWhatsThis(tr("<p>Hit the 'Delete Station' button to delete a highlighted row from the Station table.</p>"));
86
87 _plotCoordinates = new QLineEdit; _plotCoordinates ->setObjectName("PPP/plotCoordinates"); _widgets << _plotCoordinates;
88 _mapWinButton = new QPushButton; _mapWinButton ->setObjectName("PPP/mapWinButton"); _widgets << _mapWinButton;
89 _useGoogleMap = new QRadioButton; _useGoogleMap ->setObjectName("PPP/useGoogleMap"); _widgets << _useGoogleMap;
90 _useOpenStreetMap = new QRadioButton; _useOpenStreetMap->setObjectName("PPP/useOpenStreetMap"); _widgets << _useOpenStreetMap;
91 _audioResponse = new QLineEdit; _audioResponse ->setObjectName("PPP/audioResponse"); _widgets << _audioResponse;
92 _mapWinDotSize = new QLineEdit; _mapWinDotSize ->setObjectName("PPP/mapWinDotSize"); _widgets << _mapWinDotSize;
93 _mapWinDotColor = new QComboBox; _mapWinDotColor ->setObjectName("PPP/mapWinDotColor"); _widgets << _mapWinDotColor;
94 _mapSpeedSlider = new QSlider; _mapSpeedSlider ->setObjectName("PPP/mapSpeedSlider"); _widgets << _mapSpeedSlider;
95
96 _dataSource->setEditable(false);
97 _dataSource->addItems(QString(",Real-Time Streams,RINEX Files").split(","));
98 connect(_dataSource, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotEnableWidgets()));
99
100 connect(_snxtroFile, SIGNAL(textChanged(const QString &)),
101 this, SLOT(slotPPPTextChanged()));
102
103 slotEnableWidgets();
104
105 _lcGPS->setEditable(false);
106#ifdef USE_PPP_SSR_I
107 _lcGPS->addItems(QString("no,P3,P3&L3").split(","));
108#else
109 _lcGPS->addItems(QString("no,P3,L3,P3&L3").split(","));
110#endif
111
112 _lcGLONASS->setEditable(false);
113 _lcGLONASS->addItems(QString("no,P3,L3,P3&L3").split(","));
114
115 _lcGalileo->setEditable(false);
116 _lcGalileo->addItems(QString("no,P3,L3,P3&L3").split(","));
117
118 _lcBDS->setEditable(false);
119 _lcBDS->addItems(QString("no,P3,L3,P3&L3").split(","));
120
121 _snxtroSampl->setMinimum(0);
122 _snxtroSampl->setMaximum(300);
123 _snxtroSampl->setSingleStep(30);
124 _snxtroSampl->setSuffix(" sec");
125
126 _minObs->setMinimum(4);
127 _minObs->setMaximum(6);
128 _minObs->setSingleStep(1);
129
130 _minEle->setMinimum(0);
131 _minEle->setMaximum(20);
132 _minEle->setSingleStep(1);
133 _minEle->setSuffix(" deg");
134
135 _corrWaitTime->setMinimum(0);
136 _corrWaitTime->setMaximum(20);
137 _corrWaitTime->setSingleStep(1);
138 _corrWaitTime->setSuffix(" sec");
139 _corrWaitTime->setSpecialValueText("no");
140
141 _staTable->setColumnCount(10);
142 _staTable->setRowCount(0);
143 _staTable->setHorizontalHeaderLabels(
144 QString("Station,Sigma N,Sigma E,Sigma H,Noise N,Noise E,Noise H,Tropo Sigma,Tropo Noise, NMEA Port").split(","));
145 _staTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
146 _staTable->setSelectionBehavior(QAbstractItemView::SelectRows);
147 _staTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
148 _staTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
149
150 connect(_addStaButton, SIGNAL(clicked()), this, SLOT(slotAddStation()));
151 connect(_delStaButton, SIGNAL(clicked()), this, SLOT(slotDelStation()));
152
153 _mapWinButton->setText("Open Map");
154
155 _mapWinDotColor->setEditable(false);
156 _mapWinDotColor->addItems(QString("red,yellow").split(","));
157
158 _mapSpeedSlider->setOrientation(Qt::Horizontal);
159 _mapSpeedSlider->setRange(1, 100);
160 _mapSpeedSlider->setTickPosition(QSlider::TicksBelow);
161 _mapSpeedSlider->setTickInterval(10);
162 connect(_mapSpeedSlider, SIGNAL(valueChanged(int)), BNC_CORE, SIGNAL(mapSpeedSliderChanged(int)));
163
164 _staTable->setWhatsThis(tr("<p>Specify values for Sigma and white Noise of the Station's North, East and Height coordinates in meters. Specify also a Sigma in meters for a-priory model based Tropospheric delays and for the delay's Noise in meters per second.</p><p>Specifying one record per station is mandatory. BNC will only process data for stations wich are listed here.</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-priory 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-priory 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 for 3600 * 3e-6 = 0.01 meters per hour.</li></ul></p>"));
165
166 _seedingTime->setWhatsThis(tr("<p>Enter the lenght of a startup period in seconds for which you want to fix the PPP solutions to known a-priory coordinates as introduced through option 'Coordinates'. Adjust 'Sigma N/E/H' in the PPP Stations table according to the coordinates precision. Fixing a-priory 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-priory 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 the PPP solutions during startup to known a-priory coordinates.</p>"));
167
168 _corrWaitTime->setWhatsThis(tr("<p>Specifying 'no' means that BNC will not wait for clock corrections and process each epoch of observation data immediately after arrival using the satellite clock corrections available at that time.</p><p>Specifying a non-zero value (i.e. 5 sec) means that data will be buffered and the processing of each buffered epoch is postponed till satellite clock corrections not older than '5 sec' (example) become available.</p>"));
169
170 _plotCoordinates->setWhatsThis(tr("<p>BNC allows to produce a time series plot of coordinate displacements for one of your PPP stations 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'.</p><p>Default is an empty option field, meaning that BNC shall not produce a time series plot of PPP coordinate displacements.</p>"));
171
172 _mapWinButton->setWhatsThis(tr("<p>You make like to track your rover position using Google Maps or Open Street Map as a background map. Track maps can be produced with BNC in 'Realtime-PPP', 'Realtime-SPP' and 'Post-Processing' mode.</p><p>The 'Open Map' button opens a windows showing a map according to specified options.</p><p>Even in '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 programm needs to download the map data."));
173
174 _useGoogleMap->setWhatsThis(tr("<p>Specify Google Maps as the background for your rover positions."));
175
176 _useOpenStreetMap->setWhatsThis(tr("<p>Specify Open Street Map as the background for your rover positions."));
177
178 _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-priory marker coordinate.</p><p>Default is an empty option field, meaning that you don't want BNC to produce alarm signals.</p>"));
179
180 _mapWinDotSize->setWhatsThis(tr("<p>Specify the size of dots showing the 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>"));
181
182 _mapWinDotColor->setWhatsThis(tr("<p>Specify the color of dots showing the rover track on the map.</p>"));
183
184 _mapSpeedSlider->setWhatsThis(tr("<p>With BNC in PPP post-processing mode you can specify the speed of computations as appropriate for 'Track map' visualization. Note that you can adjust 'speed' on-the-fly while BNC is already processing your observations."));
185
186 readOptions();
187}
188
189//
190////////////////////////////////////////////////////////////////////////////
191void t_pppWidgets::readOptions() {
192
193 bncSettings settings;
194
195 // ComboBoxes
196 // ----------
197 int ii = _dataSource->findText(settings.value(_dataSource->objectName()).toString());
198 if (ii != -1) {
199 _dataSource->setCurrentIndex(ii);
200 }
201 ii = _lcGPS->findText(settings.value(_lcGPS->objectName()).toString());
202 if (ii != -1) {
203 _lcGPS->setCurrentIndex(ii);
204 }
205 ii = _lcGLONASS->findText(settings.value(_lcGLONASS->objectName()).toString());
206 if (ii != -1) {
207 _lcGLONASS->setCurrentIndex(ii);
208 }
209 ii = _lcGalileo->findText(settings.value(_lcGalileo->objectName()).toString());
210 if (ii != -1) {
211 _lcGalileo->setCurrentIndex(ii);
212 }
213 ii = _lcBDS->findText(settings.value(_lcBDS->objectName()).toString());
214 if (ii != -1) {
215 _lcBDS->setCurrentIndex(ii);
216 }
217
218 // FileChoosers
219 // ------------
220 _rinexObs ->setFileName(settings.value(_rinexObs ->objectName()).toString());
221 _rinexNav ->setFileName(settings.value(_rinexNav ->objectName()).toString());
222 _corrFile ->setFileName(settings.value(_corrFile ->objectName()).toString());
223 _crdFile ->setFileName(settings.value(_crdFile ->objectName()).toString());
224 _antexFile->setFileName(settings.value(_antexFile->objectName()).toString());
225
226 // LineEdits
227 // ---------
228 _corrMount ->setText(settings.value(_corrMount ->objectName()).toString());
229 _logFile ->setText(settings.value(_logFile ->objectName()).toString());
230 _nmeaFile ->setText(settings.value(_nmeaFile ->objectName()).toString());
231 _snxtroFile ->setText(settings.value(_snxtroFile ->objectName()).toString());
232
233 if (!settings.value(_sigmaC1->objectName()).toString().isEmpty()) {
234 _sigmaC1->setText(settings.value(_sigmaC1->objectName()).toString());
235 }
236 else {
237 _sigmaC1->setText("2.0");
238 }
239
240 if (!settings.value(_sigmaL1->objectName()).toString().isEmpty()) {
241 _sigmaL1->setText(settings.value(_sigmaL1->objectName()).toString());
242 }
243 else {
244 _sigmaL1->setText("0.01");
245 }
246
247 if (!settings.value(_maxResC1->objectName()).toString().isEmpty()) {
248 _maxResC1->setText(settings.value(_maxResC1->objectName()).toString());
249 }
250 else {
251 _maxResC1->setText("4.0");
252 }
253
254 if (!settings.value(_maxResL1->objectName()).toString().isEmpty()) {
255 _maxResL1->setText(settings.value(_maxResL1->objectName()).toString());
256 }
257 else {
258 _maxResL1->setText("0.03");
259 }
260
261 if (!settings.value(_seedingTime->objectName()).toString().isEmpty()) {
262 _seedingTime->setText(settings.value(_seedingTime->objectName()).toString());
263 }
264 else {
265 _seedingTime->setText("0");
266 }
267
268 // CheckBoxes
269 // ----------
270 _eleWgtCode ->setCheckState(Qt::CheckState(settings.value(_eleWgtCode ->objectName()).toInt()));
271 _eleWgtPhase->setCheckState(Qt::CheckState(settings.value(_eleWgtPhase->objectName()).toInt()));
272
273 // SpinBoxex
274 // ---------
275 _minObs->setValue(settings.value(_minObs->objectName()).toInt());
276 _minEle->setValue(settings.value(_minEle->objectName()).toInt());
277 _corrWaitTime->setValue(settings.value(_corrWaitTime->objectName()).toInt());
278 _snxtroSampl->setValue(settings.value(_snxtroSampl->objectName()).toInt());
279
280 // Table with stations
281 // -------------------
282 for (int iRow = _staTable->rowCount()-1; iRow >=0; iRow--) {
283 _staTable->removeRow(iRow);
284 }
285 int iRow = -1;
286 QListIterator<QString> it(settings.value(_staTable->objectName()).toStringList());
287 while (it.hasNext()) {
288 QStringList hlp = it.next().split(",");
289 ++iRow;
290 _staTable->insertRow(iRow);
291 for (int iCol = 0; iCol < hlp.size(); iCol++) {
292 _staTable->setItem(iRow, iCol, new QTableWidgetItem(hlp[iCol]));
293 }
294 }
295
296 // Plots and Maps
297 // --------------
298 _plotCoordinates ->setText(settings.value(_plotCoordinates->objectName()).toString());
299 _audioResponse ->setText(settings.value(_audioResponse->objectName()).toString());
300 _useGoogleMap ->setChecked(settings.value(_useGoogleMap->objectName()).toBool());
301 _useOpenStreetMap->setChecked(settings.value(_useOpenStreetMap->objectName()).toBool());
302 _mapWinDotSize ->setText(settings.value(_mapWinDotSize->objectName()).toString());
303
304 ii = _mapWinDotColor->findText(settings.value(_mapWinDotColor->objectName()).toString());
305 if (ii != -1) {
306 _mapWinDotColor->setCurrentIndex(ii);
307 }
308
309 int speed = settings.value(_mapSpeedSlider->objectName()).toInt();
310 if (speed == 0) speed = _mapSpeedSlider->maximum();
311 _mapSpeedSlider->setSliderPosition(speed);
312}
313
314//
315////////////////////////////////////////////////////////////////////////////
316void t_pppWidgets::saveOptions() {
317
318 bncSettings settings;
319
320 settings.setValue(_dataSource ->objectName(), _dataSource ->currentText());
321 settings.setValue(_rinexObs ->objectName(), _rinexObs ->fileName());
322 settings.setValue(_rinexNav ->objectName(), _rinexNav ->fileName());
323 settings.setValue(_corrMount ->objectName(), _corrMount ->text());
324 settings.setValue(_corrFile ->objectName(), _corrFile ->fileName());
325 settings.setValue(_crdFile ->objectName(), _crdFile ->fileName());
326 settings.setValue(_antexFile ->objectName(), _antexFile ->fileName());
327 settings.setValue(_logFile ->objectName(), _logFile ->text());
328 settings.setValue(_nmeaFile ->objectName(), _nmeaFile ->text());
329 settings.setValue(_snxtroFile ->objectName(), _snxtroFile ->text());
330 settings.setValue(_snxtroSampl ->objectName(), _snxtroSampl ->value());
331 settings.setValue(_lcGPS ->objectName(), _lcGPS ->currentText());
332 settings.setValue(_lcGLONASS ->objectName(), _lcGLONASS ->currentText());
333 settings.setValue(_lcGalileo ->objectName(), _lcGalileo ->currentText());
334 settings.setValue(_lcBDS ->objectName(), _lcBDS ->currentText());
335 settings.setValue(_sigmaC1 ->objectName(), _sigmaC1 ->text());
336 settings.setValue(_sigmaL1 ->objectName(), _sigmaL1 ->text());
337 settings.setValue(_corrWaitTime->objectName(), _corrWaitTime->value());
338 settings.setValue(_maxResC1 ->objectName(), _maxResC1 ->text());
339 settings.setValue(_maxResL1 ->objectName(), _maxResL1 ->text());
340 settings.setValue(_seedingTime ->objectName(), _seedingTime ->text());
341 settings.setValue(_minObs ->objectName(), _minObs ->value());
342 settings.setValue(_minEle ->objectName(), _minEle ->value());
343 settings.setValue(_eleWgtCode ->objectName(), _eleWgtCode ->checkState());
344 settings.setValue(_eleWgtPhase ->objectName(), _eleWgtPhase ->checkState());
345
346 QStringList staList;
347 for (int iRow = 0; iRow < _staTable->rowCount(); iRow++) {
348 QString hlp;
349 for (int iCol = 0; iCol < _staTable->columnCount(); iCol++) {
350 if (_staTable->item(iRow, iCol)) {
351 hlp += _staTable->item(iRow, iCol)->text() + ",";
352 }
353 }
354 if (!hlp.isEmpty()) {
355 staList << hlp;
356 }
357 }
358 settings.setValue(_staTable->objectName(), staList);
359
360 settings.setValue(_plotCoordinates ->objectName(), _plotCoordinates ->text());
361 settings.setValue(_audioResponse ->objectName(), _audioResponse ->text());
362 settings.setValue(_useGoogleMap ->objectName(), _useGoogleMap ->isChecked());
363 settings.setValue(_useOpenStreetMap->objectName(), _useOpenStreetMap->isChecked());
364 settings.setValue(_mapWinDotSize ->objectName(), _mapWinDotSize ->text());
365 settings.setValue(_mapWinDotColor ->objectName(), _mapWinDotColor ->currentText());
366 settings.setValue(_mapSpeedSlider ->objectName(), _mapSpeedSlider ->value());
367}
368
369//
370////////////////////////////////////////////////////////////////////////////
371void t_pppWidgets::slotEnableWidgets() {
372
373 const static QPalette paletteWhite(QColor(255, 255, 255));
374 const static QPalette paletteGray(QColor(230, 230, 230));
375
376 bool allDisabled = _dataSource->currentText() == "";
377 bool realTime = _dataSource->currentText() == "Real-Time Streams";
378 bool rinexFiles = _dataSource->currentText() == "RINEX Files";
379
380 QListIterator<QWidget*> it(_widgets);
381 while (it.hasNext()) {
382 QWidget* widget = it.next();
383 widget->setEnabled(!allDisabled);
384 }
385
386 if (realTime) {
387 _rinexObs->setEnabled(false);
388 _rinexNav->setEnabled(false);
389 _corrFile->setEnabled(false);
390 }
391 else if (rinexFiles) {
392 _corrMount->setEnabled(false);
393// _plotCoordinates->setEnabled(false);
394// _audioResponse->setEnabled(false);
395 }
396
397 if ( _snxtroFile->text() != "" && !allDisabled) {
398 _snxtroSampl->setEnabled(true);
399 }
400 else {
401 _snxtroSampl->setEnabled(false);
402 }
403
404 _dataSource->setEnabled(true);
405
406 it.toFront();
407 while (it.hasNext()) {
408 QWidget* widget = it.next();
409 if (widget->isEnabled()) {
410 widget->setPalette(paletteWhite);
411 }
412 else {
413 widget->setPalette(paletteGray);
414 }
415 }
416}
417
418//
419////////////////////////////////////////////////////////////////////////////
420void t_pppWidgets::slotAddStation() {
421 int iRow = _staTable->rowCount();
422 _staTable->insertRow(iRow);
423 for (int iCol = 0; iCol < _staTable->columnCount(); iCol++) {
424 if (iCol == 0) _staTable->setItem(iRow, iCol, new QTableWidgetItem(""));
425 if (iCol == 1) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
426 if (iCol == 2) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
427 if (iCol == 3) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
428 if (iCol == 4) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
429 if (iCol == 5) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
430 if (iCol == 6) _staTable->setItem(iRow, iCol, new QTableWidgetItem("100.0"));
431 if (iCol == 7) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0.1"));
432 if (iCol == 8) _staTable->setItem(iRow, iCol, new QTableWidgetItem("3e-6"));
433 if (iCol == 9) _staTable->setItem(iRow, iCol, new QTableWidgetItem("0"));
434 }
435}
436
437//
438////////////////////////////////////////////////////////////////////////////
439void t_pppWidgets::slotDelStation() {
440 int nRows = _staTable->rowCount();
441 bool flg[nRows];
442 for (int iRow = 0; iRow < nRows; iRow++) {
443 if (_staTable->isItemSelected(_staTable->item(iRow,1))) {
444 flg[iRow] = true;
445 }
446 else {
447 flg[iRow] = false;
448 }
449 }
450 for (int iRow = nRows-1; iRow >= 0; iRow--) {
451 if (flg[iRow]) {
452 _staTable->removeRow(iRow);
453 }
454 }
455}
456
457// PPP Text
458////////////////////////////////////////////////////////////////////////////
459void t_pppWidgets::slotPPPTextChanged(){
460
461 const static QPalette paletteWhite(QColor(255, 255, 255));
462 const static QPalette paletteGray(QColor(230, 230, 230));
463
464 // SNX TRO file sampling
465 // ---------------------
466 if (sender() == 0 || sender() == _snxtroFile) {
467 if ( _snxtroFile->text() != "" ) {
468 _snxtroSampl->setEnabled(true);
469 _snxtroSampl->setPalette(paletteWhite);
470 }
471 else {
472 _snxtroSampl->setEnabled(false);
473 _snxtroSampl->setPalette(paletteGray);
474 }
475 }
476}
Note: See TracBrowser for help on using the repository browser.