8#include "QtMarbleConfigDialog.h"
10#include "ui_MarbleCacheSettingsWidget.h"
11#include "ui_MarbleViewSettingsWidget.h"
12#include "ui_MarbleNavigationSettingsWidget.h"
13#include "ui_MarbleTimeSettingsWidget.h"
14#include "ui_MarbleCloudSyncSettingsWidget.h"
18#include <QNetworkProxy>
19#include <QApplication>
20#include <QDialogButtonBox>
28#include "MarbleDebug.h"
29#include "MarbleDirs.h"
33#include "RenderPlugin.h"
34#include "RenderPluginModel.h"
35#include "MarbleClock.h"
36#include "routing/RoutingProfilesWidget.h"
37#include "BookmarkSyncManager.h"
38#include "CloudSyncManager.h"
43class QtMarbleConfigDialogPrivate
46 QtMarbleConfigDialogPrivate( MarbleWidget *marbleWidget, CloudSyncManager *cloudSyncManager )
48 ui_navigationSettings(),
51 w_pluginSettings( nullptr ),
52 m_cloudSyncStatusLabel( nullptr ),
53 m_marbleWidget( marbleWidget ),
54 m_syncManager( cloudSyncManager ? cloudSyncManager->bookmarkSyncManager() : nullptr ),
55 m_cloudSyncManager(cloudSyncManager),
60 Ui::MarbleViewSettingsWidget ui_viewSettings;
61 Ui::MarbleNavigationSettingsWidget ui_navigationSettings;
62 Ui::MarbleTimeSettingsWidget ui_timeSettings;
63 Ui::MarbleCacheSettingsWidget ui_cacheSettings;
64 Ui::MarbleCloudSyncSettingsWidget ui_cloudSyncSettings;
65 MarblePluginSettingsWidget *w_pluginSettings;
69 QLabel *m_cloudSyncStatusLabel;
71 MarbleWidget *
const m_marbleWidget;
72 BookmarkSyncManager *
const m_syncManager;
73 CloudSyncManager *
const m_cloudSyncManager;
75 RenderPluginModel m_pluginModel;
80QtMarbleConfigDialog::QtMarbleConfigDialog(MarbleWidget *marbleWidget, CloudSyncManager *cloudSyncManager,
83 d( new QtMarbleConfigDialogPrivate( marbleWidget, cloudSyncManager ) )
95 connect( buttons, SIGNAL(accepted()),
this, SLOT(accept()) );
96 connect( buttons, SIGNAL(rejected()),
this, SLOT(reject()) );
98 this, SLOT(writeSettings()) );
100 connect(
this, SIGNAL(accepted()),
this, SLOT(writeSettings()) );
105 d->ui_viewSettings.setupUi( w_viewSettings );
106 tabWidget->
addTab( w_viewSettings, tr(
"View" ) );
108 d->ui_viewSettings.kcfg_labelLocalization->hide();
109 d->ui_viewSettings.label_labelLocalization->hide();
114 d->ui_navigationSettings.setupUi( w_navigationSettings );
115 tabWidget->
addTab( w_navigationSettings, tr(
"Navigation" ) );
116 d->ui_navigationSettings.kcfg_dragLocation->hide();
117 d->ui_navigationSettings.label_dragLocation->hide();
122 d->ui_cacheSettings.setupUi( w_cacheSettings );
123 tabWidget->
addTab( w_cacheSettings, tr(
"Cache and Proxy" ) );
125 connect( d->ui_cacheSettings.button_clearVolatileCache, SIGNAL(clicked()), SIGNAL(clearVolatileCacheClicked()) );
126 connect( d->ui_cacheSettings.button_clearPersistentCache, SIGNAL(clicked()), SIGNAL(clearPersistentCacheClicked()) );
130 d->ui_timeSettings.setupUi( w_timeSettings );
131 tabWidget->
addTab( w_timeSettings, tr(
"Date and Time" ) );
134 QWidget *w_routingSettings =
new RoutingProfilesWidget( marbleWidget->model() );
135 tabWidget->
addTab( w_routingSettings, tr(
"Routing" ) );
138 d->m_pluginModel.setRenderPlugins( d->m_marbleWidget->renderPlugins() );
139 d->w_pluginSettings =
new MarblePluginSettingsWidget(
this );
140 d->w_pluginSettings->setModel( &d->m_pluginModel );
141 d->w_pluginSettings->setObjectName(
"plugin_page" );
142 tabWidget->
addTab( d->w_pluginSettings, tr(
"Plugins" ) );
145 d->w_pluginSettings->setAboutIcon(
QIcon(QStringLiteral(
":/icons/help-about.png")));
146 d->w_pluginSettings->setConfigIcon(
QIcon(QStringLiteral(
":/icons/settings-configure.png")));
148 connect(
this, SIGNAL(rejected()), &d->m_pluginModel, SLOT(retrievePluginState()) );
149 connect(
this, SIGNAL(accepted()), &d->m_pluginModel, SLOT(applyPluginState()) );
152 d->ui_cloudSyncSettings.setupUi( w_cloudSyncSettings );
153 tabWidget->
addTab( w_cloudSyncSettings, tr(
"Synchronization" ) );
154 d->ui_cloudSyncSettings.button_syncNow->setEnabled( syncBookmarks() );
155 d->m_cloudSyncStatusLabel = d->ui_cloudSyncSettings.cloudSyncStatus;
156 connect( d->ui_cloudSyncSettings.button_syncNow, SIGNAL(clicked()), SIGNAL(syncNowClicked()) );
157 connect( d->ui_cloudSyncSettings.testLoginButton, SIGNAL(clicked()),
this, SLOT(updateCloudSyncCredentials()) );
159 if ( d->m_syncManager ) {
160 connect(d->m_syncManager, SIGNAL(syncComplete()),
this, SLOT(updateLastSync()));
163 if ( d->m_cloudSyncManager ) {
165 this, SLOT(updateCloudSyncStatus(
QString)));
173 this->setLayout( layout );
176 connect(
this, SIGNAL(settingsChanged()),
this, SLOT(syncSettings()) );
178 initializeCustomTimezone();
181QtMarbleConfigDialog::~QtMarbleConfigDialog()
186void QtMarbleConfigDialog::syncSettings()
188 d->m_settings.sync();
193 if (proxyUrl().isEmpty() || proxyUrl() ==
QLatin1String(
"http://")) {
203 mDebug() <<
"Unknown proxy type! Using Http Proxy instead.";
219void QtMarbleConfigDialog::updateCloudSyncCredentials()
221 if ( d->m_cloudSyncManager ) {
222 d->m_cloudSyncManager->setOwncloudCredentials(
223 d->ui_cloudSyncSettings.kcfg_owncloudServer->text(),
224 d->ui_cloudSyncSettings.kcfg_owncloudUsername->text(),
225 d->ui_cloudSyncSettings.kcfg_owncloudPassword->text() );
229void QtMarbleConfigDialog::disableSyncNow()
231 if ( !d->m_syncManager ) {
235 d->ui_cloudSyncSettings.button_syncNow->setDisabled(
true);
238 connect(timeoutTimer, SIGNAL(timeout()),
239 timeoutTimer, SLOT(
stop()));
240 connect(timeoutTimer, SIGNAL(timeout()),
241 this, SLOT(enableSyncNow()));
243 connect(d->m_syncManager, SIGNAL(syncComplete()),
244 this, SLOT(enableSyncNow()));
245 connect(d->m_syncManager, SIGNAL(syncComplete()),
246 timeoutTimer, SLOT(
stop()));
247 connect(d->m_syncManager, SIGNAL(syncComplete()),
248 timeoutTimer, SLOT(deleteLater()));
250 timeoutTimer->
start(30*1000);
253void QtMarbleConfigDialog::enableSyncNow()
255 if ( !d->m_syncManager ) {
259 d->ui_cloudSyncSettings.button_syncNow->setEnabled(
true);
262void QtMarbleConfigDialog::updateLastSync()
264 if ( !d->m_syncManager ) {
268 if (!d->m_syncManager->lastSync().isValid()) {
269 d->ui_cloudSyncSettings.labelLastSync->setText(tr(
"Never synchronized."));
273 const QString title = tr(
"Last synchronization: %1")
274 .
arg(d->m_syncManager->lastSync().toString());
276 d->ui_cloudSyncSettings.labelLastSync->setText(title);
279void QtMarbleConfigDialog::readSettings()
285 d->ui_viewSettings.kcfg_distanceUnit->setCurrentIndex( measurementSystem() );
286 d->ui_viewSettings.kcfg_angleUnit->setCurrentIndex( angleUnit() );
287 d->ui_viewSettings.kcfg_stillQuality->setCurrentIndex( stillQuality() );
288 d->ui_viewSettings.kcfg_animationQuality->setCurrentIndex( animationQuality() );
289 d->ui_viewSettings.kcfg_labelLocalization->setCurrentIndex(
Marble::Native );
290 d->ui_viewSettings.kcfg_mapFont->setCurrentFont( mapFont() );
294 d->ui_navigationSettings.kcfg_onStartup->setCurrentIndex( onStartup() );
295 d->ui_navigationSettings.kcfg_inertialEarthRotation->setChecked( inertialEarthRotation() );
296 d->ui_navigationSettings.kcfg_mouseViewRotation->setChecked( mouseViewRotation() );
297 d->ui_navigationSettings.kcfg_animateTargetVoyage->setChecked( animateTargetVoyage() );
303 }
else if (externalMapEditor() ==
QLatin1String(
"merkaartor")) {
306 d->ui_navigationSettings.kcfg_externalMapEditor->setCurrentIndex( editorIndex );
309 d->ui_cacheSettings.kcfg_volatileTileCacheLimit->setValue( volatileTileCacheLimit() );
310 d->ui_cacheSettings.kcfg_persistentTileCacheLimit->setValue( persistentTileCacheLimit() );
311 d->ui_cacheSettings.kcfg_proxyUrl->setText( proxyUrl() );
312 d->ui_cacheSettings.kcfg_proxyPort->setValue( proxyPort() );
313 d->ui_cacheSettings.kcfg_proxyUser->setText( proxyUser() );
314 d->ui_cacheSettings.kcfg_proxyPass->setText( proxyPass() );
315 d->ui_cacheSettings.kcfg_proxyType->setCurrentIndex( proxyType() );
316 d->ui_cacheSettings.kcfg_proxyAuth->setChecked( proxyAuth() );
319 d->ui_timeSettings.kcfg_systemTimezone->setChecked( systemTimezone() );
320 d->ui_timeSettings.kcfg_customTimezone->setChecked( customTimezone() );
321 d->ui_timeSettings.kcfg_chosenTimezone->setCurrentIndex( chosenTimezone() );
322 d->ui_timeSettings.kcfg_utc->setChecked(
UTC() );
323 d->ui_timeSettings.kcfg_systemTime->setChecked( systemTime() );
324 d->ui_timeSettings.kcfg_lastSessionTime->setChecked( lastSessionTime() );
325 if( systemTimezone() ==
true )
331 else if(
UTC() ==
true )
333 d->m_marbleWidget->model()->setClockTimezone( 0 );
335 else if( customTimezone() ==
true )
337 d->m_marbleWidget->model()->setClockTimezone( d->m_timezone.value( chosenTimezone() ) );
343 d->ui_cloudSyncSettings.kcfg_enableSync->setChecked( syncEnabled() );
344 d->ui_cloudSyncSettings.kcfg_syncBookmarks->setChecked( syncBookmarks() );
345 d->ui_cloudSyncSettings.kcfg_syncRoutes->setChecked( syncRoutes() );
346 d->ui_cloudSyncSettings.kcfg_owncloudServer->setText( owncloudServer() );
347 d->ui_cloudSyncSettings.kcfg_owncloudUsername->setText( owncloudUsername() );
348 d->ui_cloudSyncSettings.kcfg_owncloudPassword->setText( owncloudPassword() );
351 d->m_marbleWidget->readPluginSettings( d->m_settings );
354 emit settingsChanged();
357void QtMarbleConfigDialog::updateCloudSyncStatus(
const QString &
status )
359 d->m_cloudSyncStatusLabel->setText(
status);
360 CloudSyncManager::Status status_type =
361 d->m_cloudSyncManager ? d->m_cloudSyncManager->status() : CloudSyncManager::Unknown;
362 switch (status_type) {
363 case CloudSyncManager::Success:
364 d->m_cloudSyncStatusLabel->setStyleSheet(
"QLabel { color : green; }");
366 case CloudSyncManager::Error:
367 d->m_cloudSyncStatusLabel->setStyleSheet(
"QLabel { color : red; }");
369 case CloudSyncManager::Unknown:
370 d->m_cloudSyncStatusLabel->setStyleSheet(
"QLabel { color : grey; }");
375void QtMarbleConfigDialog::writeSettings()
379 d->m_settings.beginGroup(
"View" );
380 d->m_settings.setValue(
"distanceUnit", d->ui_viewSettings.kcfg_distanceUnit->currentIndex() );
381 d->m_settings.setValue(
"angleUnit", d->ui_viewSettings.kcfg_angleUnit->currentIndex() );
382 d->m_settings.setValue(
"stillQuality", d->ui_viewSettings.kcfg_stillQuality->currentIndex() );
383 d->m_settings.setValue(
"animationQuality", d->ui_viewSettings.kcfg_animationQuality->currentIndex() );
384 d->m_settings.setValue(
"mapFont", d->ui_viewSettings.kcfg_mapFont->currentFont() );
385 d->m_settings.endGroup();
387 d->m_settings.beginGroup(
"Navigation" );
388 d->m_settings.setValue(
"onStartup", d->ui_navigationSettings.kcfg_onStartup->currentIndex() );
389 d->m_settings.setValue(
"inertialEarthRotation", d->ui_navigationSettings.kcfg_inertialEarthRotation->isChecked() );
390 d->m_settings.setValue(
"mouseViewRotation", d->ui_navigationSettings.kcfg_mouseViewRotation->isChecked() );
391 d->m_settings.setValue(
"animateTargetVoyage", d->ui_navigationSettings.kcfg_animateTargetVoyage->isChecked() );
392 if( d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 0 ) {
393 d->m_settings.setValue(
"externalMapEditor",
"" );
394 }
else if( d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 1 ) {
395 d->m_settings.setValue(
"externalMapEditor",
"potlatch" );
396 }
else if( d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 2 ) {
397 d->m_settings.setValue(
"externalMapEditor",
"josm" );
398 }
else if( d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 3 ) {
399 d->m_settings.setValue(
"externalMapEditor",
"merkaartor" );
401 Q_ASSERT(
false &&
"Unexpected index of the external editor setting" );
403 d->m_settings.endGroup();
405 d->m_settings.beginGroup(
"Cache" );
406 d->m_settings.setValue(
"volatileTileCacheLimit", d->ui_cacheSettings.kcfg_volatileTileCacheLimit->value() );
407 d->m_settings.setValue(
"persistentTileCacheLimit", d->ui_cacheSettings.kcfg_persistentTileCacheLimit->value() );
408 d->m_settings.setValue(
"proxyUrl", d->ui_cacheSettings.kcfg_proxyUrl->text() );
409 d->m_settings.setValue(
"proxyPort", d->ui_cacheSettings.kcfg_proxyPort->value() );
410 d->m_settings.setValue(
"proxyType", d->ui_cacheSettings.kcfg_proxyType->currentIndex() );
411 if ( d->ui_cacheSettings.kcfg_proxyAuth->isChecked() ) {
412 d->m_settings.setValue(
"proxyAuth",
true );
413 d->m_settings.setValue(
"proxyUser", d->ui_cacheSettings.kcfg_proxyUser->text() );
414 d->m_settings.setValue(
"proxyPass", d->ui_cacheSettings.kcfg_proxyPass->text() );
416 d->m_settings.setValue(
"proxyAuth",
false );
418 d->m_settings.endGroup();
420 d->m_settings.beginGroup(
"Time" );
421 d->m_settings.setValue(
"systemTimezone", d->ui_timeSettings.kcfg_systemTimezone->isChecked() );
422 d->m_settings.setValue(
"UTC", d->ui_timeSettings.kcfg_utc->isChecked() );
423 d->m_settings.setValue(
"customTimezone", d->ui_timeSettings.kcfg_customTimezone->isChecked() );
424 d->m_settings.setValue(
"systemTime", d->ui_timeSettings.kcfg_systemTime->isChecked() );
425 d->m_settings.setValue(
"lastSessionTime", d->ui_timeSettings.kcfg_lastSessionTime->isChecked() );
426 d->m_settings.setValue(
"chosenTimezone", d->ui_timeSettings.kcfg_chosenTimezone->currentIndex() );
427 d->m_settings.endGroup();
429 d->m_settings.beginGroup(
"CloudSync" );
430 d->m_settings.setValue(
"enableSync", d->ui_cloudSyncSettings.kcfg_enableSync->isChecked() );
431 d->m_settings.setValue(
"syncBackend",
"owncloud" );
432 d->m_settings.setValue(
"syncBookmarks", d->ui_cloudSyncSettings.kcfg_syncBookmarks->isChecked() );
433 d->m_settings.setValue(
"syncRoutes", d->ui_cloudSyncSettings.kcfg_syncRoutes->isChecked() );
434 d->m_settings.setValue(
"owncloudServer", d->ui_cloudSyncSettings.kcfg_owncloudServer->text() );
435 d->m_settings.setValue(
"owncloudUsername", d->ui_cloudSyncSettings.kcfg_owncloudUsername->text() );
436 d->m_settings.setValue(
"owncloudPassword", d->ui_cloudSyncSettings.kcfg_owncloudPassword->text() );
437 d->m_settings.endGroup();
440 d->m_marbleWidget->writePluginSettings( d->m_settings );
442 emit settingsChanged();
445MarbleLocale::MeasurementSystem QtMarbleConfigDialog::measurementSystem()
const
447 if( d->m_settings.contains(
"View/distanceUnit" ) ) {
448 return (MarbleLocale::MeasurementSystem)d->m_settings.value(
"View/distanceUnit" ).toInt();
451 MarbleLocale *locale = MarbleGlobal::getInstance()->locale();
452 return locale->measurementSystem();
462 d->m_settings.setValue(
"View/angleUnit", (
int)unit );
463 d->ui_viewSettings.kcfg_angleUnit->setCurrentIndex( angleUnit() );
464 emit settingsChanged();
479QFont QtMarbleConfigDialog::mapFont()
const
484int QtMarbleConfigDialog::onStartup()
const
486 bool smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
488 return d->m_settings.value(
"Navigation/onStartup", defaultValue ).toInt();
491QString QtMarbleConfigDialog::externalMapEditor()
const
493 return d->m_settings.value(
"Navigation/externalMapEditor",
"" ).toString();
496bool QtMarbleConfigDialog::animateTargetVoyage()
const
498 const bool smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
499 return d->m_settings.value(
"Navigation/animateTargetVoyage", smallScreen ).toBool();
502bool QtMarbleConfigDialog::inertialEarthRotation()
const
504 return d->m_settings.value(
"Navigation/inertialEarthRotation",
true ).toBool();
507bool QtMarbleConfigDialog::mouseViewRotation()
const
509 return d->m_settings.value(
"Navigation/mouseViewRotation",
true ).toBool();
512int QtMarbleConfigDialog::volatileTileCacheLimit()
const
514 int defaultValue = (MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen) ? 6 : 100;
515 return d->m_settings.value(
"Cache/volatileTileCacheLimit", defaultValue ).toInt();
518int QtMarbleConfigDialog::persistentTileCacheLimit()
const
520 return d->m_settings.value(
"Cache/persistentTileCacheLimit", 0 ).toInt();
523QString QtMarbleConfigDialog::proxyUrl()
const
525 return d->m_settings.value(
"Cache/proxyUrl",
"" ).toString();
528int QtMarbleConfigDialog::proxyPort()
const
530 return d->m_settings.value(
"Cache/proxyPort", 8080 ).
toInt();
533QString QtMarbleConfigDialog::proxyUser()
const
535 return d->m_settings.value(
"Cache/proxyUser",
"" ).toString();
538QString QtMarbleConfigDialog::proxyPass()
const
540 return d->m_settings.value(
"Cache/proxyPass",
"" ).toString();
543bool QtMarbleConfigDialog::proxyType()
const
548bool QtMarbleConfigDialog::proxyAuth()
const
550 return d->m_settings.value(
"Cache/proxyAuth",
false ).toBool();
553bool QtMarbleConfigDialog::systemTimezone()
const
555 return d->m_settings.value(
"Time/systemTimezone",
true ).toBool();
558bool QtMarbleConfigDialog::customTimezone()
const
560 return d->m_settings.value(
"Time/customTimezone",
false ).toBool();
563bool QtMarbleConfigDialog::UTC()
const
565 return d->m_settings.value(
"Time/UTC",
false ).toBool();
568bool QtMarbleConfigDialog::systemTime()
const
570 return d->m_settings.value(
"Time/systemTime",
true ).toBool();
573bool QtMarbleConfigDialog::lastSessionTime()
const
575 return d->m_settings.value(
"Time/lastSessionTime",
false ).toBool();
578int QtMarbleConfigDialog::chosenTimezone()
const
580 return d->m_settings.value(
"Time/chosenTimezone", 0 ).toInt();
583void QtMarbleConfigDialog::initializeCustomTimezone()
585 if( d->m_timezone.count() == 0)
587 d->m_timezone.insert( 0, 0 );
588 d->m_timezone.insert( 1, 3600 );
589 d->m_timezone.insert( 2, 7200 );
590 d->m_timezone.insert( 3, 7200 );
591 d->m_timezone.insert( 4, 10800 );
592 d->m_timezone.insert( 5, 12600 );
593 d->m_timezone.insert( 6, 14400 );
594 d->m_timezone.insert( 7, 18000 );
595 d->m_timezone.insert( 8, 19800 );
596 d->m_timezone.insert( 9, 21600 );
597 d->m_timezone.insert( 10, 25200 );
598 d->m_timezone.insert( 11, 28800 );
599 d->m_timezone.insert( 12, 32400 );
600 d->m_timezone.insert( 13, 34200 );
601 d->m_timezone.insert( 14, 36000 );
602 d->m_timezone.insert( 15, 39600 );
603 d->m_timezone.insert( 16, 43200 );
604 d->m_timezone.insert( 17, -39600 );
605 d->m_timezone.insert( 18, -36000 );
606 d->m_timezone.insert( 19, -32400 );
607 d->m_timezone.insert( 20, -28800 );
608 d->m_timezone.insert( 21, -25200 );
609 d->m_timezone.insert( 22, -25200 );
610 d->m_timezone.insert( 23, -21600 );
611 d->m_timezone.insert( 24, -18000 );
612 d->m_timezone.insert( 25, -18000 );
613 d->m_timezone.insert( 26, -14400 );
614 d->m_timezone.insert( 27, -12600 );
615 d->m_timezone.insert( 28, -10800 );
616 d->m_timezone.insert( 29, -10800 );
617 d->m_timezone.insert( 30, -3600 );
621bool QtMarbleConfigDialog::syncEnabled()
const
623 return d->m_settings.value(
"CloudSync/enableSync",
false ).toBool();
626QString QtMarbleConfigDialog::syncBackend()
const
628 return d->m_settings.value(
"CloudSync/syncBackend",
"" ).toString();
631bool QtMarbleConfigDialog::syncBookmarks()
const
633 return d->m_settings.value(
"CloudSync/syncBookmarks",
true ).toBool();
636bool QtMarbleConfigDialog::syncRoutes()
const
638 return d->m_settings.value(
"CloudSync/syncRoutes",
true ).toBool();
641QString QtMarbleConfigDialog::owncloudServer()
const
643 return d->m_settings.value(
"CloudSync/owncloudServer",
"" ).toString();
646QString QtMarbleConfigDialog::owncloudUsername()
const
648 return d->m_settings.value(
"CloudSync/owncloudUsername",
"" ).toString();
651QString QtMarbleConfigDialog::owncloudPassword()
const
653 return d->m_settings.value(
"CloudSync/owncloudPassword",
"" ).toString();
658#include "moc_QtMarbleConfigDialog.cpp"
This file contains the headers for MarbleModel.
void stop(Ekos::AlignState mode)
Q_SCRIPTABLE CaptureState status()
Binds a QML item to a specific geodetic location in screen coordinates.
@ HttpProxy
Uses an Http proxy.
@ Socks5Proxy
Uses a Socks5Proxy.
AngleUnit
This enum is used to choose the unit chosen to measure angles.
@ DMSDegree
Degrees in DMS notation.
@ KeepAxisVertically
Keep planet axis vertically.
@ ShowHomeLocation
Show home location on startup.
@ LastLocationVisited
Show last location visited on quit.
@ Native
Display the name in the official language and glyphs of the labeled place.
MapQuality
This enum is used to choose the map quality shown in the view.
@ HighQuality
High quality (e.g. antialiasing for lines)
@ LowQuality
Low resolution (e.g. interlaced)
void setTimeSpec(Qt::TimeSpec spec)
QDateTime currentDateTime()
QDateTime toLocalTime() const const
void setApplicationProxy(const QNetworkProxy &networkProxy)
void setHostName(const QString &hostName)
void setPassword(const QString &password)
void setPort(quint16 port)
void setType(QNetworkProxy::ProxyType type)
void setUser(const QString &user)
QString arg(Args &&... args) const const
int toInt(bool *ok, int base) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)