File indexing completed on 2024-12-01 06:40:55

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
0004 //
0005 
0006 #include "MonavMapsModel.h"
0007 
0008 #include <QDate>
0009 
0010 namespace Marble
0011 {
0012 
0013 void MonavMapsModel::deleteMapFiles( int row )
0014 {
0015     if ( row >= 0 && row < m_data.size() ) {
0016         m_data.at( row ).remove();
0017         beginRemoveRows( QModelIndex(), row, row );
0018         m_data.remove( row );
0019         endRemoveRows();
0020     }
0021 }
0022 
0023 void MonavMapsModel::setInstallableVersions( const QMap<QString, QString> &remoteMaps )
0024 {
0025     m_remoteMaps = remoteMaps;
0026     beginResetModel();
0027     endResetModel();
0028 }
0029 
0030 MonavMapsModel::MonavMapsModel( const QVector<MonavMap> &data, QObject * parent ) :
0031     QAbstractTableModel( parent ), m_data( data )
0032 {
0033     std::sort( m_data.begin(), m_data.end(), &MonavMap::nameLessThan );
0034 }
0035 
0036 QVariant MonavMapsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
0037 {
0038     if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
0039         switch( section ) {
0040         case 0:
0041             return tr( "Name" );
0042         case 1:
0043             return tr( "Transport" );
0044         case 2:
0045             return tr( "Size" );
0046         case 3:
0047             return tr( "Update" );
0048         case 4:
0049             return tr( "Delete" );
0050         case 5:
0051             return tr( "Date" );
0052         }
0053     }
0054 
0055     return QVariant();
0056 }
0057 
0058 QVariant MonavMapsModel::data ( const QModelIndex & index, int role ) const
0059 {
0060     if ( index.isValid() && role == Qt::DisplayRole ) {
0061         int const row = index.row();
0062         if ( row >= 0 && row < m_data.size() )
0063             switch( index.column() ) {
0064             case 0:
0065                 return m_data.at( row ).name();
0066             case 1:
0067                 return m_data.at( row ).transport();
0068             case 2:
0069                 return QString( "%1 MB" ).arg( 1 + m_data.at( row ).size() / 1024 / 1024 );
0070             case 3: {
0071                 QString payload = m_data.at( row ).payload();
0072                 payload = payload.mid(payload.lastIndexOf(QLatin1Char('/')) + 1);
0073                 if ( m_remoteMaps.contains( payload ) ) {
0074                     QDate remote = QDate::fromString( m_remoteMaps[payload], "MM/dd/yy" );
0075                     QDate local = QDate::fromString( m_data.at( row ).date(), "MM/dd/yy" );
0076                     return remote > local;
0077                 }
0078 
0079                 return false;
0080             }
0081             case 4:
0082                 return QFileInfo( m_data.at( row ).directory().absolutePath() ).isWritable();
0083             case 5:
0084                 {
0085                     QDate date = QDate::fromString( m_data.at( row ).date(), "MM/dd/yy" );
0086                     if ( date.year() < 2000 ) {
0087                         // Qt interprets 11 as 1911
0088                         date.setDate( date.year() + 100, date.month(), date.day() );
0089                     }
0090                     return date.toString( Qt::SystemLocaleShortDate );
0091                 }
0092             }
0093     }
0094 
0095     return QVariant();
0096 }
0097 
0098 int MonavMapsModel::rowCount ( const QModelIndex & parent ) const
0099 {
0100     return parent.isValid() ? 0 : m_data.size();
0101 }
0102 
0103 int MonavMapsModel::columnCount ( const QModelIndex & parent ) const
0104 {
0105     return parent.isValid() ? 0 : 6;
0106 }
0107 
0108 QString MonavMapsModel::payload( int index ) const
0109 {
0110     if ( index >= 0 && index <= m_data.size() ) {
0111         return m_data.at( index ).payload();
0112     }
0113 
0114     return QString();
0115 }
0116 
0117 }
0118 
0119 #include "moc_MonavMapsModel.cpp"