1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
4 //
5
6 #include "MonavMapsModel.h"
7
8 #include <QDate>
9
10 namespace Marble
11 {
12
deleteMapFiles(int row)13 void MonavMapsModel::deleteMapFiles( int row )
14 {
15 if ( row >= 0 && row < m_data.size() ) {
16 m_data.at( row ).remove();
17 beginRemoveRows( QModelIndex(), row, row );
18 m_data.remove( row );
19 endRemoveRows();
20 }
21 }
22
setInstallableVersions(const QMap<QString,QString> & remoteMaps)23 void MonavMapsModel::setInstallableVersions( const QMap<QString, QString> &remoteMaps )
24 {
25 m_remoteMaps = remoteMaps;
26 beginResetModel();
27 endResetModel();
28 }
29
MonavMapsModel(const QVector<MonavMap> & data,QObject * parent)30 MonavMapsModel::MonavMapsModel( const QVector<MonavMap> &data, QObject * parent ) :
31 QAbstractTableModel( parent ), m_data( data )
32 {
33 std::sort( m_data.begin(), m_data.end(), &MonavMap::nameLessThan );
34 }
35
headerData(int section,Qt::Orientation orientation,int role) const36 QVariant MonavMapsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
37 {
38 if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
39 switch( section ) {
40 case 0:
41 return tr( "Name" );
42 case 1:
43 return tr( "Transport" );
44 case 2:
45 return tr( "Size" );
46 case 3:
47 return tr( "Update" );
48 case 4:
49 return tr( "Delete" );
50 case 5:
51 return tr( "Date" );
52 }
53 }
54
55 return QVariant();
56 }
57
data(const QModelIndex & index,int role) const58 QVariant MonavMapsModel::data ( const QModelIndex & index, int role ) const
59 {
60 if ( index.isValid() && role == Qt::DisplayRole ) {
61 int const row = index.row();
62 if ( row >= 0 && row < m_data.size() )
63 switch( index.column() ) {
64 case 0:
65 return m_data.at( row ).name();
66 case 1:
67 return m_data.at( row ).transport();
68 case 2:
69 return QString( "%1 MB" ).arg( 1 + m_data.at( row ).size() / 1024 / 1024 );
70 case 3: {
71 QString payload = m_data.at( row ).payload();
72 payload = payload.mid(payload.lastIndexOf(QLatin1Char('/')) + 1);
73 if ( m_remoteMaps.contains( payload ) ) {
74 QDate remote = QDate::fromString( m_remoteMaps[payload], "MM/dd/yy" );
75 QDate local = QDate::fromString( m_data.at( row ).date(), "MM/dd/yy" );
76 return remote > local;
77 }
78
79 return false;
80 }
81 case 4:
82 return QFileInfo( m_data.at( row ).directory().absolutePath() ).isWritable();
83 case 5:
84 {
85 QDate date = QDate::fromString( m_data.at( row ).date(), "MM/dd/yy" );
86 if ( date.year() < 2000 ) {
87 // Qt interprets 11 as 1911
88 date.setDate( date.year() + 100, date.month(), date.day() );
89 }
90 return date.toString( Qt::SystemLocaleShortDate );
91 }
92 }
93 }
94
95 return QVariant();
96 }
97
rowCount(const QModelIndex & parent) const98 int MonavMapsModel::rowCount ( const QModelIndex & parent ) const
99 {
100 return parent.isValid() ? 0 : m_data.size();
101 }
102
columnCount(const QModelIndex & parent) const103 int MonavMapsModel::columnCount ( const QModelIndex & parent ) const
104 {
105 return parent.isValid() ? 0 : 6;
106 }
107
payload(int index) const108 QString MonavMapsModel::payload( int index ) const
109 {
110 if ( index >= 0 && index <= m_data.size() ) {
111 return m_data.at( index ).payload();
112 }
113
114 return QString();
115 }
116
117 }
118
119 #include "moc_MonavMapsModel.cpp"
120