File indexing completed on 2024-12-01 03:29:08
0001 /* 0002 SPDX-FileCopyrightText: 2005, 2006 Pino Toscano <toscano.pino@tiscali.it> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KALZIUMNUMERATIONTYPE_H 0008 #define KALZIUMNUMERATIONTYPE_H 0009 0010 class KalziumNumerationType; 0011 0012 #include <QByteArray> 0013 #include <QStringList> 0014 0015 /** 0016 * Factory for KalziumNumerationType classes. 0017 * 0018 * @author Pino Toscano 0019 */ 0020 class KalziumNumerationTypeFactory 0021 { 0022 public: 0023 /** 0024 * Get the instance of this factory. 0025 */ 0026 static KalziumNumerationTypeFactory *instance(); 0027 0028 /** 0029 * Returns the KalziumNumerationType with the @p id specified. 0030 * It will gives 0 if none found. 0031 */ 0032 KalziumNumerationType *build(int id) const; 0033 /** 0034 * Returns the KalziumNumerationType whose name is the @p id 0035 * specified. 0036 * It will gives 0 if none found. 0037 */ 0038 KalziumNumerationType *build(const QByteArray &id) const; 0039 0040 /** 0041 * Returns a list with the names of the numeration types we 0042 * support. 0043 */ 0044 QStringList numerations() const; 0045 0046 private: 0047 KalziumNumerationTypeFactory(); 0048 0049 QList<KalziumNumerationType *> m_numerations; 0050 }; 0051 0052 /** 0053 * Base class for a numeration type. 0054 * It's quite simple, as a numeration doesn't have many data to represent. 0055 * 0056 * @author Pino Toscano 0057 */ 0058 class KalziumNumerationType 0059 { 0060 public: 0061 /** 0062 * Get its instance. 0063 */ 0064 static KalziumNumerationType *instance(); 0065 0066 virtual ~KalziumNumerationType(); 0067 0068 /** 0069 * Returns the ID of this numeration type. 0070 * Mainly used when saving/loading. 0071 */ 0072 virtual QByteArray name() const = 0; 0073 /** 0074 * Returns the description of this numeration type. 0075 * Used in all the visible places. 0076 */ 0077 virtual QString description() const = 0; 0078 0079 /** 0080 * Returns the @p num 'th item of this numeration type. 0081 */ 0082 virtual QString item(const int num) const; 0083 /** 0084 * Returns all the items of this numeration type. 0085 */ 0086 virtual QStringList items() const; 0087 0088 protected: 0089 KalziumNumerationType(); 0090 0091 QStringList m_items; 0092 }; 0093 0094 /** 0095 * The class representing no numeration. 0096 * This could look a bit weird, but this way makes quite modular even disabling 0097 * the numeration. 0098 * 0099 * @author Pino Toscano 0100 */ 0101 class KalziumNoneNumerationType : public KalziumNumerationType 0102 { 0103 public: 0104 static KalziumNoneNumerationType *instance(); 0105 0106 QByteArray name() const override; 0107 QString description() const override; 0108 0109 QString item(const int num) const override; 0110 QStringList items() const override; 0111 0112 private: 0113 KalziumNoneNumerationType(); 0114 }; 0115 0116 /** 0117 * The numeration "International Union of Pure and Applied Chemistry" (IUPAC). 0118 * 0119 * @author Pino Toscano 0120 */ 0121 class KalziumIUPACNumerationType : public KalziumNumerationType 0122 { 0123 public: 0124 static KalziumIUPACNumerationType *instance(); 0125 0126 QByteArray name() const override; 0127 QString description() const override; 0128 0129 private: 0130 KalziumIUPACNumerationType(); 0131 }; 0132 0133 /** 0134 * The numeration "Chemical Abstract Service" (CAS). 0135 * 0136 * @author Pino Toscano 0137 */ 0138 class KalziumCASNumerationType : public KalziumNumerationType 0139 { 0140 public: 0141 static KalziumCASNumerationType *instance(); 0142 0143 QByteArray name() const override; 0144 QString description() const override; 0145 0146 private: 0147 KalziumCASNumerationType(); 0148 }; 0149 0150 /** 0151 * The old IUPAC numeration. 0152 * 0153 * @author Pino Toscano 0154 */ 0155 class KalziumOldIUPACNumerationType : public KalziumNumerationType 0156 { 0157 public: 0158 static KalziumOldIUPACNumerationType *instance(); 0159 0160 QByteArray name() const override; 0161 QString description() const override; 0162 0163 private: 0164 KalziumOldIUPACNumerationType(); 0165 }; 0166 0167 #endif // KALZIUMNUMERATIONTYPE_H