summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/mapwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/mapwidget.cpp')
-rw-r--r--desktop-widgets/mapwidget.cpp29
1 files changed, 24 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();
}