]> git.sesse.net Git - kdenlive/blob - src/guide.cpp
* Guides improvements and fixes
[kdenlive] / src / guide.cpp
1 /***************************************************************************
2  *   Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org)        *
3  *                                                                         *
4  *   This program is free software; you can redistribute it and/or modify  *
5  *   it under the terms of the GNU General Public License as published by  *
6  *   the Free Software Foundation; either version 2 of the License, or     *
7  *   (at your option) any later version.                                   *
8  *                                                                         *
9  *   This program is distributed in the hope that it will be useful,       *
10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12  *   GNU General Public License for more details.                          *
13  *                                                                         *
14  *   You should have received a copy of the GNU General Public License     *
15  *   along with this program; if not, write to the                         *
16  *   Free Software Foundation, Inc.,                                       *
17  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
18  ***************************************************************************/
19
20
21 #include <QPen>
22 #include <QBrush>
23 #include <QScrollBar>
24
25 #include <KDebug>
26
27 #include "guide.h"
28 #include "customtrackview.h"
29 #include "kdenlivesettings.h"
30
31 Guide::Guide(CustomTrackView *view, GenTime pos, QString label, double scale, double fps, double height)
32         : QGraphicsLineItem(), m_view(view), m_position(pos), m_label(label), m_scale(scale), m_fps(fps) {
33     setFlags(QGraphicsItem::ItemIsMovable);
34     setToolTip(label);
35     setLine(0, 0, 0, height);
36     setPos(m_position.frames(m_fps) * scale, 0);
37     setPen(QPen(QBrush(QColor(0, 0, 200, 180)), 2));
38     setZValue(999);
39     setAcceptsHoverEvents(true);
40     const QFontMetrics metric = m_view->fontMetrics();
41     m_width = metric.width(" " + m_label + " ") + 2;
42     prepareGeometryChange();
43 }
44
45
46 void Guide::updatePosition(double scale) {
47     m_scale = scale;
48     setPos(m_position.frames(m_fps) * m_scale, 0);
49 }
50
51 QString Guide::label() const {
52     return m_label;
53 }
54
55 GenTime Guide::position() const {
56     return m_position;
57 }
58
59 CommentedTime Guide::info() const {
60     return CommentedTime(m_position, m_label);
61 }
62
63 void Guide::updateGuide(const GenTime newPos, const QString &comment) {
64     m_position = newPos;
65     setPos(m_position.frames(m_fps) * m_scale, 0);
66     if (comment != QString()) {
67         m_label = comment;
68         setToolTip(m_label);
69         const QFontMetrics metric = m_view->fontMetrics();
70         m_width = metric.width(" " + m_label + " ") + 2;
71         prepareGeometryChange();
72     }
73 }
74
75 //virtual
76 int Guide::type() const {
77     return GUIDEITEM;
78 }
79
80 //virtual
81 void Guide::hoverEnterEvent(QGraphicsSceneHoverEvent *) {
82     setPen(QPen(QBrush(QColor(200, 0, 0, 180)), 2));
83 }
84
85 //virtual
86 void Guide::hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
87     setPen(QPen(QBrush(QColor(0, 0, 200, 180)), 2));
88 }
89
90 //virtual
91 QVariant Guide::itemChange(GraphicsItemChange change, const QVariant &value) {
92     if (change == ItemPositionChange && scene()) {
93         // value is the new position.
94         QPointF newPos = value.toPointF();
95         newPos.setY(0);
96         newPos.setX(m_view->getSnapPointForPos(newPos.x()));
97         return newPos;
98     }
99     return QGraphicsItem::itemChange(change, value);
100 }
101
102 // virtual
103 QRectF Guide::boundingRect() const {
104     if (KdenliveSettings::showmarkers()) {
105         QRectF rect = QGraphicsLineItem::boundingRect();
106         rect.setWidth(m_width);
107         return rect;
108     } else return QGraphicsLineItem::boundingRect();
109 }
110
111 // virtual
112 void Guide::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *w) {
113     QGraphicsLineItem::paint(painter, option, w);
114     if (KdenliveSettings::showmarkers()) {
115         QRectF br = boundingRect();
116         QRectF txtBounding = painter->boundingRect(br.x(), br.y() + 10 + m_view->verticalScrollBar()->value(), m_width, 50, Qt::AlignLeft | Qt::AlignTop, " " + m_label + " ");
117         QPainterPath path;
118         path.addRoundedRect(txtBounding, 3, 3);
119         painter->fillPath(path, QBrush(pen().color()));
120         painter->setPen(Qt::white);
121         painter->drawText(txtBounding, Qt::AlignCenter, m_label);
122     }
123 }
124