]> git.sesse.net Git - kdenlive/blob - src/guide.cpp
Guides can now be moved, and deleted, all actions can be undone
[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
24 #include <KDebug>
25
26 #include "guide.h"
27 #include "customtrackview.h"
28
29 Guide::Guide(CustomTrackView *view, GenTime pos, QString label, double scale, double fps, double height)
30         : QGraphicsLineItem(), m_view(view), m_position(pos), m_label(label), m_scale(scale), m_fps(fps) {
31     setFlags(QGraphicsItem::ItemIsMovable);
32     setToolTip(label);
33     setLine(0, 0, 0, height);
34     setPos(m_position.frames(m_fps) * scale, 0);
35     setPen(QPen(QBrush(QColor(0, 0, 200, 180)), 2));
36     setZValue(999);
37     setAcceptsHoverEvents(true);
38 }
39
40
41 void Guide::updatePosition(double scale) {
42     setPos(m_position.frames(m_fps) * scale, 0);
43     m_scale = scale;
44 }
45
46 QString Guide::label() const {
47     return m_label;
48 }
49
50 GenTime Guide::position() const {
51     return m_position;
52 }
53
54 void Guide::update(const GenTime newPos, const QString &comment) {
55     m_position = newPos;
56     if (comment != QString()) {
57         m_label = comment;
58         setToolTip(m_label);
59     }
60 }
61
62 //virtual
63 int Guide::type() const {
64     return GUIDEITEM;
65 }
66
67 //virtual
68 void Guide::hoverEnterEvent(QGraphicsSceneHoverEvent *) {
69     setPen(QPen(QBrush(QColor(200, 0, 0, 180)), 2));
70 }
71
72 //virtual
73 void Guide::hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
74     setPen(QPen(QBrush(QColor(0, 0, 200, 180)), 2));
75 }
76
77 //virtual
78 QVariant Guide::itemChange(GraphicsItemChange change, const QVariant &value) {
79     if (change == ItemPositionChange && scene()) {
80         // value is the new position.
81         QPointF newPos = value.toPointF();
82         newPos.setY(0);
83         const double offset = m_position.frames(m_fps) * m_scale;
84         newPos.setX(m_view->getSnapPointForPos(offset + newPos.x()) - offset);
85         return newPos;
86     }
87     return QGraphicsItem::itemChange(change, value);
88 }
89