summaryrefslogtreecommitdiffstats
path: root/qt-ui/profilegraphics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/profilegraphics.cpp')
-rw-r--r--qt-ui/profilegraphics.cpp199
1 files changed, 1 insertions, 198 deletions
diff --git a/qt-ui/profilegraphics.cpp b/qt-ui/profilegraphics.cpp
index 0bb78d7e6..d500b42e8 100644
--- a/qt-ui/profilegraphics.cpp
+++ b/qt-ui/profilegraphics.cpp
@@ -28,6 +28,7 @@
#include "../helpers.h"
#include "../planner.h"
#include "../gettextfromc.h"
+#include "profile/divetooltipitem.h"
#include <libdivecomputer/parser.h>
#include <libdivecomputer/version.h>
@@ -1448,204 +1449,6 @@ void ProfileGraphicsView::on_scaleAction()
zoomed_plot = !zoomed_plot;
refresh();
}
-
-void ToolTipItem::addToolTip(const QString& toolTip, const QIcon& icon)
-{
- QGraphicsPixmapItem *iconItem = 0;
- double yValue = title->boundingRect().height() + SPACING;
- Q_FOREACH(ToolTip t, toolTips) {
- yValue += t.second->boundingRect().height();
- }
- if (!icon.isNull()) {
- iconItem = new QGraphicsPixmapItem(icon.pixmap(ICON_SMALL,ICON_SMALL), this);
- iconItem->setPos(SPACING, yValue);
- }
-
- QGraphicsSimpleTextItem *textItem = new QGraphicsSimpleTextItem(toolTip, this);
- textItem->setPos(SPACING + ICON_SMALL + SPACING, yValue);
- textItem->setBrush(QBrush(Qt::white));
- textItem->setFlag(ItemIgnoresTransformations);
- toolTips.push_back(qMakePair(iconItem, textItem));
- expand();
-}
-
-void ToolTipItem::refresh(struct graphics_context *gc, QPointF pos)
-{
- clear();
- int time = (pos.x() * gc->maxtime) / gc->maxx;
- char buffer[500];
- get_plot_details(gc, time, buffer, 500);
- addToolTip(QString(buffer));
-
- QList<QGraphicsItem*> items = scene()->items(pos, Qt::IntersectsItemShape, Qt::DescendingOrder, transform());
- Q_FOREACH(QGraphicsItem *item, items) {
- if (!item->toolTip().isEmpty())
- addToolTip(item->toolTip());
- }
-
-}
-
-void ToolTipItem::clear()
-{
- Q_FOREACH(ToolTip t, toolTips) {
- delete t.first;
- delete t.second;
- }
- toolTips.clear();
-}
-
-void ToolTipItem::setRect(const QRectF& r)
-{
- // qDeleteAll(childItems());
- delete background;
-
- rectangle = r;
- setBrush(QBrush(Qt::white));
- setPen(QPen(Qt::black, 0.5));
-
- // 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);
- setPath(border);
-
- QPainterPath bg;
- bg.addRoundedRect(-1, -1, rectangle.width() + 3, rectangle.height() + 4, 3, 3);
-
- QColor c = QColor(Qt::black);
- c.setAlpha(155);
-
- QGraphicsPathItem *b = new QGraphicsPathItem(bg, this);
- b->setFlag(ItemStacksBehindParent);
- b->setFlags(ItemIgnoresTransformations);
- b->setBrush(c);
- b->setPen(QPen(QBrush(Qt::transparent), 0));
- b->setZValue(-10);
- background = b;
-
- updateTitlePosition();
-}
-
-void ToolTipItem::collapse()
-{
- QPropertyAnimation *animation = new QPropertyAnimation(this, "rect");
- animation->setDuration(100);
- animation->setStartValue(nextRectangle);
- animation->setEndValue(QRect(0, 0, ICON_SMALL, ICON_SMALL));
- animation->start(QAbstractAnimation::DeleteWhenStopped);
- clear();
-
- status = COLLAPSED;
-}
-
-void ToolTipItem::expand()
-{
- if (!title)
- return;
-
- double width = 0, height = title->boundingRect().height() + SPACING;
- Q_FOREACH(ToolTip t, toolTips) {
- if (t.second->boundingRect().width() > width)
- width = t.second->boundingRect().width();
- height += t.second->boundingRect().height();
- }
- /* Left padding, Icon Size, space, right padding */
- width += SPACING + ICON_SMALL + SPACING + SPACING;
-
- if (width < title->boundingRect().width() + SPACING*2)
- width = title->boundingRect().width() + SPACING*2;
-
- if (height < ICON_SMALL)
- height = ICON_SMALL;
-
- nextRectangle.setWidth(width);
- nextRectangle.setHeight(height);
-
- QPropertyAnimation *animation = new QPropertyAnimation(this, "rect");
- animation->setDuration(100);
- animation->setStartValue(rectangle);
- animation->setEndValue(nextRectangle);
- animation->start(QAbstractAnimation::DeleteWhenStopped);
-
- status = EXPANDED;
-}
-
-ToolTipItem::ToolTipItem(QGraphicsItem* parent): QGraphicsPathItem(parent), background(0)
-{
- title = new QGraphicsSimpleTextItem(tr("Information"), this);
- separator = new QGraphicsLineItem(this);
- setFlags(ItemIgnoresTransformations | ItemIsMovable | ItemClipsChildrenToShape);
- status = COLLAPSED;
- updateTitlePosition();
- setZValue(99);
-}
-
-ToolTipItem::~ToolTipItem()
-{
- clear();
-}
-
-void ToolTipItem::updateTitlePosition()
-{
- if (rectangle.width() < title->boundingRect().width() + SPACING*4) {
- QRectF newRect = rectangle;
- 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->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 x2 = boundingRect().width() - 10;
- double y2 = y1;
-
- separator->setLine(x1, y1, x2, y2);
- separator->setFlag(ItemIgnoresTransformations);
- separator->setPen(QPen(Qt::white));
- separator->show();
- } else {
- separator->hide();
- }
-}
-
-bool ToolTipItem::isExpanded() {
- return status == EXPANDED;
-}
-
-void ToolTipItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
-{
- persistPos();
- QGraphicsPathItem::mouseReleaseEvent(event);
-}
-
-void ToolTipItem::persistPos()
-{
- QPoint currentPos = scene()->views().at(0)->mapFromScene(pos());
- QSettings s;
- s.beginGroup("ProfileMap");
- s.setValue("tooltip_position", currentPos);
- s.endGroup();
-}
-
-void ToolTipItem::readPos()
-{
- QSettings s;
- s.beginGroup("ProfileMap");
- QPointF value = scene()->views().at(0)->mapToScene(
- s.value("tooltip_position").toPoint()
- );
- if (!scene()->sceneRect().contains(value)) {
- value = QPointF(0,0);
- }
- setPos(value);
-}
-
QColor EventItem::getColor(const color_indice_t i)
{
return profile_color[i].at((isGrayscale) ? 1 : 0);