• 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
OfflineDataModel.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 "OfflineDataModel.h"
12 #include "MarbleDirs.h"
13 
14 #include <QModelIndex>
15 #include <QDir>
16 
17 OfflineDataModel::OfflineDataModel( QObject *parent ) : QSortFilterProxyModel( parent ),
18  m_vehicleTypeFilter( Any )
19 {
20  m_newstuffModel.setTargetDirectory( Marble::MarbleDirs::localPath() + "/maps" );
21  m_newstuffModel.setRegistryFile( QDir::homePath() + "/.kde/share/apps/knewstuff3/marble-offline-data.knsregistry", Marble::NewstuffModel::NameTag );
22  m_newstuffModel.setProvider( "http://files.kde.org/marble/newstuff/maps-monav.xml" );
23 
24  setSourceModel( &m_newstuffModel );
25  QHash<int,QByteArray> roleNames = m_newstuffModel.roleNames();
26  roleNames[Qt::UserRole+17] = "continent";
27 #if QT_VERSION < 0x050000
28  setRoleNames( roleNames );
29 #else
30  m_roleNames = roleNames;
31 #endif
32 
33  sort( 0 );
34  setDynamicSortFilter( true );
35 
36  connect( &m_newstuffModel, SIGNAL(installationProgressed(int,qreal)), this, SLOT(handleInstallationProgress(int,qreal)) );
37  connect( &m_newstuffModel, SIGNAL(installationFinished(int)), this, SLOT(handleInstallationFinished(int)) );
38  connect( &m_newstuffModel, SIGNAL(installationFailed(int,QString)), this, SLOT(handleInstallationFailed(int,QString)) );
39  connect( &m_newstuffModel, SIGNAL(uninstallationFinished(int)), this, SLOT(handleUninstallationFinished(int)) );
40 }
41 
42 int OfflineDataModel::count()
43 {
44  return rowCount();
45 }
46 
47 #if QT_VERSION >= 0x050000
48 QHash<int, QByteArray> OfflineDataModel::roleNames() const
49 {
50  return m_roleNames;
51 }
52 #endif
53 
54 QVariant OfflineDataModel::data(const QModelIndex &index, int role) const
55 {
56  if ( index.isValid() && index.row() >= 0 && index.row() < rowCount() && role == Qt::DisplayRole ) {
57  QStringList const data = QSortFilterProxyModel::data( index, role ).toString().split( '/' );
58  if ( data.size() > 1 ) {
59  QString result = data.at( 1 );
60  for ( int i=2; i<data.size(); ++i ) {
61  result += " / " + data.at( i );
62  }
63  result.remove( QLatin1String( " (Motorcar)" ) );
64  result.remove( QLatin1String( " (Pedestrian)" ) );
65  result.remove( QLatin1String( " (Bicycle)" ) );
66  return result.trimmed();
67  }
68  }
69 
70  if ( index.isValid() && index.row() >= 0 && index.row() < rowCount() && role == Qt::UserRole+17 ) {
71  QStringList const data = QSortFilterProxyModel::data( index, Qt::DisplayRole ).toString().split( '/' );
72  if ( data.size() > 1 ) {
73  return data.first().trimmed();
74  }
75  }
76 
77  return QSortFilterProxyModel::data( index, role );
78 }
79 
80 void OfflineDataModel::setVehicleTypeFilter( VehicleTypes filter )
81 {
82  m_vehicleTypeFilter = filter;
83  beginResetModel();
84  endResetModel();
85 }
86 
87 void OfflineDataModel::install( int index )
88 {
89  m_newstuffModel.install( toSource( index ) );
90 }
91 
92 void OfflineDataModel::uninstall( int index )
93 {
94  m_newstuffModel.uninstall( toSource( index ) );
95 }
96 
97 void OfflineDataModel::cancel( int index )
98 {
99  m_newstuffModel.cancel( toSource( index ) );
100 }
101 
102 int OfflineDataModel::fromSource( int index ) const
103 {
104  return mapFromSource( m_newstuffModel.index( index ) ).row();
105 }
106 
107 int OfflineDataModel::toSource(int idx) const
108 {
109  return mapToSource( index( idx, 0 ) ).row();
110 }
111 
112 void OfflineDataModel::handleInstallationProgress( int index, qreal progress )
113 {
114  emit installationProgressed( fromSource( index ), progress );
115 }
116 
117 void OfflineDataModel::handleInstallationFinished( int index )
118 {
119  emit installationFinished( fromSource( index ) );
120 }
121 
122 void OfflineDataModel::handleInstallationFailed( int index, const QString &error )
123 {
124  emit installationFailed( fromSource( index ), error );
125 }
126 
127 void OfflineDataModel::handleUninstallationFinished( int index )
128 {
129  emit uninstallationFinished( fromSource( index ) );
130 }
131 
132 bool OfflineDataModel::filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const
133 {
134  if ( QSortFilterProxyModel::filterAcceptsRow( source_row, source_parent ) ) {
135  QModelIndex const index = sourceModel()->index( source_row, 0, source_parent );
136  QString const data = sourceModel()->data( index, Qt::DisplayRole ).toString();
137  if ( ( m_vehicleTypeFilter & Motorcar ) && data.contains( "(Motorcar)" ) ) {
138  return true;
139  } else if ( ( m_vehicleTypeFilter & Bicycle ) && data.contains( "(Bicycle)" ) ) {
140  return true;
141  } else if ( ( m_vehicleTypeFilter & Pedestrian ) && data.contains( "(Pedestrian)" ) ) {
142  return true;
143  }
144  }
145 
146  return false;
147 }
148 
149 #include "OfflineDataModel.moc"
OfflineDataModel.h
Marble::NewstuffModel::setProvider
void setProvider(const QString &downloadUrl)
Add a newstuff provider.
Definition: NewstuffModel.cpp:559
OfflineDataModel::cancel
void cancel(int index)
Definition: OfflineDataModel.cpp:97
OfflineDataModel::Pedestrian
Definition: OfflineDataModel.h:31
Marble::MarbleDirs::localPath
static QString localPath()
Definition: MarbleDirs.cpp:217
QObject
Marble::NewstuffModel::setTargetDirectory
void setTargetDirectory(const QString &targetDirectory)
Definition: NewstuffModel.cpp:575
MarbleDirs.h
OfflineDataModel::count
int count()
OfflineDataModel::install
void install(int index)
Definition: OfflineDataModel.cpp:87
OfflineDataModel::installationFailed
void installationFailed(int newstuffindex, const QString &error)
Marble::NewstuffModel::install
void install(int index)
Definition: NewstuffModel.cpp:639
Marble::NewstuffModel::uninstall
void uninstall(int index)
Definition: NewstuffModel.cpp:657
OfflineDataModel::Bicycle
Definition: OfflineDataModel.h:30
OfflineDataModel::OfflineDataModel
OfflineDataModel(QObject *parent=0)
Definition: OfflineDataModel.cpp:17
OfflineDataModel::filterAcceptsRow
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
Definition: OfflineDataModel.cpp:132
OfflineDataModel::installationProgressed
void installationProgressed(int newstuffindex, qreal progress)
Marble::NewstuffModel::cancel
void cancel(int index)
Definition: NewstuffModel.cpp:679
OfflineDataModel::installationFinished
void installationFinished(int newstuffindex)
Marble::NewstuffModel::setRegistryFile
void setRegistryFile(const QString &registryFile, IdTag idTag=PayloadTag)
Definition: NewstuffModel.cpp:595
OfflineDataModel::uninstallationFinished
void uninstallationFinished(int newstuffindex)
OfflineDataModel::uninstall
void uninstall(int index)
Definition: OfflineDataModel.cpp:92
OfflineDataModel::setVehicleTypeFilter
void setVehicleTypeFilter(VehicleTypes filter)
Definition: OfflineDataModel.cpp:80
OfflineDataModel::data
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: OfflineDataModel.cpp:54
OfflineDataModel::Motorcar
Definition: OfflineDataModel.h:29
Marble::NewstuffModel::NameTag
Definition: NewstuffModel.h:58
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