Qt Virtual Chart Table (QVCT)
CSettings.cpp
Go to the documentation of this file.
1 // INDENTING (emacs/vi): -*- mode:c++; tab-width:2; c-basic-offset:2; intent-tabs-mode:nil; -*- ex: set tabstop=2 expandtab:
2 
3 /*
4  * Qt Virtual Chart Table (QVCT)
5  * Copyright (C) 2012 Cedric Dufour <http://cedric.dufour.name>
6  * Author: Cedric Dufour <http://cedric.dufour.name>
7  *
8  * The Qt Virtual Chart Table (QVCT) is free software:
9  * you can redistribute it and/or modify it under the terms of the GNU General
10  * Public License as published by the Free Software Foundation, Version 3.
11  *
12  * The Qt Virtual Chart Table (QVCT) is distributed in the hope
13  * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
14  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15  *
16  * See the GNU General Public License for more details.
17  */
18 
19 // QT
20 #include <QColor>
21 #include <QDir>
22 #include <QDomDocument> // QtXml module
23 #include <QFile>
24 #include <QFileInfo>
25 #include <QString>
26 #include <QXmlStreamWriter>
27 
28 // QVCT
29 #include "main.hpp"
30 #include "settings/CSettings.hpp"
31 
32 
33 //------------------------------------------------------------------------------
34 // CONSTRUCTORS / DESTRUCTOR
35 //------------------------------------------------------------------------------
36 
38  : eUnitDate( CUnitDate::YMD )
39  , eUnitTime( CUnitTime::HMS )
40  , eUnitTimeDelta( CUnitTimeDelta::HMS )
41  , eUnitTimeZone( CUnitTimeZone::UTC )
42  , eUnitPosition( CUnitPosition::DMS )
43  , eUnitBearing( CUnitBearing::DEG )
44  , eUnitDistance( CUnitDistance::M )
45  , eUnitSpeed( CUnitSpeed::M_S )
46  , eUnitElevation( CUnitElevation::M )
47  , eUnitSpeedVertical( CUnitSpeedVertical::M_S )
48  , iPrecisionTime( 0 )
49  , iPrecisionTimeDelta( 0 )
50  , iPrecisionPosition( 0 )
51  , iPrecisionBearing( 0 )
52  , iPrecisionDistance( 0 )
53  , iPrecisionSpeed( 0 )
54  , iPrecisionElevation( 0 )
55  , iPrecisionSpeedVertical( 0 )
56  , fdMinValuePosition( 100.0 )
57  , fdMinValueBearing( 30.0 )
58  , fdMinValueSpeed( 0.25 )
59  , fdMinValueSpeedVertical( 0.25 )
60  , fdMaxErrorPosition( 25.0 )
61  , fdMaxErrorElevation( 25.0 )
62  , fdMaxErrorTime( 1.0 )
63  , fdMaxErrorBearing( 10.0 )
64  , fdMaxErrorSpeed( 10.0 )
65  , fdMaxErrorSpeedVertical( 10.0 )
66  , fdMaxAgePosition( 5.0 )
67  , fdMaxAgeElevation( 5.0 )
68  , fdMaxAgeTime( 5.0 )
69  , fdMaxAgeBearing( 5.0 )
70  , fdMaxAgeSpeed( 5.0 )
71  , fdMaxAgeSpeedVertical( 5.0 )
72  , qColorPointer( 64, 64, 64 )
73  , qColorLandmark( 0, 192, 0 )
74  , qColorRoute( 0, 0, 255 )
75  , qColorTrack( 255, 0, 255 )
76  , qColorVessel( 255, 0, 0 )
77  , qColorSelected( 192, 192, 0 )
78  , iScreenDpi( 96 )
79  , bScreenGestures( false )
80  , iRateRefresh( 1000 )
81  , iRateRedraw( 5 )
82  , iChartOpacity( 100 )
83  , bVisibleSymbols( true )
84  , bPrintHighRes( false )
85 {
86  qsPathWorkingDirectory = QDir::homePath();
87  qsPathSymbolsDirectory = QDir::homePath()+CONFDIR_STRING+"/symbols";
88  validate();
89 }
90 
91 
92 
93 //------------------------------------------------------------------------------
94 // METHODS
95 //------------------------------------------------------------------------------
96 
97 //
98 // SLOTS
99 //
100 
101 void CSettings::slotPathWorkingDirectory( const QString& _rqsPathWorkingDirectory )
102 {
103  qsPathWorkingDirectory = _rqsPathWorkingDirectory;
104 }
105 
106 void CSettings::slotPathSymbolsDirectory( const QString& _rqsPathSymbolsDirectory )
107 {
108  qsPathSymbolsDirectory = _rqsPathSymbolsDirectory;
109 }
110 
111 void CSettings::slotUnitDate( const QString& _rqsSymbol )
112 {
113  eUnitDate = CUnitDate::fromSymbol( _rqsSymbol );
114 }
115 
116 void CSettings::slotUnitTime( const QString& _rqsSymbol )
117 {
118  eUnitTime = CUnitTime::fromSymbol( _rqsSymbol );
119 }
120 
121 void CSettings::slotUnitTimeDelta( const QString& _rqsSymbol )
122 {
124 }
125 
126 void CSettings::slotUnitTimeZone( const QString& _rqsSymbol )
127 {
129 }
130 
131 void CSettings::slotUnitPosition( const QString& _rqsSymbol )
132 {
134 }
135 
136 void CSettings::slotUnitBearing( const QString& _rqsSymbol )
137 {
138  eUnitBearing = CUnitBearing::fromSymbol( _rqsSymbol );
139 }
140 
141 void CSettings::slotUnitDistance( const QString& _rqsSymbol )
142 {
144 }
145 
146 void CSettings::slotUnitSpeed( const QString& _rqsSymbol )
147 {
148  eUnitSpeed = CUnitSpeed::fromSymbol( _rqsSymbol );
149 }
150 
151 void CSettings::slotUnitElevation( const QString& _rqsSymbol )
152 {
154 }
155 
156 void CSettings::slotUnitSpeedVertical( const QString& _rqsSymbol )
157 {
159 }
160 
161 void CSettings::slotMinValueBearing( const QString& _rqsMinValue )
162 {
163  fdMinValueBearing = _rqsMinValue.toDouble();
164 }
165 
166 void CSettings::slotMinValuePosition( const QString& _rqsMinValue )
167 {
168  fdMinValuePosition = _rqsMinValue.toDouble();
169 }
170 
171 void CSettings::slotMinValueSpeed( const QString& _rqsMinValue )
172 {
173  fdMinValueSpeed = _rqsMinValue.toDouble();
174 }
175 
176 void CSettings::slotMinValueSpeedVertical( const QString& _rqsMinValue )
177 {
178  fdMinValueSpeedVertical = _rqsMinValue.toDouble();
179 }
180 
181 void CSettings::slotMaxErrorPosition( const QString& _rqsMaxError )
182 {
183  fdMaxErrorPosition = _rqsMaxError.toDouble();
184 }
185 
186 void CSettings::slotMaxErrorElevation( const QString& _rqsMaxError )
187 {
188  fdMaxErrorElevation = _rqsMaxError.toDouble();
189 }
190 
191 void CSettings::slotMaxErrorTime( const QString& _rqsMaxError )
192 {
193  fdMaxErrorTime = _rqsMaxError.toDouble();
194 }
195 
196 void CSettings::slotMaxErrorBearing( const QString& _rqsMaxError )
197 {
198  fdMaxErrorBearing = _rqsMaxError.toDouble();
199 }
200 
201 void CSettings::slotMaxErrorSpeed( const QString& _rqsMaxError )
202 {
203  fdMaxErrorSpeed = _rqsMaxError.toDouble();
204 }
205 
206 void CSettings::slotMaxErrorSpeedVertical( const QString& _rqsMaxError )
207 {
208  fdMaxErrorSpeedVertical = _rqsMaxError.toDouble();
209 }
210 
211 void CSettings::slotMaxAgePosition( const QString& _rqsMaxAge )
212 {
213  fdMaxAgePosition = _rqsMaxAge.toDouble();
214 }
215 
216 void CSettings::slotMaxAgeElevation( const QString& _rqsMaxAge )
217 {
218  fdMaxAgeElevation = _rqsMaxAge.toDouble();
219 }
220 
221 void CSettings::slotMaxAgeTime( const QString& _rqsMaxAge )
222 {
223  fdMaxAgeTime = _rqsMaxAge.toDouble();
224 }
225 
226 void CSettings::slotMaxAgeBearing( const QString& _rqsMaxAge )
227 {
228  fdMaxAgeBearing = _rqsMaxAge.toDouble();
229 }
230 
231 void CSettings::slotMaxAgeSpeed( const QString& _rqsMaxAge )
232 {
233  fdMaxAgeSpeed = _rqsMaxAge.toDouble();
234 }
235 
236 void CSettings::slotMaxAgeSpeedVertical( const QString& _rqsMaxAge )
237 {
238  fdMaxAgeSpeedVertical = _rqsMaxAge.toDouble();
239 }
240 
241 void CSettings::slotScreenDpi( int _iScreenDpi )
242 {
243  iScreenDpi = _iScreenDpi;
244 }
245 
246 void CSettings::slotScreenGestures( int _iScreenGestures )
247 {
248  bScreenGestures = _iScreenGestures == Qt::Checked;
249 }
250 
251 void CSettings::slotRateRefresh( int _iRateRefresh )
252 {
253  iRateRefresh = _iRateRefresh;
254 }
255 
256 void CSettings::slotRateRedraw( int _iRateRedraw )
257 {
258  iRateRedraw = _iRateRedraw;
259 }
260 
261 void CSettings::slotChartOpacity( int _iChartOpacity )
262 {
263  iChartOpacity = _iChartOpacity;
264 }
265 
266 void CSettings::slotVisibleSymbols( int _iVisibleSymbols )
267 {
268  bVisibleSymbols = _iVisibleSymbols == Qt::Checked;
269 }
270 
271 void CSettings::slotPrintHighRes( int _iPrintHighRes )
272 {
273  bPrintHighRes = _iPrintHighRes == Qt::Checked;
274 }
275 
276 //
277 // OTHER
278 //
279 
281 {
282  // Paths
283  // ... working directory
284  {
285  QFileInfo __qFileInfo( qsPathWorkingDirectory );
286  if( !__qFileInfo.exists() || !__qFileInfo.isReadable() )
287  {
288  qCritical( "INFO[%s]: Working directory can not be read (%s); resetting to default", Q_FUNC_INFO, qPrintable( qsPathWorkingDirectory ) );
289  qsPathWorkingDirectory = QDir::homePath();
290  QDir __qDir( qsPathWorkingDirectory );
291  if( !__qDir.exists() && !__qDir.mkpath( __qDir.path() ) )
292  {
293  qCritical( "ERROR[%s]: Failed to create directory (%s)", Q_FUNC_INFO, qPrintable( __qDir.path() ) );
294  }
295  }
296  }
297  // ... symbols directory
298  {
299  QFileInfo __qFileInfo( qsPathSymbolsDirectory );
300  if( !__qFileInfo.exists() || !__qFileInfo.isReadable() )
301  {
302  qCritical( "INFO[%s]: Symbols directory can not be read (%s); resetting to default", Q_FUNC_INFO, qPrintable( qsPathSymbolsDirectory ) );
303  qsPathSymbolsDirectory = QDir::homePath()+CONFDIR_STRING+"/symbols";
304  QDir __qDir( qsPathSymbolsDirectory );
305  if( !__qDir.exists() && !__qDir.mkpath( __qDir.path() ) )
306  {
307  qCritical( "ERROR[%s]: Failed to create directory (%s)", Q_FUNC_INFO, qPrintable( __qDir.path() ) );
308  }
309  }
310  }
311 
312  // Units
323 
324  // Precision
325  if( iPrecisionTime < 0 ) { iPrecisionTime = 0; }; if( iPrecisionTime > 3 ) { iPrecisionTime = 3; };
327  if( iPrecisionPosition < 0 ) { iPrecisionPosition = 0; }; if( iPrecisionPosition > 6 ) { iPrecisionPosition = 6; };
328  if( iPrecisionBearing < 0 ) { iPrecisionBearing = 0; }; if( iPrecisionBearing > 3 ) { iPrecisionBearing = 3; };
329  if( iPrecisionDistance < 0 ) { iPrecisionDistance = 0; }; if( iPrecisionDistance > 3 ) { iPrecisionDistance = 3; };
330  if( iPrecisionSpeed < 0 ) { iPrecisionSpeed = 0; }; if( iPrecisionSpeed > 3 ) { iPrecisionSpeed = 3; };
333 
334  // Minimum values
335  if( fdMinValueBearing < 0.0 ) { fdMinValueBearing = 0.0; }; if( fdMinValueBearing > 180.0 ) { fdMinValueBearing = 180.0; };
336  if( fdMinValuePosition < 0.0 ) { fdMinValuePosition = 0.0; };
337  if( fdMinValueSpeed < 0.0 ) { fdMinValueSpeed = 0.0; };
338  if( fdMinValueSpeedVertical < 0.0 ) { fdMinValueSpeedVertical = 0.0; };
339 
340  // Maximum error
341  if( fdMaxErrorPosition < 0.0 ) { fdMaxErrorPosition = 0.0; };
342  if( fdMaxErrorElevation < 0.0 ) { fdMaxErrorElevation = 0.0; };
343  if( fdMaxErrorTime < 0.0 ) { fdMaxErrorTime = 0.0; };
344  if( fdMaxErrorBearing < 0.0 ) { fdMaxErrorBearing = 0.0; };
345  if( fdMaxErrorSpeed < 0.0 ) { fdMaxErrorSpeed = 0.0; };
346  if( fdMaxErrorSpeedVertical < 0.0 ) { fdMaxErrorSpeedVertical = 0.0; };
347 
348  // Maximum age
349  if( fdMaxAgePosition < 0.0 ) { fdMaxAgePosition = 0.0; };
350  if( fdMaxAgeElevation < 0.0 ) { fdMaxAgeElevation = 0.0; };
351  if( fdMaxAgeTime < 0.0 ) { fdMaxAgeTime = 0.0; };
352  if( fdMaxAgeBearing < 0.0 ) { fdMaxAgeBearing = 0.0; };
353  if( fdMaxAgeSpeed < 0.0 ) { fdMaxAgeSpeed = 0.0; };
354  if( fdMaxAgeSpeedVertical < 0.0 ) { fdMaxAgeSpeedVertical = 0.0; };
355 
356 
357  // Misc.
358  if( iScreenDpi < 1 ) { iScreenDpi = 1; }; if( iScreenDpi > 1200 ) { iScreenDpi = 1200; };
359  if( iRateRefresh < 100 ) { iRateRefresh = 100; }; if( iRateRefresh > 5000 ) { iRateRefresh = 5000; };
360  if( iRateRedraw < 1 ) { iRateRedraw = 1; }; if( iRateRedraw > 300 ) { iRateRedraw = 300; };
361  if( iChartOpacity < 0 ) { iChartOpacity = 0; }; if( iChartOpacity > 100 ) { iChartOpacity = 100; };
362 }
363 
364 void CSettings::save( const QString& _rqsFilename ) const
365 {
366  //qDebug( "DEBUG[%s]: %s", Q_FUNC_INFO, _rqsFilename.toUtf8().constData() );
367 
368  // File [open]
369  QFileInfo __qFileInfo( _rqsFilename );
370  QDir __qDir( __qFileInfo.absolutePath() );
371  if( !__qDir.exists() && !__qDir.mkpath( __qDir.path() ) )
372  {
373  qCritical( "ERROR[%s]: Failed to create directory (%s)", Q_FUNC_INFO, qPrintable( __qDir.path() ) );
374  return;
375  }
376  QFile __qFile( __qFileInfo.absoluteFilePath() );
377  if( !__qFile.open( QIODevice::WriteOnly ) )
378  {
379  qCritical( "ERROR[%s]: Failed to open file (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
380  return;
381  }
382 
383  // XML
384  QXmlStreamWriter __qXmlStreamWriter( &__qFile );
385  __qXmlStreamWriter.setAutoFormatting( true );
386  __qXmlStreamWriter.writeStartDocument();
387  __qXmlStreamWriter.writeStartElement( "QVCT" );
388  dumpQVCT( __qXmlStreamWriter, false );
389  __qXmlStreamWriter.writeEndElement(); // QVCT
390  __qXmlStreamWriter.writeEndDocument();
391 
392  // File [close]
393  __qFile.close();
394 }
395 
396 void CSettings::dumpQVCT( QXmlStreamWriter& _rqXmlStreamWriter, bool _bProjectDump ) const
397 {
398  // XML [start]
399  _rqXmlStreamWriter.writeStartElement( "Settings" );
400 
401  // Paths [start]
402  if( !_bProjectDump )
403  {
404  _rqXmlStreamWriter.writeStartElement( "Paths" );
405  // ... working directory
406  _rqXmlStreamWriter.writeStartElement( "Working" );
407  _rqXmlStreamWriter.writeAttribute( "path", qsPathWorkingDirectory );
408  _rqXmlStreamWriter.writeEndElement(); // Working
409  // ... symbols directory
410  _rqXmlStreamWriter.writeStartElement( "Symbols" );
411  _rqXmlStreamWriter.writeAttribute( "path", qsPathSymbolsDirectory );
412  _rqXmlStreamWriter.writeEndElement(); // Symbols
413  // Paths [end]
414  _rqXmlStreamWriter.writeEndElement(); // Paths
415  }
416 
417  // Units [start]
418  _rqXmlStreamWriter.writeStartElement( "Units" );
419  // ... date unit
420  _rqXmlStreamWriter.writeStartElement( "Date" );
421  _rqXmlStreamWriter.writeAttribute( "unit", CUnitDate::toCode( eUnitDate ) );
422  _rqXmlStreamWriter.writeEndElement(); // Date
423  // ... time unit/precision
424  _rqXmlStreamWriter.writeStartElement( "Time" );
425  _rqXmlStreamWriter.writeAttribute( "unit", CUnitTime::toCode( eUnitTime ) );
426  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionTime ) );
427  _rqXmlStreamWriter.writeEndElement(); // Time
428  // ... time difference unit/precision
429  _rqXmlStreamWriter.writeStartElement( "TimeDelta" );
430  _rqXmlStreamWriter.writeAttribute( "unit", CUnitTimeDelta::toCode( eUnitTimeDelta ) );
431  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionTimeDelta ) );
432  _rqXmlStreamWriter.writeEndElement(); // TimeDelta
433  // ... timezone unit
434  _rqXmlStreamWriter.writeStartElement( "TimeZone" );
435  _rqXmlStreamWriter.writeAttribute( "unit", CUnitTimeZone::toCode( eUnitTimeZone ) );
436  _rqXmlStreamWriter.writeEndElement(); // TimeZone
437  // ... position unit/precision
438  _rqXmlStreamWriter.writeStartElement( "Position" );
439  _rqXmlStreamWriter.writeAttribute( "unit", CUnitPosition::toCode( eUnitPosition ) );
440  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionPosition ) );
441  _rqXmlStreamWriter.writeEndElement(); // Position
442  // ... elevation unit/precision
443  _rqXmlStreamWriter.writeStartElement( "Elevation" );
444  _rqXmlStreamWriter.writeAttribute( "unit", CUnitElevation::toCode( eUnitElevation ) );
445  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionElevation ) );
446  _rqXmlStreamWriter.writeEndElement(); // Elevation
447  // ... bearing unit/precision
448  _rqXmlStreamWriter.writeStartElement( "Bearing" );
449  _rqXmlStreamWriter.writeAttribute( "unit", CUnitBearing::toCode( eUnitBearing ) );
450  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionBearing ) );
451  _rqXmlStreamWriter.writeEndElement(); // Bearing
452  // ... distance unit/precision
453  _rqXmlStreamWriter.writeStartElement( "Distance" );
454  _rqXmlStreamWriter.writeAttribute( "unit", CUnitDistance::toCode( eUnitDistance ) );
455  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionDistance ) );
456  _rqXmlStreamWriter.writeEndElement(); // Distance
457  // ... speed unit/precision
458  _rqXmlStreamWriter.writeStartElement( "Speed" );
459  _rqXmlStreamWriter.writeAttribute( "unit", CUnitSpeed::toCode( eUnitSpeed ) );
460  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionSpeed ) );
461  _rqXmlStreamWriter.writeEndElement(); // Speed
462  // ... vertical speed unit/precision
463  _rqXmlStreamWriter.writeStartElement( "SpeedVertical" );
464  _rqXmlStreamWriter.writeAttribute( "unit", CUnitSpeedVertical::toCode( eUnitSpeedVertical ) );
465  _rqXmlStreamWriter.writeAttribute( "precision", QString::number( iPrecisionSpeedVertical ) );
466  _rqXmlStreamWriter.writeEndElement(); // SpeedVertical
467  // Units [end]
468  _rqXmlStreamWriter.writeEndElement(); // Units
469 
470  // Validity [start]
471  _rqXmlStreamWriter.writeStartElement( "Validity" );
472  // ... position validity parameters
473  _rqXmlStreamWriter.writeStartElement( "Position" );
474  _rqXmlStreamWriter.writeAttribute( "min_value", QString::number( fdMinValuePosition ) );
475  _rqXmlStreamWriter.writeAttribute( "max_error", QString::number( fdMaxErrorPosition ) );
476  _rqXmlStreamWriter.writeAttribute( "max_age", QString::number( fdMaxAgePosition ) );
477  _rqXmlStreamWriter.writeEndElement(); // Position
478  // ... elevation validity parameters
479  _rqXmlStreamWriter.writeStartElement( "Elevation" );
480  _rqXmlStreamWriter.writeAttribute( "max_error", QString::number( fdMaxErrorElevation ) );
481  _rqXmlStreamWriter.writeAttribute( "max_age", QString::number( fdMaxAgeElevation ) );
482  _rqXmlStreamWriter.writeEndElement(); // Elevation
483  // ... time validity parameters
484  _rqXmlStreamWriter.writeStartElement( "Time" );
485  _rqXmlStreamWriter.writeAttribute( "max_error", QString::number( fdMaxErrorTime ) );
486  _rqXmlStreamWriter.writeAttribute( "max_age", QString::number( fdMaxAgeTime ) );
487  _rqXmlStreamWriter.writeEndElement(); // Time
488  // ... bearing validity parameters
489  _rqXmlStreamWriter.writeStartElement( "Bearing" );
490  _rqXmlStreamWriter.writeAttribute( "min_value", QString::number( fdMinValueBearing ) );
491  _rqXmlStreamWriter.writeAttribute( "max_error", QString::number( fdMaxErrorBearing ) );
492  _rqXmlStreamWriter.writeAttribute( "max_age", QString::number( fdMaxAgeBearing ) );
493  _rqXmlStreamWriter.writeEndElement(); // Bearing
494  // ... horizontal speed validity parameters
495  _rqXmlStreamWriter.writeStartElement( "Speed" );
496  _rqXmlStreamWriter.writeAttribute( "min_value", QString::number( fdMinValueSpeed ) );
497  _rqXmlStreamWriter.writeAttribute( "max_error", QString::number( fdMaxErrorSpeed ) );
498  _rqXmlStreamWriter.writeAttribute( "max_age", QString::number( fdMaxAgeSpeed ) );
499  _rqXmlStreamWriter.writeEndElement(); // Speed
500  // ... vertical speed validity parameters
501  _rqXmlStreamWriter.writeStartElement( "SpeedVertical" );
502  _rqXmlStreamWriter.writeAttribute( "min_value", QString::number( fdMinValueSpeedVertical ) );
503  _rqXmlStreamWriter.writeAttribute( "max_error", QString::number( fdMaxErrorSpeedVertical ) );
504  _rqXmlStreamWriter.writeAttribute( "max_age", QString::number( fdMaxAgeSpeedVertical ) );
505  _rqXmlStreamWriter.writeEndElement(); // SpeedVertical
506  // Validity [end]
507  _rqXmlStreamWriter.writeEndElement(); // Validity
508 
509  // Colors [start]
510  if( !_bProjectDump )
511  {
512  _rqXmlStreamWriter.writeStartElement( "Colors" );
513  // ... chart
514  _rqXmlStreamWriter.writeStartElement( "Pointer" );
515  _rqXmlStreamWriter.writeAttribute( "red", QString::number( qColorPointer.red() ) );
516  _rqXmlStreamWriter.writeAttribute( "green", QString::number( qColorPointer.green() ) );
517  _rqXmlStreamWriter.writeAttribute( "blue", QString::number( qColorPointer.blue() ) );
518  _rqXmlStreamWriter.writeEndElement(); // Pointer
519  // ... landmark
520  _rqXmlStreamWriter.writeStartElement( "Landmark" );
521  _rqXmlStreamWriter.writeAttribute( "red", QString::number( qColorLandmark.red() ) );
522  _rqXmlStreamWriter.writeAttribute( "green", QString::number( qColorLandmark.green() ) );
523  _rqXmlStreamWriter.writeAttribute( "blue", QString::number( qColorLandmark.blue() ) );
524  _rqXmlStreamWriter.writeEndElement(); // Landmark
525  // ... route
526  _rqXmlStreamWriter.writeStartElement( "Route" );
527  _rqXmlStreamWriter.writeAttribute( "red", QString::number( qColorRoute.red() ) );
528  _rqXmlStreamWriter.writeAttribute( "green", QString::number( qColorRoute.green() ) );
529  _rqXmlStreamWriter.writeAttribute( "blue", QString::number( qColorRoute.blue() ) );
530  _rqXmlStreamWriter.writeEndElement(); // Route
531  // ... track
532  _rqXmlStreamWriter.writeStartElement( "Track" );
533  _rqXmlStreamWriter.writeAttribute( "red", QString::number( qColorTrack.red() ) );
534  _rqXmlStreamWriter.writeAttribute( "green", QString::number( qColorTrack.green() ) );
535  _rqXmlStreamWriter.writeAttribute( "blue", QString::number( qColorTrack.blue() ) );
536  _rqXmlStreamWriter.writeEndElement(); // Track
537  // ... vessel
538  _rqXmlStreamWriter.writeStartElement( "Vessel" );
539  _rqXmlStreamWriter.writeAttribute( "red", QString::number( qColorVessel.red() ) );
540  _rqXmlStreamWriter.writeAttribute( "green", QString::number( qColorVessel.green() ) );
541  _rqXmlStreamWriter.writeAttribute( "blue", QString::number( qColorVessel.blue() ) );
542  _rqXmlStreamWriter.writeEndElement(); // Vessel
543  // ... selected
544  _rqXmlStreamWriter.writeStartElement( "Selected" );
545  _rqXmlStreamWriter.writeAttribute( "red", QString::number( qColorSelected.red() ) );
546  _rqXmlStreamWriter.writeAttribute( "green", QString::number( qColorSelected.green() ) );
547  _rqXmlStreamWriter.writeAttribute( "blue", QString::number( qColorSelected.blue() ) );
548  _rqXmlStreamWriter.writeEndElement(); // Selected
549  // Colors [end]
550  _rqXmlStreamWriter.writeEndElement(); // Colors
551  }
552 
553  // Options [start]
554  if( !_bProjectDump )
555  {
556  _rqXmlStreamWriter.writeStartElement( "Options" );
557  // ... main window
558  _rqXmlStreamWriter.writeStartElement( "MainWindow" );
559  _rqXmlStreamWriter.writeAttribute( "geometry", qsMainWindowGeometry );
560  _rqXmlStreamWriter.writeAttribute( "state", qsMainWindowState );
561  _rqXmlStreamWriter.writeEndElement(); // MainWindow
562  // ... screen
563  _rqXmlStreamWriter.writeStartElement( "Screen" );
564  _rqXmlStreamWriter.writeAttribute( "dpi", QString::number( iScreenDpi ) );
565  _rqXmlStreamWriter.writeAttribute( "gestures", QString::number( (int)bScreenGestures ) );
566  _rqXmlStreamWriter.writeEndElement(); // Screen
567  // ... rates
568  _rqXmlStreamWriter.writeStartElement( "Rates" );
569  _rqXmlStreamWriter.writeAttribute( "refresh", QString::number( iRateRefresh ) );
570  _rqXmlStreamWriter.writeAttribute( "redraw", QString::number( iRateRedraw ) );
571  _rqXmlStreamWriter.writeEndElement(); // Rates
572  // ... charts
573  _rqXmlStreamWriter.writeStartElement( "Charts" );
574  _rqXmlStreamWriter.writeAttribute( "opacity", QString::number( iChartOpacity ) );
575  _rqXmlStreamWriter.writeEndElement(); // Charts
576  // ... symbols
577  _rqXmlStreamWriter.writeStartElement( "Symbols" );
578  _rqXmlStreamWriter.writeAttribute( "visible", QString::number( (int)bVisibleSymbols ) );
579  _rqXmlStreamWriter.writeEndElement(); // Symbols
580  // ... printing
581  _rqXmlStreamWriter.writeStartElement( "Print" );
582  _rqXmlStreamWriter.writeAttribute( "high_res", QString::number( (int)bPrintHighRes ) );
583  _rqXmlStreamWriter.writeEndElement(); // Print
584  // Options [end]
585  _rqXmlStreamWriter.writeEndElement(); // Options
586  }
587 
588  // XML [end]
589  _rqXmlStreamWriter.writeEndElement(); // Settings
590 }
591 
592 void CSettings::load( const QString& _rqsFilename )
593 {
594  //qDebug( "DEBUG[%s]: %s", Q_FUNC_INFO, _rqsFilename.toUtf8().constData() );
595 
596  // File
597  QFileInfo __qFileInfo( _rqsFilename );
598  QFile __qFile( __qFileInfo.absoluteFilePath() );
599  if( !__qFile.open( QIODevice::ReadOnly ) )
600  {
601  qCritical( "INFO[%s]: Failed to open file (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
602  return;
603  }
604  QDomDocument __qDocDocument;
605  if( !__qDocDocument.setContent( &__qFile ) )
606  {
607  qCritical( "ERROR[%s]: Failed to parse XML (%s)", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
608  __qFile.close();
609  return;
610  }
611  __qFile.close();
612 
613  // XML
614  QDomElement __qDomElement = __qDocDocument.documentElement();
615  if( __qDomElement.isNull() || __qDomElement.nodeName() != "QVCT" )
616  {
617  qCritical( "ERROR[%s]: Invalid XML document type (%s); expected: 'QVCT'", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
618  return;
619  }
620  if( __qDomElement.firstChildElement( "Settings" ).isNull() )
621  {
622  qCritical( "ERROR[%s]: Invalid XML content (%s); expected: 'Settings'", Q_FUNC_INFO, qPrintable( __qFile.fileName() ) );
623  return;
624  }
625  parseQVCT( __qDomElement );
626 }
627 
628 void CSettings::parseQVCT( const QDomElement& _rqDomElement )
629 {
630  // XML
631  QDomElement __qDomElementSettings = _rqDomElement.firstChildElement( "Settings" );
632  if( __qDomElementSettings.isNull() ) return;
633  QDomElement __qDomElement;
634 
635  // ... paths
636  {
637  QDomElement __qDomElementContext = __qDomElementSettings.firstChildElement( "Paths" );
638  if( !__qDomElementContext.isNull() )
639  {
640  // ... working directory
641  __qDomElement = __qDomElementContext.firstChildElement( "Working" );
642  if( !__qDomElement.isNull() )
643  {
644  qsPathWorkingDirectory = __qDomElement.attribute( "path", "undef" );
645  }
646 
647  // ... symbols directory
648  __qDomElement = __qDomElementContext.firstChildElement( "Symbols" );
649  if( !__qDomElement.isNull() )
650  {
651  qsPathSymbolsDirectory = __qDomElement.attribute( "path", "undef" );
652  }
653  }
654  }
655 
656  // ... units
657  {
658  QDomElement __qDomElementContext = __qDomElementSettings.firstChildElement( "Units" );
659  if( !__qDomElementContext.isNull() )
660  {
661  // ... date unit
662  __qDomElement = __qDomElementContext.firstChildElement( "Date" );
663  if( !__qDomElement.isNull() )
664  {
665  eUnitDate = CUnitDate::fromCode( __qDomElement.attribute( "unit", "undef" ) );
666  }
667  // ... time unit/precision
668  __qDomElement = __qDomElementContext.firstChildElement( "Time" );
669  if( !__qDomElement.isNull() )
670  {
671  eUnitTime = CUnitTime::fromCode( __qDomElement.attribute( "unit", "undef" ) );
672  iPrecisionTime = __qDomElement.attribute( "precision", "0" ).toInt();
673  }
674  // ... time difference unit/precision
675  __qDomElement = __qDomElementContext.firstChildElement( "TimeDelta" );
676  if( !__qDomElement.isNull() )
677  {
678  eUnitTimeDelta = CUnitTimeDelta::fromCode( __qDomElement.attribute( "unit", "undef" ) );
679  iPrecisionTimeDelta = __qDomElement.attribute( "precision", "0" ).toInt();
680  }
681  // ... timeZone unit
682  __qDomElement = __qDomElementContext.firstChildElement( "TimeZone" );
683  if( !__qDomElement.isNull() )
684  {
685  eUnitTimeZone = CUnitTimeZone::fromCode( __qDomElement.attribute( "unit", "undef" ) );
686  }
687  // ... position unit/precision
688  __qDomElement = __qDomElementContext.firstChildElement( "Position" );
689  if( !__qDomElement.isNull() )
690  {
691  eUnitPosition = CUnitPosition::fromCode( __qDomElement.attribute( "unit", "undef" ) );
692  iPrecisionPosition = __qDomElement.attribute( "precision", "0" ).toInt();
693  }
694  // ... bearing unit/precision
695  __qDomElement = __qDomElementContext.firstChildElement( "Bearing" );
696  if( !__qDomElement.isNull() )
697  {
698  eUnitBearing = CUnitBearing::fromCode( __qDomElement.attribute( "unit", "undef" ) );
699  iPrecisionBearing = __qDomElement.attribute( "precision", "0" ).toInt();
700  }
701  // ... distance unit/precision
702  __qDomElement = __qDomElementContext.firstChildElement( "Distance" );
703  if( !__qDomElement.isNull() )
704  {
705  eUnitDistance = CUnitDistance::fromCode( __qDomElement.attribute( "unit", "undef" ) );
706  iPrecisionDistance = __qDomElement.attribute( "precision", "0" ).toInt();
707  }
708  // ... speed unit/precision
709  __qDomElement = __qDomElementContext.firstChildElement( "Speed" );
710  if( !__qDomElement.isNull() )
711  {
712  eUnitSpeed = CUnitSpeed::fromCode( __qDomElement.attribute( "unit", "undef" ) );
713  iPrecisionSpeed = __qDomElement.attribute( "precision", "0" ).toInt();
714  }
715  // ... elevation unit/precision
716  __qDomElement = __qDomElementContext.firstChildElement( "Elevation" );
717  if( !__qDomElement.isNull() )
718  {
719  eUnitElevation = CUnitElevation::fromCode( __qDomElement.attribute( "unit", "undef" ) );
720  iPrecisionElevation = __qDomElement.attribute( "precision", "0" ).toInt();
721  }
722  // ... vertical speed unit/precision
723  __qDomElement = __qDomElementContext.firstChildElement( "SpeedVertical" );
724  if( !__qDomElement.isNull() )
725  {
726  eUnitSpeedVertical = CUnitSpeedVertical::fromCode( __qDomElement.attribute( "unit", "undef" ) );
727  iPrecisionSpeedVertical = __qDomElement.attribute( "precision", "0" ).toInt();
728  }
729  }
730  }
731 
732  // ... validity
733  {
734  QDomElement __qDomElementContext = __qDomElementSettings.firstChildElement( "Validity" );
735  if( !__qDomElementContext.isNull() )
736  {
737  // ... position validity parameters
738  __qDomElement = __qDomElementContext.firstChildElement( "Position" );
739  if( !__qDomElement.isNull() )
740  {
741  fdMinValuePosition = __qDomElement.attribute( "min_value", "100.0" ).toDouble();
742  fdMaxErrorPosition = __qDomElement.attribute( "max_error", "25.0" ).toDouble();
743  fdMaxAgePosition = __qDomElement.attribute( "max_age", "5.0" ).toDouble();
744  }
745  // ... elevation validity parameters
746  __qDomElement = __qDomElementContext.firstChildElement( "Elevation" );
747  if( !__qDomElement.isNull() )
748  {
749  fdMaxErrorElevation = __qDomElement.attribute( "max_error", "25.0" ).toDouble();
750  fdMaxAgeElevation = __qDomElement.attribute( "max_age", "5.0" ).toDouble();
751  }
752  // ... time validity parameters
753  __qDomElement = __qDomElementContext.firstChildElement( "Time" );
754  if( !__qDomElement.isNull() )
755  {
756  fdMaxErrorTime = __qDomElement.attribute( "max_error", "1.0" ).toDouble();
757  fdMaxAgeTime = __qDomElement.attribute( "max_age", "5.0" ).toDouble();
758  }
759  // ... bearing validity parameters
760  __qDomElement = __qDomElementContext.firstChildElement( "Bearing" );
761  if( !__qDomElement.isNull() )
762  {
763  fdMinValueBearing = __qDomElement.attribute( "min_value", "30.0" ).toDouble();
764  fdMaxErrorBearing = __qDomElement.attribute( "max_error", "10.0" ).toDouble();
765  fdMaxAgeBearing = __qDomElement.attribute( "max_age", "5.0" ).toDouble();
766  }
767  // ... horizontal speed validity parameters
768  __qDomElement = __qDomElementContext.firstChildElement( "Speed" );
769  if( !__qDomElement.isNull() )
770  {
771  fdMinValueSpeed = __qDomElement.attribute( "min_value", "0.25" ).toDouble();
772  fdMaxErrorSpeed = __qDomElement.attribute( "max_error", "10.0" ).toDouble();
773  fdMaxAgeSpeed = __qDomElement.attribute( "max_age", "5.0" ).toDouble();
774  }
775  // ... vertical speed validity parameters
776  __qDomElement = __qDomElementContext.firstChildElement( "SpeedVertical" );
777  if( !__qDomElement.isNull() )
778  {
779  fdMinValueSpeedVertical = __qDomElement.attribute( "min_value", "0.25" ).toDouble();
780  fdMaxErrorSpeedVertical = __qDomElement.attribute( "max_error", "10.0" ).toDouble();
781  fdMaxAgeSpeedVertical = __qDomElement.attribute( "max_age", "5.0" ).toDouble();
782  }
783  }
784  }
785 
786  // ... colors
787  {
788  QDomElement __qDomElementContext = __qDomElementSettings.firstChildElement( "Colors" );
789  if( !__qDomElementContext.isNull() )
790  {
791  int __iRed, __iGreen, __iBlue;
792  // ... chart
793  __qDomElement = __qDomElementContext.firstChildElement( "Pointer" );
794  if( !__qDomElement.isNull() )
795  {
796  __iRed = __qDomElement.attribute( "red", "64" ).toInt();
797  __iGreen = __qDomElement.attribute( "green", "64" ).toInt();
798  __iBlue = __qDomElement.attribute( "blue", "64" ).toInt();
799  qColorPointer.setRgb( __iRed, __iGreen, __iBlue );
800  }
801  // ... landmark
802  __qDomElement = __qDomElementContext.firstChildElement( "Landmark" );
803  if( !__qDomElement.isNull() )
804  {
805  __iRed = __qDomElement.attribute( "red", "0" ).toInt();
806  __iGreen = __qDomElement.attribute( "green", "255" ).toInt();
807  __iBlue = __qDomElement.attribute( "blue", "0" ).toInt();
808  qColorLandmark.setRgb( __iRed, __iGreen, __iBlue );
809  }
810  // ... route
811  __qDomElement = __qDomElementContext.firstChildElement( "Route" );
812  if( !__qDomElement.isNull() )
813  {
814  __iRed = __qDomElement.attribute( "red", "0" ).toInt();
815  __iGreen = __qDomElement.attribute( "green", "0" ).toInt();
816  __iBlue = __qDomElement.attribute( "blue", "255" ).toInt();
817  qColorRoute.setRgb( __iRed, __iGreen, __iBlue );
818  }
819  // ... track
820  __qDomElement = __qDomElementContext.firstChildElement( "Track" );
821  if( !__qDomElement.isNull() )
822  {
823  __iRed = __qDomElement.attribute( "red", "255" ).toInt();
824  __iGreen = __qDomElement.attribute( "green", "0" ).toInt();
825  __iBlue = __qDomElement.attribute( "blue", "255" ).toInt();
826  qColorTrack.setRgb( __iRed, __iGreen, __iBlue );
827  }
828  // ... vessel
829  __qDomElement = __qDomElementContext.firstChildElement( "Vessel" );
830  if( !__qDomElement.isNull() )
831  {
832  __iRed = __qDomElement.attribute( "red", "255" ).toInt();
833  __iGreen = __qDomElement.attribute( "green", "0" ).toInt();
834  __iBlue = __qDomElement.attribute( "blue", "0" ).toInt();
835  qColorVessel.setRgb( __iRed, __iGreen, __iBlue );
836  }
837  // ... selected
838  __qDomElement = __qDomElementContext.firstChildElement( "Selected" );
839  if( !__qDomElement.isNull() )
840  {
841  __iRed = __qDomElement.attribute( "red", "255" ).toInt();
842  __iGreen = __qDomElement.attribute( "green", "0" ).toInt();
843  __iBlue = __qDomElement.attribute( "blue", "0" ).toInt();
844  qColorSelected.setRgb( __iRed, __iGreen, __iBlue );
845  }
846  }
847  }
848 
849  // ... options
850  {
851  QDomElement __qDomElementContext = __qDomElementSettings.firstChildElement( "Options" );
852  if( !__qDomElementContext.isNull() )
853  {
854  // ... main window
855  __qDomElement = __qDomElementContext.firstChildElement( "MainWindow" );
856  if( !__qDomElement.isNull() )
857  {
858  qsMainWindowGeometry = __qDomElement.attribute( "geometry", "undef" );
859  qsMainWindowState = __qDomElement.attribute( "state", "undef" );
860  }
861  // ... screen
862  __qDomElement = __qDomElementContext.firstChildElement( "Screen" );
863  if( !__qDomElement.isNull() )
864  {
865  iScreenDpi = __qDomElement.attribute( "dpi", "96" ).toInt();
866  bScreenGestures = (bool)__qDomElement.attribute( "gestures", "0" ).toInt();
867  }
868  // ... rates
869  __qDomElement = __qDomElementContext.firstChildElement( "Rates" );
870  if( !__qDomElement.isNull() )
871  {
872  iRateRefresh = __qDomElement.attribute( "refresh", "1000" ).toInt();
873  iRateRedraw = __qDomElement.attribute( "redraw", "5" ).toInt();
874  }
875  // ... charts
876  __qDomElement = __qDomElementContext.firstChildElement( "Charts" );
877  if( !__qDomElement.isNull() )
878  {
879  iChartOpacity = __qDomElement.attribute( "opacity", "100" ).toInt();
880  }
881  // ... symbols
882  __qDomElement = __qDomElementContext.firstChildElement( "Symbols" );
883  if( !__qDomElement.isNull() )
884  {
885  bVisibleSymbols = (bool)__qDomElement.attribute( "visible", "1" ).toInt();
886  }
887  // ... printing
888  __qDomElement = __qDomElementContext.firstChildElement( "Print" );
889  if( !__qDomElement.isNull() )
890  {
891  bPrintHighRes = (bool)__qDomElement.attribute( "high_res", "1" ).toInt();
892  }
893  }
894  }
895 
896  // Validate all values
897  validate();
898 }
CUnitTimeDelta::EUnit eUnitTimeDelta
[Unit] Time difference format/unit
Definition: CSettings.hpp:75
void slotMaxAgeSpeedVertical(const QString &_rqsMaxAge)
[MaxAge] Slot to modify the vertical speed maximum age
Definition: CSettings.cpp:236
void slotChartOpacity(int _iChartOpacity)
[Misc] Slot to modify the chart opacity
Definition: CSettings.cpp:261
double fdMaxErrorBearing
[MaxError] Bearing maximum error, in degrees
Definition: CSettings.hpp:139
QString qsPathSymbolsDirectory
[Path] Symbols directory
Definition: CSettings.hpp:65
void load(const QString &_rqsFilename)
Restore all parameters from the given file.
Definition: CSettings.cpp:592
bool bVisibleSymbols
[Misc] Symbols visibility (on chart)
Definition: CSettings.hpp:201
double fdMaxErrorSpeed
[MaxError] Horizontal speed maximum error, in meters per second
Definition: CSettings.hpp:141
void slotRateRedraw(int _iRateRedraw)
[Misc] Slot to modify the content redraw rate
Definition: CSettings.cpp:256
void slotUnitPosition(const QString &_rqsSymbol)
[Unit] Slot to modify the position format/unit
Definition: CSettings.cpp:131
int iPrecisionPosition
[Precision] Position decimal precision
Definition: CSettings.hpp:106
void slotMaxErrorBearing(const QString &_rqsMaxError)
[MaxError] Slot to modify the bearing maximum error
Definition: CSettings.cpp:196
int iPrecisionSpeed
[Precision] Speed decimal precision
Definition: CSettings.hpp:115
double fdMinValueSpeedVertical
[MinValue] Minimum (absolute) vertical speed, in meters per second
Definition: CSettings.hpp:130
void parseQVCT(const QDomElement &_rqDomElement)
Retrieves parameters from the given QVCT source (file)
Definition: CSettings.cpp:628
CUnitPosition::EUnit eUnitPosition
[Unit] Position format/unit
Definition: CSettings.hpp:81
int iPrecisionTimeDelta
[Precision] Time difference decimal precision
Definition: CSettings.hpp:103
void slotMaxErrorTime(const QString &_rqsMaxError)
[MaxError] Slot to modify the time maximum error
Definition: CSettings.cpp:191
int iPrecisionBearing
[Precision] Bearing decimal precision
Definition: CSettings.hpp:109
void slotMaxErrorPosition(const QString &_rqsMaxError)
[MaxError] Slot to modify the position maximum error
Definition: CSettings.cpp:181
int iRateRedraw
[Misc] Content redraw rate, in seconds
Definition: CSettings.hpp:195
double fdMinValuePosition
[MinValue] Minimum (absolute) position (delta), in meters
Definition: CSettings.hpp:124
void slotScreenDpi(int _iScreenDpi)
[Misc] Slot to modify the screen Dots-per-Inch (DPI)
Definition: CSettings.cpp:241
double fdMaxAgeSpeed
[MaxAge] Horizontal speed maximum age, in seconds
Definition: CSettings.hpp:154
void dumpQVCT(QXmlStreamWriter &_rqXmlStreamWriter, bool _bProjectDump=false) const
Stores parameters to the given QVCT destination (file)
Definition: CSettings.cpp:396
void slotMaxErrorElevation(const QString &_rqsMaxError)
[MaxError] Slot to modify the elevation maximum error
Definition: CSettings.cpp:186
void slotUnitTime(const QString &_rqsSymbol)
[Unit] Slot to modify the time format/unit
Definition: CSettings.cpp:116
void slotUnitTimeDelta(const QString &_rqsSymbol)
[Unit] Slot to modify the time difference format/unit
Definition: CSettings.cpp:121
int iPrecisionSpeedVertical
[Precision] Vertical speed decimal precision
Definition: CSettings.hpp:121
double fdMinValueBearing
[MinValue] Minimum (absolute) bearing (delta), in degrees
Definition: CSettings.hpp:126
void slotPrintHighRes(int _iPrintHighRes)
[Misc] Slot to modify the high-resolution printing status
Definition: CSettings.cpp:271
double fdMaxAgePosition
[MaxAge] Position maximum age, in seconds
Definition: CSettings.hpp:146
CUnitDistance::EUnit eUnitDistance
[Unit] Distance format/unit
Definition: CSettings.hpp:87
QColor qColorSelected
[Color] Selected objects base color
Definition: CSettings.hpp:175
QColor qColorTrack
[Color] Track overlay's base color
Definition: CSettings.hpp:169
int iChartOpacity
[Misc] Chart opacity [0,100]
Definition: CSettings.hpp:198
double fdMaxErrorPosition
[MaxError] Position maximum error, in meters
Definition: CSettings.hpp:133
CUnitElevation::EUnit eUnitElevation
[Unit] Elevation format/unit
Definition: CSettings.hpp:93
double fdMaxAgeElevation
[MaxAge] Elevation maximum age, in seconds
Definition: CSettings.hpp:148
CUnitTime::EUnit eUnitTime
[Unit] Time format/unit
Definition: CSettings.hpp:72
void slotMaxErrorSpeed(const QString &_rqsMaxError)
[MaxError] Slot to modify the horizontal speed maximum error
Definition: CSettings.cpp:201
bool bPrintHighRes
[Misc] High-resolution printing
Definition: CSettings.hpp:204
void slotMaxAgeBearing(const QString &_rqsMaxAge)
[MaxAge] Slot to modify the bearing maximum age
Definition: CSettings.cpp:226
double fdMaxAgeBearing
[MaxAge] Bearing maximum age, in seconds
Definition: CSettings.hpp:152
void slotUnitDistance(const QString &_rqsSymbol)
[Unit] Slot to modify the distance format/unit
Definition: CSettings.cpp:141
void slotUnitSpeed(const QString &_rqsSymbol)
[Unit] Slot to modify the speed format/unit
Definition: CSettings.cpp:146
void slotScreenGestures(int _iScreenGestures)
[Misc] Slot to modify the (multitouch) screen gestures activation status
Definition: CSettings.cpp:246
void slotMinValueSpeed(const QString &_rqsMinValue)
[MinValue] Slot to modify the minimum (absolute) horizontal speed
Definition: CSettings.cpp:171
CUnitBearing::EUnit eUnitBearing
[Unit] Bearing format/unit
Definition: CSettings.hpp:84
QColor qColorPointer
[Color] Pointer overlay's base color
Definition: CSettings.hpp:160
QColor qColorRoute
[Color] Route overlay's base color
Definition: CSettings.hpp:166
QColor qColorVessel
[Color] Vessel overlay's base color
Definition: CSettings.hpp:172
double fdMaxErrorTime
[MaxError] Time maximum error, in seconds
Definition: CSettings.hpp:137
CUnitSpeed::EUnit eUnitSpeed
[Unit] Speed format/unit
Definition: CSettings.hpp:90
int iRateRefresh
[Misc] Content refresh rate, in milliseconds
Definition: CSettings.hpp:192
double fdMinValueSpeed
[MinValue] Minimum (absolute) horizontal speed, in meters per second
Definition: CSettings.hpp:128
CUnitTimeZone::EUnit eUnitTimeZone
[Unit] timezone format/unit
Definition: CSettings.hpp:78
QString qsMainWindowGeometry
[Misc] Main window geometry (Base64-encoded binary data)
Definition: CSettings.hpp:179
void slotRateRefresh(int _iRateRefresh)
[Misc] Slot to modify the content refresh rate
Definition: CSettings.cpp:251
void slotMinValueSpeedVertical(const QString &_rqsMinValue)
[MinValue] Slot to modify the minimum (absolute) vertical speed
Definition: CSettings.cpp:176
void slotUnitDate(const QString &_rqsSymbol)
[Unit] Slot to modify the date format/unit
Definition: CSettings.cpp:111
double fdMaxErrorSpeedVertical
[MaxError] Vertical speed maximum error, in meters per second
Definition: CSettings.hpp:143
void save(const QString &_rqsFilename) const
Store all parameters to the given file.
Definition: CSettings.cpp:364
void slotUnitElevation(const QString &_rqsSymbol)
[Unit] Slot to modify the elevation format/unit
Definition: CSettings.cpp:151
QColor qColorLandmark
[Color] Landmark overlay's base color
Definition: CSettings.hpp:163
void slotUnitBearing(const QString &_rqsSymbol)
[Unit] Slot to modify the bearing format/unit
Definition: CSettings.cpp:136
void slotMaxAgeElevation(const QString &_rqsMaxAge)
[MaxAge] Slot to modify the elevation maximum age
Definition: CSettings.cpp:216
double fdMaxAgeTime
[MaxAge] Time maximum age, in seconds
Definition: CSettings.hpp:150
void slotMaxErrorSpeedVertical(const QString &_rqsMaxError)
[MaxError] Slot to modify the vertical speed maximum error
Definition: CSettings.cpp:206
int iPrecisionDistance
[Precision] Distance decimal precision
Definition: CSettings.hpp:112
double fdMaxErrorElevation
[MaxError] Elevation maximum error, in meters
Definition: CSettings.hpp:135
void validate()
Verifies and validates all parameters.
Definition: CSettings.cpp:280
void slotUnitSpeedVertical(const QString &_rqsSymbol)
[Unit] Slot to modify the vertical speed format/unit
Definition: CSettings.cpp:156
void slotMinValuePosition(const QString &_rqsMinValue)
[MinValue] Slot to modify the minimum (absolute) position (delta)
Definition: CSettings.cpp:166
double fdMaxAgeSpeedVertical
[MaxAge] Vertical speed maximum age, in seconds
Definition: CSettings.hpp:156
bool bScreenGestures
[Misc] Screen (multitouch) gestures (activation status)
Definition: CSettings.hpp:189
void slotPathWorkingDirectory(const QString &_rqsPathWorkingDirectory)
[Path] Slot to modify the current working directory
Definition: CSettings.cpp:101
void slotMaxAgeTime(const QString &_rqsMaxAge)
[MaxAge] Slot to modify the time maximum age
Definition: CSettings.cpp:221
CUnitDate::EUnit eUnitDate
[Unit] Date format/unit
Definition: CSettings.hpp:69
void slotUnitTimeZone(const QString &_rqsSymbol)
[Unit] Slot to modify the timezone format/unit
Definition: CSettings.cpp:126
QString qsMainWindowState
[Misc] Main window state (Base64-encoded binary data)
Definition: CSettings.hpp:182
int iScreenDpi
[Misc] Screen Dots-per-Inch (DPI)
Definition: CSettings.hpp:186
void slotMaxAgePosition(const QString &_rqsMaxAge)
[MaxAge] Slot to modify the position maximum age
Definition: CSettings.cpp:211
void slotMinValueBearing(const QString &_rqsMinValue)
[MinValue] Slot to modify the minimum (absolute) bearing (delta)
Definition: CSettings.cpp:161
int iPrecisionTime
[Precision] Time decimal precision
Definition: CSettings.hpp:100
void slotMaxAgeSpeed(const QString &_rqsMaxAge)
[MaxAge] Slot to modify the horizontal speed maximum age
Definition: CSettings.cpp:231
void slotVisibleSymbols(int _iVisibleSymbols)
[Misc] Slot to modify the symbols visibility (on chart)
Definition: CSettings.cpp:266
CUnitSpeedVertical::EUnit eUnitSpeedVertical
[Unit] Vertical speed format/unit
Definition: CSettings.hpp:96
int iPrecisionElevation
[Precision] Elevation decimal precision
Definition: CSettings.hpp:118
void slotPathSymbolsDirectory(const QString &_rqsPathSymbolsDirectory)
[Path] Slot to modify the symbols directory
Definition: CSettings.cpp:106
QString qsPathWorkingDirectory
[Path] Current working directory
Definition: CSettings.hpp:61
Bearing unit (deg,rad,grad) rendering/parsing class.
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
@ UNDEFINED
undefined format/unit
@ DEG
degrees
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
Date unit (YMD, DMY, MDY) rendering/parsing class.
Definition: CUnitDate.hpp:39
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
Definition: CUnitDate.cpp:66
@ UNDEFINED
undefined format/unit
Definition: CUnitDate.hpp:51
@ YMD
YYYY-MM-DD.
Definition: CUnitDate.hpp:48
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
Definition: CUnitDate.cpp:51
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
Definition: CUnitDate.cpp:61
Distance unit (m,km,ft,mi,nm) rendering/parsing class.
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
@ UNDEFINED
undefined format/unit
@ M
meters [m]
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
Elevation unit (m,ft) rendering/parsing class.
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
@ UNDEFINED
undefined format/unit
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
Geographical position unit (D,DM,DMS,RAD,GRAD) rendering/parsing class.
@ UNDEFINED
undefined format/unit
@ DMS
degrees, minutes, seconds
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
Vertical speed unit (m/s,ft/min) rendering/parsing class.
@ UNDEFINED
undefined format/unit
@ M_S
meters per second [m/s]
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
Speed unit (m/s,km/h,mi/h,kt) rendering/parsing class.
Definition: CUnitSpeed.hpp:45
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
Definition: CUnitSpeed.cpp:56
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
Definition: CUnitSpeed.cpp:46
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
Definition: CUnitSpeed.cpp:61
@ UNDEFINED
undefined format/unit
Definition: CUnitSpeed.hpp:58
@ M_S
meters per second [m/s]
Definition: CUnitSpeed.hpp:54
Time difference (HMS, HM, M, S) rendering/parsing class.
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
@ UNDEFINED
undefined format/unit
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
Time zone (UTC, local) selection class.
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
@ UNDEFINED
undefined format/unit
@ UTC
Universal Time Coordinates.
Time unit (HMS, HM) rendering/parsing class.
Definition: CUnitTime.hpp:39
@ UNDEFINED
undefined format/unit
Definition: CUnitTime.hpp:50
@ HMS
HH:MM:SS.
Definition: CUnitTime.hpp:48
static EUnit fromSymbol(const QString &_rqsSymbol)
Returns the format/unit ID corresponding to the given human-readable symbol.
Definition: CUnitTime.cpp:51
static EUnit fromCode(const QString &_rqsCode)
Returns the format/unit ID corresponding to the given machine-friendly code.
Definition: CUnitTime.cpp:66
static QString toCode(EUnit _eUnit)
Returns the machine-friendly code corresponding to the given format/unit ID.
Definition: CUnitTime.cpp:61
#define CONFDIR_STRING
Definition: main.hpp:175