[libcalamares] Make TimeZoneData public

- Also make it a QObject so we can add properties and make it useful
  for QML consumption.
main
Adriaan de Groot 5 years ago
parent 10fb5b95c7
commit 478a275764

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

@ -24,6 +24,8 @@
#include "DllMacro.h" #include "DllMacro.h"
#include "locale/TranslatableString.h"
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QObject> #include <QObject>
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
@ -34,6 +36,35 @@ namespace CalamaresUtils
namespace Locale namespace Locale
{ {
struct Private; 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 /** @brief The list of timezone regions
* *

Loading…
Cancel
Save