]> git.sesse.net Git - kdenlive/blob - src/monitor.cpp
Progress in clip monitor and project switching
[kdenlive] / src / monitor.cpp
1
2 #include <QMouseEvent>
3 #include <QStylePainter>
4
5 #include <KDebug>
6 #include <KLocale>
7
8 #include "gentime.h"
9 #include "monitor.h"
10
11 Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent)
12     : QWidget(parent), render(NULL), m_monitorManager(manager), m_name(name)
13 {
14   ui.setupUi(this);
15   m_scale = 1;
16   m_ruler = new SmallRuler();
17   QVBoxLayout *layout = new QVBoxLayout;
18   layout->addWidget( m_ruler);
19   ui.ruler_frame->setLayout( layout );
20   //m_ruler->setPixelPerMark(3);
21   connect(m_ruler, SIGNAL(seekRenderer(int)), this, SLOT(slotSeek(int)));
22   connect(ui.button_play, SIGNAL(clicked()), this, SLOT(slotOpen()));
23   connect(ui.button_rew, SIGNAL(clicked()), this, SLOT(slotRewind()));
24   connect(ui.button_play_2, SIGNAL(clicked()), this, SLOT(slotPlay()));
25 }
26
27 // virtual
28 void Monitor::mousePressEvent ( QMouseEvent * event )
29 {
30   slotPlay();
31 }
32
33 // virtual
34 void Monitor::wheelEvent ( QWheelEvent * event )
35 {
36   render->play(0);
37   if (event->delta() > 0) m_position++;
38   else m_position--;
39   render->seekToFrame(m_position);
40 }
41
42 void Monitor::slotSeek(int pos)
43 {
44   if ( render == NULL ) return;
45   int realPos = ((double) pos) / m_scale;
46   render->seekToFrame(realPos);
47   
48 }
49
50 void Monitor::seekCursor(int pos)
51 {
52   int rulerPos = (int) (pos * m_scale);
53   m_position = pos;
54   //kDebug()<<"seek: "<<pos<<", scale: "<<m_scale<<
55   m_ruler->slotNewValue(rulerPos);
56 }
57
58 void Monitor::rendererStopped(int pos)
59 {
60   int rulerPos = (int) (pos * m_scale);
61   m_ruler->slotNewValue(rulerPos);
62   ui.button_play_2->setChecked(false);
63 }
64
65 void Monitor::initMonitor()
66 {
67   if ( render ) return;
68   render = new Render(m_name, this);
69   render->createVideoXWindow(ui.video_frame->winId(), -1);
70   connect(render, SIGNAL(playListDuration(int)), this, SLOT(adjustRulerSize(int)));
71   connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
72   connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int)));
73   int width = m_ruler->width();
74   m_ruler->setLength(width);
75   m_ruler->setMaximum(width);
76   m_length = 0;
77 }
78
79 // virtual
80 void Monitor::resizeEvent ( QResizeEvent * event )
81 {
82   adjustRulerSize(-1);
83   if (render) render->askForRefresh();
84 }
85
86 void Monitor::adjustRulerSize(int length)
87 {
88   int width = m_ruler->width();
89   m_ruler->setLength(width);
90   if (length > 0) m_length = length;
91   m_scale = (double) width / m_length;
92   if (m_scale == 0) m_scale = 1;
93   kDebug()<<"RULER WIDT: "<<width<<", RENDER LENGT: "<<m_length<<", SCALE: "<<m_scale;
94   m_ruler->setPixelPerMark(m_scale);
95   m_ruler->setMaximum(width);
96   //m_ruler->setLength(length);
97 }
98
99 void Monitor::stop()
100 {
101   if (render) render->stop();
102 }
103
104 void Monitor::start()
105 {
106   if (render) render->start();
107 }
108
109 void Monitor::refreshMonitor(bool visible)
110 {
111   if (visible && render) render->askForRefresh();
112 }
113
114 void Monitor::slotOpen()
115 {
116   if ( render == NULL ) return;
117   render->mltInsertClip(2, GenTime(1, 25), QString("<westley><producer mlt_service=\"colour\" colour=\"red\" in=\"1\" out=\"30\" /></westley>"));
118   render->mltInsertClip(2, GenTime(0, 25), QString("<westley><producer mlt_service=\"avformat\" resource=\"/home/one/.vids/clip3e.mpg\" in=\"1\" out=\"300\" /></westley>"));
119 }
120
121 void Monitor::slotRewind()
122 {
123   if ( render == NULL ) return;
124   m_monitorManager->activateMonitor(m_name);
125   render->seek(GenTime(0));
126 }
127
128 void Monitor::slotPlay()
129 {
130   if ( render == NULL ) return;
131   m_monitorManager->activateMonitor(m_name);
132   render->switchPlay();
133   ui.button_play_2->setChecked(true);
134 }
135
136 void Monitor::slotSetXml(const QDomElement &e)
137 {
138     if ( render == NULL ) return;
139     m_monitorManager->activateMonitor(m_name);
140     QDomDocument doc;
141     QDomElement westley = doc.createElement("westley");
142     doc.appendChild(westley);
143     westley.appendChild(e);
144     render->setSceneList(doc, 0);
145     m_ruler->slotNewValue(0);
146     m_position = 0;
147 }
148
149
150 void Monitor::slotOpenFile(const QString &file)
151 {
152     if ( render == NULL ) return;
153     m_monitorManager->activateMonitor(m_name);
154     QDomDocument doc;
155     QDomElement westley = doc.createElement("westley");
156     doc.appendChild(westley);
157     QDomElement prod = doc.createElement("producer");
158     westley.appendChild(prod);
159     prod.setAttribute("mlt_service", "avformat");
160     prod.setAttribute("resource", file);
161     render->setSceneList(doc, 0);
162 }
163
164
165
166 #include "monitor.moc"