![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2008 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: unitDisplayManager.h,v $ $Revision: 1.3 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef UNITDISPLAYMANAGER_H_ 00013 #define UNITDISPLAYMANAGER_H_ 00014 00015 #include "drawerNative/drawerNativeDefines.h" 00016 #include "archiver/archivableObject.h" 00017 #include "tdbutil/tdbUnits.h" 00018 #include "drawerNative/unitDisplay.h" 00019 00020 #include <QtCore/QObject> 00021 #include <QtCore/QStringList> 00022 #include <QtCore/QVector> 00023 #include <QtCore/QHash> 00024 00025 class DtUnitConverterFactory; 00026 00030 00038 00039 typedef QHash<QString, DtUnitDisplay*> DtUnitDisplayDict; 00040 typedef QHash<QString, double> DtGridLineChoiceMap; 00041 00042 class DT_DLL_drawerNative DtUnitDisplayManager : public DtArchivableObject 00043 { 00044 Q_OBJECT 00045 00046 public: 00047 00049 DtUnitDisplayManager(const DtUnitConverterFactory*); 00050 00052 virtual ~DtUnitDisplayManager(); 00053 00055 DtUnitDisplayManager(const DtUnitDisplayManager& orig); 00056 00058 virtual DtUnitDisplayManager& operator=(const DtUnitDisplayManager& rhs); 00059 00060 virtual bool init(); 00061 00062 public: 00063 static DtUnitDisplayManager* create(const DtUnitConverterFactory*); 00064 const DtUnitConverterFactory* unitConverterFactory() const; 00065 00066 public: 00070 virtual bool addUnitToDisplay(const QString& unitDisplay, const QString& unit, int precision = 3, bool addTimeUnits = false); 00071 00073 virtual bool addUnitToAllDisplay(const QString& unit, int precision = 3, bool addTimeUnits = false); 00074 00076 virtual void addUnitDisplay(const QString& newUnit, const QString& basedOn, const QString& externalName); 00077 00080 virtual void addGridLineChoices(double start, int steps, const QString& source, const QString& title, 00081 const QString& convertSource, const QString& convertDestination); 00082 00083 public: 00087 virtual void addUnitDisplay(const QString& internalName, const QString& externalName, 00088 const QStringList& supportedUnits, const QVector<int>& defaultPrecision = QVector<int>()); 00089 00090 virtual void removeDisplayUnit(const QString& internalName); 00091 00092 virtual QString displayingUnitsFor(const QString& displayUnit) const; 00093 00095 virtual void setDisplayingUnitsFor(const QString& displayUnit, const QString& unit, bool signal = true); 00096 00097 virtual int precisionFor(const QString& displayUnit, const QString& unit) const; 00098 00100 virtual int precisionForDisplay(const QString& displayUnit) const; 00101 00103 virtual void setPrecisionFor(const QString& displayUnit, const QString& unit, int precision, bool signal = true); 00104 00106 virtual QString formatToPrecision(double val, const QString& displayUnit, const QString& unit) const; 00107 00109 virtual DtUnitDisplayManager* clone() const; 00110 00111 int count() const; 00112 virtual DtUnitDisplay unitDisplay(int) const; 00113 virtual QString internalName(int) const; 00114 00116 virtual int displayIndexOf(const QString& internalName) const; 00117 virtual void setDisplayIndex(const QString& internalName, int i); 00118 00120 00121 virtual DtGridLineChoiceMap gridLineChoices(const QString&) const; 00122 virtual void addGridLineChoice(const QString& unit, const QString& title, double frequency); 00123 virtual void removeGridLineChoice(const QString& unit, const QString& title); 00124 00126 virtual void restoreDefaults(); 00127 00128 virtual bool operator==(const DtUnitDisplayManager&) const; 00129 bool operator!=(const DtUnitDisplayManager&) const; 00130 00131 public: 00134 virtual QString formatSourceToDestination(double val, const QString& unitDisplay, const QString& source, 00135 const QString& destination) const; 00136 00138 virtual QString formatSourceToDisplay(double val, const QString& unitDisplay, 00139 const QString& source) const; 00140 00142 virtual QString formatDestinationToSource(double val, const QString& unitDisplay, 00143 const QString& source, const QString& destination) const; 00144 00146 virtual QString formatDisplayToSource(double val, const QString& unitDisplay, 00147 const QString& source) const; 00148 00150 virtual double convertSourceToDisplay(double val, const QString& unitDisplay, const QString& source) const; 00151 00153 virtual double convertDisplayToSource(double val, const QString& unitDisplay, const QString& source) const; 00154 00156 virtual double convertSourceToDestination(double val, const QString& source, const QString& destination) const; 00157 00159 virtual double convertDestinationToSource(double val, const QString& source, const QString& destination) const; 00160 00161 signals: 00162 void unitDisplayChanged(const QString& unitDisplay, const QString& oldValue, const QString& newValue); 00163 00165 void unitDisplayChanged(const DtUnitDisplayManager*); 00166 00167 public: 00170 virtual QString unitLabel(const QString& unitDisplay) const; 00171 00172 protected: 00173 virtual void copyDisplayUnits(const DtUnitDisplayDict&); 00174 virtual void cleanupUnitDisplay(DtUnitDisplayDict&); 00175 virtual void read(QTextStream& ts); 00176 virtual void write(QTextStream& ts); 00177 virtual void initGridLineChoices(); 00178 00179 protected: 00180 const DtUnitConverterFactory* myUnitConverterFactory; 00181 DtUnitDisplayDict myDisplayUnits; 00182 QHash<QString, DtGridLineChoiceMap> myGridLineChoices; 00183 00186 DtUnitDisplayManager* myDefaults; 00187 }; 00188 00189 inline const DtUnitConverterFactory* DtUnitDisplayManager::unitConverterFactory() const 00190 { 00191 return myUnitConverterFactory; 00192 } 00193 00194 inline bool DtUnitDisplay::operator!=(const DtUnitDisplay& rhs) const 00195 { 00196 return !(*this == rhs); 00197 } 00198 00199 inline bool DtUnitDisplayManager::operator!=(const DtUnitDisplayManager& rhs) const 00200 { 00201 return !(*this == rhs); 00202 } 00203 00204 #endif