[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