mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
profile: unify formating of axis labels
Instead of a host of virtual functions, let the base class (DiveCartesianAxis) do the formatting of the axis labels. To do so, it needs to know how to convert the internal representation (e.g. mm) into the displayed value (e.g. feet). Moreover, this transformation has to be adapted when changing the locale-setting, therefore do it for every plot() call. The transformation itself cannot be a simple linear translation, because we have non-absolute display units, namely °C and °F. Thankfully affine transformations are enough though. Only one custom formatter remains: the time axis. It might be a good idea to remove the virtual function and do this via a flag. This is all done not so much for code simplification, but because for a general layout of the axis labels, the axis has to understand the values of the labels and not only handle them as opaque texts. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
0e9eee0a7f
commit
177df72d33
3 changed files with 63 additions and 18 deletions
|
|
@ -32,10 +32,12 @@ public:
|
|||
enum class Position {
|
||||
Left, Right, Bottom
|
||||
};
|
||||
|
||||
DiveCartesianAxis(Position position, int integralDigits, int fractionalDigits, color_index_t gridColor, double dpr,
|
||||
double labelScale, bool printMode, bool isGrayscale, ProfileScene &scene);
|
||||
~DiveCartesianAxis();
|
||||
void setBounds(double min, double max);
|
||||
void setTransform(double a, double b = 0.0);
|
||||
void setTickInterval(double interval);
|
||||
void setOrientation(Orientation orientation);
|
||||
double minimum() const;
|
||||
|
|
@ -56,6 +58,7 @@ signals:
|
|||
|
||||
protected:
|
||||
Position position;
|
||||
int fractionalDigits;
|
||||
QRectF rect; // Rectangle to fill with grid lines
|
||||
QPen gridPen;
|
||||
color_index_t gridColor;
|
||||
|
|
@ -74,6 +77,16 @@ protected:
|
|||
bool changed;
|
||||
double dpr;
|
||||
double labelWidth, labelHeight; // maximum expected sizes of label width and height
|
||||
|
||||
// To format the labels and choose the label positions, the
|
||||
// axis has to be aware of the displayed values. Thankfully,
|
||||
// the conversion between internal data (eg. mm) and displayed
|
||||
// data (e.g. ft) can be represented by an affine map ax+b.
|
||||
struct Transform {
|
||||
double a, b;
|
||||
double to(double x) const;
|
||||
double from(double y) const;
|
||||
} transform;
|
||||
};
|
||||
|
||||
class DepthAxis : public DiveCartesianAxis {
|
||||
|
|
@ -81,7 +94,6 @@ class DepthAxis : public DiveCartesianAxis {
|
|||
public:
|
||||
using DiveCartesianAxis::DiveCartesianAxis;
|
||||
private:
|
||||
QString textForValue(double value) const override;
|
||||
QColor colorForValue(double value) const override;
|
||||
};
|
||||
|
||||
|
|
@ -99,8 +111,6 @@ class TemperatureAxis : public DiveCartesianAxis {
|
|||
Q_OBJECT
|
||||
public:
|
||||
using DiveCartesianAxis::DiveCartesianAxis;
|
||||
private:
|
||||
QString textForValue(double value) const override;
|
||||
};
|
||||
|
||||
class PartialGasPressureAxis : public DiveCartesianAxis {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue