[Marble-commits] KDE/kdeedu/marble/src
Thibaut Gridel
tgridel at free.fr
Mon Aug 17 19:57:51 CEST 2009
SVN commit 1012480 by tgridel:
Provide Models through the MarbleDataFacade
M +24 -10 lib/MarbleDataFacade.cpp
M +6 -4 lib/MarbleDataFacade.h
M +11 -24 lib/MarbleModel.cpp
M +0 -1 lib/MarbleModel.h
M +4 -15 lib/MarblePlacemarkModel.cpp
M +1 -4 lib/MarblePlacemarkModel.h
M +18 -40 lib/PlacemarkManager.cpp
M +3 -17 lib/PlacemarkManager.h
M +3 -2 plugins/render/geodata/GeoRendererPlugin.cpp
--- trunk/KDE/kdeedu/marble/src/lib/MarbleDataFacade.cpp #1012479:1012480
@@ -21,9 +21,11 @@
#include "global.h"
#include "MarbleModel.h"
#include "MarbleGeoDataModel.h"
+#include "MarbleGeometryModel.h"
+#include "MarblePlacemarkModel.h"
#include "Planet.h"
-#include "GeoDataDocument.h"
+#include "FileViewModel.h"
#include "GeoDataParser.h"
#include "GeoSceneDocument.h"
@@ -35,23 +37,33 @@
class MarbleDataFacadePrivate
{
public:
- MarbleDataFacadePrivate( MarbleModel *model, MarbleGeoDataModel *gmodel )
- : m_model( model ), m_geodatamodel( gmodel )
+ MarbleDataFacadePrivate( MarbleModel *model )
+ : m_model( model ),
+ m_fileviewmodel( new FileViewModel() ),
+ m_geodatamodel( new MarbleGeoDataModel() ),
+ m_geometrymodel( new MarbleGeometryModel() ),
+ m_placemarkmodel( new MarblePlacemarkModel )
{
}
~MarbleDataFacadePrivate()
{
+ delete m_fileviewmodel;
delete m_geodatamodel;
+ delete m_geometrymodel;
+ delete m_placemarkmodel;
}
MarbleModel *m_model;
+ FileViewModel *m_fileviewmodel;
MarbleGeoDataModel *m_geodatamodel;
+ MarbleGeometryModel *m_geometrymodel;
+ MarblePlacemarkModel *m_placemarkmodel;
};
MarbleDataFacade::MarbleDataFacade( MarbleModel *model )
- : d( new MarbleDataFacadePrivate( model, new MarbleGeoDataModel() ) )
+ : d( new MarbleDataFacadePrivate( model ) )
{
}
@@ -91,17 +103,19 @@
return d->m_geodatamodel;
}
-QAbstractItemModel* MarbleDataFacade::renderModel()
+MarbleGeometryModel* MarbleDataFacade::geometryModel()
{
- return d->m_model->geometryModel();
+ return d->m_geometrymodel;
}
+MarblePlacemarkModel* MarbleDataFacade::placemarkModel()
+{
+ return d->m_placemarkmodel;
+}
+
FileViewModel* MarbleDataFacade::fileViewModel() const
{
- if(d->m_model)
- return d->m_model->fileViewModel();
- else
- return 0;
+ return d->m_fileviewmodel;
}
}
--- trunk/KDE/kdeedu/marble/src/lib/MarbleDataFacade.h #1012479:1012480
@@ -39,9 +39,10 @@
class MarbleModel;
class MarbleGeoDataModel;
+class MarbleGeometryModel;
+class MarblePlacemarkModel;
+class FileViewModel;
class MarbleDataFacadePrivate;
-class GeoDataDocument;
-class FileViewModel;
class Planet;
/**
@@ -77,8 +78,9 @@
MarbleGeoDataModel* geoDataModel();
- QAbstractItemModel* renderModel();
-
+ MarbleGeometryModel* geometryModel();
+
+ MarblePlacemarkModel* placemarkModel();
FileViewModel* fileViewModel() const;
private:
MarbleDataFacadePrivate * const d;
--- trunk/KDE/kdeedu/marble/src/lib/MarbleModel.cpp #1012479:1012480
@@ -84,7 +84,8 @@
m_mapTheme( 0 ),
m_layerManager( 0 ),
m_downloadManager( new HttpDownloadManager( QUrl(), new FileStoragePolicy(
- MarbleDirs::localPath() )))
+ MarbleDirs::localPath() ))),
+ m_placemarkmanager( 0 )
{
}
@@ -115,9 +116,7 @@
// Places on the map
PlacemarkManager *m_placemarkmanager;
- MarblePlacemarkModel *m_placemarkmodel;
PlacemarkLayout *m_placemarkLayout;
- MarbleGeometryModel *m_geometrymodel;
QSortFilterProxyModel *m_popSortModel;
// Misc stuff.
@@ -165,14 +164,14 @@
}
d->m_placemarkmanager = new PlacemarkManager();
+ d->m_placemarkmanager->setDataFacade(d->m_dataFacade);
connect( d->m_placemarkmanager, SIGNAL( geoDataDocumentAdded( const GeoDataDocument& ) ),
this, SLOT( geoDataDocumentAdded( const GeoDataDocument& ) ) );
- d->m_placemarkmodel = new MarblePlacemarkModel( d->m_placemarkmanager, this );
d->m_popSortModel = new QSortFilterProxyModel( this );
- d->m_popSortModel->setSourceModel( d->m_placemarkmodel );
+ d->m_popSortModel->setSourceModel( d->m_dataFacade->placemarkModel() );
// d->m_popSortModel->setSortLocaleAware( true );
// d->m_popSortModel->setDynamicSortFilter( true );
d->m_popSortModel->setSortRole( MarblePlacemarkModel::PopularityIndexRole );
@@ -180,28 +179,25 @@
d->m_placemarkselectionmodel = new QItemSelectionModel( d->m_popSortModel );
- d->m_geometrymodel = new MarbleGeometryModel();
- d->m_placemarkmanager->setGeoModel( d->m_geometrymodel );
-
d->m_placemarkLayout = new PlacemarkLayout( this );
connect( d->m_placemarkmanager, SIGNAL( finalize() ),
d->m_placemarkLayout, SLOT( requestStyleReset() ) );
connect( d->m_placemarkselectionmodel, SIGNAL( selectionChanged( QItemSelection,
QItemSelection) ),
d->m_placemarkLayout, SLOT( requestStyleReset() ) );
- connect( d->m_placemarkmodel, SIGNAL( layoutChanged() ),
+ connect( d->m_dataFacade->placemarkModel(), SIGNAL( layoutChanged() ),
d->m_placemarkLayout, SLOT( requestStyleReset() ) );
/*
* Create FileViewModel
*/
- connect( fileViewModel(), SIGNAL( modelChanged() ),
+ connect( d->m_dataFacade->fileViewModel(), SIGNAL( modelChanged() ),
this, SIGNAL( modelChanged() ) );
d->m_gpxFileModel = new GpxFileModel( this );
d->m_gpsLayer = new GpsLayer( d->m_gpxFileModel );
- connect( fileViewModel(), SIGNAL(layoutChanged()),
+ connect( d->m_dataFacade->fileViewModel(), SIGNAL(layoutChanged()),
d->m_gpsLayer, SLOT(clearModel() ) );
d->m_layerManager = new LayerManager( d->m_dataFacade, this );
@@ -245,8 +241,6 @@
delete d->m_veccomposer;
delete d->m_texcolorizer;
}
- delete d->m_geometrymodel;
- delete d->m_placemarkmodel;
delete d->m_popSortModel;
delete d->m_placemarkmanager;
delete d->m_gpsLayer;
@@ -414,8 +408,7 @@
}
}
}
-
- d->m_geometrymodel->setGeoDataRoot( 0 );
+ d->m_dataFacade->geometryModel()->setGeoDataRoot( 0 );
QStringList loadedContainers = d->m_placemarkmanager->containers();
QStringList loadList;
const QVector<GeoSceneLayer*> & layers = d->m_mapTheme->map()->layers();
@@ -657,7 +650,7 @@
QAbstractItemModel *MarbleModel::placemarkModel() const
{
- return d->m_placemarkmodel;
+ return d->m_dataFacade->placemarkModel();
}
QItemSelectionModel *MarbleModel::placemarkSelectionModel() const
@@ -665,11 +658,6 @@
return d->m_placemarkselectionmodel;
}
-QAbstractItemModel *MarbleModel::geometryModel() const
-{
- return d->m_geometrymodel;
-}
-
VectorComposer *MarbleModel::vectorComposer() const
{
return d->m_veccomposer;
@@ -702,7 +690,7 @@
FileViewModel *MarbleModel::fileViewModel() const
{
- return d->m_placemarkmanager->fileViewModel();
+ return d->m_dataFacade->fileViewModel();
}
void MarbleModel::addPlacemarkFile( const QString& filename )
@@ -746,8 +734,7 @@
QString styleUrl = itr->styleUrl().remove('#');
itr->setStyle( &document->style( styleUrl ) );
}
-
- m_geometrymodel->setGeoDataRoot( document );*/
+*/
}
void MarbleModel::update()
--- trunk/KDE/kdeedu/marble/src/lib/MarbleModel.h #1012479:1012480
@@ -139,7 +139,6 @@
*/
QAbstractItemModel* placemarkModel() const;
QItemSelectionModel* placemarkSelectionModel() const;
- QAbstractItemModel* geometryModel() const;
/**
* @brief Return the name of the current map theme.
--- trunk/KDE/kdeedu/marble/src/lib/MarblePlacemarkModel.cpp #1012479:1012480
@@ -23,17 +23,15 @@
// Marble
#include "GeoDataStyle.h" // In geodata/data/
#include "PlacemarkContainer.h"
-#include "PlacemarkManager.h"
using namespace Marble;
class MarblePlacemarkModel::Private
{
- friend class PlacemarkManager;
public:
- Private( PlacemarkManager *manager, MarblePlacemarkModel *parent )
- : m_parent( parent ), m_manager( manager )
+ Private( MarblePlacemarkModel *parent )
+ : m_parent( parent )
{
}
@@ -42,7 +40,6 @@
}
MarblePlacemarkModel *m_parent;
- PlacemarkManager *m_manager;
PlacemarkContainer m_placemarkContainer;
};
@@ -50,23 +47,15 @@
// ---------------------------------------------------------------------------
-MarblePlacemarkModel::MarblePlacemarkModel( PlacemarkManager *manager,
- QObject *parent )
+MarblePlacemarkModel::MarblePlacemarkModel( QObject *parent )
: QAbstractListModel( parent ),
- d( new Private( manager, this ) )
+ d( new Private( this ) )
{
- // Register at PlacemarkManager
- if ( d->m_manager )
- d->m_manager->setPlacemarkModel( this );
}
MarblePlacemarkModel::~MarblePlacemarkModel()
{
clearPlacemarks();
- // Unregister from PlacemarkManager
- if ( d->m_manager )
- d->m_manager->setPlacemarkModel( 0 );
-
delete d;
}
--- trunk/KDE/kdeedu/marble/src/lib/MarblePlacemarkModel.h #1012479:1012480
@@ -31,8 +31,6 @@
class GeoDataCoordinates;
class GeoDataStyle;
class PlacemarkContainer;
-class PlacemarkManager;
-
/**
* This class represents a model of all place marks which
* are currently available through a given PlacemarkManager.
@@ -68,8 +66,7 @@
* @param manager The place mark manager on which the model shall work.
* @param parent The parent object.
*/
- explicit MarblePlacemarkModel( PlacemarkManager *manager,
- QObject *parent = 0 );
+ explicit MarblePlacemarkModel( QObject *parent = 0 );
/**
* Destroys the place mark model.
--- trunk/KDE/kdeedu/marble/src/lib/PlacemarkManager.cpp #1012479:1012480
@@ -26,6 +26,7 @@
#include "MarbleDirs.h"
#include "MarblePlacemarkModel.h"
#include "MarbleGeometryModel.h"
+#include "MarbleDataFacade.h"
#include "PlacemarkContainer.h"
#include "PlacemarkLoader.h"
@@ -41,18 +42,14 @@
{
public:
PlacemarkManagerPrivate( )
- : m_model( 0 )
- , m_geomodel( 0 )
- , m_fileViewModel( new FileViewModel() )
+ : m_datafacade( 0 )
, m_finalized( true )
, m_target( QString() )
{
- };
+ }
- MarblePlacemarkModel* m_model;
- MarbleGeometryModel* m_geomodel;
+ MarbleDataFacade* m_datafacade;
QList<PlacemarkLoader*> m_loaderList;
- FileViewModel* m_fileViewModel;
QStringList m_pathList;
bool m_finalized;
@@ -76,47 +73,27 @@
}
}
- delete d->m_model;
- delete d->m_fileViewModel;
delete d;
- /* do not delete the d->m_geomodel here
- * it is not this models property
- */
}
MarblePlacemarkModel* PlacemarkManager::model() const
{
- return d->m_model;
+ return d->m_datafacade->placemarkModel();
}
-FileViewModel* PlacemarkManager::fileViewModel() const
+void PlacemarkManager::setDataFacade( MarbleDataFacade *facade )
{
- return d->m_fileViewModel;
+ d->m_datafacade = facade;
}
-MarbleGeometryModel* PlacemarkManager::geomodel() const
-{
- return d->m_geomodel;
-}
-
-void PlacemarkManager::setGeoModel( MarbleGeometryModel * model )
-{
- d->m_geomodel = model;
-}
-
-void PlacemarkManager::setPlacemarkModel( MarblePlacemarkModel *model )
-{
- d->m_model = model;
-}
-
void PlacemarkManager::clearPlacemarks()
{
- d->m_model->clearPlacemarks();
+ d->m_datafacade->placemarkModel()->clearPlacemarks();
}
QStringList PlacemarkManager::containers() const
{
- return fileViewModel()->containers() + d->m_pathList;
+ return d->m_datafacade->fileViewModel()->containers() + d->m_pathList;
}
QString PlacemarkManager::toRegularName( QString name )
@@ -145,7 +122,7 @@
{
AbstractFileViewItem* item = new KmlFileViewItem( *this, *document );
- d->m_fileViewModel->append( item );
+ d->m_datafacade->fileViewModel()->append( item );
// now get the document that will be preserved throughout the life time
GeoDataDocument* doc = dynamic_cast<KmlFileViewItem*>(item)->document();
@@ -159,8 +136,8 @@
}
// do not set this file if it only contains points
- if( doc->isVisible() && d->m_geomodel )
- d->m_geomodel->setGeoDataRoot( doc );
+ if( doc->isVisible() && d->m_datafacade->geometryModel() )
+ d->m_datafacade->geometryModel()->setGeoDataRoot( doc );
emit geoDataDocumentAdded( *doc );
}
@@ -172,11 +149,12 @@
void PlacemarkManager::removePlacemarkKey( const QString& key )
{
QString nkey = key;
+ FileViewModel *fileViewModel = d->m_datafacade->fileViewModel();
qDebug() << "trying to remove file:" << key;
- for( int i = 0; i < d->m_fileViewModel->rowCount(); ++i )
+ for( int i = 0; i < fileViewModel->rowCount(); ++i )
{
- if( toRegularName( nkey ) == toRegularName( d->m_fileViewModel->data(d->m_fileViewModel->index(i, 0)).toString() ) ) {
- d->m_fileViewModel->remove(d->m_fileViewModel->index(i, 0));
+ if( toRegularName( nkey ) == toRegularName( fileViewModel->data(fileViewModel->index(i, 0)).toString() ) ) {
+ fileViewModel->remove(fileViewModel->index(i, 0));
break;
}
};
@@ -197,7 +175,7 @@
d->m_loaderList.removeAll( loader );
if ( container )
{
- d->m_model->addPlacemarks( *container, false, d->m_finalized && d->m_loaderList.isEmpty() );
+ d->m_datafacade->placemarkModel()->addPlacemarks( *container, false, d->m_finalized && d->m_loaderList.isEmpty() );
}
if( d->m_loaderList.isEmpty() ) {
@@ -221,7 +199,7 @@
{
Q_UNUSED( finalize )
- Q_ASSERT( d->m_model != 0 && "You have called loadKmlFromData before creating a model!" );
+ Q_ASSERT( d->m_datafacade->placemarkModel() != 0 && "You have called loadKmlFromData before creating a model!" );
PlacemarkContainer container;
--- trunk/KDE/kdeedu/marble/src/lib/PlacemarkManager.h #1012479:1012480
@@ -26,6 +26,7 @@
class PlacemarkContainer;
class MarblePlacemarkModel;
class MarbleGeometryModel;
+class MarbleDataFacade;
class PlacemarkManagerPrivate;
class FileViewModel;
@@ -64,18 +65,9 @@
MarblePlacemarkModel *model() const;
/**
- * Returns the GeometryModel which represents the GeoData tree of the
- * place mark manager. The above MarblePlacemarkModel only represents
- * a part of the data (namely Placemarks)
- *
- * Note: The manager has not the ownership of the model.
+ * Sets the DataFacade from which the models can be accessed.
*/
- MarbleGeometryModel *geomodel() const;
-
- /**
- * Sets the GeometryModel to which the graphical views can be attached.
- */
- void setGeoModel( MarbleGeometryModel * model );
+ void setDataFacade ( MarbleDataFacade *facade );
/**
* return a list containing all containers that have been queued for loading or that are
@@ -110,11 +102,6 @@
*/
void addPlacemarkData( const QString& data, const QString& key );
- /**
- * return the Model which stores the opened kml/gpx files
- */
- FileViewModel* fileViewModel() const;
-
Q_SIGNALS:
void geoDataDocumentAdded( const GeoDataDocument& );
void finalize();
@@ -125,7 +112,6 @@
void addGeoDataDocument( GeoDataDocument* );
private:
- void setPlacemarkModel( MarblePlacemarkModel *model );
/**
* internal helper function which returns the regular name of a kml or cache file
--- trunk/KDE/kdeedu/marble/src/plugins/render/geodata/GeoRendererPlugin.cpp #1012479:1012480
@@ -21,6 +21,7 @@
#include "MarbleDirs.h"
#include "MarbleDataFacade.h"
#include "MarbleGeoDataModel.h"
+#include "MarbleGeometryModel.h"
#include "GeoPainter.h"
#include "GeoDataCoordinates.h"
@@ -111,10 +112,10 @@
return true;
}
- if( !dataFacade() || !dataFacade()->renderModel() )
+ if( !dataFacade() || !dataFacade()->geometryModel() )
return false;
- if( !m_view->model() ) m_view->setModel( dataFacade()->renderModel() );
+ if( !m_view->model() ) m_view->setModel( dataFacade()->geometryModel() );
m_view->setGeoPainter( painter );
return true;
}
More information about the Marble-commits
mailing list