1 /*!
2  * \brief Model implementation for the providers.
3  *
4  * \copyright Copyright (c) 2015-2021 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #pragma once
8 
9 #include "CallCost.h"
10 
11 #include <QAbstractListModel>
12 #include <QStringList>
13 #include <QVector>
14 
15 
16 namespace governikus
17 {
18 
19 class ProviderModel
20 	: public QAbstractListModel
21 {
22 
23 	Q_OBJECT
24 
25 	static QString createCostString(double pCostsPerMinute, double pCostsPerCall);
26 	static QString createAmountString(double pCents);
27 
28 	private:
29 		QVector<QMetaObject::Connection> mConnections;
30 		bool mIncludeCategories;
31 
32 		void updateConnections();
33 
34 	private Q_SLOTS:
35 		void onProvidersChanged();
36 
37 	public:
38 		enum ProviderRoles
39 		{
40 			CATEGORY = Qt::UserRole + 1,
41 			SHORTNAME,
42 			LONGNAME,
43 			SHORTDESCRIPTION,
44 			LONGDESCRIPTION,
45 			ADDRESS,
46 			ADDRESS_DOMAIN,
47 			HOMEPAGE,
48 			HOMEPAGE_BASE,
49 			PHONE,
50 			PHONE_COST,
51 			EMAIL,
52 			POSTALADDRESS,
53 			ICON,
54 			IMAGE,
55 			SORT_ROLE,
56 			TYPE
57 		};
58 
59 		explicit ProviderModel(QObject* pParent = nullptr);
60 		~ProviderModel() override;
61 
62 		int rowCount(const QModelIndex&) const override;
63 		QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override;
64 		QHash<int, QByteArray> roleNames() const override;
65 
66 		void setIncludeCategories(bool pIncludeCategories);
67 		bool getIncludeCategories() const;
68 
69 		static const QStringList& getProviderCategories();
70 
71 		static QString createCostString(const CallCost& pCosts);
72 };
73 
74 
75 } // namespace governikus
76