summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2017-07-28maplocationmodel: use QVector for the MapLocation storageGravatar Lubomir I. Ivanov
QVector is faster, use it for "m_mapLocations" instead of QList. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28maplocationmodel: small whitespace cleanupGravatar Lubomir I. Ivanov
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28maplocationmodel: add the addList() methodGravatar Lubomir I. Ivanov
This method should be used if many markers are added at once. It's main purpose is to reduces the number of beingInsertRows() calls. Make MapWidgetHelper::reloadMapLocations() use it. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: call MapWidgetHelper::reloadMapLocations()Gravatar Lubomir I. Ivanov
MapWidgetHelper::reloadMapLocations() is now called from MapWidget::reload() and MapWidget::repopulateLabels(). The mobile version should do similar. NOTE: These MapWidget methods names are from the Marble "port". Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidgethelper: add the reloadMapLocations() methodGravatar Lubomir I. Ivanov
reloadMapLocations() is the method which is called when the list of markers (model) should be cleared and re-populated with new MapLocation objects. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28maplocationmodel: store the coordinate as QGeoCoordinateGravatar Lubomir I. Ivanov
Instead of maintaining a seperate latitude/longitude values in C++ and passing them to QML separatelly, pass them as a QGeoCoordinate. This reduces the number of model "roles" and also prevents the creations of extra objects in QML (e.g. via QtPositioning.coordinate(..)). Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.qml: implement the MapItemView with delegateGravatar Lubomir I. Ivanov
MapItemView is the QML class that handles the "create map markers based on a model". In this case the model is created as part of the MapWidgetHelper, so here passing "mapHelper.model" to the "model" property is enough. The delegate receives coordinates from the model as "model.latitude", "model.logitude" and converts them to QGeoCoordinate. The "sourceItem" image for the delagete is just an image ATM and is fetched from QRC. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28maplocationmodel: implement the clear() and add() methodsGravatar Lubomir I. Ivanov
- add() will be used to add a MapLocation to the model with beginInsertRows()...endInsertRows() - clear() will be used to clear the model with beginRemoveRows()... endRemoveRows() NOTE: emiting dataChanged() does not seem to update the QML view for this model so calling being<..>Rows() seems to be the "correct Qt approach" to do this. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.cpp: register the MapLocation and MapLocationModel typesGravatar Lubomir I. Ivanov
Apparently the "safe way" is to register C++ types is before the QML code has loaded. The idea here is that the QML code should know about these type definitions and be able to operate with them. TODO: do the same for the mobile version. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28qmlmapwidgethelper: maintain an instance of MapLocationModelGravatar Lubomir I. Ivanov
The idea here is that the QML code should be able to fetch a model from the MapWidgetHelper instance which is instantiated inside the QML code; fetch it in the lines of "mapHelper.model". This way, updates at the backend would be reflected on the Map QML widget. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28qt-models/cmake: build maplocationmodel.cppGravatar Lubomir I. Ivanov
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28qt-models/maplocationmodel: add new classes for map model based handlingGravatar Lubomir I. Ivanov
The QML Map widget requires a QAbstractListModel based model to operate with good performance. Technically gpslistmodel.cpp can be used for that same purpose (e.g. has GPS coordinates), but the way it updates may complicate the Map widget integration. Thus, a new model is created - MapLocationModel, with items of type MapLocation, for an attempt for a clean project structure on the C++ side. For now it only handles latitude and longitude. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28add the SPDX-License-Identifier to new source filesGravatar Lubomir I. Ivanov
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.qml: implement some map animationGravatar Lubomir I. Ivanov
When calling centerOnCoordinates() the map will now animate over a period of 3 seconds the zoom level and over 2 seconds the center of the map. Can be tweaked and improved later on. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.qml: add the function centerOnCoordinates()Gravatar Lubomir I. Ivanov
This function can be called to center the map on a specific coordinates. For the C++ version call it via QMetaObject::invokeMethod() in centerOnDiveSite(). TODO: add QML property animations. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28qmlmapwidgethelper: add the centerOnDiveSite() methodGravatar Lubomir I. Ivanov
MapWidget sould not handle any of the map backend. Instead it should just pass calls to MapWidgetHelper. Do that for centerOnDiveSite(). Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28qmlmapwidgethelper: remove stray test() methodGravatar Lubomir I. Ivanov
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28MapWidget.qml: reference the Map object in the MapWidgetHelper objectGravatar Lubomir I. Ivanov
The idea here is that the Map object can be controlled from C++ via the "m_map" private member. Also, for the mobile version, QML code can call the same C++ methods (if marked as Q_INVOCABLE). Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28qmlmapwidgethelper.h: add a "map" property with m_map MEMBERGravatar Lubomir I. Ivanov
This is about to be used to reference the QML Map in the MapWidgetHelper C++ class. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.cpp: obtain a reference of the MapWidgetHelper from QMLGravatar Lubomir I. Ivanov
Use findChild() to obtain the only MapWidgetHelper object created in the MapWidget.qml. Store the reference as a member variable - m_mapHelper. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28MapWidget.qml: create an instance of MapWidgetHelperGravatar Lubomir I. Ivanov
This instance in the QML code itself will be accessed by both the mobile and desktop version. That way, the map code between the two Subsurface versions will be shared. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28desktop-widgets/mapwidget: register the MapWidgetHelper QML typeGravatar Lubomir I. Ivanov
This commit registers the class MapWidgetHelper for QML in the desktop version. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28desktop-widgets/cmake: include "qmlmapwidgethelper.cpp"Gravatar Lubomir I. Ivanov
As noted in previous commits, a folder named "shared-widgets" which holds QML/CPP files might be the better (less confusing) choice. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mobile-widgets: add the helper class MapWidgetHelperGravatar Lubomir I. Ivanov
The idea with this class is that it should be used by both the mobile and desktop version. TODO STEPS: 1) the class should be registered in both the mobile and desktop version with qmlRegisterType<MapWidgetHelper>... 2) the MapWidget.qml should create an instance of this class. 3) this way the helper will be part of the QML and both the desktop and mobile version can have access to it. 4) the desktop version as a first implementation can just use findChild() in desktop-widgets/mapwidget.cpp. 5) desktop-widgets/mapwidget.cpp on the desktop should just translate calls from the rest of the desktop-widgets to this helper class. 6) the mobile version access to this object would be easy but is off the scope for now. 7) the idea, when implementing the desktop support is to make it so that when implementing the mobile version later, no or only minimal changes would be required to the MapWidgetHelper class. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.qml: enumerate the ESRI map types of interestGravatar Lubomir I. Ivanov
Add a local "enumeration" (object) for the two possibly map types of interest: SATELLITE and STREET. Use SATELLITE by default. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28globe.cpp/h: remove the dummy QLabel based widgetGravatar Lubomir I. Ivanov
If NO_MARBLE is defined don't create a dummy replacement widget in the GlobeGPS class. At this point all cases of NO_MARBLE are covered by the MapWidget solution. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.h: force-undefine the IGNORE macro from winbase.hGravatar Lubomir I. Ivanov
By including <QQuickWidget>, <winbase.h> is included from <windows.h>. <winabase.h> has the IGNORE macro defined. Undefine it localy in mapwidget.h to prevent a conflict with maintah.h's EditMode::IGNORE enum. NOTE: possibly similar case to the undefine in btdeviceselectiondialog.h:22. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget.h: remove redundant "core/divesite.h" includeGravatar Lubomir I. Ivanov
The header should be included only in the .cpp file Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28locationinformationwidget: abstract between GlobeGPS and MapWidgetGravatar Lubomir I. Ivanov
Connect the same signals for the two classes based on the NO_MARBLE macro. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add the placeholder prepareForGetDiveCoordinates() slotGravatar Lubomir I. Ivanov
Port from GlobeGPS. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add the coordinatesChanged() signalGravatar Lubomir I. Ivanov
Port from GlobeGPS. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28subsurfacewebservices: abstract between GlobeGPS and MapWidgetGravatar Lubomir I. Ivanov
Call same methods from the two classes based on NO_MARBLE. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add the placeholder repopulateLabels() methodGravatar Lubomir I. Ivanov
Another placeholder for the Marble port. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28maintab: use GlobeGPS / MapWidget abstractionGravatar Lubomir I. Ivanov
Based on NO_MARBLE, call the same methods in the two different classes. Later the dummy Marble GlobeGPS (for NO_MARBLE) should be removed. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add the method centerOnIndex()Gravatar Lubomir I. Ivanov
Again for the port from Marble, later can be removed / renamed. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add public slot endGetDiveCoordinates()Gravatar Lubomir I. Ivanov
Later this has to be replaced / renamed if needed. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add an empty reload() methodGravatar Lubomir I. Ivanov
Call same method in MainWindow if the NO_MARBLE macro is defined. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mainwindow: rename GLOBE_MAXIMIZED to MAP_MAXIMIZEDGravatar Lubomir I. Ivanov
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mainwindow: rename "actionViewGlobe" to "actionViewMap"Gravatar Lubomir I. Ivanov
Also change the menu entry text itself to "Map" instead of "Globe". "Map" covers both Marble and Qt Location in terms of "map" solutions. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mainwindow: don't remove the "view globe" action from the menuGravatar Lubomir I. Ivanov
We now have a map no matter NO_MARBLE. TODO: rename the action itself. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mainwindow: enable centerOnDiveSite() no matter the NO_MARBLE macroGravatar Lubomir I. Ivanov
The same public slot now exists for both widgets, so the ifndef macro check is redundant. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mapwidget: add placeholder centerOnDiveSite() public slotGravatar Lubomir I. Ivanov
This is WIP and would be developed futher, so that the new map widget can center on a divesite location. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mainwindow: create an instance of MapWidget for NO_MARBLEGravatar Lubomir I. Ivanov
This is an attempt for a smooth transition between Marble and Qt Location map integration. If NO_MARBLE is defined an instance of MapWidget (Qt Location) is created, else an instance of the Marble widget would be used. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28mainwindow: rename the variable 'globeGps' to 'mapWidget'Gravatar Lubomir I. Ivanov
This is needed by the transition to the new map widget. Also generalizes the variable name. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28desktop-widgets/cmake: include mapwidget.cpp as a UI classGravatar Lubomir I. Ivanov
The next step would be to create an instance of the class in MainWindow. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28map: use Item instead of Rectangle in MapWidget.qmlGravatar Lubomir I. Ivanov
The root element is now an Item and also doesn't have explicit anchors and dimensions as these will be handled by the parent: - on desktop: a QQuickWidget - on mobile: any QML based QQuickItem Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28map: add placeholder .cpp and .h files for the new map widgetGravatar Lubomir I. Ivanov
The files are WIP and located in desktop-widgets, as these would only be used by the desktop version. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28cmake: add the Quick, Location, QuickWidgets dependenciesGravatar Lubomir I. Ivanov
Applies only to DesktopExecutable for now. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28map: add map qml and the new marker image to subsurface.qrcGravatar Lubomir I. Ivanov
These are part of the mobile-widgets folder for now, with the idea that they will be used in the mobile version as well. Eventually they can be moved into a shared-widgets folder. The QRC file uses aliases for them. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2017-07-28map: add new marker resource imageGravatar Lubomir I. Ivanov
This new marker image is free for use in Subsurface. Custom made in CorelDraw and Photoshop. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>