mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Massive automated whitespace cleanup
I know everyone will hate it. Go ahead. Complain. Call me names. At least now things are consistent and reproducible. If you want changes, have your complaint come with a patch to scripts/whitespace.pl so that we can automate it. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
006265d7a0
commit
76e6420f6b
114 changed files with 4370 additions and 3717 deletions
|
|
@ -2,37 +2,37 @@
|
|||
#include <QPropertyAnimation>
|
||||
#include <QPointF>
|
||||
|
||||
namespace Animations {
|
||||
|
||||
void hide(QObject* obj)
|
||||
namespace Animations
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(obj, "opacity");
|
||||
animation->setStartValue(1);
|
||||
animation->setEndValue(0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
|
||||
void animDelete(QObject* obj)
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(obj, "opacity");
|
||||
obj->connect(animation, SIGNAL(finished()), SLOT(deleteLater()));
|
||||
animation->setStartValue(1);
|
||||
animation->setEndValue(0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
void hide(QObject *obj)
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(obj, "opacity");
|
||||
animation->setStartValue(1);
|
||||
animation->setEndValue(0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
|
||||
void moveTo(QObject* obj, qreal x, qreal y, int msecs)
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(obj, "pos");
|
||||
animation->setDuration(msecs);
|
||||
animation->setStartValue(obj->property("pos").toPointF());
|
||||
animation->setEndValue(QPointF(x, y));
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
void animDelete(QObject *obj)
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(obj, "opacity");
|
||||
obj->connect(animation, SIGNAL(finished()), SLOT(deleteLater()));
|
||||
animation->setStartValue(1);
|
||||
animation->setEndValue(0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
|
||||
void moveTo(QObject* obj, const QPointF& pos, int msecs)
|
||||
{
|
||||
moveTo(obj, pos.x(), pos.y(), msecs);
|
||||
}
|
||||
void moveTo(QObject *obj, qreal x, qreal y, int msecs)
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(obj, "pos");
|
||||
animation->setDuration(msecs);
|
||||
animation->setStartValue(obj->property("pos").toPointF());
|
||||
animation->setEndValue(QPointF(x, y));
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
|
||||
void moveTo(QObject *obj, const QPointF &pos, int msecs)
|
||||
{
|
||||
moveTo(obj, pos.x(), pos.y(), msecs);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,10 +6,11 @@
|
|||
|
||||
class QObject;
|
||||
|
||||
namespace Animations{
|
||||
namespace Animations
|
||||
{
|
||||
void hide(QObject *obj);
|
||||
void moveTo(QObject *obj, qreal x, qreal y, int msecs = 500);
|
||||
void moveTo(QObject *obj, const QPointF& pos, int msecs = 500);
|
||||
void moveTo(QObject *obj, const QPointF &pos, int msecs = 500);
|
||||
void animDelete(QObject *obj);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@
|
|||
#include <QStyleOption>
|
||||
#include <QSettings>
|
||||
|
||||
static QPen gridPen(){
|
||||
static QPen gridPen()
|
||||
{
|
||||
QPen pen;
|
||||
pen.setColor(getColor(TIME_GRID));
|
||||
pen.setWidth(2);
|
||||
|
|
@ -50,7 +51,7 @@ void DiveCartesianAxis::setMinimum(double minimum)
|
|||
min = minimum;
|
||||
}
|
||||
|
||||
void DiveCartesianAxis::setTextColor(const QColor& color)
|
||||
void DiveCartesianAxis::setTextColor(const QColor &color)
|
||||
{
|
||||
textColor = color;
|
||||
}
|
||||
|
|
@ -73,7 +74,6 @@ DiveCartesianAxis::DiveCartesianAxis() : QObject(),
|
|||
|
||||
DiveCartesianAxis::~DiveCartesianAxis()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DiveCartesianAxis::setLineSize(qreal lineSize)
|
||||
|
|
@ -93,31 +93,33 @@ QColor DiveCartesianAxis::colorForValue(double value)
|
|||
|
||||
void DiveCartesianAxis::setTextVisible(bool arg1)
|
||||
{
|
||||
if(textVisibility == arg1){
|
||||
if (textVisibility == arg1) {
|
||||
return;
|
||||
}
|
||||
textVisibility = arg1;
|
||||
Q_FOREACH(DiveTextItem *item, labels){
|
||||
Q_FOREACH(DiveTextItem * item, labels) {
|
||||
item->setVisible(textVisibility);
|
||||
}
|
||||
}
|
||||
|
||||
void DiveCartesianAxis::setLinesVisible(bool arg1)
|
||||
{
|
||||
if(lineVisibility == arg1){
|
||||
if (lineVisibility == arg1) {
|
||||
return;
|
||||
}
|
||||
lineVisibility = arg1;
|
||||
Q_FOREACH(DiveLineItem *item, lines){
|
||||
item->setVisible(lineVisibility );
|
||||
lineVisibility = arg1;
|
||||
Q_FOREACH(DiveLineItem * item, lines) {
|
||||
item->setVisible(lineVisibility);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T> void emptyList( QList<T*>& list, double steps){
|
||||
template <typename T>
|
||||
void emptyList(QList<T *> &list, double steps)
|
||||
{
|
||||
if (!list.isEmpty() && list.size() > steps) {
|
||||
while (list.size() > steps) {
|
||||
T *removedItem = list.takeLast();
|
||||
Animations::animDelete(removedItem);
|
||||
T *removedItem = list.takeLast();
|
||||
Animations::animDelete(removedItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -148,7 +150,7 @@ void DiveCartesianAxis::updateTicks()
|
|||
} else if (orientation == BottomToTop) {
|
||||
begin = m.y2();
|
||||
stepSize = (m.y2() - m.y1());
|
||||
} else if (orientation == LeftToRight ) {
|
||||
} else if (orientation == LeftToRight) {
|
||||
begin = m.x1();
|
||||
stepSize = (m.x2() - m.x1());
|
||||
} else if (orientation == RightToLeft) {
|
||||
|
|
@ -159,11 +161,11 @@ void DiveCartesianAxis::updateTicks()
|
|||
|
||||
for (int i = 0, count = labels.size(); i < count; i++, currValueText += interval) {
|
||||
qreal childPos = (orientation == TopToBottom || orientation == LeftToRight) ?
|
||||
begin + i * stepSize :
|
||||
begin - i * stepSize;
|
||||
begin + i * stepSize :
|
||||
begin - i * stepSize;
|
||||
|
||||
labels[i]->setText(textForValue(currValueText));
|
||||
if ( orientation == LeftToRight || orientation == RightToLeft) {
|
||||
if (orientation == LeftToRight || orientation == RightToLeft) {
|
||||
labels[i]->animateMoveTo(childPos, m.y1() + tick_size);
|
||||
} else {
|
||||
labels[i]->animateMoveTo(m.x1() - tick_size, childPos);
|
||||
|
|
@ -172,10 +174,10 @@ void DiveCartesianAxis::updateTicks()
|
|||
|
||||
for (int i = 0, count = lines.size(); i < count; i++, currValueLine += interval) {
|
||||
qreal childPos = (orientation == TopToBottom || orientation == LeftToRight) ?
|
||||
begin + i * stepSize :
|
||||
begin - i * stepSize;
|
||||
begin + i * stepSize :
|
||||
begin - i * stepSize;
|
||||
|
||||
if ( orientation == LeftToRight || orientation == RightToLeft) {
|
||||
if (orientation == LeftToRight || orientation == RightToLeft) {
|
||||
lines[i]->animateMoveTo(childPos, m.y1());
|
||||
} else {
|
||||
lines[i]->animateMoveTo(m.x1(), childPos);
|
||||
|
|
@ -183,10 +185,10 @@ void DiveCartesianAxis::updateTicks()
|
|||
}
|
||||
|
||||
// Add's the rest of the needed Ticks / Text.
|
||||
for (int i = labels.size(); i < steps; i++, currValueText += interval) {
|
||||
for (int i = labels.size(); i < steps; i++, currValueText += interval) {
|
||||
qreal childPos;
|
||||
if (orientation == TopToBottom || orientation == LeftToRight) {
|
||||
childPos = begin + i * stepSize;
|
||||
childPos = begin + i * stepSize;
|
||||
} else {
|
||||
childPos = begin - i * stepSize;
|
||||
}
|
||||
|
|
@ -202,17 +204,17 @@ void DiveCartesianAxis::updateTicks()
|
|||
label->setPos(scene()->sceneRect().width() + 10, m.y1() + tick_size); // position it outside of the scene);
|
||||
label->animateMoveTo(childPos, m.y1() + tick_size);
|
||||
} else {
|
||||
label->setAlignment(Qt::AlignVCenter| Qt::AlignLeft);
|
||||
label->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
|
||||
label->setPos(m.x1() - tick_size, scene()->sceneRect().height() + 10);
|
||||
label->animateMoveTo(m.x1() - tick_size, childPos);
|
||||
}
|
||||
}
|
||||
|
||||
// Add's the rest of the needed Ticks / Text.
|
||||
for (int i = lines.size(); i < steps; i++, currValueText += interval) {
|
||||
for (int i = lines.size(); i < steps; i++, currValueText += interval) {
|
||||
qreal childPos;
|
||||
if (orientation == TopToBottom || orientation == LeftToRight) {
|
||||
childPos = begin + i * stepSize;
|
||||
childPos = begin + i * stepSize;
|
||||
} else {
|
||||
childPos = begin - i * stepSize;
|
||||
}
|
||||
|
|
@ -225,7 +227,7 @@ void DiveCartesianAxis::updateTicks()
|
|||
line->setZValue(0);
|
||||
lines.push_back(line);
|
||||
if (orientation == RightToLeft || orientation == LeftToRight) {
|
||||
line->setLine(0,-line_size,0, 0);
|
||||
line->setLine(0, -line_size, 0, 0);
|
||||
line->animateMoveTo(childPos, m.y1());
|
||||
} else {
|
||||
QPointF p1 = mapFromScene(3, 0);
|
||||
|
|
@ -235,13 +237,13 @@ void DiveCartesianAxis::updateTicks()
|
|||
}
|
||||
}
|
||||
|
||||
Q_FOREACH(DiveTextItem *item, labels)
|
||||
item->setVisible(textVisibility);
|
||||
Q_FOREACH(DiveLineItem *item, lines)
|
||||
item->setVisible(lineVisibility);
|
||||
Q_FOREACH(DiveTextItem * item, labels)
|
||||
item->setVisible(textVisibility);
|
||||
Q_FOREACH(DiveLineItem * item, lines)
|
||||
item->setVisible(lineVisibility);
|
||||
}
|
||||
|
||||
void DiveCartesianAxis::animateChangeLine(const QLineF& newLine)
|
||||
void DiveCartesianAxis::animateChangeLine(const QLineF &newLine)
|
||||
{
|
||||
setLine(newLine);
|
||||
updateTicks();
|
||||
|
|
@ -263,15 +265,15 @@ void DiveCartesianAxis::setTickInterval(double i)
|
|||
interval = i;
|
||||
}
|
||||
|
||||
qreal DiveCartesianAxis::valueAt(const QPointF& p) const
|
||||
qreal DiveCartesianAxis::valueAt(const QPointF &p) const
|
||||
{
|
||||
QLineF m = line();
|
||||
QPointF relativePosition = p;
|
||||
relativePosition -= pos(); // normalize p based on the axis' offset on screen
|
||||
|
||||
double retValue = (orientation == LeftToRight || orientation == RightToLeft) ?
|
||||
max * (relativePosition.x() - m.x1()) / (m.x2() - m.x1()) :
|
||||
max * (relativePosition.y() - m.y1()) / (m.y2() - m.y1());
|
||||
double retValue = (orientation == LeftToRight || orientation == RightToLeft) ?
|
||||
max * (relativePosition.x() - m.x1()) / (m.x2() - m.x1()) :
|
||||
max * (relativePosition.y() - m.y1()) / (m.y2() - m.y1());
|
||||
return retValue;
|
||||
}
|
||||
|
||||
|
|
@ -283,12 +285,12 @@ qreal DiveCartesianAxis::posAtValue(qreal value)
|
|||
double size = max - min;
|
||||
// unused for now:
|
||||
// double distanceFromOrigin = value - min;
|
||||
double percent = IS_FP_SAME(min,max) ? 0.0 : (value - min) / size;
|
||||
double percent = IS_FP_SAME(min, max) ? 0.0 : (value - min) / size;
|
||||
|
||||
|
||||
double realSize = orientation == LeftToRight || orientation == RightToLeft?
|
||||
m.x2() - m.x1() :
|
||||
m.y2() - m.y1();
|
||||
double realSize = orientation == LeftToRight || orientation == RightToLeft ?
|
||||
m.x2() - m.x1() :
|
||||
m.y2() - m.y1();
|
||||
|
||||
// Inverted axis, just invert the percentage.
|
||||
if (orientation == RightToLeft || orientation == BottomToTop)
|
||||
|
|
@ -296,14 +298,14 @@ qreal DiveCartesianAxis::posAtValue(qreal value)
|
|||
|
||||
double retValue = realSize * percent;
|
||||
double adjusted =
|
||||
orientation == LeftToRight ? retValue + m.x1() + p.x() :
|
||||
orientation == RightToLeft ? retValue + m.x1() + p.x() :
|
||||
orientation == TopToBottom ? retValue + m.y1() + p.y() :
|
||||
/* entation == BottomToTop */ retValue + m.y1() + p.y() ;
|
||||
orientation == LeftToRight ? retValue + m.x1() + p.x() :
|
||||
orientation == RightToLeft ? retValue + m.x1() + p.x() :
|
||||
orientation == TopToBottom ? retValue + m.y1() + p.y() :
|
||||
/* entation == BottomToTop */ retValue + m.y1() + p.y();
|
||||
return adjusted;
|
||||
}
|
||||
|
||||
qreal DiveCartesianAxis::percentAt(const QPointF& p)
|
||||
qreal DiveCartesianAxis::percentAt(const QPointF &p)
|
||||
{
|
||||
qreal value = valueAt(p);
|
||||
double size = max - min;
|
||||
|
|
@ -326,7 +328,7 @@ double DiveCartesianAxis::fontLabelScale() const
|
|||
return labelScale;
|
||||
}
|
||||
|
||||
void DiveCartesianAxis::setColor(const QColor& color)
|
||||
void DiveCartesianAxis::setColor(const QColor &color)
|
||||
{
|
||||
QPen defaultPen(color);
|
||||
defaultPen.setJoinStyle(Qt::RoundJoin);
|
||||
|
|
@ -361,24 +363,24 @@ DepthAxis::DepthAxis() : showWithPPGraph(false)
|
|||
{
|
||||
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
|
||||
|
||||
// force the correct size of the line.
|
||||
// force the correct size of the line.
|
||||
showWithPPGraph = !isPPGraphEnabled();
|
||||
settingsChanged();
|
||||
}
|
||||
|
||||
void DepthAxis::settingsChanged()
|
||||
{
|
||||
// bool ppGraph = isPPGraphEnabled();
|
||||
// if ( ppGraph == showWithPPGraph){
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (ppGraph) {
|
||||
// animateChangeLine(shrinkedLine);
|
||||
// } else {
|
||||
// animateChangeLine(expandedLine);
|
||||
// }
|
||||
// showWithPPGraph = ppGraph;
|
||||
// bool ppGraph = isPPGraphEnabled();
|
||||
// if ( ppGraph == showWithPPGraph){
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (ppGraph) {
|
||||
// animateChangeLine(shrinkedLine);
|
||||
// } else {
|
||||
// animateChangeLine(expandedLine);
|
||||
// }
|
||||
// showWithPPGraph = ppGraph;
|
||||
}
|
||||
|
||||
QColor TimeAxis::colorForValue(double value)
|
||||
|
|
@ -390,16 +392,16 @@ QColor TimeAxis::colorForValue(double value)
|
|||
QString TimeAxis::textForValue(double value)
|
||||
{
|
||||
int nr = value / 60;
|
||||
if (maximum() < 600 )
|
||||
return QString("%1:%2").arg(nr).arg( (int)value%60, 2, 10, QChar('0'));
|
||||
return QString::number(nr);
|
||||
if (maximum() < 600)
|
||||
return QString("%1:%2").arg(nr).arg((int)value % 60, 2, 10, QChar('0'));
|
||||
return QString::number(nr);
|
||||
}
|
||||
|
||||
void TimeAxis::updateTicks()
|
||||
{
|
||||
DiveCartesianAxis::updateTicks();
|
||||
if (maximum() > 600){
|
||||
for(int i = 0; i < labels.count(); i++){
|
||||
if (maximum() > 600) {
|
||||
for (int i = 0; i < labels.count(); i++) {
|
||||
labels[i]->setVisible(i % 2);
|
||||
}
|
||||
}
|
||||
|
|
@ -407,7 +409,7 @@ void TimeAxis::updateTicks()
|
|||
|
||||
QString TemperatureAxis::textForValue(double value)
|
||||
{
|
||||
return QString::number(mkelvin_to_C( (int) value));
|
||||
return QString::number(mkelvin_to_C((int)value));
|
||||
}
|
||||
|
||||
PartialGasPressureAxis::PartialGasPressureAxis()
|
||||
|
|
@ -415,7 +417,7 @@ PartialGasPressureAxis::PartialGasPressureAxis()
|
|||
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(preferencesChanged()));
|
||||
}
|
||||
|
||||
void PartialGasPressureAxis::setModel(DivePlotDataModel* m)
|
||||
void PartialGasPressureAxis::setModel(DivePlotDataModel *m)
|
||||
{
|
||||
model = m;
|
||||
connect(model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(preferencesChanged()));
|
||||
|
|
@ -435,8 +437,8 @@ void PartialGasPressureAxis::preferencesChanged()
|
|||
|
||||
double max = showPhe ? model->pheMax() : -1;
|
||||
if (showPn2 && model->pn2Max() > max)
|
||||
max = model->pn2Max();
|
||||
if( showPo2 && model->po2Max() > max)
|
||||
max = model->pn2Max();
|
||||
if (showPo2 && model->po2Max() > max)
|
||||
max = model->po2Max();
|
||||
|
||||
qreal pp = floor(max * 10.0) / 10.0 + 0.2;
|
||||
|
|
@ -444,6 +446,6 @@ void PartialGasPressureAxis::preferencesChanged()
|
|||
return;
|
||||
|
||||
setMaximum(pp);
|
||||
setTickInterval( pp > 4 ? 0.5 : 0.25 );
|
||||
setTickInterval(pp > 4 ? 0.5 : 0.25);
|
||||
updateTicks();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,14 +9,19 @@ class DiveTextItem;
|
|||
class DiveLineItem;
|
||||
class DivePlotDataModel;
|
||||
|
||||
class DiveCartesianAxis : public QObject, public QGraphicsLineItem{
|
||||
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};
|
||||
enum Orientation {
|
||||
TopToBottom,
|
||||
BottomToTop,
|
||||
LeftToRight,
|
||||
RightToLeft
|
||||
};
|
||||
DiveCartesianAxis();
|
||||
virtual ~DiveCartesianAxis();
|
||||
void setMinimum(double minimum);
|
||||
|
|
@ -30,28 +35,30 @@ public:
|
|||
double tickInterval() const;
|
||||
double tickSize() const;
|
||||
double fontLabelScale() const;
|
||||
qreal valueAt(const QPointF& p) const;
|
||||
qreal percentAt(const QPointF& p);
|
||||
qreal valueAt(const QPointF &p) const;
|
||||
qreal percentAt(const QPointF &p);
|
||||
qreal posAtValue(qreal value);
|
||||
void setColor(const QColor& color);
|
||||
void setTextColor(const QColor& color);
|
||||
void animateChangeLine(const QLineF& newLine);
|
||||
void setColor(const QColor &color);
|
||||
void setTextColor(const QColor &color);
|
||||
void animateChangeLine(const QLineF &newLine);
|
||||
void setTextVisible(bool arg1);
|
||||
void setLinesVisible(bool arg1);
|
||||
void setLineSize(qreal lineSize);
|
||||
int unitSystem;
|
||||
public slots:
|
||||
public
|
||||
slots:
|
||||
virtual void updateTicks();
|
||||
|
||||
signals:
|
||||
void sizeChanged();
|
||||
void maxChanged();
|
||||
|
||||
protected:
|
||||
virtual QString textForValue(double value);
|
||||
virtual QColor colorForValue(double value);
|
||||
Orientation orientation;
|
||||
QList<DiveTextItem*> labels;
|
||||
QList<DiveLineItem*> lines;
|
||||
QList<DiveTextItem *> labels;
|
||||
QList<DiveLineItem *> lines;
|
||||
double min;
|
||||
double max;
|
||||
double interval;
|
||||
|
|
@ -67,11 +74,14 @@ class DepthAxis : public DiveCartesianAxis {
|
|||
Q_OBJECT
|
||||
public:
|
||||
DepthAxis();
|
||||
|
||||
protected:
|
||||
QString textForValue(double value);
|
||||
QColor colorForValue(double value);
|
||||
private slots:
|
||||
private
|
||||
slots:
|
||||
void settingsChanged();
|
||||
|
||||
private:
|
||||
bool showWithPPGraph;
|
||||
};
|
||||
|
|
@ -80,24 +90,27 @@ class TimeAxis : public DiveCartesianAxis {
|
|||
Q_OBJECT
|
||||
public:
|
||||
virtual void updateTicks();
|
||||
|
||||
protected:
|
||||
QString textForValue(double value);
|
||||
QColor colorForValue(double value);
|
||||
};
|
||||
|
||||
class TemperatureAxis : public DiveCartesianAxis{
|
||||
class TemperatureAxis : public DiveCartesianAxis {
|
||||
Q_OBJECT
|
||||
protected:
|
||||
QString textForValue(double value);
|
||||
};
|
||||
|
||||
class PartialGasPressureAxis : public DiveCartesianAxis{
|
||||
class PartialGasPressureAxis : public DiveCartesianAxis {
|
||||
Q_OBJECT
|
||||
public:
|
||||
PartialGasPressureAxis();
|
||||
void setModel(DivePlotDataModel *model);
|
||||
public slots:
|
||||
public
|
||||
slots:
|
||||
void preferencesChanged();
|
||||
|
||||
private:
|
||||
DivePlotDataModel *model;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,26 +6,29 @@
|
|||
#include "dive.h"
|
||||
#include <QDebug>
|
||||
|
||||
DiveEventItem::DiveEventItem(QObject* parent): DivePixmapItem(parent),
|
||||
vAxis(NULL), hAxis(NULL), dataModel(NULL), internalEvent(NULL)
|
||||
DiveEventItem::DiveEventItem(QObject *parent) : DivePixmapItem(parent),
|
||||
vAxis(NULL),
|
||||
hAxis(NULL),
|
||||
dataModel(NULL),
|
||||
internalEvent(NULL)
|
||||
{
|
||||
setFlag(ItemIgnoresTransformations);
|
||||
}
|
||||
|
||||
|
||||
void DiveEventItem::setHorizontalAxis(DiveCartesianAxis* axis)
|
||||
void DiveEventItem::setHorizontalAxis(DiveCartesianAxis *axis)
|
||||
{
|
||||
hAxis = axis;
|
||||
recalculatePos(true);
|
||||
}
|
||||
|
||||
void DiveEventItem::setModel(DivePlotDataModel* model)
|
||||
void DiveEventItem::setModel(DivePlotDataModel *model)
|
||||
{
|
||||
dataModel = model;
|
||||
recalculatePos(true);
|
||||
}
|
||||
|
||||
void DiveEventItem::setVerticalAxis(DiveCartesianAxis* axis)
|
||||
void DiveEventItem::setVerticalAxis(DiveCartesianAxis *axis)
|
||||
{
|
||||
vAxis = axis;
|
||||
recalculatePos(true);
|
||||
|
|
@ -37,7 +40,7 @@ struct event *DiveEventItem::getEvent()
|
|||
return internalEvent;
|
||||
}
|
||||
|
||||
void DiveEventItem::setEvent(struct event* ev)
|
||||
void DiveEventItem::setEvent(struct event *ev)
|
||||
{
|
||||
if (!ev)
|
||||
return;
|
||||
|
|
@ -49,7 +52,7 @@ void DiveEventItem::setEvent(struct event* ev)
|
|||
|
||||
void DiveEventItem::setupPixmap()
|
||||
{
|
||||
#define EVENT_PIXMAP( PIX ) QPixmap(QString(PIX)).scaled(20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation)
|
||||
#define EVENT_PIXMAP(PIX) QPixmap(QString(PIX)).scaled(20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation)
|
||||
if (!internalEvent->name) {
|
||||
setPixmap(EVENT_PIXMAP(":warning"));
|
||||
} else if ((strcmp(internalEvent->name, "bookmark") == 0)) {
|
||||
|
|
@ -84,7 +87,7 @@ void DiveEventItem::setupToolTipString()
|
|||
else
|
||||
name += QString(tr("EAN%1")).arg(o2);
|
||||
} else if (name == "SP change") {
|
||||
name += QString(":%1").arg((double) value / 1000);
|
||||
name += QString(":%1").arg((double)value / 1000);
|
||||
} else {
|
||||
name += QString(":%1").arg(value);
|
||||
}
|
||||
|
|
@ -98,7 +101,7 @@ void DiveEventItem::setupToolTipString()
|
|||
setToolTip(name);
|
||||
}
|
||||
|
||||
void DiveEventItem::eventVisibilityChanged(const QString& eventName, bool visible)
|
||||
void DiveEventItem::eventVisibilityChanged(const QString &eventName, bool visible)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -107,7 +110,7 @@ void DiveEventItem::recalculatePos(bool instant)
|
|||
if (!vAxis || !hAxis || !internalEvent || !dataModel)
|
||||
return;
|
||||
|
||||
QModelIndexList result = dataModel->match(dataModel->index(0,DivePlotDataModel::TIME), Qt::DisplayRole, internalEvent->time.seconds );
|
||||
QModelIndexList result = dataModel->match(dataModel->index(0, DivePlotDataModel::TIME), Qt::DisplayRole, internalEvent->time.seconds);
|
||||
if (result.isEmpty()) {
|
||||
Q_ASSERT("can't find a spot in the dataModel");
|
||||
hide();
|
||||
|
|
@ -122,5 +125,5 @@ void DiveEventItem::recalculatePos(bool instant)
|
|||
if (!instant)
|
||||
Animations::moveTo(this, x, y, 500);
|
||||
else
|
||||
setPos(x,y);
|
||||
setPos(x, y);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,22 +10,24 @@ struct event;
|
|||
class DiveEventItem : public DivePixmapItem {
|
||||
Q_OBJECT
|
||||
public:
|
||||
DiveEventItem(QObject* parent = 0);
|
||||
DiveEventItem(QObject *parent = 0);
|
||||
void setEvent(struct event *ev);
|
||||
struct event *getEvent();
|
||||
void eventVisibilityChanged(const QString& eventName, bool visible);
|
||||
void eventVisibilityChanged(const QString &eventName, bool visible);
|
||||
void setVerticalAxis(DiveCartesianAxis *axis);
|
||||
void setHorizontalAxis(DiveCartesianAxis *axis);
|
||||
void setModel(DivePlotDataModel *model);
|
||||
public slots:
|
||||
public
|
||||
slots:
|
||||
void recalculatePos(bool instant = false);
|
||||
|
||||
private:
|
||||
void setupToolTipString();
|
||||
void setupPixmap();
|
||||
DiveCartesianAxis *vAxis;
|
||||
DiveCartesianAxis *hAxis;
|
||||
DivePlotDataModel *dataModel;
|
||||
struct event* internalEvent;
|
||||
struct event *internalEvent;
|
||||
};
|
||||
|
||||
#endif // DIVEEVENTITEM_H
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
DiveLineItem::DiveLineItem(QGraphicsItem *parent) : QGraphicsLineItem(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DiveLineItem::animatedHide()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#include "divepixmapitem.h"
|
||||
|
||||
DivePixmapItem::DivePixmapItem(QObject* parent): QObject(parent), QGraphicsPixmapItem()
|
||||
DivePixmapItem::DivePixmapItem(QObject *parent) : QObject(parent), QGraphicsPixmapItem()
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@
|
|||
#include <QObject>
|
||||
#include <QGraphicsPixmapItem>
|
||||
|
||||
class DivePixmapItem : public QObject, public QGraphicsPixmapItem{
|
||||
class DivePixmapItem : public QObject, public QGraphicsPixmapItem {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(qreal opacity WRITE setOpacity READ opacity)
|
||||
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:
|
||||
DivePixmapItem(QObject* parent = 0);
|
||||
DivePixmapItem(QObject *parent = 0);
|
||||
};
|
||||
|
||||
#endif // DIVEPIXMAPITEM_H
|
||||
|
|
|
|||
|
|
@ -8,60 +8,76 @@
|
|||
#include "divelist.h"
|
||||
#include <QDebug>
|
||||
|
||||
DivePlotDataModel::DivePlotDataModel(QObject* parent) : QAbstractTableModel(parent) , diveId(0)
|
||||
DivePlotDataModel::DivePlotDataModel(QObject *parent) : QAbstractTableModel(parent), diveId(0)
|
||||
{
|
||||
memset(&pInfo, 0, sizeof(pInfo));
|
||||
}
|
||||
|
||||
int DivePlotDataModel::columnCount(const QModelIndex& parent) const
|
||||
int DivePlotDataModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
return COLUMNS;
|
||||
}
|
||||
|
||||
QVariant DivePlotDataModel::data(const QModelIndex& index, int role) const
|
||||
QVariant DivePlotDataModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if ((!index.isValid())||(index.row() >= pInfo.nr))
|
||||
if ((!index.isValid()) || (index.row() >= pInfo.nr))
|
||||
return QVariant();
|
||||
|
||||
plot_data item = pInfo.entry[index.row()];
|
||||
if (role == Qt::DisplayRole) {
|
||||
switch (index.column()) {
|
||||
case DEPTH: return item.depth;
|
||||
case TIME: return item.sec;
|
||||
case PRESSURE: return item.pressure[0];
|
||||
case TEMPERATURE: return item.temperature;
|
||||
case COLOR: return item.velocity;
|
||||
case USERENTERED: return false;
|
||||
case CYLINDERINDEX: return item.cylinderindex;
|
||||
case SENSOR_PRESSURE: return item.pressure[0];
|
||||
case INTERPOLATED_PRESSURE: return item.pressure[1];
|
||||
case CEILING: return item.ceiling;
|
||||
case SAC: return item.sac;
|
||||
case PN2: return item.pn2;
|
||||
case PHE: return item.phe;
|
||||
case PO2: return item.po2;
|
||||
case HEARTBEAT: return item.heartbeat;
|
||||
case DEPTH:
|
||||
return item.depth;
|
||||
case TIME:
|
||||
return item.sec;
|
||||
case PRESSURE:
|
||||
return item.pressure[0];
|
||||
case TEMPERATURE:
|
||||
return item.temperature;
|
||||
case COLOR:
|
||||
return item.velocity;
|
||||
case USERENTERED:
|
||||
return false;
|
||||
case CYLINDERINDEX:
|
||||
return item.cylinderindex;
|
||||
case SENSOR_PRESSURE:
|
||||
return item.pressure[0];
|
||||
case INTERPOLATED_PRESSURE:
|
||||
return item.pressure[1];
|
||||
case CEILING:
|
||||
return item.ceiling;
|
||||
case SAC:
|
||||
return item.sac;
|
||||
case PN2:
|
||||
return item.pn2;
|
||||
case PHE:
|
||||
return item.phe;
|
||||
case PO2:
|
||||
return item.po2;
|
||||
case HEARTBEAT:
|
||||
return item.heartbeat;
|
||||
}
|
||||
}
|
||||
|
||||
if (role == Qt::DisplayRole && index.column() >= TISSUE_1 && index.column() <= TISSUE_16){
|
||||
return item.ceilings[ index.column() - TISSUE_1];
|
||||
if (role == Qt::DisplayRole && index.column() >= TISSUE_1 && index.column() <= TISSUE_16) {
|
||||
return item.ceilings[index.column() - TISSUE_1];
|
||||
}
|
||||
|
||||
if (role == Qt::BackgroundRole) {
|
||||
switch (index.column()) {
|
||||
case COLOR: return getColor((color_indice_t)(VELOCITY_COLORS_START_IDX + item.velocity));
|
||||
case COLOR:
|
||||
return getColor((color_indice_t)(VELOCITY_COLORS_START_IDX + item.velocity));
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
const plot_info& DivePlotDataModel::data() const
|
||||
const plot_info &DivePlotDataModel::data() const
|
||||
{
|
||||
return pInfo;
|
||||
}
|
||||
|
||||
int DivePlotDataModel::rowCount(const QModelIndex& parent) const
|
||||
int DivePlotDataModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return pInfo.nr;
|
||||
}
|
||||
|
|
@ -75,22 +91,36 @@ QVariant DivePlotDataModel::headerData(int section, Qt::Orientation orientation,
|
|||
return QVariant();
|
||||
|
||||
switch (section) {
|
||||
case DEPTH: return tr("Depth");
|
||||
case TIME: return tr("Time");
|
||||
case PRESSURE: return tr("Pressure");
|
||||
case TEMPERATURE: return tr("Temperature");
|
||||
case COLOR: return tr("Color");
|
||||
case USERENTERED: return tr("User Entered");
|
||||
case CYLINDERINDEX: return tr("Cylinder Index");
|
||||
case SENSOR_PRESSURE: return tr("Pressure S");
|
||||
case INTERPOLATED_PRESSURE: return tr("Pressure I");
|
||||
case CEILING: return tr("Ceiling");
|
||||
case SAC: return tr("SAC");
|
||||
case PN2: return tr("PN2");
|
||||
case PHE: return tr("PHE");
|
||||
case PO2: return tr("PO2");
|
||||
case DEPTH:
|
||||
return tr("Depth");
|
||||
case TIME:
|
||||
return tr("Time");
|
||||
case PRESSURE:
|
||||
return tr("Pressure");
|
||||
case TEMPERATURE:
|
||||
return tr("Temperature");
|
||||
case COLOR:
|
||||
return tr("Color");
|
||||
case USERENTERED:
|
||||
return tr("User Entered");
|
||||
case CYLINDERINDEX:
|
||||
return tr("Cylinder Index");
|
||||
case SENSOR_PRESSURE:
|
||||
return tr("Pressure S");
|
||||
case INTERPOLATED_PRESSURE:
|
||||
return tr("Pressure I");
|
||||
case CEILING:
|
||||
return tr("Ceiling");
|
||||
case SAC:
|
||||
return tr("SAC");
|
||||
case PN2:
|
||||
return tr("PN2");
|
||||
case PHE:
|
||||
return tr("PHE");
|
||||
case PO2:
|
||||
return tr("PO2");
|
||||
}
|
||||
if (role == Qt::DisplayRole && section >= TISSUE_1 && section <= TISSUE_16){
|
||||
if (role == Qt::DisplayRole && section >= TISSUE_1 && section <= TISSUE_16) {
|
||||
return QString("Ceiling: %1").arg(section - TISSUE_1);
|
||||
}
|
||||
return QVariant();
|
||||
|
|
@ -107,14 +137,14 @@ void DivePlotDataModel::clear()
|
|||
}
|
||||
}
|
||||
|
||||
void DivePlotDataModel::setDive(dive* d, const plot_info& info)
|
||||
void DivePlotDataModel::setDive(dive *d, const plot_info &info)
|
||||
{
|
||||
clear();
|
||||
Q_ASSERT(d != NULL);
|
||||
diveId = d->id;
|
||||
dcNr = dc_number;
|
||||
pInfo = info;
|
||||
beginInsertRows(QModelIndex(), 0, pInfo.nr-1);
|
||||
beginInsertRows(QModelIndex(), 0, pInfo.nr - 1);
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
|
|
@ -128,16 +158,16 @@ int DivePlotDataModel::dcShown() const
|
|||
return dcNr;
|
||||
}
|
||||
|
||||
#define MAX_PPGAS_FUNC( GAS, GASFUNC ) \
|
||||
double DivePlotDataModel::GASFUNC() \
|
||||
{ \
|
||||
double ret = -1; \
|
||||
for(int i = 0, count = rowCount(); i < count; i++){ \
|
||||
if (pInfo.entry[i].GAS > ret) \
|
||||
ret = pInfo.entry[i].GAS; \
|
||||
} \
|
||||
return ret; \
|
||||
}
|
||||
#define MAX_PPGAS_FUNC(GAS, GASFUNC) \
|
||||
double DivePlotDataModel::GASFUNC() \
|
||||
{ \
|
||||
double ret = -1; \
|
||||
for (int i = 0, count = rowCount(); i < count; i++) { \
|
||||
if (pInfo.entry[i].GAS > ret) \
|
||||
ret = pInfo.entry[i].GAS; \
|
||||
} \
|
||||
return ret; \
|
||||
}
|
||||
|
||||
MAX_PPGAS_FUNC(phe, pheMax);
|
||||
MAX_PPGAS_FUNC(pn2, pn2Max);
|
||||
|
|
@ -156,5 +186,5 @@ void DivePlotDataModel::calculateDecompression()
|
|||
struct divecomputer *dc = select_dc(&d->dc);
|
||||
init_decompression(d);
|
||||
calculate_deco_information(d, dc, &pInfo, false);
|
||||
dataChanged(index(0, CEILING), index(pInfo.nr-1, TISSUE_16));
|
||||
dataChanged(index(0, CEILING), index(pInfo.nr - 1, TISSUE_16));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,20 +9,51 @@ struct dive;
|
|||
struct plot_data;
|
||||
struct plot_info;
|
||||
|
||||
class DivePlotDataModel : public QAbstractTableModel{
|
||||
Q_OBJECT
|
||||
class DivePlotDataModel : public QAbstractTableModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum {DEPTH, TIME, PRESSURE, TEMPERATURE, USERENTERED, COLOR, CYLINDERINDEX, SENSOR_PRESSURE, INTERPOLATED_PRESSURE,
|
||||
SAC, CEILING, TISSUE_1,TISSUE_2,TISSUE_3,TISSUE_4,TISSUE_5,TISSUE_6,TISSUE_7,TISSUE_8,TISSUE_9,TISSUE_10,
|
||||
TISSUE_11,TISSUE_12,TISSUE_13,TISSUE_14,TISSUE_15,TISSUE_16, PN2,PHE,PO2, HEARTBEAT, COLUMNS};
|
||||
explicit DivePlotDataModel(QObject* parent = 0);
|
||||
virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
|
||||
enum {
|
||||
DEPTH,
|
||||
TIME,
|
||||
PRESSURE,
|
||||
TEMPERATURE,
|
||||
USERENTERED,
|
||||
COLOR,
|
||||
CYLINDERINDEX,
|
||||
SENSOR_PRESSURE,
|
||||
INTERPOLATED_PRESSURE,
|
||||
SAC,
|
||||
CEILING,
|
||||
TISSUE_1,
|
||||
TISSUE_2,
|
||||
TISSUE_3,
|
||||
TISSUE_4,
|
||||
TISSUE_5,
|
||||
TISSUE_6,
|
||||
TISSUE_7,
|
||||
TISSUE_8,
|
||||
TISSUE_9,
|
||||
TISSUE_10,
|
||||
TISSUE_11,
|
||||
TISSUE_12,
|
||||
TISSUE_13,
|
||||
TISSUE_14,
|
||||
TISSUE_15,
|
||||
TISSUE_16,
|
||||
PN2,
|
||||
PHE,
|
||||
PO2,
|
||||
HEARTBEAT,
|
||||
COLUMNS
|
||||
};
|
||||
explicit DivePlotDataModel(QObject *parent = 0);
|
||||
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
|
||||
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
|
||||
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
|
||||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
void clear();
|
||||
void setDive(struct dive *d, const plot_info& pInfo);
|
||||
const plot_info& data() const;
|
||||
void setDive(struct dive *d, const plot_info &pInfo);
|
||||
const plot_info &data() const;
|
||||
int id() const;
|
||||
int dcShown() const;
|
||||
double pheMax();
|
||||
|
|
@ -30,6 +61,7 @@ public:
|
|||
double po2Max();
|
||||
void emitDataChanged();
|
||||
void calculateDecompression();
|
||||
|
||||
private:
|
||||
plot_info pInfo;
|
||||
int diveId;
|
||||
|
|
|
|||
|
|
@ -17,8 +17,7 @@
|
|||
#include <QGraphicsItem>
|
||||
#include <QSettings>
|
||||
|
||||
AbstractProfilePolygonItem::AbstractProfilePolygonItem(): QObject(), QGraphicsPolygonItem(),
|
||||
hAxis(NULL), vAxis(NULL), dataModel(NULL), hDataColumn(-1), vDataColumn(-1)
|
||||
AbstractProfilePolygonItem::AbstractProfilePolygonItem() : QObject(), QGraphicsPolygonItem(), hAxis(NULL), vAxis(NULL), dataModel(NULL), hDataColumn(-1), vDataColumn(-1)
|
||||
{
|
||||
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(preferencesChanged()));
|
||||
}
|
||||
|
|
@ -27,7 +26,7 @@ void AbstractProfilePolygonItem::preferencesChanged()
|
|||
{
|
||||
}
|
||||
|
||||
void AbstractProfilePolygonItem::setHorizontalAxis(DiveCartesianAxis* horizontal)
|
||||
void AbstractProfilePolygonItem::setHorizontalAxis(DiveCartesianAxis *horizontal)
|
||||
{
|
||||
hAxis = horizontal;
|
||||
connect(hAxis, SIGNAL(sizeChanged()), this, SLOT(modelDataChanged()));
|
||||
|
|
@ -40,22 +39,22 @@ void AbstractProfilePolygonItem::setHorizontalDataColumn(int column)
|
|||
modelDataChanged();
|
||||
}
|
||||
|
||||
void AbstractProfilePolygonItem::setModel(DivePlotDataModel* model)
|
||||
void AbstractProfilePolygonItem::setModel(DivePlotDataModel *model)
|
||||
{
|
||||
dataModel = model;
|
||||
connect(dataModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(modelDataChanged(QModelIndex, QModelIndex)));
|
||||
connect(dataModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), this, SLOT(modelDataRemoved(QModelIndex, int, int)));
|
||||
connect(dataModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(modelDataChanged(QModelIndex, QModelIndex)));
|
||||
connect(dataModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), this, SLOT(modelDataRemoved(QModelIndex, int, int)));
|
||||
modelDataChanged();
|
||||
}
|
||||
|
||||
void AbstractProfilePolygonItem::modelDataRemoved(const QModelIndex& parent, int from, int to)
|
||||
void AbstractProfilePolygonItem::modelDataRemoved(const QModelIndex &parent, int from, int to)
|
||||
{
|
||||
setPolygon(QPolygonF());
|
||||
qDeleteAll(texts);
|
||||
texts.clear();
|
||||
}
|
||||
|
||||
void AbstractProfilePolygonItem::setVerticalAxis(DiveCartesianAxis* vertical)
|
||||
void AbstractProfilePolygonItem::setVerticalAxis(DiveCartesianAxis *vertical)
|
||||
{
|
||||
vAxis = vertical;
|
||||
connect(vAxis, SIGNAL(sizeChanged()), this, SLOT(modelDataChanged()));
|
||||
|
|
@ -69,7 +68,7 @@ void AbstractProfilePolygonItem::setVerticalDataColumn(int column)
|
|||
modelDataChanged();
|
||||
}
|
||||
|
||||
bool AbstractProfilePolygonItem::shouldCalculateStuff(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
bool AbstractProfilePolygonItem::shouldCalculateStuff(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
if (!hAxis || !vAxis)
|
||||
return false;
|
||||
|
|
@ -77,16 +76,16 @@ bool AbstractProfilePolygonItem::shouldCalculateStuff(const QModelIndex& topLeft
|
|||
return false;
|
||||
if (hDataColumn == -1 || vDataColumn == -1)
|
||||
return false;
|
||||
if ( topLeft.isValid() && bottomRight.isValid()){
|
||||
if ((topLeft.column() >= vDataColumn || topLeft.column() >= hDataColumn ) &&
|
||||
(bottomRight.column() <= vDataColumn || topLeft.column() <= hDataColumn )){
|
||||
if (topLeft.isValid() && bottomRight.isValid()) {
|
||||
if ((topLeft.column() >= vDataColumn || topLeft.column() >= hDataColumn) &&
|
||||
(bottomRight.column() <= vDataColumn || topLeft.column() <= hDataColumn)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void AbstractProfilePolygonItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void AbstractProfilePolygonItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
// We don't have enougth data to calculate things, quit.
|
||||
|
||||
|
|
@ -99,7 +98,7 @@ void AbstractProfilePolygonItem::modelDataChanged(const QModelIndex& topLeft, co
|
|||
for (int i = 0, modelDataCount = dataModel->rowCount(); i < modelDataCount; i++) {
|
||||
qreal horizontalValue = dataModel->index(i, hDataColumn).data().toReal();
|
||||
qreal verticalValue = dataModel->index(i, vDataColumn).data().toReal();
|
||||
QPointF point( hAxis->posAtValue(horizontalValue), vAxis->posAtValue(verticalValue));
|
||||
QPointF point(hAxis->posAtValue(horizontalValue), vAxis->posAtValue(verticalValue));
|
||||
poly.append(point);
|
||||
}
|
||||
setPolygon(poly);
|
||||
|
|
@ -110,12 +109,12 @@ void AbstractProfilePolygonItem::modelDataChanged(const QModelIndex& topLeft, co
|
|||
|
||||
DiveProfileItem::DiveProfileItem() : show_reported_ceiling(0), reported_ceiling_in_red(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
|
||||
void DiveProfileItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
Q_UNUSED(widget);
|
||||
if(polygon().isEmpty())
|
||||
if (polygon().isEmpty())
|
||||
return;
|
||||
|
||||
// This paints the Polygon + Background. I'm setting the pen to QPen() so we don't get a black line here,
|
||||
|
|
@ -134,13 +133,13 @@ void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
|
|||
QModelIndex colorIndex = dataModel->index(i, DivePlotDataModel::COLOR);
|
||||
pen.setBrush(QBrush(colorIndex.data(Qt::BackgroundRole).value<QColor>()));
|
||||
painter->setPen(pen);
|
||||
painter->drawLine(poly[i-1],poly[i]);
|
||||
painter->drawLine(poly[i - 1], poly[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void DiveProfileItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void DiveProfileItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
if(!shouldCalculateStuff(topLeft, bottomRight))
|
||||
if (!shouldCalculateStuff(topLeft, bottomRight))
|
||||
return;
|
||||
|
||||
AbstractProfilePolygonItem::modelDataChanged(topLeft, bottomRight);
|
||||
|
|
@ -153,7 +152,7 @@ void DiveProfileItem::modelDataChanged(const QModelIndex& topLeft, const QModelI
|
|||
/* Show any ceiling we may have encountered */
|
||||
if (prefs.profile_dc_ceiling && !prefs.profile_red_ceiling) {
|
||||
QPolygonF p = polygon();
|
||||
plot_data *entry = dataModel->data().entry + dataModel->rowCount()-1;
|
||||
plot_data *entry = dataModel->data().entry + dataModel->rowCount() - 1;
|
||||
for (int i = dataModel->rowCount() - 1; i >= 0; i--, entry--) {
|
||||
if (!entry->in_deco) {
|
||||
/* not in deco implies this is a safety stop, no ceiling */
|
||||
|
|
@ -167,7 +166,7 @@ void DiveProfileItem::modelDataChanged(const QModelIndex& topLeft, const QModelI
|
|||
setPolygon(p);
|
||||
}
|
||||
|
||||
// This is the blueish gradient that the Depth Profile should have.
|
||||
// This is the blueish gradient that the Depth Profile should have.
|
||||
// It's a simple QLinearGradient with 2 stops, starting from top to bottom.
|
||||
QLinearGradient pat(0, polygon().boundingRect().top(), 0, polygon().boundingRect().bottom());
|
||||
pat.setColorAt(1, getColor(DEPTH_BOTTOM));
|
||||
|
|
@ -175,9 +174,9 @@ void DiveProfileItem::modelDataChanged(const QModelIndex& topLeft, const QModelI
|
|||
setBrush(QBrush(pat));
|
||||
|
||||
int last = -1;
|
||||
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
|
||||
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
|
||||
|
||||
struct plot_data *entry = dataModel->data().entry+i;
|
||||
struct plot_data *entry = dataModel->data().entry + i;
|
||||
if (entry->depth < 2000)
|
||||
continue;
|
||||
|
||||
|
|
@ -201,10 +200,10 @@ void DiveProfileItem::preferencesChanged()
|
|||
//TODO: Only modelDataChanged() here if we need to rebuild the graph ( for instance,
|
||||
// if the prefs.profile_dc_ceiling are enabled, but prefs.profile_red_ceiling is disabled
|
||||
// and only if it changed something. let's not waste cpu cycles repoloting something we don't need to.
|
||||
modelDataChanged();
|
||||
modelDataChanged();
|
||||
}
|
||||
|
||||
void DiveProfileItem::plot_depth_sample(struct plot_data *entry,QFlags<Qt::AlignmentFlag> flags,const QColor& color)
|
||||
void DiveProfileItem::plot_depth_sample(struct plot_data *entry, QFlags<Qt::AlignmentFlag> flags, const QColor &color)
|
||||
{
|
||||
int decimals;
|
||||
double d = get_depth_units(entry->depth, &decimals, NULL);
|
||||
|
|
@ -231,7 +230,7 @@ void DiveHeartrateItem::modelDataChanged(const QModelIndex &topLeft, const QMode
|
|||
struct {
|
||||
int sec;
|
||||
int hr;
|
||||
} hist[3] = {0};
|
||||
} hist[3] = { 0 };
|
||||
|
||||
// We don't have enougth data to calculate things, quit.
|
||||
if (!shouldCalculateStuff(topLeft, bottomRight))
|
||||
|
|
@ -246,7 +245,7 @@ void DiveHeartrateItem::modelDataChanged(const QModelIndex &topLeft, const QMode
|
|||
if (!hr)
|
||||
continue;
|
||||
sec = dataModel->index(i, hDataColumn).data().toInt();
|
||||
QPointF point( hAxis->posAtValue(sec), vAxis->posAtValue(hr));
|
||||
QPointF point(hAxis->posAtValue(sec), vAxis->posAtValue(hr));
|
||||
poly.append(point);
|
||||
if (hr == hist[2].hr)
|
||||
// same as last one, no point in looking at printing
|
||||
|
|
@ -276,7 +275,7 @@ void DiveHeartrateItem::modelDataChanged(const QModelIndex &topLeft, const QMode
|
|||
}
|
||||
setPolygon(poly);
|
||||
|
||||
if( texts.count())
|
||||
if (texts.count())
|
||||
texts.last()->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
|
||||
}
|
||||
|
||||
|
|
@ -291,9 +290,9 @@ void DiveHeartrateItem::createTextItem(int sec, int hr)
|
|||
texts.append(text);
|
||||
}
|
||||
|
||||
void DiveHeartrateItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
void DiveHeartrateItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
if(polygon().isEmpty())
|
||||
if (polygon().isEmpty())
|
||||
return;
|
||||
painter->setPen(pen());
|
||||
painter->drawPolyline(polygon());
|
||||
|
|
@ -308,7 +307,7 @@ DiveTemperatureItem::DiveTemperatureItem()
|
|||
setPen(pen);
|
||||
}
|
||||
|
||||
void DiveTemperatureItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void DiveTemperatureItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
int last = -300, last_printed_temp = 0, sec = 0, last_valid_temp = 0;
|
||||
// We don't have enougth data to calculate things, quit.
|
||||
|
|
@ -325,7 +324,7 @@ void DiveTemperatureItem::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
continue;
|
||||
last_valid_temp = mkelvin;
|
||||
sec = dataModel->index(i, hDataColumn).data().toInt();
|
||||
QPointF point( hAxis->posAtValue(sec), vAxis->posAtValue(mkelvin));
|
||||
QPointF point(hAxis->posAtValue(sec), vAxis->posAtValue(mkelvin));
|
||||
poly.append(point);
|
||||
|
||||
/* don't print a temperature
|
||||
|
|
@ -338,7 +337,7 @@ void DiveTemperatureItem::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
continue;
|
||||
last = sec;
|
||||
if (mkelvin > 200000)
|
||||
createTextItem(sec,mkelvin);
|
||||
createTextItem(sec, mkelvin);
|
||||
last_printed_temp = mkelvin;
|
||||
}
|
||||
setPolygon(poly);
|
||||
|
|
@ -350,7 +349,7 @@ void DiveTemperatureItem::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
((abs(last_valid_temp - last_printed_temp) > 500) || ((double)last / (double)sec < 0.75))) {
|
||||
createTextItem(sec, last_valid_temp);
|
||||
}
|
||||
if( texts.count())
|
||||
if (texts.count())
|
||||
texts.last()->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
|
||||
}
|
||||
|
||||
|
|
@ -369,15 +368,15 @@ void DiveTemperatureItem::createTextItem(int sec, int mkelvin)
|
|||
texts.append(text);
|
||||
}
|
||||
|
||||
void DiveTemperatureItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
void DiveTemperatureItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
if(polygon().isEmpty())
|
||||
if (polygon().isEmpty())
|
||||
return;
|
||||
painter->setPen(pen());
|
||||
painter->drawPolyline(polygon());
|
||||
}
|
||||
|
||||
void DiveGasPressureItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
// We don't have enougth data to calculate things, quit.
|
||||
if (!shouldCalculateStuff(topLeft, bottomRight))
|
||||
|
|
@ -387,7 +386,7 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
polygons.clear();
|
||||
|
||||
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
|
||||
plot_data* entry = dataModel->data().entry + i;
|
||||
plot_data *entry = dataModel->data().entry + i;
|
||||
int mbar = GET_PRESSURE(entry);
|
||||
|
||||
if (entry->cylinderindex != last_index) {
|
||||
|
|
@ -399,7 +398,7 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
}
|
||||
|
||||
QPointF point(hAxis->posAtValue(entry->sec), vAxis->posAtValue(mbar));
|
||||
boundingPoly.push_back(point); // The BoundingRect
|
||||
boundingPoly.push_back(point); // The BoundingRect
|
||||
polygons.last().push_back(point); // The polygon thta will be plotted.
|
||||
}
|
||||
setPolygon(boundingPoly);
|
||||
|
|
@ -425,8 +424,8 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
if (!seen_cyl[cyl]) {
|
||||
plot_pressure_value(mbar, entry->sec, Qt::AlignRight | Qt::AlignTop);
|
||||
plot_gas_value(mbar, entry->sec, Qt::AlignRight | Qt::AlignBottom,
|
||||
get_o2(&dive->cylinder[cyl].gasmix),
|
||||
get_he(&dive->cylinder[cyl].gasmix));
|
||||
get_o2(&dive->cylinder[cyl].gasmix),
|
||||
get_he(&dive->cylinder[cyl].gasmix));
|
||||
seen_cyl[cyl] = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -446,7 +445,7 @@ void DiveGasPressureItem::plot_pressure_value(int mbar, int sec, QFlags<Qt::Alig
|
|||
const char *unit;
|
||||
int pressure = get_pressure_units(mbar, &unit);
|
||||
DiveTextItem *text = new DiveTextItem(this);
|
||||
text->setPos(hAxis->posAtValue(sec), vAxis->posAtValue(mbar)-0.5);
|
||||
text->setPos(hAxis->posAtValue(sec), vAxis->posAtValue(mbar) - 0.5);
|
||||
text->setText(QString("%1 %2").arg(pressure).arg(unit));
|
||||
text->setAlignment(flags);
|
||||
text->setBrush(getColor(PRESSURE_TEXT));
|
||||
|
|
@ -455,9 +454,9 @@ void DiveGasPressureItem::plot_pressure_value(int mbar, int sec, QFlags<Qt::Alig
|
|||
|
||||
void DiveGasPressureItem::plot_gas_value(int mbar, int sec, QFlags<Qt::AlignmentFlag> flags, int o2, int he)
|
||||
{
|
||||
QString gas = (is_air(o2, he)) ? tr("air") :
|
||||
(he == 0) ? QString(tr("EAN%1")).arg((o2 + 5) / 10) :
|
||||
QString("%1/%2").arg((o2 + 5) / 10).arg((he + 5) / 10);
|
||||
QString gas = (is_air(o2, he)) ? tr("air") :
|
||||
(he == 0) ? QString(tr("EAN%1")).arg((o2 + 5) / 10) :
|
||||
QString("%1/%2").arg((o2 + 5) / 10).arg((he + 5) / 10);
|
||||
DiveTextItem *text = new DiveTextItem(this);
|
||||
text->setPos(hAxis->posAtValue(sec), vAxis->posAtValue(mbar));
|
||||
text->setText(gas);
|
||||
|
|
@ -466,9 +465,9 @@ void DiveGasPressureItem::plot_gas_value(int mbar, int sec, QFlags<Qt::Alignment
|
|||
texts.push_back(text);
|
||||
}
|
||||
|
||||
void DiveGasPressureItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
void DiveGasPressureItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
if(polygon().isEmpty())
|
||||
if (polygon().isEmpty())
|
||||
return;
|
||||
QPen pen;
|
||||
pen.setCosmetic(true);
|
||||
|
|
@ -477,11 +476,11 @@ void DiveGasPressureItem::paint(QPainter* painter, const QStyleOptionGraphicsIte
|
|||
if (!d)
|
||||
return;
|
||||
struct plot_data *entry = dataModel->data().entry;
|
||||
Q_FOREACH(const QPolygonF& poly, polygons) {
|
||||
Q_FOREACH(const QPolygonF & poly, polygons) {
|
||||
for (int i = 1, count = poly.count(); i < count; i++, entry++) {
|
||||
pen.setBrush(getSacColor(entry->sac, d->sac));
|
||||
painter->setPen(pen);
|
||||
painter->drawLine(poly[i-1],poly[i]);
|
||||
painter->drawLine(poly[i - 1], poly[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -494,7 +493,7 @@ DiveCalculatedCeiling::DiveCalculatedCeiling() : is3mIncrement(false), gradientF
|
|||
preferencesChanged();
|
||||
}
|
||||
|
||||
void DiveCalculatedCeiling::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void DiveCalculatedCeiling::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
// We don't have enougth data to calculate things, quit.
|
||||
if (!shouldCalculateStuff(topLeft, bottomRight))
|
||||
|
|
@ -514,16 +513,16 @@ void DiveCalculatedCeiling::modelDataChanged(const QModelIndex& topLeft, const Q
|
|||
QLinearGradient pat(0, polygon().boundingRect().top(), 0, polygon().boundingRect().bottom());
|
||||
pat.setColorAt(0, getColor(CALC_CEILING_SHALLOW));
|
||||
pat.setColorAt(1, getColor(CALC_CEILING_DEEP));
|
||||
setPen(QPen(QBrush(Qt::NoBrush),0));
|
||||
setPen(QPen(QBrush(Qt::NoBrush), 0));
|
||||
setBrush(pat);
|
||||
|
||||
gradientFactor->setX(poly.boundingRect().width()/2 + poly.boundingRect().x());
|
||||
gradientFactor->setX(poly.boundingRect().width() / 2 + poly.boundingRect().x());
|
||||
gradientFactor->setText(QString("GF %1/%2").arg(prefs.gflow).arg(prefs.gfhigh));
|
||||
}
|
||||
|
||||
void DiveCalculatedCeiling::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
void DiveCalculatedCeiling::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
if(polygon().isEmpty())
|
||||
if (polygon().isEmpty())
|
||||
return;
|
||||
QGraphicsPolygonItem::paint(painter, option, widget);
|
||||
}
|
||||
|
|
@ -540,9 +539,9 @@ void DiveCalculatedTissue::preferencesChanged()
|
|||
setVisible(s.value("calcalltissues").toBool() && s.value("calcceiling").toBool());
|
||||
}
|
||||
|
||||
void DiveReportedCeiling::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void DiveReportedCeiling::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
if(!shouldCalculateStuff(topLeft, bottomRight))
|
||||
if (!shouldCalculateStuff(topLeft, bottomRight))
|
||||
return;
|
||||
|
||||
QPolygonF p;
|
||||
|
|
@ -563,7 +562,7 @@ void DiveReportedCeiling::modelDataChanged(const QModelIndex& topLeft, const QMo
|
|||
QLinearGradient pat(0, p.boundingRect().top(), 0, p.boundingRect().bottom());
|
||||
pat.setColorAt(0, getColor(CEILING_SHALLOW));
|
||||
pat.setColorAt(1, getColor(CEILING_DEEP));
|
||||
setPen(QPen(QBrush(Qt::NoBrush),0));
|
||||
setPen(QPen(QBrush(Qt::NoBrush), 0));
|
||||
setBrush(pat);
|
||||
}
|
||||
|
||||
|
|
@ -573,7 +572,7 @@ void DiveCalculatedCeiling::preferencesChanged()
|
|||
s.beginGroup("TecDetails");
|
||||
|
||||
bool shouldShow3mIncrement = s.value("calcceiling3m").toBool();
|
||||
if ( dataModel && is3mIncrement != shouldShow3mIncrement){
|
||||
if (dataModel && is3mIncrement != shouldShow3mIncrement) {
|
||||
// recalculate that part.
|
||||
dataModel->calculateDecompression();
|
||||
}
|
||||
|
|
@ -588,9 +587,9 @@ void DiveReportedCeiling::preferencesChanged()
|
|||
setVisible(s.value("redceiling").toBool());
|
||||
}
|
||||
|
||||
void DiveReportedCeiling::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
void DiveReportedCeiling::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
if(polygon().isEmpty())
|
||||
if (polygon().isEmpty())
|
||||
return;
|
||||
QGraphicsPolygonItem::paint(painter, option, widget);
|
||||
}
|
||||
|
|
@ -619,18 +618,18 @@ void MeanDepthLine::setMeanDepth(int value)
|
|||
meanDepth = value;
|
||||
}
|
||||
|
||||
void MeanDepthLine::setAxis(DiveCartesianAxis* a)
|
||||
void MeanDepthLine::setAxis(DiveCartesianAxis *a)
|
||||
{
|
||||
connect(a, SIGNAL(sizeChanged()), this, SLOT(axisLineChanged()));
|
||||
}
|
||||
|
||||
void MeanDepthLine::axisLineChanged()
|
||||
{
|
||||
DiveCartesianAxis *axis = qobject_cast<DiveCartesianAxis*>(sender());
|
||||
animateMoveTo(x(),axis->posAtValue(meanDepth));
|
||||
DiveCartesianAxis *axis = qobject_cast<DiveCartesianAxis *>(sender());
|
||||
animateMoveTo(x(), axis->posAtValue(meanDepth));
|
||||
}
|
||||
|
||||
void PartialPressureGasItem::modelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)
|
||||
void PartialPressureGasItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
|
||||
{
|
||||
//AbstractProfilePolygonItem::modelDataChanged();
|
||||
if (!shouldCalculateStuff(topLeft, bottomRight))
|
||||
|
|
@ -642,11 +641,11 @@ void PartialPressureGasItem::modelDataChanged(const QModelIndex& topLeft, const
|
|||
QSettings s;
|
||||
s.beginGroup("TecDetails");
|
||||
double threshould = s.value(threshouldKey).toDouble();
|
||||
for(int i = 0; i < dataModel->rowCount(); i++, entry++){
|
||||
for (int i = 0; i < dataModel->rowCount(); i++, entry++) {
|
||||
double value = dataModel->index(i, vDataColumn).data().toDouble();
|
||||
int time = dataModel->index(i, hDataColumn).data().toInt();
|
||||
QPointF point(hAxis->posAtValue(time), vAxis->posAtValue(value));
|
||||
poly.push_back( point );
|
||||
poly.push_back(point);
|
||||
if (value >= threshould)
|
||||
alertPoly.push_back(point);
|
||||
}
|
||||
|
|
@ -656,7 +655,7 @@ void PartialPressureGasItem::modelDataChanged(const QModelIndex& topLeft, const
|
|||
*/
|
||||
}
|
||||
|
||||
void PartialPressureGasItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
void PartialPressureGasItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
painter->setPen(normalColor);
|
||||
painter->drawPolyline(polygon());
|
||||
|
|
@ -664,7 +663,7 @@ void PartialPressureGasItem::paint(QPainter* painter, const QStyleOptionGraphics
|
|||
painter->drawPolyline(alertPoly);
|
||||
}
|
||||
|
||||
void PartialPressureGasItem::setThreshouldSettingsKey(const QString& threshouldSettingsKey)
|
||||
void PartialPressureGasItem::setThreshouldSettingsKey(const QString &threshouldSettingsKey)
|
||||
{
|
||||
threshouldKey = threshouldSettingsKey;
|
||||
}
|
||||
|
|
@ -677,15 +676,15 @@ void PartialPressureGasItem::preferencesChanged()
|
|||
{
|
||||
QSettings s;
|
||||
s.beginGroup("TecDetails");
|
||||
setVisible( s.value(visibilityKey).toBool() );
|
||||
setVisible(s.value(visibilityKey).toBool());
|
||||
}
|
||||
|
||||
void PartialPressureGasItem::setVisibilitySettingsKey(const QString& key)
|
||||
void PartialPressureGasItem::setVisibilitySettingsKey(const QString &key)
|
||||
{
|
||||
visibilityKey = key;
|
||||
}
|
||||
|
||||
void PartialPressureGasItem::setColors(const QColor& normal, const QColor& alert)
|
||||
void PartialPressureGasItem::setColors(const QColor &normal, const QColor &alert)
|
||||
{
|
||||
normalColor = normal;
|
||||
alertColor = alert;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class DiveCartesianAxis;
|
|||
class QAbstractTableModel;
|
||||
struct plot_data;
|
||||
|
||||
class AbstractProfilePolygonItem : public QObject, public QGraphicsPolygonItem{
|
||||
class AbstractProfilePolygonItem : public QObject, public QGraphicsPolygonItem {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QPointF pos WRITE setPos READ pos)
|
||||
Q_PROPERTY(qreal x WRITE setX READ x)
|
||||
|
|
@ -40,12 +40,16 @@ public:
|
|||
void setModel(DivePlotDataModel *model);
|
||||
void setHorizontalDataColumn(int column);
|
||||
void setVerticalDataColumn(int column);
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) = 0;
|
||||
virtual void clear(){}
|
||||
public slots:
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0;
|
||||
virtual void clear()
|
||||
{
|
||||
}
|
||||
public
|
||||
slots:
|
||||
virtual void preferencesChanged();
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void modelDataRemoved(const QModelIndex& parent, int from, int to);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void modelDataRemoved(const QModelIndex &parent, int from, int to);
|
||||
|
||||
protected:
|
||||
/* when the model emits a 'datachanged' signal, this method below should be used to check if the
|
||||
* modified data affects this particular item ( for example, when setting the '3m increment'
|
||||
|
|
@ -54,36 +58,38 @@ protected:
|
|||
* into consideration when returning 'true' for "yes, continue the calculation', and 'false' for
|
||||
* 'do not recalculate, we already have the right data.
|
||||
*/
|
||||
bool shouldCalculateStuff(const QModelIndex& topLeft, const QModelIndex& bottomRight);
|
||||
bool shouldCalculateStuff(const QModelIndex &topLeft, const QModelIndex &bottomRight);
|
||||
|
||||
DiveCartesianAxis *hAxis;
|
||||
DiveCartesianAxis *vAxis;
|
||||
DivePlotDataModel *dataModel;
|
||||
int hDataColumn;
|
||||
int vDataColumn;
|
||||
QList<DiveTextItem*> texts;
|
||||
QList<DiveTextItem *> texts;
|
||||
};
|
||||
|
||||
class DiveProfileItem : public AbstractProfilePolygonItem{
|
||||
class DiveProfileItem : public AbstractProfilePolygonItem {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DiveProfileItem();
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void preferencesChanged();
|
||||
void plot_depth_sample(struct plot_data *entry,QFlags<Qt::AlignmentFlag> flags,const QColor& color);
|
||||
void plot_depth_sample(struct plot_data *entry, QFlags<Qt::AlignmentFlag> flags, const QColor &color);
|
||||
|
||||
private:
|
||||
unsigned int show_reported_ceiling;
|
||||
unsigned int reported_ceiling_in_red;
|
||||
};
|
||||
|
||||
class DiveTemperatureItem : public AbstractProfilePolygonItem{
|
||||
class DiveTemperatureItem : public AbstractProfilePolygonItem {
|
||||
Q_OBJECT
|
||||
public:
|
||||
DiveTemperatureItem();
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
|
||||
private:
|
||||
void createTextItem(int seconds, int mkelvin);
|
||||
};
|
||||
|
|
@ -94,41 +100,44 @@ public:
|
|||
DiveHeartrateItem();
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||
|
||||
private:
|
||||
void createTextItem(int seconds, int hr);
|
||||
};
|
||||
|
||||
class DiveGasPressureItem : public AbstractProfilePolygonItem{
|
||||
class DiveGasPressureItem : public AbstractProfilePolygonItem {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
|
||||
private:
|
||||
void plot_pressure_value(int mbar, int sec, QFlags<Qt::AlignmentFlag> align);
|
||||
void plot_gas_value(int mbar, int sec, QFlags<Qt::AlignmentFlag> align, int o2, int he);
|
||||
QVector<QPolygonF> polygons;
|
||||
};
|
||||
|
||||
class DiveCalculatedCeiling : public AbstractProfilePolygonItem{
|
||||
class DiveCalculatedCeiling : public AbstractProfilePolygonItem {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DiveCalculatedCeiling();
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
virtual void preferencesChanged();
|
||||
|
||||
private:
|
||||
bool is3mIncrement;
|
||||
DiveTextItem *gradientFactor;
|
||||
};
|
||||
|
||||
class DiveReportedCeiling : public AbstractProfilePolygonItem{
|
||||
class DiveReportedCeiling : public AbstractProfilePolygonItem {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
virtual void preferencesChanged();
|
||||
};
|
||||
|
||||
|
|
@ -146,24 +155,27 @@ public:
|
|||
void setMeanDepth(int value);
|
||||
void setLine(qreal x1, qreal y1, qreal x2, qreal y2);
|
||||
void setAxis(DiveCartesianAxis *a);
|
||||
public slots:
|
||||
public
|
||||
slots:
|
||||
void axisLineChanged();
|
||||
|
||||
private:
|
||||
int meanDepth;
|
||||
DiveTextItem *leftText;
|
||||
DiveTextItem *rightText;
|
||||
};
|
||||
|
||||
class PartialPressureGasItem : public AbstractProfilePolygonItem{
|
||||
class PartialPressureGasItem : public AbstractProfilePolygonItem {
|
||||
Q_OBJECT
|
||||
public:
|
||||
PartialPressureGasItem();
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex& topLeft = QModelIndex(), const QModelIndex& bottomRight = QModelIndex());
|
||||
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
|
||||
virtual void preferencesChanged();
|
||||
void setThreshouldSettingsKey(const QString& threshouldSettingsKey);
|
||||
void setVisibilitySettingsKey(const QString& setVisibilitySettingsKey);
|
||||
void setColors(const QColor& normalColor, const QColor& alertColor);
|
||||
void setThreshouldSettingsKey(const QString &threshouldSettingsKey);
|
||||
void setVisibilitySettingsKey(const QString &setVisibilitySettingsKey);
|
||||
void setColors(const QColor &normalColor, const QColor &alertColor);
|
||||
|
||||
private:
|
||||
QPolygonF alertPoly;
|
||||
QString threshouldKey;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#include "diverectitem.h"
|
||||
|
||||
DiveRectItem::DiveRectItem(QObject* parent, QGraphicsItem* parentItem): QObject(parent), QGraphicsRectItem(parentItem )
|
||||
DiveRectItem::DiveRectItem(QObject *parent, QGraphicsItem *parentItem) : QObject(parent), QGraphicsRectItem(parentItem)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include <QObject>
|
||||
#include <QGraphicsRectItem>
|
||||
|
||||
class DiveRectItem : public QObject, public QGraphicsRectItem{
|
||||
class DiveRectItem : public QObject, public QGraphicsRectItem {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QRectF rect WRITE setRect READ rect)
|
||||
Q_PROPERTY(QPointF pos WRITE setPos READ pos)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
#include <QPen>
|
||||
#include <QDebug>
|
||||
|
||||
DiveTextItem::DiveTextItem(QGraphicsItem* parent): QGraphicsItemGroup(parent),
|
||||
DiveTextItem::DiveTextItem(QGraphicsItem *parent) : QGraphicsItemGroup(parent),
|
||||
internalAlignFlags(Qt::AlignHCenter | Qt::AlignVCenter),
|
||||
textBackgroundItem(NULL),
|
||||
textItem(NULL),
|
||||
|
|
@ -25,7 +25,7 @@ void DiveTextItem::setAlignment(int alignFlags)
|
|||
updateText();
|
||||
}
|
||||
|
||||
void DiveTextItem::setBrush(const QBrush& b)
|
||||
void DiveTextItem::setBrush(const QBrush &b)
|
||||
{
|
||||
brush = b;
|
||||
updateText();
|
||||
|
|
@ -36,13 +36,13 @@ void DiveTextItem::setScale(double newscale)
|
|||
scale = newscale;
|
||||
}
|
||||
|
||||
void DiveTextItem::setText(const QString& t)
|
||||
void DiveTextItem::setText(const QString &t)
|
||||
{
|
||||
internalText = t;
|
||||
updateText();
|
||||
}
|
||||
|
||||
const QString& DiveTextItem::text()
|
||||
const QString &DiveTextItem::text()
|
||||
{
|
||||
return internalText;
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ void DiveTextItem::updateText()
|
|||
textItem = NULL;
|
||||
delete textBackgroundItem;
|
||||
textBackgroundItem = NULL;
|
||||
if(internalText.isEmpty()){
|
||||
if (internalText.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -75,14 +75,14 @@ void DiveTextItem::updateText()
|
|||
|
||||
QRectF rect = fm.boundingRect(internalText);
|
||||
yPos = (internalAlignFlags & Qt::AlignTop) ? 0 :
|
||||
(internalAlignFlags & Qt::AlignBottom) ? +rect.height() :
|
||||
/*(internalAlignFlags & Qt::AlignVCenter ? */ +rect.height() / 4;
|
||||
(internalAlignFlags & Qt::AlignBottom) ? +rect.height() :
|
||||
/*(internalAlignFlags & Qt::AlignVCenter ? */ +rect.height() / 4;
|
||||
|
||||
xPos = (internalAlignFlags & Qt::AlignLeft ) ? -rect.width() :
|
||||
(internalAlignFlags & Qt::AlignHCenter) ? -rect.width()/2 :
|
||||
/* (internalAlignFlags & Qt::AlignRight) */ 0;
|
||||
xPos = (internalAlignFlags & Qt::AlignLeft) ? -rect.width() :
|
||||
(internalAlignFlags & Qt::AlignHCenter) ? -rect.width() / 2 :
|
||||
/* (internalAlignFlags & Qt::AlignRight) */ 0;
|
||||
|
||||
textPath.addText( xPos, yPos, fnt, internalText);
|
||||
textPath.addText(xPos, yPos, fnt, internalText);
|
||||
QPainterPathStroker stroker;
|
||||
stroker.setWidth(3);
|
||||
textBackgroundItem = new QGraphicsPathItem(stroker.createStroke(textPath), this);
|
||||
|
|
|
|||
|
|
@ -7,19 +7,20 @@
|
|||
#include <QBrush>
|
||||
|
||||
/* A Line Item that has animated-properties. */
|
||||
class DiveTextItem :public QObject, public QGraphicsItemGroup{
|
||||
class DiveTextItem : public QObject, public QGraphicsItemGroup {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
|
||||
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity)
|
||||
public:
|
||||
DiveTextItem(QGraphicsItem* parent = 0);
|
||||
void setText(const QString& text);
|
||||
DiveTextItem(QGraphicsItem *parent = 0);
|
||||
void setText(const QString &text);
|
||||
void setAlignment(int alignFlags);
|
||||
void setScale(double newscale);
|
||||
void setBrush(const QBrush& brush);
|
||||
void setBrush(const QBrush &brush);
|
||||
void animatedHide();
|
||||
void animateMoveTo(qreal x, qreal y);
|
||||
const QString& text();
|
||||
const QString &text();
|
||||
|
||||
private:
|
||||
void updateText();
|
||||
int internalAlignFlags;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
#include "display.h"
|
||||
#endif
|
||||
|
||||
void ToolTipItem::addToolTip(const QString& toolTip, const QIcon& icon)
|
||||
void ToolTipItem::addToolTip(const QString &toolTip, const QIcon &icon)
|
||||
{
|
||||
QGraphicsPixmapItem *iconItem = 0;
|
||||
double yValue = title->boundingRect().height() + SPACING;
|
||||
|
|
@ -25,7 +25,7 @@ void ToolTipItem::addToolTip(const QString& toolTip, const QIcon& icon)
|
|||
yValue += t.second->boundingRect().height();
|
||||
}
|
||||
if (!icon.isNull()) {
|
||||
iconItem = new QGraphicsPixmapItem(icon.pixmap(ICON_SMALL,ICON_SMALL), this);
|
||||
iconItem = new QGraphicsPixmapItem(icon.pixmap(ICON_SMALL, ICON_SMALL), this);
|
||||
iconItem->setPos(SPACING, yValue);
|
||||
}
|
||||
|
||||
|
|
@ -47,8 +47,8 @@ void ToolTipItem::refresh(struct graphics_context *gc, QPointF pos)
|
|||
addToolTip(QString::fromUtf8(mb.buffer, mb.len));
|
||||
free_buffer(&mb);
|
||||
|
||||
QList<QGraphicsItem*> items = scene()->items(pos, Qt::IntersectsItemShape, Qt::DescendingOrder, transform());
|
||||
Q_FOREACH(QGraphicsItem *item, items) {
|
||||
QList<QGraphicsItem *> items = scene()->items(pos, Qt::IntersectsItemShape, Qt::DescendingOrder, transform());
|
||||
Q_FOREACH(QGraphicsItem * item, items) {
|
||||
if (!item->toolTip().isEmpty())
|
||||
addToolTip(item->toolTip());
|
||||
}
|
||||
|
|
@ -63,7 +63,7 @@ void ToolTipItem::clear()
|
|||
toolTips.clear();
|
||||
}
|
||||
|
||||
void ToolTipItem::setRect(const QRectF& r)
|
||||
void ToolTipItem::setRect(const QRectF &r)
|
||||
{
|
||||
// qDeleteAll(childItems());
|
||||
delete background;
|
||||
|
|
@ -74,8 +74,8 @@ void ToolTipItem::setRect(const QRectF& r)
|
|||
|
||||
// Creates a 2pixels border
|
||||
QPainterPath border;
|
||||
border.addRoundedRect(-4, -4, rectangle.width() + 8, rectangle.height() + 10, 3, 3);
|
||||
border.addRoundedRect(-1, -1, rectangle.width() + 3, rectangle.height() + 4, 3, 3);
|
||||
border.addRoundedRect(-4, -4, rectangle.width() + 8, rectangle.height() + 10, 3, 3);
|
||||
border.addRoundedRect(-1, -1, rectangle.width() + 3, rectangle.height() + 4, 3, 3);
|
||||
setPath(border);
|
||||
|
||||
QPainterPath bg;
|
||||
|
|
@ -119,10 +119,10 @@ void ToolTipItem::expand()
|
|||
height += t.second->boundingRect().height();
|
||||
}
|
||||
/* Left padding, Icon Size, space, right padding */
|
||||
width += SPACING + ICON_SMALL + SPACING + SPACING;
|
||||
width += SPACING + ICON_SMALL + SPACING + SPACING;
|
||||
|
||||
if (width < title->boundingRect().width() + SPACING*2)
|
||||
width = title->boundingRect().width() + SPACING*2;
|
||||
if (width < title->boundingRect().width() + SPACING * 2)
|
||||
width = title->boundingRect().width() + SPACING * 2;
|
||||
|
||||
if (height < ICON_SMALL)
|
||||
height = ICON_SMALL;
|
||||
|
|
@ -139,7 +139,7 @@ void ToolTipItem::expand()
|
|||
status = EXPANDED;
|
||||
}
|
||||
|
||||
ToolTipItem::ToolTipItem(QGraphicsItem* parent) : QGraphicsPathItem(parent),
|
||||
ToolTipItem::ToolTipItem(QGraphicsItem *parent) : QGraphicsPathItem(parent),
|
||||
background(0),
|
||||
separator(new QGraphicsLineItem(this)),
|
||||
title(new QGraphicsSimpleTextItem(tr("Information"), this)),
|
||||
|
|
@ -161,21 +161,21 @@ ToolTipItem::~ToolTipItem()
|
|||
|
||||
void ToolTipItem::updateTitlePosition()
|
||||
{
|
||||
if (rectangle.width() < title->boundingRect().width() + SPACING*4) {
|
||||
if (rectangle.width() < title->boundingRect().width() + SPACING * 4) {
|
||||
QRectF newRect = rectangle;
|
||||
newRect.setWidth(title->boundingRect().width() + SPACING*4);
|
||||
newRect.setWidth(title->boundingRect().width() + SPACING * 4);
|
||||
newRect.setHeight((newRect.height() && isExpanded()) ? newRect.height() : ICON_SMALL);
|
||||
setRect(newRect);
|
||||
}
|
||||
|
||||
title->setPos(boundingRect().width()/2 - title->boundingRect().width()/2 -1, 0);
|
||||
title->setPos(boundingRect().width() / 2 - title->boundingRect().width() / 2 - 1, 0);
|
||||
title->setFlag(ItemIgnoresTransformations);
|
||||
title->setPen(QPen(Qt::white, 1));
|
||||
title->setBrush(Qt::white);
|
||||
|
||||
if (toolTips.size() > 0) {
|
||||
double x1 = 3;
|
||||
double y1 = title->pos().y() + SPACING/2 + title->boundingRect().height();
|
||||
double y1 = title->pos().y() + SPACING / 2 + title->boundingRect().height();
|
||||
double x2 = boundingRect().width() - 10;
|
||||
double y2 = y1;
|
||||
|
||||
|
|
@ -188,11 +188,12 @@ void ToolTipItem::updateTitlePosition()
|
|||
}
|
||||
}
|
||||
|
||||
bool ToolTipItem::isExpanded() const {
|
||||
bool ToolTipItem::isExpanded() const
|
||||
{
|
||||
return status == EXPANDED;
|
||||
}
|
||||
|
||||
void ToolTipItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
|
||||
void ToolTipItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
persistPos();
|
||||
QGraphicsPathItem::mouseReleaseEvent(event);
|
||||
|
|
@ -212,27 +213,26 @@ void ToolTipItem::readPos()
|
|||
QSettings s;
|
||||
s.beginGroup("ProfileMap");
|
||||
QPointF value = scene()->views().at(0)->mapToScene(
|
||||
s.value("tooltip_position").toPoint()
|
||||
);
|
||||
s.value("tooltip_position").toPoint());
|
||||
if (!scene()->sceneRect().contains(value)) {
|
||||
value = QPointF(0,0);
|
||||
value = QPointF(0, 0);
|
||||
}
|
||||
setPos(value);
|
||||
}
|
||||
|
||||
void ToolTipItem::setPlotInfo(const plot_info& plot)
|
||||
void ToolTipItem::setPlotInfo(const plot_info &plot)
|
||||
{
|
||||
pInfo = plot;
|
||||
}
|
||||
|
||||
void ToolTipItem::setTimeAxis(DiveCartesianAxis* axis)
|
||||
void ToolTipItem::setTimeAxis(DiveCartesianAxis *axis)
|
||||
{
|
||||
timeAxis = axis;
|
||||
}
|
||||
|
||||
void ToolTipItem::refresh(const QPointF& pos)
|
||||
void ToolTipItem::refresh(const QPointF &pos)
|
||||
{
|
||||
int time = timeAxis->valueAt( pos );
|
||||
int time = timeAxis->valueAt(pos);
|
||||
if (time == lastTime)
|
||||
return;
|
||||
|
||||
|
|
@ -244,8 +244,8 @@ void ToolTipItem::refresh(const QPointF& pos)
|
|||
addToolTip(QString::fromUtf8(mb.buffer, mb.len));
|
||||
free_buffer(&mb);
|
||||
|
||||
QList<QGraphicsItem*> items = scene()->items(pos, Qt::IntersectsItemShape, Qt::DescendingOrder, scene()->views().first()->transform());
|
||||
Q_FOREACH(QGraphicsItem *item, items) {
|
||||
QList<QGraphicsItem *> items = scene()->items(pos, Qt::IntersectsItemShape, Qt::DescendingOrder, scene()->views().first()->transform());
|
||||
Q_FOREACH(QGraphicsItem * item, items) {
|
||||
if (!item->toolTip().isEmpty())
|
||||
addToolTip(item->toolTip());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,36 +17,44 @@ struct graphics_context;
|
|||
/* To use a tooltip, simply ->setToolTip on the QGraphicsItem that you want
|
||||
* or, if it's a "global" tooltip, set it on the mouseMoveEvent of the ProfileGraphicsView.
|
||||
*/
|
||||
class ToolTipItem :public QObject, public QGraphicsPathItem
|
||||
{
|
||||
class ToolTipItem : public QObject, public QGraphicsPathItem {
|
||||
Q_OBJECT
|
||||
void updateTitlePosition();
|
||||
Q_PROPERTY(QRectF rect READ boundingRect WRITE setRect)
|
||||
|
||||
public:
|
||||
enum Status{COLLAPSED, EXPANDED};
|
||||
enum {ICON_SMALL = 16, ICON_MEDIUM = 24, ICON_BIG = 32, SPACING=4};
|
||||
enum Status {
|
||||
COLLAPSED,
|
||||
EXPANDED
|
||||
};
|
||||
enum {
|
||||
ICON_SMALL = 16,
|
||||
ICON_MEDIUM = 24,
|
||||
ICON_BIG = 32,
|
||||
SPACING = 4
|
||||
};
|
||||
|
||||
explicit ToolTipItem(QGraphicsItem* parent = 0);
|
||||
explicit ToolTipItem(QGraphicsItem *parent = 0);
|
||||
virtual ~ToolTipItem();
|
||||
|
||||
void collapse();
|
||||
void expand();
|
||||
void clear();
|
||||
void addToolTip(const QString& toolTip, const QIcon& icon = QIcon());
|
||||
void refresh(struct graphics_context* gc, QPointF pos);
|
||||
void refresh(const QPointF& pos);
|
||||
void addToolTip(const QString &toolTip, const QIcon &icon = QIcon());
|
||||
void refresh(struct graphics_context *gc, QPointF pos);
|
||||
void refresh(const QPointF &pos);
|
||||
bool isExpanded() const;
|
||||
void persistPos();
|
||||
void readPos();
|
||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
|
||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
|
||||
void setTimeAxis(DiveCartesianAxis *axis);
|
||||
void setPlotInfo(const plot_info& plot);
|
||||
public slots:
|
||||
void setRect(const QRectF& rect);
|
||||
void setPlotInfo(const plot_info &plot);
|
||||
public
|
||||
slots:
|
||||
void setRect(const QRectF &rect);
|
||||
|
||||
private:
|
||||
typedef QPair<QGraphicsPixmapItem*, QGraphicsSimpleTextItem*> ToolTip;
|
||||
typedef QPair<QGraphicsPixmapItem *, QGraphicsSimpleTextItem *> ToolTip;
|
||||
QVector<ToolTip> toolTips;
|
||||
QGraphicsPathItem *background;
|
||||
QGraphicsLineItem *separator;
|
||||
|
|
|
|||
|
|
@ -35,15 +35,15 @@
|
|||
* hard coding the item on the scene with a random
|
||||
* value.
|
||||
*/
|
||||
static struct _ItemPos{
|
||||
struct _Pos{
|
||||
static struct _ItemPos {
|
||||
struct _Pos {
|
||||
QPointF on;
|
||||
QPointF off;
|
||||
};
|
||||
struct _Axis{
|
||||
_Pos pos;
|
||||
QLineF shrinked;
|
||||
QLineF expanded;
|
||||
struct _Axis {
|
||||
_Pos pos;
|
||||
QLineF shrinked;
|
||||
QLineF expanded;
|
||||
};
|
||||
_Pos background;
|
||||
_Pos dcLabel;
|
||||
|
|
@ -55,12 +55,11 @@ static struct _ItemPos{
|
|||
_Axis heartBeat;
|
||||
} itemPos;
|
||||
|
||||
ProfileWidget2::ProfileWidget2(QWidget *parent) :
|
||||
QGraphicsView(parent),
|
||||
ProfileWidget2::ProfileWidget2(QWidget *parent) : QGraphicsView(parent),
|
||||
dataModel(new DivePlotDataModel(this)),
|
||||
currentState(INVALID),
|
||||
zoomLevel(0),
|
||||
background (new DivePixmapItem()),
|
||||
background(new DivePixmapItem()),
|
||||
toolTipItem(new ToolTipItem()),
|
||||
profileYAxis(new DepthAxis()),
|
||||
gasYAxis(new PartialGasPressureAxis()),
|
||||
|
|
@ -74,9 +73,9 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
|
|||
diveComputerText(new DiveTextItem()),
|
||||
diveCeiling(new DiveCalculatedCeiling()),
|
||||
reportedCeiling(new DiveReportedCeiling()),
|
||||
pn2GasItem( new PartialPressureGasItem()),
|
||||
pheGasItem( new PartialPressureGasItem()),
|
||||
po2GasItem( new PartialPressureGasItem()),
|
||||
pn2GasItem(new PartialPressureGasItem()),
|
||||
pheGasItem(new PartialPressureGasItem()),
|
||||
po2GasItem(new PartialPressureGasItem()),
|
||||
heartBeatAxis(new DiveCartesianAxis()),
|
||||
heartBeatItem(new DiveHeartrateItem()),
|
||||
isPlotZoomed(prefs.zoomed_plot),
|
||||
|
|
@ -123,7 +122,7 @@ void ProfileWidget2::addItemsToScene()
|
|||
scene()->addItem(rulerItem);
|
||||
scene()->addItem(rulerItem->sourceNode());
|
||||
scene()->addItem(rulerItem->destNode());
|
||||
Q_FOREACH(DiveCalculatedTissue *tissue, allTissues){
|
||||
Q_FOREACH(DiveCalculatedTissue * tissue, allTissues) {
|
||||
scene()->addItem(tissue);
|
||||
}
|
||||
}
|
||||
|
|
@ -135,7 +134,7 @@ void ProfileWidget2::setupItemOnScene()
|
|||
|
||||
profileYAxis->setOrientation(DiveCartesianAxis::TopToBottom);
|
||||
profileYAxis->setMinimum(0);
|
||||
profileYAxis->setTickInterval(M_OR_FT(10,30));
|
||||
profileYAxis->setTickInterval(M_OR_FT(10, 30));
|
||||
profileYAxis->setTickSize(1);
|
||||
profileYAxis->setLineSize(96);
|
||||
|
||||
|
|
@ -163,7 +162,7 @@ void ProfileWidget2::setupItemOnScene()
|
|||
cylinderPressureAxis->setTickSize(2);
|
||||
cylinderPressureAxis->setTickInterval(30000);
|
||||
|
||||
meanDepth->setLine(0,0,96,0);
|
||||
meanDepth->setLine(0, 0, 96, 0);
|
||||
meanDepth->setX(3);
|
||||
meanDepth->setPen(QPen(QBrush(Qt::red), 0, Qt::SolidLine));
|
||||
meanDepth->setZValue(1);
|
||||
|
|
@ -176,9 +175,9 @@ void ProfileWidget2::setupItemOnScene()
|
|||
|
||||
setupItem(reportedCeiling, timeAxis, profileYAxis, dataModel, DivePlotDataModel::CEILING, DivePlotDataModel::TIME, 1);
|
||||
setupItem(diveCeiling, timeAxis, profileYAxis, dataModel, DivePlotDataModel::CEILING, DivePlotDataModel::TIME, 1);
|
||||
for(int i = 0; i < 16; i++){
|
||||
for (int i = 0; i < 16; i++) {
|
||||
DiveCalculatedTissue *tissueItem = new DiveCalculatedTissue();
|
||||
setupItem(tissueItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::TISSUE_1 + i, DivePlotDataModel::TIME, 1+i);
|
||||
setupItem(tissueItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::TISSUE_1 + i, DivePlotDataModel::TIME, 1 + i);
|
||||
allTissues.append(tissueItem);
|
||||
}
|
||||
setupItem(gasPressureItem, timeAxis, cylinderPressureAxis, dataModel, DivePlotDataModel::TEMPERATURE, DivePlotDataModel::TIME, 1);
|
||||
|
|
@ -186,17 +185,17 @@ void ProfileWidget2::setupItemOnScene()
|
|||
setupItem(heartBeatItem, timeAxis, heartBeatAxis, dataModel, DivePlotDataModel::HEARTBEAT, DivePlotDataModel::TIME, 1);
|
||||
setupItem(diveProfileItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::DEPTH, DivePlotDataModel::TIME, 0);
|
||||
|
||||
#define CREATE_PP_GAS( ITEM, VERTICAL_COLUMN, COLOR, COLOR_ALERT, THRESHOULD_SETTINGS, VISIBILITY_SETTINGS ) \
|
||||
#define CREATE_PP_GAS(ITEM, VERTICAL_COLUMN, COLOR, COLOR_ALERT, THRESHOULD_SETTINGS, VISIBILITY_SETTINGS) \
|
||||
setupItem(ITEM, timeAxis, gasYAxis, dataModel, DivePlotDataModel::VERTICAL_COLUMN, DivePlotDataModel::TIME, 0); \
|
||||
ITEM->setThreshouldSettingsKey(THRESHOULD_SETTINGS); \
|
||||
ITEM->setVisibilitySettingsKey(VISIBILITY_SETTINGS); \
|
||||
ITEM->setColors(getColor(COLOR), getColor(COLOR_ALERT)); \
|
||||
ITEM->preferencesChanged(); \
|
||||
ITEM->setThreshouldSettingsKey(THRESHOULD_SETTINGS); \
|
||||
ITEM->setVisibilitySettingsKey(VISIBILITY_SETTINGS); \
|
||||
ITEM->setColors(getColor(COLOR), getColor(COLOR_ALERT)); \
|
||||
ITEM->preferencesChanged(); \
|
||||
ITEM->setZValue(99);
|
||||
|
||||
CREATE_PP_GAS( pn2GasItem, PN2, PN2, PN2_ALERT, "pn2threshold", "pn2graph");
|
||||
CREATE_PP_GAS( pheGasItem, PHE, PHE, PHE_ALERT, "phethreshold", "phegraph");
|
||||
CREATE_PP_GAS( po2GasItem, PO2, PO2, PO2_ALERT, "po2threshold", "po2graph");
|
||||
CREATE_PP_GAS(pn2GasItem, PN2, PN2, PN2_ALERT, "pn2threshold", "pn2graph");
|
||||
CREATE_PP_GAS(pheGasItem, PHE, PHE, PHE_ALERT, "phethreshold", "phegraph");
|
||||
CREATE_PP_GAS(po2GasItem, PO2, PO2, PO2_ALERT, "po2threshold", "po2graph");
|
||||
#undef CREATE_PP_GAS
|
||||
|
||||
temperatureAxis->setTextVisible(false);
|
||||
|
|
@ -205,7 +204,7 @@ void ProfileWidget2::setupItemOnScene()
|
|||
cylinderPressureAxis->setLinesVisible(false);
|
||||
timeAxis->setLinesVisible(true);
|
||||
profileYAxis->setLinesVisible(true);
|
||||
gasYAxis->setZValue(timeAxis->zValue()+1);
|
||||
gasYAxis->setZValue(timeAxis->zValue() + 1);
|
||||
heartBeatAxis->setTextVisible(true);
|
||||
heartBeatAxis->setLinesVisible(true);
|
||||
}
|
||||
|
|
@ -229,51 +228,51 @@ void ProfileWidget2::setupItemSizes()
|
|||
itemPos.depth.pos.on.setY(3);
|
||||
itemPos.depth.pos.off.setX(-2);
|
||||
itemPos.depth.pos.off.setY(3);
|
||||
itemPos.depth.expanded.setP1(QPointF(0,0));
|
||||
itemPos.depth.expanded.setP2(QPointF(0,86));
|
||||
itemPos.depth.shrinked.setP1(QPointF(0,0));
|
||||
itemPos.depth.shrinked.setP2(QPointF(0,60));
|
||||
itemPos.depth.expanded.setP1(QPointF(0, 0));
|
||||
itemPos.depth.expanded.setP2(QPointF(0, 86));
|
||||
itemPos.depth.shrinked.setP1(QPointF(0, 0));
|
||||
itemPos.depth.shrinked.setP2(QPointF(0, 60));
|
||||
|
||||
// Time Axis Config
|
||||
itemPos.time.pos.on.setX(3);
|
||||
itemPos.time.pos.on.setY(95);
|
||||
itemPos.time.pos.off.setX(3);
|
||||
itemPos.time.pos.off.setY(110);
|
||||
itemPos.time.expanded.setP1(QPointF(0,0));
|
||||
itemPos.time.expanded.setP2(QPointF(94,0));
|
||||
itemPos.time.expanded.setP1(QPointF(0, 0));
|
||||
itemPos.time.expanded.setP2(QPointF(94, 0));
|
||||
|
||||
// Partial Gas Axis Config
|
||||
itemPos.partialPressure.pos.on.setX(97);
|
||||
itemPos.partialPressure.pos.on.setY(65);
|
||||
itemPos.partialPressure.pos.off.setX(110);
|
||||
itemPos.partialPressure.pos.off.setY(63);
|
||||
itemPos.partialPressure.expanded.setP1(QPointF(0,0));
|
||||
itemPos.partialPressure.expanded.setP2(QPointF(0,30));
|
||||
itemPos.partialPressure.expanded.setP1(QPointF(0, 0));
|
||||
itemPos.partialPressure.expanded.setP2(QPointF(0, 30));
|
||||
|
||||
// cylinder axis config
|
||||
itemPos.cylinder.pos.on.setX(3);
|
||||
itemPos.cylinder.pos.on.setY(20);
|
||||
itemPos.cylinder.pos.off.setX(-10);
|
||||
itemPos.cylinder.pos.off.setY(20);
|
||||
itemPos.cylinder.expanded.setP1(QPointF(0,15));
|
||||
itemPos.cylinder.expanded.setP2(QPointF(0,50));
|
||||
itemPos.cylinder.shrinked.setP1(QPointF(0,0));
|
||||
itemPos.cylinder.shrinked.setP2(QPointF(0,20));
|
||||
itemPos.cylinder.expanded.setP1(QPointF(0, 15));
|
||||
itemPos.cylinder.expanded.setP2(QPointF(0, 50));
|
||||
itemPos.cylinder.shrinked.setP1(QPointF(0, 0));
|
||||
itemPos.cylinder.shrinked.setP2(QPointF(0, 20));
|
||||
|
||||
// Temperature axis config
|
||||
itemPos.temperature.pos.on.setX(3);
|
||||
itemPos.temperature.pos.on.setY(40);
|
||||
itemPos.temperature.pos.off.setX(-10);
|
||||
itemPos.temperature.pos.off.setY(40);
|
||||
itemPos.temperature.expanded.setP1(QPointF(0,30));
|
||||
itemPos.temperature.expanded.setP2(QPointF(0,50));
|
||||
itemPos.temperature.shrinked.setP1(QPointF(0,5));
|
||||
itemPos.temperature.shrinked.setP2(QPointF(0,15));
|
||||
itemPos.temperature.expanded.setP1(QPointF(0, 30));
|
||||
itemPos.temperature.expanded.setP2(QPointF(0, 50));
|
||||
itemPos.temperature.shrinked.setP1(QPointF(0, 5));
|
||||
itemPos.temperature.shrinked.setP2(QPointF(0, 15));
|
||||
|
||||
itemPos.heartBeat.pos.on.setX(3);
|
||||
itemPos.heartBeat.pos.on.setY(60);
|
||||
itemPos.heartBeat.expanded.setP1(QPointF(0,0));
|
||||
itemPos.heartBeat.expanded.setP2(QPointF(0,20));
|
||||
itemPos.heartBeat.expanded.setP1(QPointF(0, 0));
|
||||
itemPos.heartBeat.expanded.setP2(QPointF(0, 20));
|
||||
|
||||
itemPos.dcLabel.on.setX(3);
|
||||
itemPos.dcLabel.on.setY(100);
|
||||
|
|
@ -281,7 +280,7 @@ void ProfileWidget2::setupItemSizes()
|
|||
itemPos.dcLabel.off.setY(100);
|
||||
}
|
||||
|
||||
void ProfileWidget2::setupItem(AbstractProfilePolygonItem* item, DiveCartesianAxis* hAxis, DiveCartesianAxis* vAxis, DivePlotDataModel* model, int vData, int hData, int zValue)
|
||||
void ProfileWidget2::setupItem(AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, DiveCartesianAxis *vAxis, DivePlotDataModel *model, int vData, int hData, int zValue)
|
||||
{
|
||||
item->setHorizontalAxis(hAxis);
|
||||
item->setVerticalAxis(vAxis);
|
||||
|
|
@ -306,7 +305,7 @@ void ProfileWidget2::setupSceneAndFlags()
|
|||
}
|
||||
|
||||
// Currently just one dive, but the plan is to enable All of the selected dives.
|
||||
void ProfileWidget2::plotDives(QList<dive*> dives)
|
||||
void ProfileWidget2::plotDives(QList<dive *> dives)
|
||||
{
|
||||
// I Know that it's a list, but currently we are
|
||||
// using just the first.
|
||||
|
|
@ -368,7 +367,7 @@ void ProfileWidget2::plotDives(QList<dive*> dives)
|
|||
timeAxis->setMaximum(maxtime);
|
||||
rulerItem->setPlotInfo(pInfo);
|
||||
int i, incr;
|
||||
static int increments[8] = { 10, 20, 30, 60, 5*60, 10*60, 15*60, 30*60 };
|
||||
static int increments[8] = { 10, 20, 30, 60, 5 * 60, 10 * 60, 15 * 60, 30 * 60 };
|
||||
/* Time markers: at most every 10 seconds, but no more than 12 markers.
|
||||
* We start out with 10 seconds and increment up to 30 minutes,
|
||||
* depending on the dive time.
|
||||
|
|
@ -387,7 +386,7 @@ void ProfileWidget2::plotDives(QList<dive*> dives)
|
|||
cylinderPressureAxis->setMinimum(pInfo.minpressure);
|
||||
cylinderPressureAxis->setMaximum(pInfo.maxpressure);
|
||||
meanDepth->setMeanDepth(pInfo.meandepth);
|
||||
meanDepth->setLine(0,0,timeAxis->posAtValue(d->duration.seconds),0);
|
||||
meanDepth->setLine(0, 0, timeAxis->posAtValue(d->duration.seconds), 0);
|
||||
meanDepth->animateMoveTo(3, profileYAxis->posAtValue(pInfo.meandepth));
|
||||
|
||||
dataModel->emitDataChanged();
|
||||
|
|
@ -409,7 +408,7 @@ void ProfileWidget2::plotDives(QList<dive*> dives)
|
|||
event = event->next;
|
||||
}
|
||||
// Only set visible the ones that should be visible, but how?
|
||||
Q_FOREACH(DiveEventItem *event, eventItems){
|
||||
Q_FOREACH(DiveEventItem * event, eventItems) {
|
||||
event->setVisible(true);
|
||||
// qDebug() << event->getEvent()->name << "@" << event->getEvent()->time.seconds;
|
||||
}
|
||||
|
|
@ -420,35 +419,35 @@ void ProfileWidget2::settingsChanged()
|
|||
{
|
||||
QSettings s;
|
||||
s.beginGroup("TecDetails");
|
||||
if(s.value("phegraph").toBool()|| s.value("po2graph").toBool()|| s.value("pn2graph").toBool()){
|
||||
if (s.value("phegraph").toBool() || s.value("po2graph").toBool() || s.value("pn2graph").toBool()) {
|
||||
profileYAxis->animateChangeLine(itemPos.depth.shrinked);
|
||||
temperatureAxis->animateChangeLine(itemPos.temperature.shrinked);
|
||||
cylinderPressureAxis->animateChangeLine(itemPos.cylinder.shrinked);
|
||||
}else{
|
||||
} else {
|
||||
profileYAxis->animateChangeLine(itemPos.depth.expanded);
|
||||
temperatureAxis->animateChangeLine(itemPos.temperature.expanded);
|
||||
cylinderPressureAxis->animateChangeLine(itemPos.cylinder.expanded);
|
||||
}
|
||||
if(s.value("zoomed_plot").toBool() != isPlotZoomed){
|
||||
if (s.value("zoomed_plot").toBool() != isPlotZoomed) {
|
||||
isPlotZoomed = s.value("zoomed_plot").toBool();
|
||||
int diveId = dataModel->id();
|
||||
dataModel->clear();
|
||||
plotDives(QList<dive*>() << getDiveById(diveId));
|
||||
plotDives(QList<dive *>() << getDiveById(diveId));
|
||||
}
|
||||
|
||||
if(currentState == PROFILE){
|
||||
if (currentState == PROFILE) {
|
||||
bool rulerVisible = s.value("rulergraph", false).toBool();
|
||||
rulerItem->setVisible(rulerVisible);
|
||||
rulerItem->destNode()->setVisible(rulerVisible );
|
||||
rulerItem->sourceNode()->setVisible(rulerVisible );
|
||||
}else{
|
||||
rulerItem->destNode()->setVisible(rulerVisible);
|
||||
rulerItem->sourceNode()->setVisible(rulerVisible);
|
||||
} else {
|
||||
rulerItem->setVisible(false);
|
||||
rulerItem->destNode()->setVisible(false);
|
||||
rulerItem->sourceNode()->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
void ProfileWidget2::resizeEvent(QResizeEvent* event)
|
||||
void ProfileWidget2::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QGraphicsView::resizeEvent(event);
|
||||
fitInView(sceneRect(), Qt::IgnoreAspectRatio);
|
||||
|
|
@ -457,10 +456,10 @@ void ProfileWidget2::resizeEvent(QResizeEvent* event)
|
|||
|
||||
void ProfileWidget2::fixBackgroundPos()
|
||||
{
|
||||
if(currentState != EMPTY)
|
||||
if (currentState != EMPTY)
|
||||
return;
|
||||
QPixmap toBeScaled;
|
||||
if (!backgrounds.keys().contains(backgroundFile)){
|
||||
if (!backgrounds.keys().contains(backgroundFile)) {
|
||||
backgrounds[backgroundFile] = QPixmap(backgroundFile);
|
||||
}
|
||||
toBeScaled = backgrounds[backgroundFile];
|
||||
|
|
@ -470,7 +469,7 @@ void ProfileWidget2::fixBackgroundPos()
|
|||
background->setX(mapToScene(x, 0).x());
|
||||
}
|
||||
|
||||
void ProfileWidget2::wheelEvent(QWheelEvent* event)
|
||||
void ProfileWidget2::wheelEvent(QWheelEvent *event)
|
||||
{
|
||||
QPoint toolTipPos = mapFromScene(toolTipItem->pos());
|
||||
double scaleFactor = 1.15;
|
||||
|
|
@ -486,9 +485,9 @@ void ProfileWidget2::wheelEvent(QWheelEvent* event)
|
|||
toolTipItem->setPos(mapToScene(toolTipPos));
|
||||
}
|
||||
|
||||
void ProfileWidget2::scrollViewTo(const QPoint& pos)
|
||||
void ProfileWidget2::scrollViewTo(const QPoint &pos)
|
||||
{
|
||||
/* since we cannot use translate() directly on the scene we hack on
|
||||
/* since we cannot use translate() directly on the scene we hack on
|
||||
* the scroll bars (hidden) functionality */
|
||||
if (!zoomLevel)
|
||||
return;
|
||||
|
|
@ -500,7 +499,7 @@ void ProfileWidget2::scrollViewTo(const QPoint& pos)
|
|||
hs->setValue(xRat * hs->maximum());
|
||||
}
|
||||
|
||||
void ProfileWidget2::mouseMoveEvent(QMouseEvent* event)
|
||||
void ProfileWidget2::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
toolTipItem->refresh(mapToScene(event->pos()));
|
||||
QPoint toolTipPos = mapFromScene(toolTipItem->pos());
|
||||
|
|
@ -514,8 +513,8 @@ void ProfileWidget2::mouseMoveEvent(QMouseEvent* event)
|
|||
|
||||
bool ProfileWidget2::eventFilter(QObject *object, QEvent *event)
|
||||
{
|
||||
QGraphicsScene *s = qobject_cast<QGraphicsScene*>(object);
|
||||
if (s && event->type() == QEvent::GraphicsSceneHelp){
|
||||
QGraphicsScene *s = qobject_cast<QGraphicsScene *>(object);
|
||||
if (s && event->type() == QEvent::GraphicsSceneHelp) {
|
||||
event->ignore();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -529,13 +528,13 @@ void ProfileWidget2::setEmptyState()
|
|||
return;
|
||||
|
||||
dataModel->clear();
|
||||
backgroundFile = QString(":poster%1").arg( rand()%3 +1);
|
||||
backgroundFile = QString(":poster%1").arg(rand() % 3 + 1);
|
||||
currentState = EMPTY;
|
||||
fixBackgroundPos();
|
||||
profileYAxis->setPos(itemPos.depth.pos.off);
|
||||
gasYAxis->setPos(itemPos.partialPressure.pos.off);
|
||||
timeAxis->setPos(itemPos.time.pos.off);
|
||||
background->setY( itemPos.background.on.y());
|
||||
background->setY(itemPos.background.on.y());
|
||||
background->setVisible(true);
|
||||
toolTipItem->setVisible(false);
|
||||
temperatureAxis->setPos(itemPos.temperature.pos.off);
|
||||
|
|
@ -547,10 +546,10 @@ void ProfileWidget2::setEmptyState()
|
|||
rulerItem->setVisible(false);
|
||||
rulerItem->destNode()->setVisible(false);
|
||||
rulerItem->sourceNode()->setVisible(false);
|
||||
Q_FOREACH(DiveCalculatedTissue *tissue, allTissues){
|
||||
Q_FOREACH(DiveCalculatedTissue * tissue, allTissues) {
|
||||
tissue->setVisible(false);
|
||||
}
|
||||
Q_FOREACH(DiveEventItem *event, eventItems){
|
||||
Q_FOREACH(DiveEventItem * event, eventItems) {
|
||||
event->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
|
@ -570,11 +569,11 @@ void ProfileWidget2::setProfileState()
|
|||
profileYAxis->setPos(itemPos.depth.pos.on);
|
||||
QSettings s;
|
||||
s.beginGroup("TecDetails");
|
||||
if(s.value("phegraph").toBool()|| s.value("po2graph").toBool()|| s.value("pn2graph").toBool()){
|
||||
if (s.value("phegraph").toBool() || s.value("po2graph").toBool() || s.value("pn2graph").toBool()) {
|
||||
profileYAxis->setLine(itemPos.depth.shrinked);
|
||||
temperatureAxis->setLine(itemPos.temperature.shrinked);
|
||||
cylinderPressureAxis->setLine(itemPos.cylinder.shrinked);
|
||||
}else{
|
||||
} else {
|
||||
profileYAxis->setLine(itemPos.depth.expanded);
|
||||
temperatureAxis->setLine(itemPos.temperature.expanded);
|
||||
cylinderPressureAxis->setLine(itemPos.cylinder.expanded);
|
||||
|
|
@ -598,23 +597,23 @@ void ProfileWidget2::setProfileState()
|
|||
diveCeiling->setVisible(s.value("calcceiling").toBool());
|
||||
reportedCeiling->setVisible(s.value("dcceiling").toBool());
|
||||
|
||||
if(s.value("calcalltissues").toBool()){
|
||||
Q_FOREACH(DiveCalculatedTissue *tissue, allTissues){
|
||||
if (s.value("calcalltissues").toBool()) {
|
||||
Q_FOREACH(DiveCalculatedTissue * tissue, allTissues) {
|
||||
tissue->setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool rulerVisible = s.value("rulergraph", false).toBool();
|
||||
rulerItem->setVisible(rulerVisible);
|
||||
rulerItem->destNode()->setVisible(rulerVisible );
|
||||
rulerItem->sourceNode()->setVisible(rulerVisible );
|
||||
rulerItem->destNode()->setVisible(rulerVisible);
|
||||
rulerItem->sourceNode()->setVisible(rulerVisible);
|
||||
}
|
||||
|
||||
extern struct ev_select *ev_namelist;
|
||||
extern int evn_allocated;
|
||||
extern int evn_used;
|
||||
|
||||
void ProfileWidget2::contextMenuEvent(QContextMenuEvent* event)
|
||||
void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event)
|
||||
{
|
||||
if (selected_dive == -1)
|
||||
return;
|
||||
|
|
@ -625,26 +624,26 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent* event)
|
|||
int rowCount = model->rowCount();
|
||||
for (int i = 0; i < rowCount; i++) {
|
||||
QAction *action = new QAction(&m);
|
||||
action->setText( model->data(model->index(i, 0),Qt::DisplayRole).toString());
|
||||
action->setText(model->data(model->index(i, 0), Qt::DisplayRole).toString());
|
||||
connect(action, SIGNAL(triggered(bool)), this, SLOT(changeGas()));
|
||||
action->setData(event->globalPos());
|
||||
gasChange->addAction(action);
|
||||
}
|
||||
QAction *action = m.addAction(tr("Add Bookmark"), this, SLOT(addBookmark()));
|
||||
action->setData(event->globalPos());
|
||||
QList<QGraphicsItem*> itemsAtPos = scene()->items(mapToScene(mapFromGlobal(event->globalPos())));
|
||||
Q_FOREACH(QGraphicsItem *i, itemsAtPos) {
|
||||
EventItem *item = dynamic_cast<EventItem*>(i);
|
||||
QList<QGraphicsItem *> itemsAtPos = scene()->items(mapToScene(mapFromGlobal(event->globalPos())));
|
||||
Q_FOREACH(QGraphicsItem * i, itemsAtPos) {
|
||||
EventItem *item = dynamic_cast<EventItem *>(i);
|
||||
if (!item)
|
||||
continue;
|
||||
action = new QAction(&m);
|
||||
action->setText(tr("Remove Event"));
|
||||
action->setData(QVariant::fromValue<void*>(item)); // so we know what to remove.
|
||||
action->setData(QVariant::fromValue<void *>(item)); // so we know what to remove.
|
||||
connect(action, SIGNAL(triggered(bool)), this, SLOT(removeEvent()));
|
||||
m.addAction(action);
|
||||
action = new QAction(&m);
|
||||
action->setText(tr("Hide similar events"));
|
||||
action->setData(QVariant::fromValue<void*>(item));
|
||||
action->setData(QVariant::fromValue<void *>(item));
|
||||
connect(action, SIGNAL(triggered(bool)), this, SLOT(hideEvents()));
|
||||
m.addAction(action);
|
||||
break;
|
||||
|
|
@ -665,7 +664,7 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent* event)
|
|||
|
||||
void ProfileWidget2::changeGas()
|
||||
{
|
||||
QAction *action = qobject_cast<QAction*>(sender());
|
||||
QAction *action = qobject_cast<QAction *>(sender());
|
||||
QPointF scenePos = mapToScene(mapFromGlobal(action->data().toPoint()));
|
||||
QString gas = action->text();
|
||||
// backup the things on the dataModel, since we will clear that out.
|
||||
|
|
@ -684,5 +683,5 @@ void ProfileWidget2::changeGas()
|
|||
// force the redraw of the dive.
|
||||
//TODO: find a way to make this do not need a full redraw
|
||||
dataModel->clear();
|
||||
plotDives(QList<dive*>() << getDiveById(diveId));
|
||||
plotDives(QList<dive *>() << getDiveById(diveId));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,32 +44,50 @@ class AbstractProfilePolygonItem;
|
|||
class ProfileWidget2 : public QGraphicsView {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum State{ EMPTY, PROFILE, EDIT, ADD, PLAN, INVALID };
|
||||
enum Items{BACKGROUND, PROFILE_Y_AXIS, GAS_Y_AXIS, TIME_AXIS, DEPTH_CONTROLLER, TIME_CONTROLLER, COLUMNS};
|
||||
enum State {
|
||||
EMPTY,
|
||||
PROFILE,
|
||||
EDIT,
|
||||
ADD,
|
||||
PLAN,
|
||||
INVALID
|
||||
};
|
||||
enum Items {
|
||||
BACKGROUND,
|
||||
PROFILE_Y_AXIS,
|
||||
GAS_Y_AXIS,
|
||||
TIME_AXIS,
|
||||
DEPTH_CONTROLLER,
|
||||
TIME_CONTROLLER,
|
||||
COLUMNS
|
||||
};
|
||||
|
||||
ProfileWidget2(QWidget *parent);
|
||||
void plotDives(QList<dive*> dives);
|
||||
virtual bool eventFilter(QObject*, QEvent*);
|
||||
void setupItem( AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, DiveCartesianAxis *vAxis, DivePlotDataModel *model, int vData, int hData, int zValue);
|
||||
void plotDives(QList<dive *> dives);
|
||||
virtual bool eventFilter(QObject *, QEvent *);
|
||||
void setupItem(AbstractProfilePolygonItem *item, DiveCartesianAxis *hAxis, DiveCartesianAxis *vAxis, DivePlotDataModel *model, int vData, int hData, int zValue);
|
||||
|
||||
public slots: // Necessary to call from QAction's signals.
|
||||
public
|
||||
slots: // Necessary to call from QAction's signals.
|
||||
void settingsChanged();
|
||||
void setEmptyState();
|
||||
void setProfileState();
|
||||
void changeGas();
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent(QResizeEvent* event);
|
||||
virtual void wheelEvent(QWheelEvent* event);
|
||||
virtual void mouseMoveEvent(QMouseEvent* event);
|
||||
virtual void contextMenuEvent(QContextMenuEvent* event);
|
||||
virtual void resizeEvent(QResizeEvent *event);
|
||||
virtual void wheelEvent(QWheelEvent *event);
|
||||
virtual void mouseMoveEvent(QMouseEvent *event);
|
||||
virtual void contextMenuEvent(QContextMenuEvent *event);
|
||||
|
||||
private: /*methods*/
|
||||
void fixBackgroundPos();
|
||||
void scrollViewTo(const QPoint& pos);
|
||||
void scrollViewTo(const QPoint &pos);
|
||||
void setupSceneAndFlags();
|
||||
void setupItemSizes();
|
||||
void addItemsToScene();
|
||||
void setupItemOnScene();
|
||||
|
||||
private:
|
||||
DivePlotDataModel *dataModel;
|
||||
State currentState;
|
||||
|
|
@ -92,10 +110,10 @@ private:
|
|||
DiveCartesianAxis *cylinderPressureAxis;
|
||||
DiveGasPressureItem *gasPressureItem;
|
||||
MeanDepthLine *meanDepth;
|
||||
QList<DiveEventItem*> eventItems;
|
||||
QList<DiveEventItem *> eventItems;
|
||||
DiveTextItem *diveComputerText;
|
||||
DiveCalculatedCeiling *diveCeiling;
|
||||
QList<DiveCalculatedTissue*> allTissues;
|
||||
QList<DiveCalculatedTissue *> allTissues;
|
||||
DiveReportedCeiling *reportedCeiling;
|
||||
PartialPressureGasItem *pn2GasItem;
|
||||
PartialPressureGasItem *pheGasItem;
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@
|
|||
#include "profile.h"
|
||||
#include "display.h"
|
||||
|
||||
RulerNodeItem2::RulerNodeItem2(struct plot_info& info) : pInfo(info), entry(NULL) , ruler(NULL)
|
||||
RulerNodeItem2::RulerNodeItem2(struct plot_info &info) : pInfo(info), entry(NULL), ruler(NULL)
|
||||
{
|
||||
setRect(QRect(QPoint(-8,8),QPoint(8,-8)));
|
||||
setRect(QRect(QPoint(-8, 8), QPoint(8, -8)));
|
||||
setBrush(QColor(0xff, 0, 0, 127));
|
||||
setPen(QColor("#FF0000"));
|
||||
setFlag(QGraphicsItem::ItemIsMovable);
|
||||
|
|
@ -30,7 +30,7 @@ void RulerNodeItem2::setRuler(RulerItem2 *r)
|
|||
|
||||
void RulerNodeItem2::recalculate()
|
||||
{
|
||||
struct plot_data *data = pInfo.entry+(pInfo.nr-1);
|
||||
struct plot_data *data = pInfo.entry + (pInfo.nr - 1);
|
||||
uint16_t count = 0;
|
||||
if (x() < 0) {
|
||||
setPos(0, y());
|
||||
|
|
@ -38,13 +38,13 @@ void RulerNodeItem2::recalculate()
|
|||
setPos(timeAxis->posAtValue(data->sec), y());
|
||||
} else {
|
||||
data = pInfo.entry;
|
||||
count=0;
|
||||
count = 0;
|
||||
while (timeAxis->posAtValue(data->sec) < x() && count < pInfo.nr) {
|
||||
data = pInfo.entry+count;
|
||||
data = pInfo.entry + count;
|
||||
count++;
|
||||
}
|
||||
setPos(timeAxis->posAtValue(data->sec), depthAxis->posAtValue(data->depth));
|
||||
entry=data;
|
||||
entry = data;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -61,8 +61,7 @@ QVariant RulerNodeItem2::itemChange(GraphicsItemChange change, const QVariant &v
|
|||
return QGraphicsEllipseItem::itemChange(change, value);
|
||||
}
|
||||
|
||||
RulerItem2::RulerItem2():
|
||||
timeAxis(NULL),
|
||||
RulerItem2::RulerItem2() : timeAxis(NULL),
|
||||
depthAxis(NULL),
|
||||
source(new RulerNodeItem2(pInfo)),
|
||||
dest(new RulerNodeItem2(pInfo)),
|
||||
|
|
@ -112,7 +111,6 @@ void RulerItem2::recalculate()
|
|||
textItem->resetTransform();
|
||||
textItem->setPos(startPoint);
|
||||
textItem->rotate(globalLine.angle() * -1);
|
||||
|
||||
}
|
||||
|
||||
RulerNodeItem2 *RulerItem2::sourceNode() const
|
||||
|
|
@ -147,7 +145,7 @@ QPainterPath RulerItem2::shape() const
|
|||
QLineF line_n = line.normalVector();
|
||||
line_n.setLength(height);
|
||||
if (paint_direction == 1)
|
||||
line_n.setAngle(line_n.angle()+180);
|
||||
line_n.setAngle(line_n.angle() + 180);
|
||||
path.moveTo(startPoint);
|
||||
path.lineTo(line_n.p2());
|
||||
path.lineTo(line_n.p2() + QPointF(line.dx(), line.dy()));
|
||||
|
|
@ -164,7 +162,7 @@ void RulerItem2::setPlotInfo(plot_info info)
|
|||
source->recalculate();
|
||||
}
|
||||
|
||||
void RulerItem2::setAxis(DiveCartesianAxis* time, DiveCartesianAxis* depth)
|
||||
void RulerItem2::setAxis(DiveCartesianAxis *time, DiveCartesianAxis *depth)
|
||||
{
|
||||
timeAxis = time;
|
||||
depthAxis = depth;
|
||||
|
|
|
|||
|
|
@ -10,37 +10,36 @@
|
|||
struct plot_data;
|
||||
class RulerItem2;
|
||||
|
||||
class RulerNodeItem2 : public QObject, public QGraphicsEllipseItem
|
||||
{
|
||||
class RulerNodeItem2 : public QObject, public QGraphicsEllipseItem {
|
||||
Q_OBJECT
|
||||
friend class RulerItem2;
|
||||
|
||||
public:
|
||||
explicit RulerNodeItem2(struct plot_info& info);
|
||||
explicit RulerNodeItem2(struct plot_info &info);
|
||||
void setRuler(RulerItem2 *r);
|
||||
void recalculate();
|
||||
|
||||
protected:
|
||||
QVariant itemChange(GraphicsItemChange change, const QVariant & value );
|
||||
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
|
||||
|
||||
private:
|
||||
struct plot_info &pInfo;
|
||||
struct plot_data *entry;
|
||||
RulerItem2* ruler;
|
||||
RulerItem2 *ruler;
|
||||
DiveCartesianAxis *timeAxis;
|
||||
DiveCartesianAxis *depthAxis;
|
||||
};
|
||||
|
||||
class RulerItem2 : public QGraphicsObject
|
||||
{
|
||||
class RulerItem2 : public QGraphicsObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit RulerItem2();
|
||||
void recalculate();
|
||||
|
||||
void setPlotInfo(struct plot_info pInfo);
|
||||
RulerNodeItem2* sourceNode() const;
|
||||
RulerNodeItem2* destNode() const;
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * widget = 0);
|
||||
RulerNodeItem2 *sourceNode() const;
|
||||
RulerNodeItem2 *destNode() const;
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
QRectF boundingRect() const;
|
||||
QPainterPath shape() const;
|
||||
void setAxis(DiveCartesianAxis *time, DiveCartesianAxis *depth);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue