Engauge Digitizer  2
 All Classes Files Functions Variables Enumerations Enumerator Friends Pages
FormatCoordsUnitsStrategyNonPolarTheta.cpp
1 #include "EngaugeAssert.h"
2 #include "FormatCoordsUnitsStrategyNonPolarTheta.h"
3 #include "FormatDateTime.h"
4 #include "FormatDegreesMinutesSecondsNonPolarTheta.h"
5 #include "Logger.h"
6 #include <QLocale>
7 #include "Transformation.h"
8 
10 {
11 }
12 
14  const QLocale &locale,
15  CoordUnitsNonPolarTheta coordUnits,
16  CoordUnitsDate coordUnitsDate,
17  CoordUnitsTime coordUnitsTime) const
18 {
19  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::formattedToUnformatted";
20 
21  double value;
22 
23  switch (coordUnits) {
24  case COORD_UNITS_NON_POLAR_THETA_DATE_TIME:
25  {
26  FormatDateTime format;
27  ENGAUGE_ASSERT (format.parseInput (coordUnitsDate,
28  coordUnitsTime,
29  string,
30  value) == QValidator::Acceptable);
31  }
32  break;
33 
34  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS:
35  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW:
36  {
38  ENGAUGE_ASSERT (format.parseInput (string,
39  value) == QValidator::Acceptable);
40  }
41  break;
42 
43  case COORD_UNITS_NON_POLAR_THETA_NUMBER:
44  value = locale.toDouble (string);
45  break;
46 
47  default:
48  LOG4CPP_ERROR_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::formattedToFormatted";
49  ENGAUGE_ASSERT (false);
50  break;
51  }
52 
53  return value;
54 }
55 
57  const QLocale &locale,
58  CoordUnitsNonPolarTheta coordUnits,
59  CoordUnitsDate coordUnitsDate,
60  CoordUnitsTime coordUnitsTime,
61  bool isXTheta,
62  const Transformation &transformation,
63  double valueUnformattedOther) const
64 {
65  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::unformattedToFormatted";
66 
67  const char FORMAT ('g');
68 
69  QString valueFormatted;
70 
71  switch (coordUnits) {
72  case COORD_UNITS_NON_POLAR_THETA_DATE_TIME:
73  {
74  FormatDateTime format;
75  valueFormatted = format.formatOutput (coordUnitsDate,
76  coordUnitsTime,
77  valueUnformatted);
78  }
79  break;
80 
81  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS:
82  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW:
83  {
85  valueFormatted = format.formatOutput (coordUnits,
86  valueUnformatted,
87  isXTheta);
88  }
89  break;
90 
91  case COORD_UNITS_NON_POLAR_THETA_NUMBER:
92  valueFormatted = locale.toString (valueUnformatted,
93  FORMAT,
94  precisionDigitsForRawNumber (valueUnformatted,
95  valueUnformattedOther,
96  isXTheta,
97  transformation));
98  break;
99 
100  default:
101  LOG4CPP_ERROR_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::unformattedToFormatted";
102  ENGAUGE_ASSERT (false);
103  break;
104  }
105 
106  return valueFormatted;
107 }
QString formatOutput(CoordUnitsNonPolarTheta coordUnits, double value, bool isXTheta) const
Format the degrees/minutes/seconds value. Distinguishing x/theta versus y/radius is required for N/S/...
QValidator::State parseInput(CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime, const QString &stringUntrimmed, double &value) const
Parse the input string into a time value.
QString unformattedToFormatted(double valueUnformatted, const QLocale &locale, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime, bool isXTheta, const Transformation &transformation, double valueUnformattedOther) const
Convert simple unformatted number to formatted string.
QValidator::State parseInput(const QString &stringUntrimmed, double &value) const
Parse the input string into a number value.
Affine transformation between screen and graph coordinates, based on digitized axis points...
Angular units according to CoordUnitsNonPolarTheta.
QString formatOutput(CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime, double value) const
Format the date/time value according to date/time format settings.
int precisionDigitsForRawNumber(double valueUnformatted, double valueUnformattedOther, bool isXTheta, const Transformation &transformation) const
Compute precision for outputting an unformatted value, consistent with the resolution at the point wh...
double formattedToUnformatted(const QString &string, const QLocale &locale, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime) const
Convert formatted string to simple unformatted number.
Input parsing and output formatting for date/time values.