From 60f1b285ec3f1a243b3f1192df9fedd60c52a680 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 20 Apr 2014 18:30:20 +0200 Subject: [PATCH] refs #195, extended model classes * mode for users (detailed, complete) * mode for ATC station (booked, online) * clear method for columns --- src/blackgui/atcstationlistmodel.cpp | 54 ++++++++++++++++++++-------- src/blackgui/atcstationlistmodel.h | 27 ++++++++------ src/blackgui/columns.h | 2 ++ src/blackgui/userlistmodel.cpp | 37 ++++++++++++++----- src/blackgui/userlistmodel.h | 16 ++++++++- 5 files changed, 102 insertions(+), 34 deletions(-) diff --git a/src/blackgui/atcstationlistmodel.cpp b/src/blackgui/atcstationlistmodel.cpp index 9b3ce92b8..11cb6bd06 100644 --- a/src/blackgui/atcstationlistmodel.cpp +++ b/src/blackgui/atcstationlistmodel.cpp @@ -13,22 +13,10 @@ namespace BlackGui /* * Constructor */ - CAtcListModel::CAtcListModel(QObject *parent) : CListModelBase("ViewAtcList", parent) + CAtcStationListModel::CAtcStationListModel(AtcStationMode stationMode, QObject *parent) : + CListModelBase("ViewAtcList", parent), m_stationMode(NotSet) { - this->m_columns.addColumn(CColumn("callsign", CAtcStation::IndexCallsignAsStringAsSet)); - this->m_columns.addColumn(CColumn("distance", CAtcStation::IndexDistance, Qt::AlignRight | Qt::AlignVCenter)); - this->m_columns.addColumn(CColumn("frequency", CAtcStation::IndexFrequency, Qt::AlignRight | Qt::AlignVCenter)); - this->m_columns.addColumn(CColumn("controllername", CAtcStation::IndexControllerRealName)); - this->m_columns.addColumn(CColumn("online", CAtcStation::IndexIsOnline)); - this->m_columns.addColumn(CColumn("bookedfrom", CAtcStation::IndexBookedFrom)); - this->m_columns.addColumn(CColumn("bookeduntil", CAtcStation::IndexBookedUntil)); - this->m_columns.addColumn(CColumn("voiceroomurl", CAtcStation::IndexVoiceRoomUrl)); - - - // default sort order - this->setSortColumnByPropertyIndex(CAtcStation::IndexDistance); - this->m_sortOrder = Qt::AscendingOrder; - + this->setStationMode(stationMode); // force strings for translation in resource files (void)QT_TRANSLATE_NOOP("ViewAtcList", "callsign"); (void)QT_TRANSLATE_NOOP("ViewAtcList", "distance"); @@ -39,4 +27,40 @@ namespace BlackGui (void)QT_TRANSLATE_NOOP("ViewAtcList", "bookeduntil"); (void)QT_TRANSLATE_NOOP("ViewAtcList", "voiceroomurl"); } + + void CAtcStationListModel::setStationMode(CAtcStationListModel::AtcStationMode stationMode) + { + if (this->m_stationMode == stationMode) return; + this->m_stationMode = stationMode; + this->m_columns.clear(); + switch (stationMode) + { + case StationsOnline: + this->m_columns.addColumn(CColumn("callsign", CAtcStation::IndexCallsignAsStringAsSet)); + this->m_columns.addColumn(CColumn("distance", CAtcStation::IndexDistance, Qt::AlignRight | Qt::AlignVCenter)); + this->m_columns.addColumn(CColumn("frequency", CAtcStation::IndexFrequency, Qt::AlignRight | Qt::AlignVCenter)); + this->m_columns.addColumn(CColumn("controllername", CAtcStation::IndexControllerRealName)); + this->m_columns.addColumn(CColumn("bookedfrom", CAtcStation::IndexBookedFrom)); + this->m_columns.addColumn(CColumn("bookeduntil", CAtcStation::IndexBookedUntil)); + this->m_columns.addColumn(CColumn("voiceroomurl", CAtcStation::IndexVoiceRoomUrl)); + + // default sort order + this->setSortColumnByPropertyIndex(CAtcStation::IndexDistance); + this->m_sortOrder = Qt::AscendingOrder; + break; + + case StationsBooked: + this->m_columns.addColumn(CColumn("callsign", CAtcStation::IndexCallsignAsStringAsSet)); + this->m_columns.addColumn(CColumn("controllername", CAtcStation::IndexControllerRealName)); + this->m_columns.addColumn(CColumn("bookedfrom", CAtcStation::IndexBookedFrom)); + this->m_columns.addColumn(CColumn("bookeduntil", CAtcStation::IndexBookedUntil)); + this->m_columns.addColumn(CColumn("frequency", CAtcStation::IndexFrequency, Qt::AlignRight | Qt::AlignVCenter)); + this->m_columns.addColumn(CColumn("online", CAtcStation::IndexIsOnline)); + + // default sort order + this->setSortColumnByPropertyIndex(CAtcStation::IndexBookedFrom); + this->m_sortOrder = Qt::AscendingOrder; + break; + } + } } diff --git a/src/blackgui/atcstationlistmodel.h b/src/blackgui/atcstationlistmodel.h index c63c222bf..491a1475f 100644 --- a/src/blackgui/atcstationlistmodel.h +++ b/src/blackgui/atcstationlistmodel.h @@ -20,22 +20,29 @@ namespace BlackGui /*! * \brief ATC list model */ - class CAtcListModel : public CListModelBase + class CAtcStationListModel : public CListModelBase { public: + //! What kind of stations + enum AtcStationMode + { + NotSet, + StationsBooked, + StationsOnline + }; - /*! - * \brief Constructor - * \param parent - */ - explicit CAtcListModel(QObject *parent = nullptr); + //! Constructor + explicit CAtcStationListModel(AtcStationMode stationMode, QObject *parent = nullptr); - /*! - * \brief Destructor - */ - virtual ~CAtcListModel() {} + //! Destructor + virtual ~CAtcStationListModel() {} + //! Set station mode + void setStationMode(AtcStationMode stationMode); + + private: + AtcStationMode m_stationMode; }; } #endif // guard diff --git a/src/blackgui/columns.h b/src/blackgui/columns.h index 99a1bb1c5..30dcb7511 100644 --- a/src/blackgui/columns.h +++ b/src/blackgui/columns.h @@ -124,6 +124,8 @@ namespace BlackGui //! Column at position const CColumn &at(int columnNumber) const { return this->m_columns.at(columnNumber); } + //! Clear + void clear() { this->m_columns.clear(); } private: QList m_columns; diff --git a/src/blackgui/userlistmodel.cpp b/src/blackgui/userlistmodel.cpp index 52266b2c9..2e5fd3a6e 100644 --- a/src/blackgui/userlistmodel.cpp +++ b/src/blackgui/userlistmodel.cpp @@ -10,15 +10,10 @@ namespace BlackGui /* * Constructor */ - CUserListModel::CUserListModel(QObject *parent) : - CListModelBase("ViewUserList", parent) + CUserListModel::CUserListModel(UserMode userMode, QObject *parent) : + CListModelBase("ViewUserList", parent), m_userMode(NotSet) { - this->m_columns.addColumn(CColumn("", CUser::IndexCallsignIcon)); - this->m_columns.addColumn(CColumn("realname", CUser::IndexRealName)); - this->m_columns.addColumn(CColumn("callsign", CUser::IndexCallsign)); - this->m_columns.addColumn(CColumn("userid", CUser::IndexId)); - // this->m_columns.addColumn(CUser::IndexEmail, "email"); - + this->setUserMode(userMode); // force strings for translation in resource files (void)QT_TRANSLATE_NOOP("ViewUserList", "callsign"); (void)QT_TRANSLATE_NOOP("ViewUserList", "realname"); @@ -26,6 +21,32 @@ namespace BlackGui (void)QT_TRANSLATE_NOOP("ViewUserList", "email"); } + /* + * Mode + */ + void CUserListModel::setUserMode(CUserListModel::UserMode userMode) + { + if (this->m_userMode == userMode) return; + this->m_userMode = userMode; + this->m_columns.clear(); + switch (userMode) + { + case UserDetailed: + this->m_columns.addColumn(CColumn("", CUser::IndexCallsignIcon)); + this->m_columns.addColumn(CColumn("realname", CUser::IndexRealName)); + this->m_columns.addColumn(CColumn("callsign", CUser::IndexCallsign)); + this->m_columns.addColumn(CColumn("userid", CUser::IndexId)); + // this->m_columns.addColumn(CUser::IndexEmail, "email"); + break; + + case UserShort: + this->m_columns.addColumn(CColumn("", CUser::IndexCallsignIcon)); + this->m_columns.addColumn(CColumn("realname", CUser::IndexRealName)); + this->m_columns.addColumn(CColumn("callsign", CUser::IndexCallsign)); + break; + } + } + /* * Display icons */ diff --git a/src/blackgui/userlistmodel.h b/src/blackgui/userlistmodel.h index 1613b56cc..7df38adbe 100644 --- a/src/blackgui/userlistmodel.h +++ b/src/blackgui/userlistmodel.h @@ -16,14 +16,28 @@ namespace BlackGui public: + //! What level of detail + enum UserMode + { + NotSet, + UserDetailed, + UserShort + }; + //! \brief Constructor - explicit CUserListModel(QObject *parent = nullptr); + CUserListModel(UserMode userMode, QObject *parent = nullptr); //! \brief Destructor virtual ~CUserListModel() {} //! \copydoc CListModelBase::data QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const; + + //! Set station mode + void setUserMode(UserMode userMode); + + private: + UserMode m_userMode; }; } #endif // guard