[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