• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • plugins
  • declarative
MapThemeModel.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2012 Dennis Nienhüser <earthwings@gentoo.org>
9 //
10 
11 #include "MapThemeModel.h"
12 
13 #include "MapThemeManager.h"
14 #include "GeoSceneDocument.h"
15 #include "GeoSceneHead.h"
16 #include "GeoSceneZoom.h"
17 
18 #include <QModelIndex>
19 #include <QDebug>
20 #include <QStandardItemModel>
21 
22 MapThemeModel::MapThemeModel( QObject *parent ) : QSortFilterProxyModel( parent ),
23  m_themeManager( new Marble::MapThemeManager( this ) ), m_mapThemeFilters( MapThemeModel::AnyTheme )
24 {
25  setSourceModel( m_themeManager->mapThemeModel() );
26  handleChangedThemes();
27  connect( m_themeManager, SIGNAL(themesChanged()), this, SLOT(handleChangedThemes()) );
28 
29  QHash<int,QByteArray> roleNames;
30  roleNames[ Qt::DisplayRole ] = "display";
31  roleNames[ Qt::DecorationRole ] = "icon";
32  roleNames[ Qt::UserRole + 1 ] = "mapThemeId";
33 #if QT_VERSION < 0x050000
34  setRoleNames( roleNames );
35 #else
36  m_roleNames = roleNames;
37 #endif
38 }
39 
40 int MapThemeModel::count() const
41 {
42  return rowCount();
43 }
44 
45 #if QT_VERSION >= 0x050000
46 QHash<int, QByteArray> MapThemeModel::roleNames() const
47 {
48  return m_roleNames;
49 }
50 #endif
51 
52 QString MapThemeModel::name( const QString &id ) const
53 {
54  for ( int i=0; i<rowCount(); ++i ) {
55  if ( data( index( i, 0, QModelIndex() ), Qt::UserRole + 1 ).toString() == id ) {
56  return data( index( i, 0, QModelIndex() ) ).toString();
57  }
58  }
59  return QString();
60 }
61 
62 int MapThemeModel::indexOf( const QString &id ) const
63 {
64  for ( int i=0; i<rowCount(); ++i ) {
65  if ( data( index( i, 0, QModelIndex() ), Qt::UserRole + 1 ).toString() == id ) {
66  return i;
67  }
68  }
69  return -1;
70 }
71 
72 MapThemeModel::MapThemeFilters MapThemeModel::mapThemeFilter() const
73 {
74  return m_mapThemeFilters;
75 }
76 
77 void MapThemeModel::setMapThemeFilter( MapThemeFilters filters )
78 {
79  if ( filters != m_mapThemeFilters ) {
80  m_mapThemeFilters = filters;
81  emit mapThemeFilterChanged();
82  }
83 }
84 
85 bool MapThemeModel::filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const
86 {
87  QModelIndex const index = sourceModel()->index( sourceRow, 0, sourceParent );
88  QString const themeId = index.data( Qt::UserRole + 1 ).toString();
89  if ( m_mapThemeFilters & MapThemeModel::HighZoom && m_streetMapThemeIds.contains( themeId ) ) {
90  return false;
91  }
92 
93  if ( m_mapThemeFilters & MapThemeModel::LowZoom && !m_streetMapThemeIds.contains( themeId ) ) {
94  return false;
95  }
96 
97  if ( m_mapThemeFilters & MapThemeModel::Terrestrial && themeId.startsWith( QLatin1String( "earth/" ) ) ) {
98  return false;
99  }
100 
101  if ( m_mapThemeFilters & MapThemeModel::Extraterrestrial && !themeId.startsWith( QLatin1String( "earth/" ) ) ) {
102  return false;
103  }
104 
105  return true;
106 }
107 
108 void MapThemeModel::handleChangedThemes()
109 {
118  m_streetMapThemeIds.clear();
119  QStringList const themes = m_themeManager->mapThemeIds();
120  foreach( const QString &theme, themes ) {
121  Marble::GeoSceneDocument* document = Marble::MapThemeManager::loadMapTheme( theme );
122  if ( document && document->head()->zoom()->maximum() > 3000 ) {
123  m_streetMapThemeIds << document->head()->mapThemeId();
124  delete document;
125  }
126  }
127 
128  beginResetModel();
129  endResetModel();
130 }
131 
132 #include "MapThemeModel.moc"
GeoSceneHead.h
Marble::MapThemeManager::mapThemeModel
QStandardItemModel * mapThemeModel()
Provides a model of the locally existing themes.
Definition: MapThemeManager.cpp:319
MapThemeModel::name
Q_INVOKABLE QString name(const QString &id) const
Definition: MapThemeModel.cpp:52
MapThemeModel::mapThemeFilterChanged
void mapThemeFilterChanged()
Marble::GeoSceneHead::mapThemeId
QString mapThemeId() const
Definition: GeoSceneHead.cpp:116
MapThemeModel::count
int count() const
MapThemeModel.h
MapThemeManager
Provides access to all map themes installed locally.
Definition: DeclarativeMapThemeManager.h:40
GeoSceneDocument.h
Marble::GeoSceneZoom::maximum
int maximum() const
Definition: GeoSceneZoom.cpp:46
QObject
GeoSceneZoom.h
Marble::MapThemeManager::loadMapTheme
static GeoSceneDocument * loadMapTheme(const QString &mapThemeStringID)
Returns the map theme as a GeoSceneDocument object.
Definition: MapThemeManager.cpp:155
MapThemeModel::Extraterrestrial
Definition: MapThemeModel.h:28
MapThemeModel::setMapThemeFilter
void setMapThemeFilter(MapThemeFilters filters)
Definition: MapThemeModel.cpp:77
MapThemeModel::MapThemeModel
MapThemeModel(QObject *parent=0)
Definition: MapThemeModel.cpp:22
Marble::GeoSceneDocument::head
const GeoSceneHead * head() const
Definition: GeoSceneDocument.cpp:86
Marble::GeoSceneDocument
A container for features parsed from the DGML file.
Definition: GeoSceneDocument.h:44
MapThemeModel
Definition: MapThemeModel.h:18
MapThemeModel::filterAcceptsRow
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
Definition: MapThemeModel.cpp:85
Marble::GeoSceneHead::zoom
const GeoSceneZoom * zoom() const
Definition: GeoSceneHead.cpp:166
Marble::MapThemeManager::mapThemeIds
QStringList mapThemeIds() const
Returns a list of all locally available map theme IDs.
Definition: MapThemeManager.cpp:138
MapThemeModel::mapThemeFilter
Q_INVOKABLE MapThemeFilters mapThemeFilter() const
MapThemeModel::LowZoom
Definition: MapThemeModel.h:29
MapThemeModel::indexOf
Q_INVOKABLE int indexOf(const QString &id) const
Definition: MapThemeModel.cpp:62
MapThemeManager.h
MapThemeModel::Terrestrial
Definition: MapThemeModel.h:27
MapThemeModel::HighZoom
Definition: MapThemeModel.h:30
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:51 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal