mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 06:15:26 +00:00
New profile: add placeholder code for the RulerItem
This patch just creates two files for the rulerItem, a .h and a .cpp. nothing was done to make it visible on the new profile yet - will do that on the next commits Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
1695894130
commit
52fe9101c8
4 changed files with 215 additions and 7 deletions
|
@ -807,11 +807,6 @@
|
|||
<string>Auto Group</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionToggleZoom">
|
||||
<property name="text">
|
||||
<string>Toggle &Zoom</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionYearlyStatistics">
|
||||
<property name="text">
|
||||
<string>&Yearly Statistics</string>
|
||||
|
|
161
qt-ui/profile/ruleritem.cpp
Normal file
161
qt-ui/profile/ruleritem.cpp
Normal file
|
@ -0,0 +1,161 @@
|
|||
#include "ruleritem.h"
|
||||
#include <QFont>
|
||||
#include <QFontMetrics>
|
||||
#include <QPainter>
|
||||
#include <QGraphicsScene>
|
||||
|
||||
#include "profile.h"
|
||||
#include "display.h"
|
||||
|
||||
RulerNodeItem2::RulerNodeItem2(QGraphicsItem *parent) : QGraphicsEllipseItem(parent), entry(NULL) , ruler(NULL)
|
||||
{
|
||||
setRect(QRect(QPoint(-8,8),QPoint(8,-8)));
|
||||
setBrush(QColor(0xff, 0, 0, 127));
|
||||
setPen(QColor("#FF0000"));
|
||||
setFlag(QGraphicsItem::ItemIsMovable);
|
||||
setFlag(ItemSendsGeometryChanges);
|
||||
setFlag(ItemIgnoresTransformations);
|
||||
}
|
||||
|
||||
void RulerNodeItem2::setRuler(RulerItem2 *r)
|
||||
{
|
||||
ruler = r;
|
||||
}
|
||||
|
||||
void RulerNodeItem2::recalculate()
|
||||
{
|
||||
// Port that away from the SCALEGC
|
||||
//struct plot_info *pi = &gc.pi;
|
||||
//struct plot_data *data = pi->entry+(pi->nr-1);
|
||||
//uint16_t count = 0;
|
||||
// if (x() < 0) {
|
||||
// setPos(0, y());
|
||||
// } else if (x() > SCALEXGC(data->sec)) {
|
||||
// setPos(SCALEXGC(data->sec), y());
|
||||
// } else {
|
||||
// data = pi->entry;
|
||||
// count=0;
|
||||
// while (SCALEXGC(data->sec) < x() && count < pi->nr) {
|
||||
// data = pi->entry+count;
|
||||
// count++;
|
||||
// }
|
||||
// setPos(SCALEGC(data->sec, data->depth));
|
||||
// entry=data;
|
||||
}
|
||||
|
||||
QVariant RulerNodeItem2::itemChange(GraphicsItemChange change, const QVariant &value)
|
||||
{
|
||||
if (change == ItemPositionHasChanged) {
|
||||
recalculate();
|
||||
if (ruler != NULL)
|
||||
ruler->recalculate();
|
||||
if (scene()) {
|
||||
scene()->update();
|
||||
}
|
||||
}
|
||||
return QGraphicsEllipseItem::itemChange(change, value);
|
||||
}
|
||||
|
||||
RulerItem2::RulerItem2(QGraphicsItem *parent, RulerNodeItem2 *sourceNode, RulerNodeItem2 *destNode) : QGraphicsObject(parent), source(sourceNode), dest(destNode)
|
||||
{
|
||||
recalculate();
|
||||
}
|
||||
|
||||
void RulerItem2::recalculate()
|
||||
{
|
||||
char buffer[500];
|
||||
QPointF tmp;
|
||||
QFont font;
|
||||
QFontMetrics fm(font);
|
||||
|
||||
if (source == NULL || dest == NULL)
|
||||
return;
|
||||
|
||||
prepareGeometryChange();
|
||||
startPoint = mapFromItem(source, 0, 0);
|
||||
endPoint = mapFromItem(dest, 0, 0);
|
||||
if (startPoint.x() > endPoint.x()) {
|
||||
tmp = endPoint;
|
||||
endPoint = startPoint;
|
||||
startPoint = tmp;
|
||||
}
|
||||
QLineF line(startPoint, endPoint);
|
||||
|
||||
compare_samples(source->entry, dest->entry, buffer, 500, 1);
|
||||
text = QString(buffer);
|
||||
|
||||
QRect r = fm.boundingRect(QRect(QPoint(10,-1*INT_MAX), QPoint(line.length()-10, 0)), Qt::TextWordWrap, text);
|
||||
if (r.height() < 10)
|
||||
height = 10;
|
||||
else
|
||||
height = r.height();
|
||||
|
||||
QLineF line_n = line.normalVector();
|
||||
line_n.setLength(height);
|
||||
if (scene()) {
|
||||
/* Determine whether we draw down or upwards */
|
||||
if (scene()->sceneRect().contains(line_n.p2()) &&
|
||||
scene()->sceneRect().contains(endPoint+QPointF(line_n.dx(),line_n.dy())))
|
||||
paint_direction = -1;
|
||||
else
|
||||
paint_direction = 1;
|
||||
}
|
||||
}
|
||||
|
||||
RulerNodeItem2 *RulerItem2::sourceNode() const
|
||||
{
|
||||
return source;
|
||||
}
|
||||
|
||||
RulerNodeItem2 *RulerItem2::destNode() const
|
||||
{
|
||||
return dest;
|
||||
}
|
||||
|
||||
void RulerItem2::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||
{
|
||||
Q_UNUSED(option);
|
||||
Q_UNUSED(widget);
|
||||
QLineF line(startPoint, endPoint);
|
||||
QLineF line_n = line.normalVector();
|
||||
painter->setPen(QColor(Qt::black));
|
||||
painter->setBrush(Qt::NoBrush);
|
||||
line_n.setLength(height);
|
||||
|
||||
if (paint_direction == 1)
|
||||
line_n.setAngle(line_n.angle()+180);
|
||||
painter->drawLine(line);
|
||||
painter->drawLine(line_n);
|
||||
painter->drawLine(line_n.p1() + QPointF(line.dx(), line.dy()), line_n.p2() + QPointF(line.dx(), line.dy()));
|
||||
|
||||
//Draw Text
|
||||
painter->save();
|
||||
painter->translate(startPoint.x(), startPoint.y());
|
||||
painter->rotate(line.angle()*-1);
|
||||
if (paint_direction == 1)
|
||||
painter->translate(0, height);
|
||||
painter->setPen(Qt::black);
|
||||
painter->drawText(QRectF(QPointF(10,-1*height), QPointF(line.length()-10, 0)), Qt::TextWordWrap, text);
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
QRectF RulerItem2::boundingRect() const
|
||||
{
|
||||
return shape().controlPointRect();
|
||||
}
|
||||
|
||||
QPainterPath RulerItem2::shape() const
|
||||
{
|
||||
QPainterPath path;
|
||||
QLineF line(startPoint, endPoint);
|
||||
QLineF line_n = line.normalVector();
|
||||
line_n.setLength(height);
|
||||
if (paint_direction == 1)
|
||||
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()));
|
||||
path.lineTo(endPoint);
|
||||
path.lineTo(startPoint);
|
||||
return path;
|
||||
}
|
50
qt-ui/profile/ruleritem.h
Normal file
50
qt-ui/profile/ruleritem.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
#ifndef RULERITEM_H
|
||||
#define RULERITEM_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QGraphicsEllipseItem>
|
||||
#include <QGraphicsObject>
|
||||
|
||||
struct plot_data;
|
||||
class RulerItem2;
|
||||
|
||||
class RulerNodeItem2 : public QObject, public QGraphicsEllipseItem
|
||||
{
|
||||
Q_OBJECT
|
||||
friend class RulerItem2;
|
||||
public:
|
||||
explicit RulerNodeItem2(QGraphicsItem* parent);
|
||||
void setRuler(RulerItem2 *r);
|
||||
void recalculate();
|
||||
|
||||
protected:
|
||||
QVariant itemChange(GraphicsItemChange change, const QVariant & value );
|
||||
|
||||
private:
|
||||
struct plot_data *entry;
|
||||
RulerItem2* ruler;
|
||||
};
|
||||
|
||||
class RulerItem2 : public QGraphicsObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit RulerItem2(QGraphicsItem* parent,
|
||||
RulerNodeItem2 *sourceMarker,
|
||||
RulerNodeItem2 *destMarker);
|
||||
void recalculate();
|
||||
|
||||
RulerNodeItem2* sourceNode() const;
|
||||
RulerNodeItem2* destNode() const;
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * widget = 0);
|
||||
QRectF boundingRect() const;
|
||||
QPainterPath shape() const;
|
||||
|
||||
private:
|
||||
QPointF startPoint, endPoint;
|
||||
RulerNodeItem2 *source, *dest;
|
||||
QString text;
|
||||
int height;
|
||||
int paint_direction;
|
||||
};
|
||||
#endif
|
|
@ -75,7 +75,8 @@ HEADERS = \
|
|||
qt-ui/profile/diveplotdatamodel.h \
|
||||
qt-ui/profile/diveprofileitem.h \
|
||||
qt-ui/profile/diveeventitem.h \
|
||||
qt-ui/profile/divetooltipitem.h
|
||||
qt-ui/profile/divetooltipitem.h \
|
||||
qt-ui/profile/ruleritem.h
|
||||
|
||||
SOURCES = \
|
||||
deco.c \
|
||||
|
@ -138,7 +139,8 @@ SOURCES = \
|
|||
qt-ui/profile/diveplotdatamodel.cpp \
|
||||
qt-ui/profile/diveprofileitem.cpp \
|
||||
qt-ui/profile/diveeventitem.cpp \
|
||||
qt-ui/profile/divetooltipitem.cpp
|
||||
qt-ui/profile/divetooltipitem.cpp \
|
||||
qt-ui/profile/ruleritem.cpp
|
||||
|
||||
linux*: SOURCES += linux.c
|
||||
mac: SOURCES += macos.c
|
||||
|
|
Loading…
Add table
Reference in a new issue