mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 21:20:19 +00:00
c99089e1fa
This commit is rather big, and I forgot to cut it in pieces. The first part creates a new 'calculate_gas_information' that will not fill the profile_info->maxpp member ( that should be removed from it as soon as the new dialog is finished ). The reason for that is that all of the profile data will be calculated and the graph needs to update dynamically, so whenever the settings changes, I ask for the model which is the biggest graph and replot only the ones we need. The second part adds a new animation function 'animdelete' to fade-out and delete the item when it's done. the old function 'hide' did just that but a hide shouldn't delete anything. The third part is preferenes awareness for the PP graphs. I created two new functions that receive the settings key for visibility and use the QSettings to show / hide them. This also works quite well for the axis; if no graph is visible, the axis will also hide itself. The fourth part is colors. The pp graphs now have the correct colors. And a bit of code cleanup too. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
114 lines
2.9 KiB
C++
114 lines
2.9 KiB
C++
#ifndef DIVECARTESIANAXIS_H
|
|
#define DIVECARTESIANAXIS_H
|
|
|
|
#include <QObject>
|
|
#include <QGraphicsLineItem>
|
|
|
|
class QPropertyAnimation;
|
|
class DiveTextItem;
|
|
class DiveLineItem;
|
|
class DivePlotDataModel;
|
|
|
|
class DiveCartesianAxis : public QObject, public QGraphicsLineItem{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QLineF line WRITE setLine READ line)
|
|
Q_PROPERTY(QPointF pos WRITE setPos READ pos)
|
|
Q_PROPERTY(qreal x WRITE setX READ x)
|
|
Q_PROPERTY(qreal y WRITE setY READ y)
|
|
public:
|
|
enum Orientation{TopToBottom, BottomToTop, LeftToRight, RightToLeft};
|
|
DiveCartesianAxis();
|
|
virtual ~DiveCartesianAxis();
|
|
void setMinimum(double minimum);
|
|
void setMaximum(double maximum);
|
|
void setTickInterval(double interval);
|
|
void setOrientation(Orientation orientation);
|
|
void setTickSize(qreal size);
|
|
double minimum() const;
|
|
double maximum() const;
|
|
qreal valueAt(const QPointF& p);
|
|
qreal percentAt(const QPointF& p);
|
|
qreal posAtValue(qreal value);
|
|
void setColor(const QColor& color);
|
|
void setTextColor(const QColor& color);
|
|
void setShowTicks(bool show);
|
|
void setShowText(bool show);
|
|
void animateChangeLine(const QLineF& newLine);
|
|
int unitSystem;
|
|
public slots:
|
|
void updateTicks();
|
|
signals:
|
|
void sizeChanged();
|
|
void maxChanged();
|
|
protected:
|
|
virtual QString textForValue(double value);
|
|
virtual QColor colorForValue(double value);
|
|
Orientation orientation;
|
|
QList<DiveTextItem*> labels;
|
|
double min;
|
|
double max;
|
|
double interval;
|
|
double tickSize;
|
|
QColor textColor;
|
|
bool showTicks;
|
|
bool showText;
|
|
};
|
|
|
|
class DepthAxis : public DiveCartesianAxis {
|
|
Q_OBJECT
|
|
public:
|
|
DepthAxis();
|
|
protected:
|
|
QString textForValue(double value);
|
|
QColor colorForValue(double value);
|
|
private slots:
|
|
void settingsChanged();
|
|
};
|
|
|
|
class TimeAxis : public DiveCartesianAxis {
|
|
protected:
|
|
QString textForValue(double value);
|
|
QColor colorForValue(double value);
|
|
};
|
|
|
|
class TemperatureAxis : public DiveCartesianAxis{
|
|
Q_OBJECT
|
|
protected:
|
|
QString textForValue(double value);
|
|
};
|
|
|
|
class PartialGasPressureAxis : public DiveCartesianAxis{
|
|
Q_OBJECT
|
|
public:
|
|
PartialGasPressureAxis();
|
|
void setModel(DivePlotDataModel *model);
|
|
public slots:
|
|
void preferencesChanged();
|
|
private:
|
|
DivePlotDataModel *model;
|
|
};
|
|
|
|
// This is a try. Maybe the CartesianPlane should have the X and Y
|
|
// axis and handle things internally?
|
|
class DiveCartesianPlane :public QObject, public QGraphicsRectItem{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QLineF verticalLine READ verticalLine WRITE setVerticalLine)
|
|
Q_PROPERTY(QLineF horizontalLine READ horizontalLine WRITE setHorizontalLine)
|
|
public:
|
|
void setLeftAxis(DiveCartesianAxis *axis);
|
|
void setBottomAxis(DiveCartesianAxis *axis);
|
|
void setHorizontalLine(QLineF line);
|
|
void setVerticalLine(QLineF line);
|
|
QLineF horizontalLine() const;
|
|
QLineF verticalLine() const;
|
|
public slots:
|
|
void setup();
|
|
private:
|
|
DiveCartesianAxis *leftAxis;
|
|
DiveCartesianAxis *bottomAxis;
|
|
QList<DiveLineItem*> verticalLines;
|
|
QList<DiveLineItem*> horizontalLines;
|
|
qreal verticalSize;
|
|
qreal horizontalSize;
|
|
};
|
|
#endif
|