[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [marble/sok-2012-plasma-active] src: Expose some RenderPlugin/FloatItem properties and methods to QM
From:       Dennis_Nienhüser <earthwings () gentoo ! org>
Date:       2012-05-31 20:36:48
Message-ID: 20120531203648.376BFA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit e4439ea7325124e944b6fd0aca4c47344fd0addf by Dennis Nienhüser.
Committed on 31/05/2012 at 22:33.
Pushed by nienhueser into branch 'sok-2012-plasma-active'.

Expose some RenderPlugin/FloatItem properties and methods to QML.

Patch by Anton Chernov, thanks!
CCMAIL: chernov.anton.mail@gmail.com

M  +23   -0    src/lib/RenderPlugin.cpp
M  +15   -1    src/lib/RenderPlugin.h
M  +4    -0    src/plugins/declarative/MarbleDeclarativePlugin.cpp
M  +63   -2    src/plugins/declarative/MarbleDeclarativeWidget.cpp
M  +16   -3    src/plugins/declarative/MarbleDeclarativeWidget.h
M  +4    -2    src/plugins/declarative/Tracking.cpp

http://commits.kde.org/marble/e4439ea7325124e944b6fd0aca4c47344fd0addf

diff --git a/src/lib/RenderPlugin.cpp b/src/lib/RenderPlugin.cpp
index feb1e64..0e52ecc 100644
--- a/src/lib/RenderPlugin.cpp
+++ b/src/lib/RenderPlugin.cpp
@@ -184,6 +184,29 @@ void RenderPlugin::restoreDefaultSettings()
     setSettings( QHash<QString,QVariant>() );
 }
 
+QStringList RenderPlugin::settingKeys()
+{
+    return settings().keys();
+}
+
+bool RenderPlugin::setSetting( const QString & key, const QVariant & value )
+{
+    QHash< QString, QVariant> settings = this->settings();
+    if( settings.contains( key ) && settings.value( key ).type() == value.type() )
+    {
+        settings [ key ] = value;
+        setSettings( settings );
+        return true;
+    } else {
+        return false;
+    }
+}
+
+QVariant RenderPlugin::setting( const QString & name )
+{
+    return settings().value( name, QVariant() );
+}
+
 } // namespace Marble
 
 #include "RenderPlugin.moc"
diff --git a/src/lib/RenderPlugin.h b/src/lib/RenderPlugin.h
index 47eac22..27f6ec2 100644
--- a/src/lib/RenderPlugin.h
+++ b/src/lib/RenderPlugin.h
@@ -40,6 +40,13 @@ class MARBLE_EXPORT RenderPlugin : public QObject, public \
RenderPluginInterface  {
     Q_OBJECT
 
+    Q_PROPERTY ( QString name READ name CONSTANT )
+    Q_PROPERTY ( QString nameId READ nameId CONSTANT )
+    Q_PROPERTY ( QString version READ version CONSTANT )
+    Q_PROPERTY ( QString description READ description CONSTANT )
+    Q_PROPERTY ( bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged )
+    Q_PROPERTY ( bool visible READ visible WRITE setVisible NOTIFY visibilityChanged \
) +
  public:
     /**
      * This enum contains the data roles for the QStandardItem that is returned by \
item(). @@ -75,7 +82,6 @@ class MARBLE_EXPORT RenderPlugin : public QObject, public \
RenderPluginInterface  
     const MarbleModel* marbleModel() const;
 
-    QAction       *action() const;
     /**
      *This method is used by the main window to get all of the actions that this
      *plugin defines. There is no guarantee where the main window will place the
@@ -125,6 +131,14 @@ class MARBLE_EXPORT RenderPlugin : public QObject, public \
RenderPluginInterface  void    setVisible( bool visible );
     void    restoreDefaultSettings();
 
+    QStringList settingKeys();
+
+    bool setSetting( const QString & key, const QVariant & value );
+
+    QVariant setting( const QString & key );
+
+    QAction *action() const;
+
  Q_SIGNALS:
     /**
      * This signal is emitted if the visibility is changed with setVisible.
diff --git a/src/plugins/declarative/MarbleDeclarativePlugin.cpp \
b/src/plugins/declarative/MarbleDeclarativePlugin.cpp index b2ece53..af947d2 100644
--- a/src/plugins/declarative/MarbleDeclarativePlugin.cpp
+++ b/src/plugins/declarative/MarbleDeclarativePlugin.cpp
@@ -31,6 +31,8 @@
 #include "Placemark.h"
 #include "routing/SpeakersModel.h"
 #include "routing/VoiceNavigationModel.h"
+#include "AbstractFloatItem.h"
+#include "RenderPlugin.h"
 
 #include <QtDeclarative/qdeclarative.h>
 #include <QtDeclarative/QDeclarativeEngine>
@@ -63,6 +65,8 @@ void MarbleDeclarativePlugin::registerTypes( const char * )
     qmlRegisterType<MapThemeModel>( uri, 0, 11, "MapThemeModel" );
 
     qmlRegisterUncreatableType<BookmarksModel>( uri, 0, 11, "BookmarksModel", "Do \
not create" ); +    qmlRegisterUncreatableType<Marble::AbstractFloatItem>( uri, 0, \
11, "FloatItem", "Do not create" ); +    \
qmlRegisterUncreatableType<Marble::RenderPlugin>( uri, 0, 11, "RenderPlugin", "Do not \
create" );  }
 
 void MarbleDeclarativePlugin::initializeEngine( QDeclarativeEngine *engine, const \
                char *)
diff --git a/src/plugins/declarative/MarbleDeclarativeWidget.cpp \
b/src/plugins/declarative/MarbleDeclarativeWidget.cpp index b41ff45..4b4482b 100644
--- a/src/plugins/declarative/MarbleDeclarativeWidget.cpp
+++ b/src/plugins/declarative/MarbleDeclarativeWidget.cpp
@@ -32,6 +32,7 @@
 #include "BookmarkManager.h"
 #include "routing/RoutingManager.h"
 #include "routing/RoutingProfilesModel.h"
+#include "AbstractFloatItem.h"
 
 MarbleWidget::MarbleWidget( QGraphicsItem *parent , Qt::WindowFlags flags ) :
     QGraphicsProxyWidget( parent, flags ), m_marbleWidget( new Marble::MarbleWidget \
), @@ -78,9 +79,14 @@ const Marble::ViewportParams *MarbleWidget::viewport() const
     return m_marbleWidget->viewport();
 }
 
-QList<Marble::RenderPlugin *> MarbleWidget::renderPlugins() const
+QList<QObject*> MarbleWidget::renderPlugins() const
 {
-    return m_marbleWidget->renderPlugins();
+    QList<QObject*> result;
+    foreach ( Marble::RenderPlugin* plugin, m_marbleWidget->renderPlugins() ) {
+        result << plugin;
+    }
+
+    return result;
 }
 
 QStringList MarbleWidget::activeFloatItems() const
@@ -390,4 +396,59 @@ bool MarbleWidget::sceneEvent( QEvent *event )
     return QGraphicsProxyWidget::sceneEvent( event );
 }
 
+Marble::RenderPlugin *MarbleWidget::renderPlugin( const QString & name )
+{
+    foreach( Marble::RenderPlugin * plugin, m_marbleWidget->renderPlugins() )
+    {
+        if( plugin->nameId() == name ) {
+            return plugin;
+        }
+    }
+    return 0;
+}
+
+bool MarbleWidget::containsRenderPlugin( const QString & name )
+{
+    foreach( Marble::RenderPlugin * plugin, m_marbleWidget->renderPlugins() )
+    {
+        if( plugin->nameId() == name ) {
+            return true;
+        }
+    }
+    return false;
+}
+
+QList<QObject*> MarbleWidget::floatItems() const
+{
+    QList<QObject*> result;
+    foreach ( Marble::AbstractFloatItem* plugin, m_marbleWidget->floatItems() ) {
+        result << plugin;
+    }
+
+    return result;
+}
+
+Marble::AbstractFloatItem* MarbleWidget::floatItem( const QString & name )
+{
+    foreach( Marble::AbstractFloatItem * plugin, m_marbleWidget->floatItems() )
+    {
+        if( plugin->nameId() == name ) {
+            return plugin ;
+        }
+    }
+    return 0;
+}
+
+bool MarbleWidget::containsFloatItem( const QString & name )
+{
+    foreach( Marble::AbstractFloatItem * plugin, m_marbleWidget->floatItems() )
+    {
+        if( plugin->nameId() == name ) {
+            return true;
+        }
+    }
+    return false;
+}
+
+
 #include "MarbleDeclarativeWidget.moc"
diff --git a/src/plugins/declarative/MarbleDeclarativeWidget.h \
b/src/plugins/declarative/MarbleDeclarativeWidget.h index b74a235..d5ad854 100644
--- a/src/plugins/declarative/MarbleDeclarativeWidget.h
+++ b/src/plugins/declarative/MarbleDeclarativeWidget.h
@@ -28,7 +28,8 @@ using Marble::GeoDataCoordinates; // Ouch. For signal/slot \
connection across dif  
 namespace Marble
 {
-// Forward declaration
+// Forward declarations
+class AbstractFloatItem;
 class MarbleModel;
 class MarbleWidget;
 class RenderPlugin;
@@ -61,6 +62,8 @@ class MarbleWidget : public QGraphicsProxyWidget
     Q_PROPERTY( Navigation* navigation READ navigation NOTIFY navigationChanged )
     Q_PROPERTY( Search* search READ search NOTIFY searchChanged )
     Q_PROPERTY( QObject* mapThemeModel READ mapThemeModel NOTIFY \
mapThemeModelChanged ) +    Q_PROPERTY( QList<QObject*> renderPlugins READ \
renderPlugins CONSTANT ) +    Q_PROPERTY( QList<QObject*> floatItems READ floatItems \
CONSTANT )  
 public:
     /** Constructor */
@@ -72,8 +75,6 @@ public:
 
     const Marble::ViewportParams *viewport() const;
 
-    QList<Marble::RenderPlugin *> renderPlugins() const;
-
     bool workOffline() const;
 
     void setWorkOffline( bool workOffline );
@@ -121,6 +122,18 @@ public Q_SLOTS:
 
     void centerOn( const GeoDataCoordinates &coordinates );
 
+    QList<QObject*> renderPlugins() const;
+
+    Marble::RenderPlugin* renderPlugin( const QString & name );
+
+    bool containsRenderPlugin( const QString & name );
+
+    QList<QObject*> floatItems() const;
+
+    Marble::AbstractFloatItem* floatItem( const QString & name );
+
+    bool containsFloatItem( const QString & name );
+
     /** Returns a list of active (!) float items */
     QStringList activeFloatItems() const;
 
diff --git a/src/plugins/declarative/Tracking.cpp \
b/src/plugins/declarative/Tracking.cpp index 706fd83..3d09463 100644
--- a/src/plugins/declarative/Tracking.cpp
+++ b/src/plugins/declarative/Tracking.cpp
@@ -153,8 +153,10 @@ void Tracking::setHasLastKnownPosition()
 void Tracking::setShowPositionMarkerPlugin( bool visible )
 {
     if ( m_marbleWidget ) {
-        QList<Marble::RenderPlugin *> const renderPlugins = \
                m_marbleWidget->renderPlugins();
-        foreach( Marble::RenderPlugin* renderPlugin, renderPlugins ) {
+        QList<QObject*> const renderPlugins = m_marbleWidget->renderPlugins();
+        foreach( QObject* object, renderPlugins ) {
+            Marble::RenderPlugin* renderPlugin = \
qobject_cast<Marble::RenderPlugin*>( object ); +            Q_ASSERT( renderPlugin );
             if ( renderPlugin->nameId() == "positionMarker" ) {
                 renderPlugin->setEnabled( true );
                 renderPlugin->setVisible( visible );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic