mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
2bf6f4e45d
Normally this is triggered when the DiveDetailsView component is completed, but since QML isn't recreating this component unless we switch to a dive a couple of spots in the dive list away from this one, we wouldn't get any changes in the data reflected in the profile. But since this now redraws the same dive that potentially was drawn last, we need to make sure we call plotDive() with force=true. I also suspect that this could help with the strange bug that sometimes we show a blank profile after certain edits. See #1013 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
70 lines
1.6 KiB
C++
70 lines
1.6 KiB
C++
#include "qmlprofile.h"
|
|
#include "profile-widget/profilewidget2.h"
|
|
#include "subsurface-core/dive.h"
|
|
#include <QTransform>
|
|
|
|
QMLProfile::QMLProfile(QQuickItem *parent) :
|
|
QQuickPaintedItem(parent),
|
|
m_devicePixelRatio(1.0),
|
|
m_margin(0)
|
|
{
|
|
setAntialiasing(true);
|
|
m_profileWidget = new ProfileWidget2(0);
|
|
m_profileWidget->setProfileState();
|
|
m_profileWidget->setPrintMode(true);
|
|
m_profileWidget->setFontPrintScale(0.8);
|
|
//m_profileWidget->setGeometry(this->geometry());
|
|
}
|
|
|
|
QMLProfile::~QMLProfile()
|
|
{
|
|
m_profileWidget->deleteLater();
|
|
}
|
|
|
|
void QMLProfile::paint(QPainter *painter)
|
|
{
|
|
// let's look at the intended size of the content and scale our scene accordingly
|
|
QRect rect = m_profileWidget->contentsRect();
|
|
qreal sceneSize = 104; // that should give us 2% margin all around (100x100 scene)
|
|
qreal sx = rect.width() / sceneSize;
|
|
qreal sy = rect.height() / sceneSize;
|
|
QTransform profileTransform;
|
|
profileTransform.scale(sx, sy);
|
|
m_profileWidget->setTransform(profileTransform);
|
|
m_profileWidget->render(painter);
|
|
}
|
|
|
|
void QMLProfile::setMargin(int margin)
|
|
{
|
|
m_margin = margin;
|
|
}
|
|
|
|
QString QMLProfile::diveId() const
|
|
{
|
|
return m_diveId;
|
|
}
|
|
|
|
void QMLProfile::setDiveId(const QString &diveId)
|
|
{
|
|
m_diveId = diveId;
|
|
struct dive *d = get_dive_by_uniq_id(m_diveId.toInt());
|
|
if (m_diveId.toInt() < 1)
|
|
return;
|
|
if (!d)
|
|
return;
|
|
qDebug() << "setDiveId called with valid dive" << d->number;
|
|
m_profileWidget->plotDive(d, true);
|
|
}
|
|
|
|
qreal QMLProfile::devicePixelRatio() const
|
|
{
|
|
return m_devicePixelRatio;
|
|
}
|
|
|
|
void QMLProfile::setDevicePixelRatio(qreal dpr)
|
|
{
|
|
if (dpr != m_devicePixelRatio) {
|
|
m_devicePixelRatio = dpr;
|
|
emit devicePixelRatioChanged();
|
|
}
|
|
}
|