File indexing completed on 2024-04-21 03:49:41
0001 #include "MarbleDBusInterface.h" 0002 0003 #include "MarbleWidget.h" 0004 #include "MarbleModel.h" 0005 #include "MapThemeManager.h" 0006 #include <GeoSceneDocument.h> 0007 #include <GeoSceneSettings.h> 0008 #include <GeoSceneProperty.h> 0009 0010 namespace Marble 0011 { 0012 0013 class Q_DECL_HIDDEN MarbleDBusInterface::Private 0014 { 0015 public: 0016 Private( MarbleWidget* widget ); 0017 0018 MarbleWidget* m_marbleWidget; 0019 QPointF m_currentCenter; 0020 }; 0021 0022 MarbleDBusInterface::Private::Private( MarbleWidget *widget ) : 0023 m_marbleWidget( widget ) 0024 { 0025 // nothing to do 0026 } 0027 0028 MarbleDBusInterface::MarbleDBusInterface( MarbleWidget* widget ) : 0029 QDBusAbstractAdaptor( widget ), 0030 d( new Private( widget ) ) 0031 { 0032 connect( widget, SIGNAL(themeChanged(QString)), this, SIGNAL(mapThemeChanged(QString)) ); 0033 connect( widget, SIGNAL(tileLevelChanged(int)), this, SIGNAL(tileLevelChanged(int)) ); 0034 connect( widget, SIGNAL(zoomChanged(int)), this, SIGNAL(zoomChanged(int)) ); 0035 connect( widget, SIGNAL(visibleLatLonAltBoxChanged(GeoDataLatLonAltBox)), 0036 this, SLOT(handleVisibleLatLonAltBoxChange()) ); 0037 } 0038 0039 MarbleDBusInterface::~MarbleDBusInterface() 0040 { 0041 // nothing to do 0042 // (an explicit destructor is required by QScopePointer) 0043 } 0044 0045 QString MarbleDBusInterface::mapTheme() const 0046 { 0047 return d->m_marbleWidget->mapThemeId(); 0048 } 0049 0050 QStringList MarbleDBusInterface::mapThemes() const 0051 { 0052 MapThemeManager mapThemeManager; 0053 return mapThemeManager.mapThemeIds(); 0054 } 0055 0056 int MarbleDBusInterface::tileLevel() const 0057 { 0058 return d->m_marbleWidget->tileZoomLevel(); 0059 } 0060 0061 int MarbleDBusInterface::zoom() const 0062 { 0063 return d->m_marbleWidget->zoom(); 0064 } 0065 0066 QPointF MarbleDBusInterface::center() const 0067 { 0068 return d->m_currentCenter; 0069 } 0070 0071 void MarbleDBusInterface::setMapTheme( const QString &mapTheme ) 0072 { 0073 d->m_marbleWidget->setMapThemeId( mapTheme ); 0074 } 0075 0076 void MarbleDBusInterface::setZoom(int zoom) 0077 { 0078 d->m_marbleWidget->setZoom(zoom); 0079 } 0080 0081 void MarbleDBusInterface::setPropertyEnabled(const QString &key, bool enabled ) 0082 { 0083 d->m_marbleWidget->setPropertyValue( key, enabled ); 0084 } 0085 0086 bool MarbleDBusInterface::isPropertyEnabled( const QString &key ) const 0087 { 0088 bool value = false; 0089 GeoSceneDocument const * const mapTheme = d->m_marbleWidget->model()->mapTheme(); 0090 if ( mapTheme ) { 0091 mapTheme->settings()->propertyValue( key, value ); 0092 } 0093 0094 return value; 0095 } 0096 0097 QStringList MarbleDBusInterface::properties() const 0098 { 0099 QStringList properties; 0100 GeoSceneDocument const * const mapTheme = d->m_marbleWidget->model()->mapTheme(); 0101 if ( mapTheme ) { 0102 for( const GeoSceneProperty* property: mapTheme->settings()->allProperties() ) { 0103 properties << property->name(); 0104 } 0105 } 0106 return properties; 0107 } 0108 0109 void MarbleDBusInterface::setCenter( const QPointF ¢er ) const 0110 { 0111 d->m_marbleWidget->centerOn( center.x(), center.y() ); 0112 } 0113 0114 void MarbleDBusInterface::handleVisibleLatLonAltBoxChange() 0115 { 0116 QPointF const newCenter = QPointF( d->m_marbleWidget->centerLongitude(), 0117 d->m_marbleWidget->centerLatitude() ); 0118 if ( newCenter != d->m_currentCenter ) { 0119 d->m_currentCenter = newCenter; 0120 emit centerChanged( d->m_currentCenter ); 0121 } 0122 } 0123 0124 } 0125 0126 #include "moc_MarbleDBusInterface.cpp"