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 &center ) 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"