mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
The selectedDivesChanged() signal from MapWidgetHelper is connected to a local slot. One problem here is that this crashes with the calls to DiveListView(). The dive list widget triggers events that call reload() on the MapWidget (same happens for Marble's Globe class) and that crashes somewhere in the QML shared library. TODO: investigate. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
86 lines
2.1 KiB
C++
86 lines
2.1 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#include <QQmlContext>
|
|
#include <QDebug>
|
|
#include <QQuickItem>
|
|
#include <QModelIndex>
|
|
|
|
#include "mapwidget.h"
|
|
#include "core/dive.h"
|
|
#include "core/divesite.h"
|
|
#include "mobile-widgets/qmlmapwidgethelper.h"
|
|
#include "qt-models/maplocationmodel.h"
|
|
#include "mainwindow.h"
|
|
#include "divelistview.h"
|
|
|
|
MapWidget *MapWidget::m_instance = NULL;
|
|
|
|
MapWidget::MapWidget(QWidget *parent) : QQuickWidget(parent)
|
|
{
|
|
qmlRegisterType<MapWidgetHelper>("org.subsurfacedivelog.mobile", 1, 0, "MapWidgetHelper");
|
|
qmlRegisterType<MapLocationModel>("org.subsurfacedivelog.mobile", 1, 0, "MapLocationModel");
|
|
qmlRegisterType<MapLocation>("org.subsurfacedivelog.mobile", 1, 0, "MapLocation");
|
|
|
|
setSource(QUrl(QStringLiteral("qrc:/MapWidget.qml")));
|
|
setResizeMode(QQuickWidget::SizeRootObjectToView);
|
|
|
|
m_rootItem = qobject_cast<QQuickItem *>(rootObject());
|
|
m_mapHelper = rootObject()->findChild<MapWidgetHelper *>();
|
|
connect(m_mapHelper, SIGNAL(selectedDivesChanged(QList<int>)),
|
|
this, SLOT(selectedDivesChanged(QList<int>)));
|
|
}
|
|
|
|
void MapWidget::centerOnDiveSite(struct dive_site *ds)
|
|
{
|
|
m_mapHelper->centerOnDiveSite(ds);
|
|
}
|
|
|
|
void MapWidget::centerOnIndex(const QModelIndex& idx)
|
|
{
|
|
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);
|
|
else
|
|
centerOnDiveSite(ds);
|
|
}
|
|
|
|
void MapWidget::repopulateLabels()
|
|
{
|
|
m_mapHelper->reloadMapLocations();
|
|
}
|
|
|
|
void MapWidget::reload()
|
|
{
|
|
m_mapHelper->reloadMapLocations();
|
|
}
|
|
|
|
void MapWidget::endGetDiveCoordinates()
|
|
{
|
|
// TODO;
|
|
}
|
|
|
|
void MapWidget::prepareForGetDiveCoordinates()
|
|
{
|
|
// TODO;
|
|
}
|
|
|
|
void MapWidget::selectedDivesChanged(QList<int> list)
|
|
{
|
|
qDebug() << "onSelectedDivesChanged:" << list.size();
|
|
/*
|
|
MainWindow::instance()->dive_list()->unselectDives();
|
|
if (!list.empty())
|
|
MainWindow::instance()->dive_list()->selectDives(list);
|
|
*/
|
|
}
|
|
|
|
MapWidget::~MapWidget()
|
|
{
|
|
m_instance = NULL;
|
|
}
|
|
|
|
MapWidget *MapWidget::instance()
|
|
{
|
|
if (m_instance == NULL)
|
|
m_instance = new MapWidget();
|
|
return m_instance;
|
|
}
|