]> git.sesse.net Git - kdenlive/blob - src/monitormanager.cpp
Allow to display several clip properties, force clip properties can be applied withou...
[kdenlive] / src / monitormanager.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 "monitormanager.h"
22 #include "kdenlivesettings.h"
23
24 #include <mlt++/Mlt.h>
25
26 #include <QObject>
27 #include <QTimer>
28
29
30 MonitorManager::MonitorManager(QWidget *parent) :
31         QObject(parent),
32         m_clipMonitor(NULL),
33         m_projectMonitor(NULL),
34         m_blocked(false)
35 {
36 }
37
38 Timecode MonitorManager::timecode()
39 {
40     return m_timecode;
41 }
42
43 void MonitorManager::initMonitors(Monitor *clipMonitor, Monitor *projectMonitor)
44 {
45     m_clipMonitor = clipMonitor;
46     m_projectMonitor = projectMonitor;
47 }
48
49 void MonitorManager::activateMonitor(QString name)
50 {
51     if (m_blocked || m_clipMonitor == NULL || m_projectMonitor == NULL)
52         return;
53     if (m_activeMonitor == name)
54         return;
55     if (name == "clip") {
56         m_projectMonitor->stop();
57         m_clipMonitor->start();
58         emit raiseClipMonitor(true);
59     } else {
60         m_clipMonitor->stop();
61         m_projectMonitor->start();
62         emit raiseClipMonitor(false);
63     }
64     m_activeMonitor = name;
65     emit checkColorScopes();
66 }
67
68 void MonitorManager::slotSwitchMonitors(bool activateClip)
69 {
70     if (activateClip)
71         activateMonitor("clip");
72     else
73         activateMonitor("project");
74 }
75
76 void MonitorManager::stopActiveMonitor()
77 {
78     if (m_blocked) return;
79     if (m_clipMonitor->isActive()) m_clipMonitor->pause();
80     else m_projectMonitor->pause();
81 }
82
83 void MonitorManager::slotPlay()
84 {
85     if (m_clipMonitor->isActive()) m_clipMonitor->slotPlay();
86     else m_projectMonitor->slotPlay();
87 }
88
89 void MonitorManager::slotPlayZone()
90 {
91     if (m_clipMonitor->isActive()) m_clipMonitor->slotPlayZone();
92     else m_projectMonitor->slotPlayZone();
93 }
94
95 void MonitorManager::slotLoopZone()
96 {
97     if (m_clipMonitor->isActive()) m_clipMonitor->slotLoopZone();
98     else m_projectMonitor->slotLoopZone();
99 }
100
101 void MonitorManager::slotRewind(double speed)
102 {
103     if (m_clipMonitor->isActive()) m_clipMonitor->slotRewind(speed);
104     else m_projectMonitor->slotRewind(speed);
105 }
106
107 void MonitorManager::slotForward(double speed)
108 {
109     if (m_clipMonitor->isActive()) m_clipMonitor->slotForward(speed);
110     else m_projectMonitor->slotForward(speed);
111 }
112
113 void MonitorManager::slotRewindOneFrame()
114 {
115     if (m_clipMonitor->isActive()) m_clipMonitor->slotRewindOneFrame();
116     else m_projectMonitor->slotRewindOneFrame();
117 }
118
119 void MonitorManager::slotForwardOneFrame()
120 {
121     if (m_clipMonitor->isActive()) m_clipMonitor->slotForwardOneFrame();
122     else m_projectMonitor->slotForwardOneFrame();
123 }
124
125 void MonitorManager::slotRewindOneSecond()
126 {
127     if (m_clipMonitor->isActive()) m_clipMonitor->slotRewindOneFrame(m_timecode.fps());
128     else m_projectMonitor->slotRewindOneFrame(m_timecode.fps());
129 }
130
131 void MonitorManager::slotForwardOneSecond()
132 {
133     if (m_clipMonitor->isActive()) m_clipMonitor->slotForwardOneFrame(m_timecode.fps());
134     else m_projectMonitor->slotForwardOneFrame(m_timecode.fps());
135 }
136
137 void MonitorManager::slotStart()
138 {
139     if (m_clipMonitor->isActive()) m_clipMonitor->slotStart();
140     else m_projectMonitor->slotStart();
141 }
142
143 void MonitorManager::slotEnd()
144 {
145     if (m_clipMonitor->isActive()) m_clipMonitor->slotEnd();
146     else m_projectMonitor->slotEnd();
147 }
148
149 void MonitorManager::resetProfiles(Timecode tc)
150 {
151     if (m_blocked) return;
152     m_timecode = tc;
153     slotResetProfiles();
154     //QTimer::singleShot(300, this, SLOT(slotResetProfiles()));
155 }
156
157 void MonitorManager::slotResetProfiles()
158 {
159     if (m_blocked) return;
160     if (m_projectMonitor == NULL || m_clipMonitor == NULL) return;
161     QString active = m_activeMonitor;
162     activateMonitor("clip");
163     m_clipMonitor->resetProfile(KdenliveSettings::current_profile());
164     m_clipMonitor->updateTimecodeFormat();
165     activateMonitor("project");
166     m_projectMonitor->resetProfile(KdenliveSettings::current_profile());
167     m_projectMonitor->updateTimecodeFormat();
168     //m_projectMonitor->refreshMonitor(true);
169     activateMonitor(active);
170 }
171
172 void MonitorManager::slotRefreshCurrentMonitor()
173 {
174     if (m_clipMonitor->isActive()) m_clipMonitor->refreshMonitor();
175     else m_projectMonitor->refreshMonitor();
176 }
177
178 #include "monitormanager.moc"