Added real support for the marble widget

The marble widget now shows the dive locations
and also will center on the dive that the user clicked
in the dive list.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
This commit is contained in:
Tomaz Canabrava 2013-05-17 13:28:02 -03:00
parent 4098922b55
commit 9038b3aa6e
3 changed files with 54 additions and 5 deletions

View file

@ -1,16 +1,27 @@
#include "globe.h"
#include "../dive.h"
#include <QDebug>
#include <marble/AbstractFloatItem.h>
#include <marble/GeoDataPlacemark.h>
#include <marble/GeoDataDocument.h>
#include <marble/MarbleModel.h>
#include <marble/GeoDataTreeModel.h>
using namespace Marble;
GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent)
GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent), loadedDives(0)
{
setMapThemeId("earth/bluemarble/bluemarble.dgml");
setProjection( Marble::Spherical );
// Enable the cloud cover and enable the country borders
setShowClouds( true );
setShowBorders( true );
setShowClouds( false );
setShowBorders( false );
setShowPlaces( false );
setShowCrosshairs( false );
setShowGrid( false );
// Hide the FloatItems: Compass and StatusBar
setShowOverviewMap(false);
@ -23,3 +34,31 @@ GlobeGPS::GlobeGPS(QWidget* parent) : MarbleWidget(parent)
}
}
}
void GlobeGPS::reload()
{
if (loadedDives){
model()->treeModel()->removeDocument(loadedDives);
delete loadedDives;
}
loadedDives = new GeoDataDocument;
int idx = 0;
struct dive *dive;
for_each_dive(idx, dive) {
if (dive_has_gps_location(dive)) {
GeoDataPlacemark *place = new GeoDataPlacemark( dive->location );
place->setDescription(dive->notes);
place->setCoordinate(dive->longitude.udeg / 1000000.0,dive->latitude.udeg / 1000000.0 , 0, GeoDataCoordinates::Degree );
loadedDives->append( place );
}
}
model()->treeModel()->addDocument( loadedDives );
}
void GlobeGPS::centerOn(dive* dive)
{
centerOn(dive->longitude.udeg / 1000000.0,dive->latitude.udeg / 1000000.0);
}

View file

@ -3,11 +3,19 @@
#include <marble/MarbleWidget.h>
namespace Marble{
class GeoDataDocument;
}
class GlobeGPS : public Marble::MarbleWidget{
Q_OBJECT
public:
using Marble::MarbleWidget::centerOn;
GlobeGPS(QWidget *parent);
void reload();
void centerOn(struct dive* dive);
private:
Marble::GeoDataDocument *loadedDives;
};
#endif

View file

@ -35,11 +35,13 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow())
ui->ProfileWidget->setFocusProxy(ui->ListWidget);
ui->ListWidget->reload();
ui->ListWidget->setFocus();
ui->widget->reload();
}
void MainWindow::current_dive_changed(int divenr)
{
select_dive(divenr);
ui->widget->centerOn(get_dive(selected_dive));
redrawProfile();
ui->InfoWidget->updateDiveInfo(divenr);
}
@ -77,7 +79,7 @@ void MainWindow::on_actionOpen_triggered()
process_dives(FALSE, FALSE);
ui->InfoWidget->reload();
ui->widget->reload();
ui->ListWidget->reload();
ui->ListWidget->setFocus();
}