From kde-commits Thu May 31 20:36:48 2012 From: =?utf-8?q?Dennis_Nienh=C3=BCser?= Date: Thu, 31 May 2012 20:36:48 +0000 To: kde-commits Subject: [marble/sok-2012-plasma-active] src: Expose some RenderPlugin/FloatItem properties and methods to QM Message-Id: <20120531203648.376BFA60A9 () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=133849679409773 Git commit e4439ea7325124e944b6fd0aca4c47344fd0addf by Dennis Nienh=C3=BCse= r. 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() ); } = +QStringList RenderPlugin::settingKeys() +{ + return settings().keys(); +} + +bool RenderPlugin::setSetting( const QString & key, const QVariant & value= ) +{ + QHash< QString, QVariant> settings =3D this->settings(); + if( settings.contains( key ) && settings.value( key ).type() =3D=3D va= lue.type() ) + { + settings [ key ] =3D 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, publi= c 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 enabled= Changed ) + Q_PROPERTY ( bool visible READ visible WRITE setVisible NOTIFY visibil= ityChanged ) + public: /** * This enum contains the data roles for the QStandardItem that is ret= urned 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 tha= t this *plugin defines. There is no guarantee where the main window will pla= ce the @@ -125,6 +131,14 @@ class MARBLE_EXPORT RenderPlugin : public QObject, pub= lic 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/plug= ins/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 #include @@ -63,6 +65,8 @@ void MarbleDeclarativePlugin::registerTypes( const char *= ) qmlRegisterType( uri, 0, 11, "MapThemeModel" ); = qmlRegisterUncreatableType( uri, 0, 11, "BookmarksMode= l", "Do not create" ); + qmlRegisterUncreatableType( uri, 0, 11, "Fl= oatItem", "Do not create" ); + qmlRegisterUncreatableType( uri, 0, 11, "RenderP= lugin", "Do not create" ); } = void MarbleDeclarativePlugin::initializeEngine( QDeclarativeEngine *engine= , const char *) diff --git a/src/plugins/declarative/MarbleDeclarativeWidget.cpp b/src/plug= ins/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::Mar= bleWidget ), @@ -78,9 +79,14 @@ const Marble::ViewportParams *MarbleWidget::viewport() c= onst return m_marbleWidget->viewport(); } = -QList MarbleWidget::renderPlugins() const +QList MarbleWidget::renderPlugins() const { - return m_marbleWidget->renderPlugins(); + QList 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() =3D=3D name ) { + return plugin; + } + } + return 0; +} + +bool MarbleWidget::containsRenderPlugin( const QString & name ) +{ + foreach( Marble::RenderPlugin * plugin, m_marbleWidget->renderPlugins(= ) ) + { + if( plugin->nameId() =3D=3D name ) { + return true; + } + } + return false; +} + +QList MarbleWidget::floatItems() const +{ + QList result; + foreach ( Marble::AbstractFloatItem* plugin, m_marbleWidget->floatItem= s() ) { + result << plugin; + } + + return result; +} + +Marble::AbstractFloatItem* MarbleWidget::floatItem( const QString & name ) +{ + foreach( Marble::AbstractFloatItem * plugin, m_marbleWidget->floatItem= s() ) + { + if( plugin->nameId() =3D=3D name ) { + return plugin ; + } + } + return 0; +} + +bool MarbleWidget::containsFloatItem( const QString & name ) +{ + foreach( Marble::AbstractFloatItem * plugin, m_marbleWidget->floatItem= s() ) + { + if( plugin->nameId() =3D=3D name ) { + return true; + } + } + return false; +} + + #include "MarbleDeclarativeWidget.moc" diff --git a/src/plugins/declarative/MarbleDeclarativeWidget.h b/src/plugin= s/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/slo= t 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 navigationCh= anged ) Q_PROPERTY( Search* search READ search NOTIFY searchChanged ) Q_PROPERTY( QObject* mapThemeModel READ mapThemeModel NOTIFY mapThemeM= odelChanged ) + Q_PROPERTY( QList renderPlugins READ renderPlugins CONSTANT ) + Q_PROPERTY( QList floatItems READ floatItems CONSTANT ) = public: /** Constructor */ @@ -72,8 +75,6 @@ public: = const Marble::ViewportParams *viewport() const; = - QList renderPlugins() const; - bool workOffline() const; = void setWorkOffline( bool workOffline ); @@ -121,6 +122,18 @@ public Q_SLOTS: = void centerOn( const GeoDataCoordinates &coordinates ); = + QList renderPlugins() const; + + Marble::RenderPlugin* renderPlugin( const QString & name ); + + bool containsRenderPlugin( const QString & name ); + + QList 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 const renderPlugins =3D m_marbleWidg= et->renderPlugins(); - foreach( Marble::RenderPlugin* renderPlugin, renderPlugins ) { + QList const renderPlugins =3D m_marbleWidget->renderPlug= ins(); + foreach( QObject* object, renderPlugins ) { + Marble::RenderPlugin* renderPlugin =3D qobject_cast( object ); + Q_ASSERT( renderPlugin ); if ( renderPlugin->nameId() =3D=3D "positionMarker" ) { renderPlugin->setEnabled( true ); renderPlugin->setVisible( visible );