Engauge Digitizer  2
FormatCoordsUnitsStrategyNonPolarTheta.cpp
1 #include "EngaugeAssert.h"
2 #include "FormatCoordsUnitsStrategyNonPolarTheta.h"
3 #include "FormatDateTime.h"
4 #include "FormatDegreesMinutesSecondsNonPolarTheta.h"
5 #include "Logger.h"
6 #include "Transformation.h"
7 
9 {
10 }
11 
13  CoordUnitsNonPolarTheta coordUnits,
14  CoordUnitsDate coordUnitsDate,
15  CoordUnitsTime coordUnitsTime) const
16 {
17  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::formattedToUnformatted";
18 
19  double value;
20 
21  switch (coordUnits) {
22  case COORD_UNITS_NON_POLAR_THETA_DATE_TIME:
23  {
24  FormatDateTime format;
25  ENGAUGE_ASSERT (format.parseInput (coordUnitsDate,
26  coordUnitsTime,
27  string,
28  value) == QValidator::Acceptable);
29  }
30  break;
31 
32  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS:
33  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW:
34  {
36  ENGAUGE_ASSERT (format.parseInput (string,
37  value) == QValidator::Acceptable);
38  }
39  break;
40 
41  case COORD_UNITS_NON_POLAR_THETA_NUMBER:
42  value = string.toDouble ();
43  break;
44 
45  default:
46  LOG4CPP_ERROR_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::formattedToFormatted";
47  ENGAUGE_ASSERT (false);
48  break;
49  }
50 
51  return value;
52 }
53 
55  CoordUnitsNonPolarTheta coordUnits,
56  CoordUnitsDate coordUnitsDate,
57  CoordUnitsTime coordUnitsTime,
58  bool isXTheta,
59  const Transformation &transformation,
60  double valueUnformattedOther) const
61 {
62  LOG4CPP_DEBUG_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::unformattedToFormatted";
63 
64  const char FORMAT ('g');
65 
66  QString valueFormatted;
67 
68  switch (coordUnits) {
69  case COORD_UNITS_NON_POLAR_THETA_DATE_TIME:
70  {
71  FormatDateTime format;
72  valueFormatted = format.formatOutput (coordUnitsDate,
73  coordUnitsTime,
74  valueUnformatted);
75  }
76  break;
77 
78  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS:
79  case COORD_UNITS_NON_POLAR_THETA_DEGREES_MINUTES_SECONDS_NSEW:
80  {
82  valueFormatted = format.formatOutput (coordUnits,
83  valueUnformatted,
84  isXTheta);
85  }
86  break;
87 
88  case COORD_UNITS_NON_POLAR_THETA_NUMBER:
89  valueFormatted = QString::number (valueUnformatted,
90  FORMAT,
91  precisionDigitsForRawNumber (valueUnformatted,
92  valueUnformattedOther,
93  isXTheta,
94  transformation));
95  break;
96 
97  default:
98  LOG4CPP_ERROR_S ((*mainCat)) << "FormatCoordsUnitsStrategyNonPolarTheta::unformattedToFormatted";
99  ENGAUGE_ASSERT (false);
100  break;
101  }
102 
103  return valueFormatted;
104 }
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.
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.
QString unformattedToFormatted(double valueUnformatted, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime, bool isXTheta, const Transformation &transformation, double valueUnformattedOther) const
Convert simple unformatted number to formatted string.
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, CoordUnitsNonPolarTheta coordUnits, CoordUnitsDate coordUnitsDate, CoordUnitsTime coordUnitsTime) const
Convert formatted string to simple unformatted number.
Input parsing and output formatting for date/time values.