aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2014-01-16 16:21:23 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-01-17 06:18:00 +0700
commit254beef5d4c0ead123556ffbc5e37dd2cc81366e (patch)
treeafd1a1babb9d3cbd727993c9c21d5508e4c61461
parent1f8078828663f6bfff768cbc2fb36e6643eb3d0e (diff)
downloadsubsurface-254beef5d4c0ead123556ffbc5e37dd2cc81366e.tar.gz
Transform the DiveProfileItem to an Abstract Generalization
The DiveProfileItem contained much of the complexity and algorithms for almost all line-based items on the canvas, so I transformed that to a general abstraction and implemented a new DiveProfileItem that uses it. this should reduce a bit of code since the implementation of the PP Graphs, Temperature Cylinder Pressure and maybe a few others will only need to reimplement the paint() and the modelDataChanged() methods. The rest is ready. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-ui/profile/diveeventitem.cpp11
-rw-r--r--qt-ui/profile/diveeventitem.h4
-rw-r--r--qt-ui/profile/diveprofileitem.cpp33
-rw-r--r--qt-ui/profile/diveprofileitem.h16
4 files changed, 37 insertions, 27 deletions
diff --git a/qt-ui/profile/diveeventitem.cpp b/qt-ui/profile/diveeventitem.cpp
index a6153f96f..8709a1484 100644
--- a/qt-ui/profile/diveeventitem.cpp
+++ b/qt-ui/profile/diveeventitem.cpp
@@ -14,19 +14,19 @@ DiveEventItem::DiveEventItem(QObject* parent): DivePixmapItem(parent),
void DiveEventItem::setHorizontalAxis(DiveCartesianAxis* axis)
{
hAxis = axis;
- recalculate();
+ recalculatePos();
}
void DiveEventItem::setModel(DivePlotDataModel* model)
{
dataModel = model;
- recalculate();
+ recalculatePos();
}
void DiveEventItem::setVerticalAxis(DiveCartesianAxis* axis)
{
vAxis = axis;
- recalculate();
+ recalculatePos();
}
void DiveEventItem::setEvent(struct event* ev)
@@ -34,7 +34,7 @@ void DiveEventItem::setEvent(struct event* ev)
internalEvent = ev;
setupPixmap();
setupToolTipString();
- recalculate();
+ recalculatePos();
}
void DiveEventItem::setupPixmap()
@@ -102,12 +102,11 @@ void DiveEventItem::eventVisibilityChanged(const QString& eventName, bool visibl
}
-void DiveEventItem::recalculate()
+void DiveEventItem::recalculatePos()
{
if (!vAxis || !hAxis || !internalEvent || !dataModel){
return;
}
- qDebug() << "Calculating.";
QModelIndexList result = dataModel->match(dataModel->index(0,DivePlotDataModel::TIME), Qt::DisplayRole, internalEvent->time.seconds );
if(result.isEmpty()){
hide();
diff --git a/qt-ui/profile/diveeventitem.h b/qt-ui/profile/diveeventitem.h
index 896036e8d..d729daa9f 100644
--- a/qt-ui/profile/diveeventitem.h
+++ b/qt-ui/profile/diveeventitem.h
@@ -16,10 +16,10 @@ public:
void setVerticalAxis(DiveCartesianAxis *axis);
void setHorizontalAxis(DiveCartesianAxis *axis);
void setModel(DivePlotDataModel *model);
- void recalculate();
private:
void setupToolTipString();
- void setupPixmap();
+ void recalculatePos();
+ void setupPixmap();
DiveCartesianAxis *vAxis;
DiveCartesianAxis *hAxis;
DivePlotDataModel *dataModel;
diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp
index 398d71220..1a96d7009 100644
--- a/qt-ui/profile/diveprofileitem.cpp
+++ b/qt-ui/profile/diveprofileitem.cpp
@@ -7,43 +7,43 @@
#include <QPainter>
#include <QLinearGradient>
-DiveProfileItem::DiveProfileItem(): QObject(), QGraphicsPolygonItem(),
+AbstractProfilePolygonItem::AbstractProfilePolygonItem(): QObject(), QGraphicsPolygonItem(),
hAxis(NULL), vAxis(NULL), dataModel(NULL), hDataColumn(-1), vDataColumn(-1)
{
}
-void DiveProfileItem::setHorizontalAxis(DiveCartesianAxis* horizontal)
+void AbstractProfilePolygonItem::setHorizontalAxis(DiveCartesianAxis* horizontal)
{
hAxis = horizontal;
modelDataChanged();
}
-void DiveProfileItem::setHorizontalDataColumn(int column)
+void AbstractProfilePolygonItem::setHorizontalDataColumn(int column)
{
hDataColumn = column;
modelDataChanged();
}
-void DiveProfileItem::setModel(QAbstractTableModel* model)
+void AbstractProfilePolygonItem::setModel(QAbstractTableModel* model)
{
dataModel = model;
modelDataChanged();
}
-void DiveProfileItem::setVerticalAxis(DiveCartesianAxis* vertical)
+void AbstractProfilePolygonItem::setVerticalAxis(DiveCartesianAxis* vertical)
{
vAxis = vertical;
modelDataChanged();
}
-void DiveProfileItem::setVerticalDataColumn(int column)
+void AbstractProfilePolygonItem::setVerticalDataColumn(int column)
{
vDataColumn = column;
modelDataChanged();
}
-void DiveProfileItem::modelDataChanged()
+void AbstractProfilePolygonItem::modelDataChanged()
{
// We don't have enougth data to calculate things, quit.
if (!hAxis || !vAxis || !dataModel || hDataColumn == -1 || vDataColumn == -1)
@@ -62,13 +62,6 @@ void DiveProfileItem::modelDataChanged()
poly.append(point);
}
setPolygon(poly);
-
- // 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, poly.boundingRect().top(), 0, poly.boundingRect().bottom());
- pat.setColorAt(1, getColor(DEPTH_BOTTOM));
- pat.setColorAt(0, getColor(DEPTH_TOP));
- setBrush(QBrush(pat));
}
void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {
@@ -92,3 +85,15 @@ void DiveProfileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
painter->drawLine(polygon()[i-1],polygon()[i]);
}
}
+
+void DiveProfileItem::modelDataChanged(){
+ AbstractProfilePolygonItem::modelDataChanged();
+ if(polygon().isEmpty())
+ return;
+ // 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));
+ pat.setColorAt(0, getColor(DEPTH_TOP));
+ setBrush(QBrush(pat));
+} \ No newline at end of file
diff --git a/qt-ui/profile/diveprofileitem.h b/qt-ui/profile/diveprofileitem.h
index 1e8c0b296..171dec053 100644
--- a/qt-ui/profile/diveprofileitem.h
+++ b/qt-ui/profile/diveprofileitem.h
@@ -21,22 +21,22 @@
class DiveCartesianAxis;
class QAbstractTableModel;
-class DiveProfileItem : 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)
Q_PROPERTY(qreal y WRITE setY READ y)
public:
- DiveProfileItem();
+ AbstractProfilePolygonItem();
void setVerticalAxis(DiveCartesianAxis *vertical);
void setHorizontalAxis(DiveCartesianAxis *horizontal);
void setModel(QAbstractTableModel *model);
void setHorizontalDataColumn(int column);
void setVerticalDataColumn(int column);
- virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
+ virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0) = 0;
public slots:
- void modelDataChanged();
-private:
+ virtual void modelDataChanged();
+protected:
DiveCartesianAxis *hAxis;
DiveCartesianAxis *vAxis;
QAbstractTableModel *dataModel;
@@ -44,5 +44,11 @@ private:
int vDataColumn;
};
+class DiveProfileItem : public AbstractProfilePolygonItem{
+ Q_OBJECT
+public:
+ virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
+ virtual void modelDataChanged();
+};
#endif \ No newline at end of file