Browse Source

Work in progress. Do not mess with this branch.

Neal Wilson 11 years ago
parent
commit
cfdb23e557
3 changed files with 111 additions and 197 deletions
  1. 33
    31
      src/Typica.pro
  2. 65
    160
      src/typica.w
  3. 13
    6
      src/units.w

+ 33
- 31
src/Typica.pro View File

1
-######################################################################
2
-# Automatically generated by qmake (2.01a) Sat May 23 23:41:13 2009
3
-######################################################################
4
-
5
-QT += script
6
-QT += xml
7
-QT += sql
8
-QT += xmlpatterns
9
-QT += scripttools
10
-QT += webkit
11
-
12
-include(3rdparty/qextserialport/src/qextserialport.pri)
13
-
14
-TEMPLATE = app
15
-TARGET =
16
-DEPENDPATH += .
17
-
18
-# Input
19
-HEADERS += moc_typica.cpp \
20
-    helpmenu.h \
21
-    abouttypica.h
22
-SOURCES += typica.cpp \
23
-    helpmenu.cpp \
24
-    abouttypica.cpp
25
-
26
-RESOURCES += \
27
-    resources.qrc
28
-
29
-RC_FILE = typica.rc
30
-ICON = resources/icons/appicons/logo.icns
31
-QMAKE_INFO_PLIST = resources/Info.plist
1
+######################################################################
2
+# Automatically generated by qmake (2.01a) Sat May 23 23:41:13 2009
3
+######################################################################
4
+
5
+QT += script
6
+QT += xml
7
+QT += sql
8
+QT += xmlpatterns
9
+QT += scripttools
10
+QT += webkit
11
+
12
+include(3rdparty/qextserialport/src/qextserialport.pri)
13
+
14
+TEMPLATE = app
15
+TARGET =
16
+DEPENDPATH += .
17
+
18
+# Input
19
+HEADERS += moc_typica.cpp \
20
+    helpmenu.h \
21
+    abouttypica.h \
22
+    units.h
23
+SOURCES += typica.cpp \
24
+    helpmenu.cpp \
25
+    abouttypica.cpp \
26
+    units.cpp
27
+
28
+RESOURCES += \
29
+    resources.qrc
30
+
31
+RC_FILE = typica.rc
32
+ICON = resources/icons/appicons/logo.icns
33
+QMAKE_INFO_PLIST = resources/Info.plist

+ 65
- 160
src/typica.w View File

5705
 
5705
 
5706
 @i units.w
5706
 @i units.w
5707
 
5707
 
5708
+@ We will require the |units.h| header.
5709
+
5710
+@<Header files to include@>=
5711
+#include "units.h"
5712
+
5708
 @ The declaration of |Measurement| is reasonably straightforward. Measurements
5713
 @ The declaration of |Measurement| is reasonably straightforward. Measurements
5709
 will often be passed around to a number of different objects through the signals
5714
 will often be passed around to a number of different objects through the signals
5710
 and slots mechanism of Qt. The simplest way to make this work is to provide a
5715
 and slots mechanism of Qt. The simplest way to make this work is to provide a
5718
 @<Class declarations@>=
5723
 @<Class declarations@>=
5719
 class Measurement@/
5724
 class Measurement@/
5720
 {
5725
 {
5721
-	public:@/
5722
-		enum TemperatureUnits
5723
-		{
5724
-			Fahrenheit = 10144,
5725
-			Celsius = 10143,
5726
-			Kelvin = 10325,
5727
-			Rankine = 10145
5728
-		};
5729
-	private:@/
5730
-		double theTemperature;
5731
-		QTime theTime;
5732
-		TemperatureUnits unit;
5733
 	public:@;
5726
 	public:@;
5734
 		Measurement(double temperature = 0, QTime time = QTime(),@|
5727
 		Measurement(double temperature = 0, QTime time = QTime(),@|
5735
-		            TemperatureUnits sc = Fahrenheit);
5728
+		            Units::Unit sc = Units::Fahrenheit);
5736
 		Measurement(double temperature);
5729
 		Measurement(double temperature);
5737
 		Measurement(const Measurement &x);
5730
 		Measurement(const Measurement &x);
5738
 		Measurement& operator=(Measurement &x);
5731
 		Measurement& operator=(Measurement &x);
5741
 		QTime time() const;
5734
 		QTime time() const;
5742
 		void setTemperature(double temperature);
5735
 		void setTemperature(double temperature);
5743
 		void setTime(QTime time);
5736
 		void setTime(QTime time);
5744
-		void setUnit(TemperatureUnits scale);
5745
-		TemperatureUnits scale();
5737
+		void setUnit(Units::Unit scale);
5738
+		Units::Unit scale();
5746
 		Measurement toFahrenheit();
5739
 		Measurement toFahrenheit();
5747
 		Measurement toCelsius();
5740
 		Measurement toCelsius();
5748
 		Measurement toKelvin();
5741
 		Measurement toKelvin();
5749
 		Measurement toRankine();
5742
 		Measurement toRankine();
5743
+	private:@/
5744
+		double theTemperature;
5745
+		QTime theTime;
5746
+		Units::Unit unit;
5750
 };
5747
 };
5751
 
5748
 
5752
 @ There are two constructors that can create |Measurement| objects. The
5749
 @ There are two constructors that can create |Measurement| objects. The
5757
 
5754
 
5758
 @<Measurement implementation@>=
5755
 @<Measurement implementation@>=
5759
 Measurement::Measurement(double temperature, QTime time,
5756
 Measurement::Measurement(double temperature, QTime time,
5760
-                         TemperatureUnits sc) :@;
5757
+                         Units::Unit sc) :@;
5761
 	@t\kern2em@>theTemperature(temperature), theTime(time), unit(sc)@;
5758
 	@t\kern2em@>theTemperature(temperature), theTime(time), unit(sc)@;
5762
 {
5759
 {
5763
 	/* Nothing has to be done here. */
5760
 	/* Nothing has to be done here. */
5765
 
5762
 
5766
 Measurement::Measurement(double temperature) :@;
5763
 Measurement::Measurement(double temperature) :@;
5767
 	@t\kern2em@>theTemperature(temperature), theTime(QTime::currentTime()),
5764
 	@t\kern2em@>theTemperature(temperature), theTime(QTime::currentTime()),
5768
-	unit(Fahrenheit)@;
5765
+	unit(Units::Fahrenheit)@;
5769
 {
5766
 {
5770
 	/* Nothing has to be done here. */
5767
 	/* Nothing has to be done here. */
5771
 }@;
5768
 }@;
5840
 method.
5837
 method.
5841
 
5838
 
5842
 @<Measurement implementation@>=
5839
 @<Measurement implementation@>=
5843
-void Measurement::setUnit(TemperatureUnits scale)
5840
+void Measurement::setUnit(Units::Unit scale)
5844
 {
5841
 {
5845
 	unit = scale;
5842
 	unit = scale;
5846
 }
5843
 }
5847
 
5844
 
5848
-Measurement::TemperatureUnits Measurement::scale()
5845
+Units::Unit Measurement::scale()
5849
 {
5846
 {
5850
 	return unit;
5847
 	return unit;
5851
 }
5848
 }
5852
 
5849
 
5853
 @ Four methods create a new |Measurement| from the object the method is called
5850
 @ Four methods create a new |Measurement| from the object the method is called
5854
-on representing the same measurement expressed in different units. The
5855
-conversion formul\ae{} come from Wikipedia.\nfnote{%
5856
-\pdfURL{Temperature Conversion}{%
5857
-http://en.wikipedia.org/%
5858
-w/index.php?title=Temperature_conversion&oldid=226047163}}
5859
-
5860
-The |toFahrenheit()| method converts a measurement to Fahrenheit.
5851
+on representing the same measurement expressed in different units. The value
5852
+conversions are handled in the |Units| class.
5861
 
5853
 
5862
 @<Measurement implementation@>=
5854
 @<Measurement implementation@>=
5863
 Measurement Measurement::toFahrenheit()
5855
 Measurement Measurement::toFahrenheit()
5864
 {
5856
 {
5865
-	switch(unit)
5866
-	{
5867
-		case Celsius:
5868
-			return Measurement(this->temperature() * 9 / 5 + 32, this->time(),
5869
-			                   Fahrenheit);
5870
-			break;
5871
-		case Kelvin:
5872
-			return Measurement(this->temperature() * 5 / 9 - 459.67,
5873
-			                   this->time(), Fahrenheit);
5874
-			break;
5875
-		case Rankine:
5876
-			return Measurement(this->temperature() - 459.67, this->time(),
5877
-			                   Fahrenheit);
5878
-			break;
5879
-		default:
5880
-			return Measurement(this->temperature(), this->time(), Fahrenheit);
5881
-			break;
5882
-	}
5857
+	return Measurement(Units::convertTemperature(this->temperature(),
5858
+	                                             this->unit, Units::Fahrenheit),
5859
+	                   this->time(), Units::Fahrenheit);
5883
 }
5860
 }
5884
 
5861
 
5885
-@ Similarly, the following converts to Celsius.
5886
-
5887
-@<Measurement implementation@>=
5888
 Measurement Measurement::toCelsius()
5862
 Measurement Measurement::toCelsius()
5889
 {
5863
 {
5890
-	switch(unit)
5891
-	{
5892
-		case Fahrenheit:
5893
-			return Measurement((this->temperature() - 32) * 5 / 9, this->time(),
5894
-			                   Celsius);
5895
-			break;
5896
-		case Kelvin:
5897
-			return Measurement(this->temperature() - 273.15, this->time(),
5898
-			                   Celsius);
5899
-			break;
5900
-		case Rankine:
5901
-			return Measurement((this->temperature() - 491.67) * 5 / 9,
5902
-			                   this->time(), Celsius);
5903
-			break;
5904
-		default:
5905
-			return Measurement(this->temperature(), this->time(), Celsius);
5906
-			break;
5907
-	}
5864
+	return Measurement(Units::convertTemperature(this->temperature(),
5865
+	                                             this->unit, Units::Celsius),
5866
+	                   this->time(), Units::Celsius);
5908
 }
5867
 }
5909
 
5868
 
5910
-@ For those who prefer absolute scales, a method is provided to convert to
5911
-Kelvin.
5912
-
5913
-@<Measurement implementation@>=
5914
 Measurement Measurement::toKelvin()
5869
 Measurement Measurement::toKelvin()
5915
 {
5870
 {
5916
-	switch(unit)
5917
-	{
5918
-		case Fahrenheit:
5919
-			return Measurement((this->temperature() + 459.67) * 5 / 9,
5920
-			                   this->time(), Kelvin);
5921
-			break;
5922
-		case Celsius:
5923
-			return Measurement(this->temperature() + 273.15, this->time(),
5924
-			                   Kelvin);
5925
-			break;
5926
-		case Rankine:
5927
-			return Measurement(this->temperature() * 5 / 9, this->time(),
5928
-			                   Kelvin);
5929
-			break;
5930
-		default:
5931
-			return Measurement(this->temperature(), this->time(), Kelvin);
5932
-			break;
5933
-	}
5871
+	return Measurement(Units::convertTemperature(this->temperature(),
5872
+	                                             this->unit, Units::Kelvin),
5873
+	                   this->time(), Units::Kelvin);
5934
 }
5874
 }
5935
 
5875
 
5936
-@ Finally, conversion to Rankine is also allowed.
5937
-
5938
-@<Measurement implementation@>=
5939
 Measurement Measurement::toRankine()
5876
 Measurement Measurement::toRankine()
5940
 {
5877
 {
5941
-	switch(unit)
5942
-	{
5943
-		case Fahrenheit:
5944
-			return Measurement(this->temperature() + 459.67, this->time(),
5945
-			                   Rankine);
5946
-			break;
5947
-		case Celsius:
5948
-			return Measurement((this->temperature() + 273.15) * 9 / 5,
5949
-			                   this->time(), Rankine);
5950
-			break;
5951
-		case Kelvin:
5952
-			return Measurement(this->temperature() * 9 / 5, this->time(),
5953
-			                   Rankine);
5954
-			break;
5955
-		default:
5956
-			return Measurement(this->temperature(), this->time(), Rankine);
5957
-			break;
5958
-	}
5878
+	return Measurement(Units::convertTemperature(this->temperature(),
5879
+	                                             this->unit, Units::Rankine),
5880
+	                   this->time(), Units::Rankine);
5959
 }
5881
 }
5960
 
5882
 
5961
 @** The Main Measurement Pipeline.
5883
 @** The Main Measurement Pipeline.
6024
 class DAQ : public QObject@;@/
5946
 class DAQ : public QObject@;@/
6025
 {@t\1@>@/
5947
 {@t\1@>@/
6026
 	Q_OBJECT@/
5948
 	Q_OBJECT@/
6027
-	Q_ENUMS(TemperatureUnits)@/
6028
 	Q_ENUMS(ThermocoupleType)@;@/
5949
 	Q_ENUMS(ThermocoupleType)@;@/
6029
 	DAQImplementation *imp;@/
5950
 	DAQImplementation *imp;@/
6030
 	@t\4@>private slots@t\kern-3pt@>:@/
5951
 	@t\4@>private slots@t\kern-3pt@>:@/
6036
 		@[Q_INVOKABLE@,@, void@]@, setClockRate(double Hz);@t\2\2@>@/
5957
 		@[Q_INVOKABLE@,@, void@]@, setClockRate(double Hz);@t\2\2@>@/
6037
 		@[Q_INVOKABLE@,@, void@]@, start();@t\2\2@>@/
5958
 		@[Q_INVOKABLE@,@, void@]@, start();@t\2\2@>@/
6038
 		@[Q_INVOKABLE@]@, void stop();
5959
 		@[Q_INVOKABLE@]@, void stop();
6039
-		enum TemperatureUnits@/
6040
-		{
6041
-			@!Fahrenheit = 10144,
6042
-			@!Celsius = 10143,
6043
-			@!Kelvin = 10325,
6044
-			@!Rankine = 10145
6045
-		};
6046
 		enum ThermocoupleType@/
5960
 		enum ThermocoupleType@/
6047
 		{
5961
 		{
6048
 			@!TypeJ = 10072,
5962
 			@!TypeJ = 10072,
6108
 int channels;
6022
 int channels;
6109
 bool ready;
6023
 bool ready;
6110
 QLibrary driver;
6024
 QLibrary driver;
6111
-QVector<Measurement::TemperatureUnits> unitMap;
6025
+QVector<Units::Unit> unitMap;
6112
 
6026
 
6113
 @ Most of the interesting work associated with the |DAQ| class is handled in
6027
 @ Most of the interesting work associated with the |DAQ| class is handled in
6114
 the |measure()| method of |DAQImplementation|. This function will block until a
6028
 the |measure()| method of |DAQImplementation|. This function will block until a
6331
 {
6245
 {
6332
 	Channel *retval = new Channel();
6246
 	Channel *retval = new Channel();
6333
 	imp->channelMap[imp->channels] = retval;
6247
 	imp->channelMap[imp->channels] = retval;
6334
-	imp->unitMap[imp->channels] = (Measurement::TemperatureUnits)units;
6248
+	imp->unitMap[imp->channels] = (Units::Unit)units;
6335
 	imp->channels++;
6249
 	imp->channels++;
6336
 	if(imp->ready)
6250
 	if(imp->ready)
6337
 	{
6251
 	{
7179
 class TemperatureDisplay : public QLCDNumber@/
7093
 class TemperatureDisplay : public QLCDNumber@/
7180
 {@t\1@>@/
7094
 {@t\1@>@/
7181
 	Q_OBJECT@;
7095
 	Q_OBJECT@;
7182
-	Q_ENUMS(DisplayUnits)
7183
 	int unit;
7096
 	int unit;
7184
 	public:@/
7097
 	public:@/
7185
-		enum DisplayUnits
7186
-		{
7187
-			Auto = -1,
7188
-			Fahrenheit = 10144,
7189
-			Celsius = 10143,
7190
-			Kelvin = 10325,
7191
-			Rankine = 10145
7192
-		};
7193
 		TemperatureDisplay(QWidget *parent = NULL);
7098
 		TemperatureDisplay(QWidget *parent = NULL);
7194
 		~TemperatureDisplay();@/
7099
 		~TemperatureDisplay();@/
7195
 	@t\4@>public slots@t\kern-3pt@>:@/
7100
 	@t\4@>public slots@t\kern-3pt@>:@/
7196
 		void setValue(Measurement temperature);
7101
 		void setValue(Measurement temperature);
7197
 		void invalidate();
7102
 		void invalidate();
7198
-		void setDisplayUnits(DisplayUnits scale);@t\2@>@/
7103
+		void setDisplayUnits(Units::Unit scale);@t\2@>@/
7199
 };
7104
 };
7200
 
7105
 
7201
 @ Displaying a temperature is a simple matter of taking the temperature
7106
 @ Displaying a temperature is a simple matter of taking the temperature
7215
 	QString number;
7120
 	QString number;
7216
 	switch(unit)
7121
 	switch(unit)
7217
 	{
7122
 	{
7218
-		case Auto:
7219
-			switch(temperature.scale())
7220
-			{
7221
-				case Fahrenheit:
7222
-					display(QString("%1'F").
7223
-						arg(number.setNum(temperature.temperature(), 'f', 2)));
7224
-					break;
7225
-				case Celsius:
7226
-					display(QString("%1'C").
7227
-						arg(number.setNum(temperature.temperature(), 'f', 2)));
7228
-					break;
7229
-				case Kelvin:
7230
-					display(QString("%1").
7231
-						arg(number.setNum(temperature.temperature(), 'f', 2)));
7232
-					break;
7233
-				case Rankine:
7234
-					display(QString("%1'r").
7235
-						arg(number.setNum(temperature.temperature(), 'f', 2)));
7236
-					break;
7237
-			}
7238
-			break;
7239
-		case Fahrenheit:
7123
+		case Units::Fahrenheit:
7240
 			display(QString("%1'F").
7124
 			display(QString("%1'F").
7241
 				arg(number.setNum(temperature.toFahrenheit().temperature(), 'f',
7125
 				arg(number.setNum(temperature.toFahrenheit().temperature(), 'f',
7242
 				                  2)));
7126
 				                  2)));
7243
 			break;
7127
 			break;
7244
-		case Celsius:
7128
+		case Units::Celsius:
7245
 			display(QString("%1'C").
7129
 			display(QString("%1'C").
7246
 				arg(number.setNum(temperature.toCelsius().temperature(), 'f',
7130
 				arg(number.setNum(temperature.toCelsius().temperature(), 'f',
7247
 				                  2)));
7131
 				                  2)));
7248
 			break;
7132
 			break;
7249
-		case Kelvin:
7133
+		case Units::Kelvin:
7250
 			display(QString("%1").
7134
 			display(QString("%1").
7251
 				arg(number.setNum(temperature.toKelvin().temperature(), 'f',
7135
 				arg(number.setNum(temperature.toKelvin().temperature(), 'f',
7252
 				                  2)));
7136
 				                  2)));
7253
 			break;
7137
 			break;
7254
-		case Rankine:
7138
+		case Units::Rankine:
7255
 			display(QString("%1'r").
7139
 			display(QString("%1'r").
7256
 				arg(number.setNum(temperature.toRankine().temperature(), 'f',
7140
 				arg(number.setNum(temperature.toRankine().temperature(), 'f',
7257
 				                  2)));
7141
 				                  2)));
7258
 			break;
7142
 			break;
7143
+		default:
7144
+			switch(temperature.scale())
7145
+			{
7146
+				case Units::Fahrenheit:
7147
+					display(QString("%1'F").
7148
+						arg(number.setNum(temperature.temperature(), 'f', 2)));
7149
+					break;
7150
+				case Units::Celsius:
7151
+					display(QString("%1'C").
7152
+						arg(number.setNum(temperature.temperature(), 'f', 2)));
7153
+					break;
7154
+				case Units::Kelvin:
7155
+					display(QString("%1").
7156
+						arg(number.setNum(temperature.temperature(), 'f', 2)));
7157
+					break;
7158
+				case Units::Rankine:
7159
+					display(QString("%1'r").
7160
+						arg(number.setNum(temperature.temperature(), 'f', 2)));
7161
+					break;
7162
+			}
7163
+			break;
7259
 	}
7164
 	}
7260
 }
7165
 }
7261
 
7166
 
7271
 
7176
 
7272
 @<TemperatureDisplay Implementation@>=
7177
 @<TemperatureDisplay Implementation@>=
7273
 TemperatureDisplay::TemperatureDisplay(QWidget *parent) :
7178
 TemperatureDisplay::TemperatureDisplay(QWidget *parent) :
7274
-	QLCDNumber(8, parent), unit(Auto)@/
7179
+	QLCDNumber(8, parent), unit(Units::Fahrenheit)@/
7275
 {
7180
 {
7276
 	setSegmentStyle(Filled);
7181
 	setSegmentStyle(Filled);
7277
 	display("---.--'F");
7182
 	display("---.--'F");
7298
 prior to display.
7203
 prior to display.
7299
 
7204
 
7300
 @<TemperatureDisplay Implementation@>=
7205
 @<TemperatureDisplay Implementation@>=
7301
-void TemperatureDisplay::setDisplayUnits(DisplayUnits scale)
7206
+void TemperatureDisplay::setDisplayUnits(Units::Unit scale)
7302
 {
7207
 {
7303
 	unit = scale;
7208
 	unit = scale;
7304
 }
7209
 }
17306
 	pvOut = pvOut * 9 / 5 + 32;
17211
 	pvOut = pvOut * 9 / 5 + 32;
17307
 	svOut = svOut * 9 / 5 + 32;
17212
 	svOut = svOut * 9 / 5 + 32;
17308
 }
17213
 }
17309
-Measurement pvm(pvOut, time, Measurement::Fahrenheit);
17310
-Measurement svm(svOut, time, Measurement::Fahrenheit);
17214
+Measurement pvm(pvOut, time, Units::Fahrenheit);
17215
+Measurement svm(svOut, time, Units::Fahrenheit);
17311
 channels.at(0)->input(pvm);
17216
 channels.at(0)->input(pvm);
17312
 channels.at(1)->input(svm);
17217
 channels.at(1)->input(svm);
17313
 
17218
 
17331
 }
17236
 }
17332
 if(!svenabled)
17237
 if(!svenabled)
17333
 {
17238
 {
17334
-	Measurement vm(valueOut, time, Measurement::Fahrenheit);
17239
+	Measurement vm(valueOut, time, Units::Fahrenheit);
17335
 	channels.at(0)->input(vm);
17240
 	channels.at(0)->input(vm);
17336
 }
17241
 }
17337
 else
17242
 else
17338
 {
17243
 {
17339
 	if(readingsv)
17244
 	if(readingsv)
17340
 	{
17245
 	{
17341
-		Measurement pvm(savedpv, time, Measurement::Fahrenheit);
17342
-		Measurement svm(valueOut, time, Measurement::Fahrenheit);
17246
+		Measurement pvm(savedpv, time, Units::Fahrenheit);
17247
+		Measurement svm(valueOut, time, Units::Fahrenheit);
17343
 		channels.at(0)->input(pvm);
17248
 		channels.at(0)->input(pvm);
17344
 		channels.at(1)->input(svm);
17249
 		channels.at(1)->input(svm);
17345
 		readingsv = false;
17250
 		readingsv = false;

+ 13
- 6
src/units.w View File

6
 there are some convenience methods for working with unit data.
6
 there are some convenience methods for working with unit data.
7
 
7
 
8
 @(units.h@>=
8
 @(units.h@>=
9
+#include <QObject>
10
+
11
+#ifndef TypicaUnitsIncluded
12
+#define TypicaUnitsIncluded
13
+
9
 class Units: public QObject
14
 class Units: public QObject
10
 {
15
 {
11
 	Q_OBJECT
16
 	Q_OBJECT
12
-	Q_ENUMS(Units)
17
+	Q_ENUMS(Unit)
13
 	public:
18
 	public:
14
-		enum Units
19
+		enum Unit
15
 		{
20
 		{
16
 			Fahrenheit = 10144,
21
 			Fahrenheit = 10144,
17
 			Celsius = 10143,
22
 			Celsius = 10143,
18
 			Kelvin = 10325,
23
 			Kelvin = 10325,
19
 			Rankine = 10145
24
 			Rankine = 10145
20
 		};
25
 		};
21
-		double convertTemperature(double value, Unit fromUnit, Unit toUnit);
22
-		bool isTemperatureUnit(Unit unit);
23
-}
26
+		static double convertTemperature(double value, Unit fromUnit, Unit toUnit);
27
+		static bool isTemperatureUnit(Unit unit);
28
+};
29
+
30
+#endif
24
 
31
 
25
 @ Methods are implemented in a separate file.
32
 @ Methods are implemented in a separate file.
26
 
33
 
27
 @(units.cpp@>=
34
 @(units.cpp@>=
28
-#inculde "units.h"
35
+#include "units.h"
29
 #include "moc_units.cpp"
36
 #include "moc_units.cpp"
30
 
37
 
31
 @ The |isTemperatureUnit()| method may seem counter-intuitive while the enum
38
 @ The |isTemperatureUnit()| method may seem counter-intuitive while the enum

Loading…
Cancel
Save