File indexing completed on 2024-05-05 03:49:17

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
0004 //
0005 
0006 #include "MarbleDeclarativePlugin.h"
0007 
0008 #include "Coordinate.h"
0009 #include "MapTheme.h"
0010 #include "DeclarativeMapThemeManager.h"
0011 #include "MarbleDeclarativeObject.h"
0012 #include "PositionSource.h"
0013 #include "Bookmarks.h"
0014 #include "Tracking.h"
0015 #include "Routing.h"
0016 #include "Navigation.h"
0017 #include "RouteRequestModel.h"
0018 #include "Settings.h"
0019 #include "MapThemeModel.h"
0020 #include "NewstuffModel.h"
0021 #include "OfflineDataModel.h"
0022 #include "Placemark.h"
0023 #include "routing/SpeakersModel.h"
0024 #include "routing/VoiceNavigationModel.h"
0025 #include "routing/RoutingModel.h"
0026 #include "AbstractFloatItem.h"
0027 #include "RenderPlugin.h"
0028 #include "MarblePlacemarkModel.h"
0029 #include "SearchBackend.h"
0030 #include "MarbleQuickItem.h"
0031 #include "GeoItem.h"
0032 #include "GeoPolyline.h"
0033 
0034 #include <QQmlEngine>
0035 #include <QQmlContext>
0036 
0037 void MarbleDeclarativePlugin::registerTypes( const char *uri )
0038 {
0039     qRegisterMetaType<Marble::MarbleMap*>("MarbleMap");
0040 
0041     //@uri org.kde.marble
0042     qmlRegisterType<Coordinate>( uri, 0, 20, "Coordinate" );
0043     qRegisterMetaType<Coordinate::Notation>();
0044     qRegisterMetaType<Marble::MapTheme*>("MapTheme");
0045 
0046     qmlRegisterType<Marble::Placemark>( uri, 0, 20, "Placemark" );
0047     qmlRegisterType<Marble::PositionSource>( uri, 0, 20, "PositionSource" );
0048     qmlRegisterType<Marble::Bookmarks>( uri, 0, 20, "Bookmarks" );
0049     qmlRegisterType<Marble::Tracking>( uri, 0, 20, "Tracking" );
0050     qmlRegisterType<Marble::Routing>( uri, 0, 20, "Routing" );
0051     qmlRegisterType<Marble::Navigation>( uri, 0, 20, "Navigation" );
0052     qmlRegisterType<RouteRequestModel>( uri, 0, 20, "RouteRequestModel" );
0053     qmlRegisterType<Settings>( uri, 0, 20, "Settings" );
0054 
0055     qmlRegisterType<MapThemeManager>( uri, 0, 20, "MapThemeManager" );
0056     qmlRegisterType<Marble::SpeakersModel>( uri, 0, 20, "SpeakersModel" );
0057     qmlRegisterType<Marble::VoiceNavigationModel>( uri, 0, 20, "VoiceNavigation" );
0058     qmlRegisterType<Marble::NewstuffModel>( uri, 0, 20, "NewstuffModel" );
0059     qmlRegisterType<OfflineDataModel>( uri, 0, 20, "OfflineDataModel" );
0060     qmlRegisterType<MapThemeModel>( uri, 0, 20, "MapThemeModel" );
0061 
0062     qmlRegisterType<Marble::SearchBackend>(uri, 0, 20, "SearchBackend");
0063     qRegisterMetaType<Marble::MarblePlacemarkModel*>("MarblePlacemarkModel*");
0064     qmlRegisterType<Marble::MarbleQuickItem>(uri, 0, 20, "MarbleItem");
0065     qmlRegisterType<Marble::GeoItem>(uri, 0, 20, "GeoItem");
0066     qmlRegisterType<Marble::GeoPolyline>(uri, 0, 20, "GeoPolyline");    
0067 
0068     qmlRegisterUncreatableType<Marble::MarblePlacemarkModel>(uri, 1, 0, "MarblePlacemarkModel",
0069                                                              QStringLiteral("MarblePlacemarkModel is not instantiable"));
0070     qmlRegisterUncreatableType<Marble::RoutingModel>(uri, 0, 20, "RoutingModel",
0071                                                      QStringLiteral("RoutingModel is not instantiable"));
0072     qmlRegisterUncreatableType<Marble::RouteRelationModel>(uri, 0, 20, "RouteRelationModel",
0073                                                            QStringLiteral("RouteRelationModel is not instantiable"));
0074     qmlRegisterUncreatableType<Marble::BookmarksModel>(uri, 0, 20, "BookmarksModel",
0075                                                        QStringLiteral("Do not create"));
0076     qmlRegisterUncreatableType<Marble::AbstractFloatItem>(uri, 0, 20, "FloatItem",
0077                                                           QStringLiteral("Do not create"));
0078     qmlRegisterUncreatableType<Marble::RenderPlugin>(uri, 0, 20, "RenderPlugin",
0079                                                      QStringLiteral("Do not create"));
0080     qmlRegisterUncreatableType<Marble::MarbleMap>(uri, 0, 20, "MarbleMap",
0081                                                   QStringLiteral("Do not create"));
0082 }
0083 
0084 void MarbleDeclarativePlugin::initializeEngine( QQmlEngine *engine, const char *)
0085 {
0086     engine->addImageProvider(QStringLiteral("maptheme"), new MapThemeImageProvider );
0087     // Register the global Marble object. Can be used in .qml files for requests like Marble.resolvePath("some/icon.png")
0088     const QString marbleObjectName = QStringLiteral("Marble");
0089     if (!engine->rootContext()->contextProperty(marbleObjectName).isValid()) {
0090         engine->rootContext()->setContextProperty(marbleObjectName, new MarbleDeclarativeObject(this));
0091     }
0092 }
0093 
0094 #include "moc_MarbleDeclarativePlugin.cpp"