[Marble-devel] Review Request: Refactor MarblePlacemarkModel. Use GeoDataTreeModel as reference model

Thibaut Gridel tgridel at free.fr
Sat Dec 4 01:14:25 CET 2010


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://svn.reviewboard.kde.org/r/6040/
-----------------------------------------------------------

Review request for marble.


Summary
-------

Please review this code refactor in the model and geodata dept.

The goal is to use the tree model and proxies above geodata documents, and deprecate the awkward MarblePlacemarkModel.

For this purpose, the following is done:
- the datafacade does not keep a MarblePlacemarkModel just to have a flat list of placemark, it uses the stolen KDescendantsProxyModel above the treemodel.
- the users of the placemarkModel: PlacemarkLayout and NavigationWidget, keep their own sorting and filtering proxy models with them (unclutters MarbleModel)
- Where placemarkModel::data() was abused to retrieve placemark specific data, a pointer to a placemark is retrieved and direct methods of the placemark are used (lot faster too). Only the basic roles which have a filtering interest (name, coordinates, popularity...) should stay.
- MarbleModel, Map and Widget had a centerOn(QModelIndex) without referring to which model those indexes were. There was no use either...
- GeoDataTreeModel has a 5times speed gain while using nodeType as const char* for type id rather than dynamic_cast !!!
- A trick is done to connect the models only after all files have finished loading, another launch boost
- the PlacemarkManager is removed: specific code to give population figures, roles and extra info is moved to FileLoader, and the remaining code was there to fill the MarblePlacemarkModel.


Todo after this:
- Continue removing MarblePlacemarkModel in Runners and Routing Model. 2 Options: 
   - either a List of Placemarks is enough as a model, or
   - a treemodel and proxies above a GeoDataDocument


Diffs
-----

  /trunk/KDE/kdeedu/marble/src/lib/CMakeLists.txt 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/FileLoader.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/FileLoader.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/FileManager.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/FileManager.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/FileViewWidget.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/GeoDataTreeModel.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/GoToDialog.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleDataFacade.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleDataFacade.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleMap.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleMap.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleModel.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleModel.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarblePlacemarkModel.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleRunnerManager.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleRunnerManager.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleSearchListView.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleSearchListView.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleWidget.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/MarbleWidget.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/NavigationWidget.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/NavigationWidget.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/PlacemarkInfoDialog.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/PlacemarkLayout.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/PlacemarkLayout.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/PlacemarkManager.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/PlacemarkManager.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/PlacemarkPainter.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/VisiblePlacemark.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataColorStyle.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataColorStyle.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataContainer.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataContainer.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataContainer_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataData.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataData.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataData_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataDocument.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataDocument.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataDocument_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataExtendedData.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataExtendedData.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataExtendedData_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataFeature.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataFeature.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataFeature_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataFolder.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataFolder.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataGeometry.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataGeometry.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataGeometry_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataHotSpot.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataHotSpot.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataIconStyle.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataIconStyle.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLabelStyle.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLabelStyle.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLatLonAltBox.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLatLonAltBox.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLatLonBox.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLatLonBox.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLineString.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLineString.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLineString_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLineStyle.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLineStyle.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLinearRing.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLinearRing.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLinearRing_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLod.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLod.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLod_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLookAt.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataLookAt.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataMultiGeometry.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataMultiGeometry.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataMultiGeometry_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataObject.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataObject.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPlacemark.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPlacemark.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPlacemark_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPoint.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPoint.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPolyStyle.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPolyStyle.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPolygon.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPolygon.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataPolygon_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataRegion.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataRegion.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataRegion_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataStyle.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataStyle.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataStyleMap.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataStyleMap.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataStyleSelector.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataStyleSelector.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimePrimitive.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimePrimitive.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimePrimitive_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimeSpan.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimeSpan.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimeSpan_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimeStamp.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimeStamp.cpp 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/geodata/data/GeoDataTimeStamp_p.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/kbihash_p.h PRE-CREATION 
  /trunk/KDE/kdeedu/marble/src/lib/kdescendantsproxymodel.h PRE-CREATION 
  /trunk/KDE/kdeedu/marble/src/lib/kdescendantsproxymodel.cpp PRE-CREATION 
  /trunk/KDE/kdeedu/marble/src/lib/routing/RoutingInputWidget.h 1202435 
  /trunk/KDE/kdeedu/marble/src/lib/routing/RoutingInputWidget.cpp 1202435 
  /trunk/KDE/kdeedu/marble/tests/TestGeoData.cpp 1202435 

Diff: http://svn.reviewboard.kde.org/r/6040/diff


Testing
-------

Everything should work as usual.

Checked the following:
- the NavigationWidget list of placemark is OK (should display updated list of placemarks as the treemodel is populated)
- the PlacemarkLayout also displays placemarks from the new proxies stack
- Search and Routing Runners still work
- Routing model, routing points... work
- Placemark Dialog (left click on a placemark) still display placemark properties
- profiled and benchmarked for loading
- (not checked) memory usage should have decreased


Thanks,

Thibaut

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/marble-devel/attachments/20101204/6e23b0c1/attachment-0001.htm 


More information about the Marble-devel mailing list