diff options
-rw-r--r-- | desktop-widgets/mapwidget.cpp | 29 | ||||
-rw-r--r-- | mobile-widgets/qml/MapWidgetError.qml | 13 | ||||
-rw-r--r-- | subsurface.qrc | 1 |
3 files changed, 38 insertions, 5 deletions
diff --git a/desktop-widgets/mapwidget.cpp b/desktop-widgets/mapwidget.cpp index 34f7ed217..806b82c2d 100644 --- a/desktop-widgets/mapwidget.cpp +++ b/desktop-widgets/mapwidget.cpp @@ -12,8 +12,14 @@ #include "mainwindow.h" #include "divelistview.h" +static const QUrl urlMapWidget = QUrl(QStringLiteral("qrc:/MapWidget.qml")); +static const QUrl urlMapWidgetError = QUrl(QStringLiteral("qrc:/MapWidgetError.qml")); +static bool isReady = false; static bool skipReload = false; +#define CHECK_IS_READY_RETURN_VOID() \ + if (!isReady) return + MapWidget *MapWidget::m_instance = NULL; MapWidget::MapWidget(QWidget *parent) : QQuickWidget(parent) @@ -22,19 +28,23 @@ MapWidget::MapWidget(QWidget *parent) : QQuickWidget(parent) qmlRegisterType<MapLocationModel>("org.subsurfacedivelog.mobile", 1, 0, "MapLocationModel"); qmlRegisterType<MapLocation>("org.subsurfacedivelog.mobile", 1, 0, "MapLocation"); + setResizeMode(QQuickWidget::SizeRootObjectToView); connect(this, &QQuickWidget::statusChanged, this, &MapWidget::doneLoading); - setSource(QUrl(QStringLiteral("qrc:/MapWidget.qml"))); + setSource(urlMapWidget); } void MapWidget::doneLoading(QQuickWidget::Status status) { - if (status != QQuickWidget::Ready) { - qDebug() << "MapWidget status" << status; + // the default map widget QML failed; load the error QML. + if (source() == urlMapWidget && status != QQuickWidget::Ready) { + qDebug() << urlMapWidget << "failed to load with status:" << status; + setSource(urlMapWidgetError); + return; + } else if (source() == urlMapWidgetError) { // the error QML finished loading. return; } - qDebug() << "MapWidget ready"; - setResizeMode(QQuickWidget::SizeRootObjectToView); + isReady = true; m_rootItem = qobject_cast<QQuickItem *>(rootObject()); m_mapHelper = rootObject()->findChild<MapWidgetHelper *>(); connect(m_mapHelper, SIGNAL(selectedDivesChanged(QList<int>)), @@ -45,12 +55,14 @@ void MapWidget::doneLoading(QQuickWidget::Status status) void MapWidget::centerOnDiveSite(struct dive_site *ds) { + CHECK_IS_READY_RETURN_VOID(); if (!skipReload) m_mapHelper->centerOnDiveSite(ds); } void MapWidget::centerOnIndex(const QModelIndex& idx) { + CHECK_IS_READY_RETURN_VOID(); struct dive_site *ds = get_dive_site_by_uuid(idx.model()->index(idx.row(), 0).data().toInt()); if (!ds || !dive_site_has_gps_location(ds)) centerOnDiveSite(&displayed_dive_site); @@ -60,11 +72,13 @@ void MapWidget::centerOnIndex(const QModelIndex& idx) void MapWidget::repopulateLabels() { + CHECK_IS_READY_RETURN_VOID(); m_mapHelper->reloadMapLocations(); } void MapWidget::reload() { + CHECK_IS_READY_RETURN_VOID(); setEditMode(false); if (!skipReload) m_mapHelper->reloadMapLocations(); @@ -72,21 +86,25 @@ void MapWidget::reload() void MapWidget::setEditMode(bool editMode) { + CHECK_IS_READY_RETURN_VOID(); m_mapHelper->setEditMode(editMode); } void MapWidget::endGetDiveCoordinates() { + CHECK_IS_READY_RETURN_VOID(); setEditMode(false); } void MapWidget::prepareForGetDiveCoordinates() { + CHECK_IS_READY_RETURN_VOID(); setEditMode(true); } void MapWidget::selectedDivesChanged(QList<int> list) { + CHECK_IS_READY_RETURN_VOID(); skipReload = true; MainWindow::instance()->dive_list()->unselectDives(); if (!list.empty()) @@ -96,6 +114,7 @@ void MapWidget::selectedDivesChanged(QList<int> list) void MapWidget::coordinatesChangedLocal() { + CHECK_IS_READY_RETURN_VOID(); emit coordinatesChanged(); } diff --git a/mobile-widgets/qml/MapWidgetError.qml b/mobile-widgets/qml/MapWidgetError.qml new file mode 100644 index 000000000..346e95f07 --- /dev/null +++ b/mobile-widgets/qml/MapWidgetError.qml @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 +import QtQuick 2.0 + +Item { + Text { + anchors.fill: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "red" + text: qsTr("MapWidget.qml failed to load! +The QML modules QtPositioning and QtLocation could be missing!") + } +} diff --git a/subsurface.qrc b/subsurface.qrc index e5f75d1e3..fc4e2ce6c 100644 --- a/subsurface.qrc +++ b/subsurface.qrc @@ -1,6 +1,7 @@ <RCC> <qresource prefix="/"> <file alias="MapWidget.qml">mobile-widgets/qml/MapWidget.qml</file> + <file alias="MapWidgetError.qml">mobile-widgets/qml/MapWidgetError.qml</file> <file alias="MapWidgetContextMenu.qml">mobile-widgets/qml/MapWidgetContextMenu.qml</file> <file alias="mapwidget-marker">mobile-widgets/qml/icons/mapwidget-marker.png</file> <file alias="mapwidget-marker-selected">mobile-widgets/qml/icons/mapwidget-marker-selected.png</file> |