[libcalamares] Make TimeZoneData public

- Also make it a QObject so we can add properties and make it useful
  for QML consumption.
This commit is contained in:
Adriaan de Groot 2020-08-05 18:01:24 +02:00
parent 10fb5b95c7
commit 478a275764
2 changed files with 38 additions and 27 deletions

View File

@ -70,22 +70,6 @@ getRightGeoLocation( QString str )
}
class TimeZoneData : public TranslatableString
{
public:
TimeZoneData( const QString& region,
const QString& zone,
const QString& country,
double latitude,
double longitude );
QString tr() const override;
QString m_region;
QString m_country;
double m_latitude;
double m_longitude;
};
TimeZoneData::TimeZoneData( const QString& region,
const QString& zone,
const QString& country,
@ -122,7 +106,7 @@ RegionData::tr() const
}
static void
loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData >& zones )
loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData* >& zones )
{
QFile file( TZ_DATA_FILE );
if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) )
@ -187,7 +171,7 @@ loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData >& zones )
{
regions.append( std::move( r ) );
}
zones.append( TimeZoneData( region, zone, countryCode, latitude, longitude ) );
zones.append( new TimeZoneData( region, zone, countryCode, latitude, longitude ) );
}
}
}
@ -196,7 +180,7 @@ loadTZData( QVector< RegionData >& regions, QVector< TimeZoneData >& zones )
struct Private
{
QVector< RegionData > m_regions;
QVector< TimeZoneData > m_zones;
QVector< TimeZoneData* > m_zones;
Private()
{
@ -277,14 +261,14 @@ ZonesModel::data( const QModelIndex& index, int role ) const
return QVariant();
}
const auto& zone = m_private->m_zones[ index.row() ];
const auto* zone = m_private->m_zones[ index.row() ];
if ( role == NameRole )
{
return zone.tr();
return zone->tr();
}
if ( role == KeyRole )
{
return zone.key();
return zone->key();
}
return QVariant();
}
@ -329,13 +313,9 @@ RegionalZonesModel::filterAcceptsRow( int sourceRow, const QModelIndex& ) const
}
const auto& zone = m_private->m_zones[ sourceRow ];
return ( zone.m_region == m_region );
return ( zone->m_region == m_region );
}
} // namespace Locale
} // namespace CalamaresUtils
#include "utils/moc-warnings.h"
#include "TimeZone.moc"

View File

@ -24,6 +24,8 @@
#include "DllMacro.h"
#include "locale/TranslatableString.h"
#include <QAbstractListModel>
#include <QObject>
#include <QSortFilterProxyModel>
@ -34,6 +36,35 @@ namespace CalamaresUtils
namespace Locale
{
struct Private;
class RegionalZonesModel;
class ZonesModel;
class TimeZoneData : public QObject, TranslatableString
{
friend class RegionalZonesModel;
friend class ZonesModel;
Q_OBJECT
Q_PROPERTY( QString region READ region CONSTANT )
public:
TimeZoneData( const QString& region,
const QString& zone,
const QString& country,
double latitude,
double longitude );
QString tr() const override;
QString region() const { return m_region; }
private:
QString m_region;
QString m_country;
double m_latitude;
double m_longitude;
};
/** @brief The list of timezone regions
*