File indexing completed on 2024-06-16 11:34:23

0001 /***************************************************************************
0002  *   Copyright (C) 2006 David Saxton <david@bluehaze.org>                  *
0003  *                                                                         *
0004  *   This program is free software; you can redistribute it and/or modify  *
0005  *   it under the terms of the GNU General Public License as published by  *
0006  *   the Free Software Foundation; either version 2 of the License, or     *
0007  *   (at your option) any later version.                                   *
0008  ***************************************************************************/
0009 
0010 #ifndef COMPONENTMODELLIBRARY_H
0011 #define COMPONENTMODELLIBRARY_H
0012 
0013 #include <QMap>
0014 #include <QObject>
0015 #include <QStringList>
0016 
0017 typedef QMap<QString, double> DoubleMap;
0018 
0019 class ComponentModel
0020 {
0021 public:
0022     ComponentModel();
0023     ~ComponentModel();
0024 
0025     /**
0026      * Sets the description.
0027      */
0028     void setDescription(const QString &description)
0029     {
0030         m_description = description;
0031     }
0032     /**
0033      * @return A short description.
0034      */
0035     QString description() const
0036     {
0037         return m_description;
0038     }
0039     /**
0040      * @return the value of the property with the given @p name . If the
0041      * property does not exist, then the value 0.0 is returned.
0042      */
0043     double property(const QString &name) const;
0044     /**
0045      * Set the property called @p name to have the value @p value .
0046      */
0047     void setProperty(const QString &name, double value);
0048 
0049 protected:
0050     QString m_name;
0051     QString m_description;
0052     DoubleMap m_property;
0053 };
0054 
0055 typedef QMultiHash<QString, ComponentModel> ComponentModelDict;
0056 
0057 /**
0058 @author David Saxton <david@bluehaze.org>
0059 */
0060 class ComponentModelLibrary : public QObject
0061 {
0062     Q_OBJECT
0063 public:
0064     enum ModelType { None, NPN, PNP };
0065     typedef QMap<ModelType, ComponentModelDict> ComponentModelDictMap;
0066     typedef QMap<ModelType, QStringList> ModelStringListMap;
0067 
0068     /**
0069      * @return The list of IDs for the given ModelType.
0070      * @see modelNames
0071      */
0072     QStringList modelIDs(ModelType modelType) const
0073     {
0074         return m_componentModelIDs[modelType];
0075     }
0076 
0077     static ComponentModelLibrary *self();
0078     ~ComponentModelLibrary() override;
0079 
0080 protected:
0081     /**
0082      * Reads in the component models from disk.
0083      */
0084     void loadModels();
0085 
0086     ComponentModelDictMap m_componentModels;
0087     ModelStringListMap m_componentModelIDs;
0088 
0089 private:
0090     ComponentModelLibrary();
0091     static ComponentModelLibrary *m_pSelf;
0092 };
0093 
0094 #endif