}
-void ClipItem::refreshClip()
-{
- m_maxDuration = m_clip->maxDuration();
+void ClipItem::refreshClip(bool checkDuration)
+{
+ if (checkDuration && (m_maxDuration != m_clip->maxDuration())) {
+ m_maxDuration = m_clip->maxDuration();
+ if (m_clipType != IMAGE && m_clipType != TEXT && m_clipType != COLOR) {
+ if (m_cropStart + m_cropDuration > m_maxDuration) {
+ // Clip duration changed, make sure to stay in correct range
+ if (m_cropStart > m_maxDuration) {
+ m_cropStart = GenTime();
+ m_cropDuration = qMin(m_cropDuration, m_maxDuration);
+ updateRectGeometry();
+ } else {
+ m_cropDuration = m_maxDuration;
+ updateRectGeometry();
+ }
+ }
+ }
+ }
if (m_clipType == COLOR) {
QString colour = m_clip->getProperty("colour");
colour = colour.replace(0, 2, "#");
/** regenerate audio and video thumbnails */
void resetThumbs();
/** update clip properties from base clip */
- void refreshClip();
+ void refreshClip(bool checkDuration);
/** Returns a list of times for this clip's markers */
QList <GenTime> snapMarkers() const;
QList <CommentedTime> commentedSnapMarkers() const;
if (list.at(i)->type() == AVWIDGET) {
clip = static_cast <ClipItem *>(list.at(i));
if (clip->clipProducer() == clipId) {
- clip->refreshClip();
+ clip->refreshClip(true);
ItemInfo info = clip->info();
info.track = m_document->tracksCount() - clip->track();
m_document->renderer()->mltUpdateClip(info, clip->xml(), clip->baseClip()->producer());
}
}
}
- item->refreshClip();
+ item->refreshClip(false);
qApp->processEvents();
}
}
}
}
+
#include "customtrackview.moc"
void KdenliveDoc::setSceneList()
{
m_render->setSceneList(m_document.toString(), m_startPos);
- //checkProjectClips();
+ // m_document xml is now useless, clear it
+ m_document.clear();
+ checkProjectClips();
}
QDomDocument KdenliveDoc::createEmptyDocument(const int videotracks, const int audiotracks)
void KdenliveDoc::checkProjectClips()
{
+ kDebug() << "+++++++++++++ + + + + CHK PCLIPS";
if (m_render == NULL) return;
m_clipManager->resetProducersList(m_render->producersList());
return;
return result;
}
-void KdenliveDoc::setProducerDuration(const QString &id, int duration)
-{
- QDomNodeList prods = producersList();
- int ct = prods.count();
- for (int i = 0; i < ct ; i++) {
- QDomElement e = prods.item(i).toElement();
- if (e.attribute("id") != "black" && e.attribute("id") == id) {
- e.setAttribute("duration", QString::number(duration));
- break;
- }
- }
-}
-
-int KdenliveDoc::getProducerDuration(const QString &id)
-{
- int result = 0;
- QDomNodeList prods = producersList();
- int ct = prods.count();
- for (int i = 0; i < ct ; i++) {
- QDomElement e = prods.item(i).toElement();
- if (e.attribute("id") != "black" && e.attribute("id") == id) {
- result = e.attribute("duration").toInt();
- break;
- }
- }
- return result;
-}
-
QDomDocument KdenliveDoc::toXml()
{
return m_document;
//void setRenderer(Render *render);
QUndoStack *commandStack();
QString producerName(const QString &id);
- void setProducerDuration(const QString &id, int duration);
- int getProducerDuration(const QString &id);
Render *renderer();
QDomDocument m_guidesXml;
QDomElement guidesXml() const;
// save document here. If saving fails, return false;
return saveFile();
case KMessageBox::No :
- // User does not want to save the changes, clear recovery files
- m_activeDocument->m_autosave->resize(0);
+ // User does not want to save the changes, clear recovery files
+ m_activeDocument->m_autosave->resize(0);
return true;
default: // cancel
return false;
kDebug() << "--- ERROR, TRYING TO APPEND NULL EFFECT";
return;
}
- TrackView *currentTimeLine = (TrackView *) m_timelineArea->currentWidget();
- currentTimeLine->projectView()->slotAddEffect(effect.cloneNode().toElement(), pos, track);
+ m_activeTimeline->projectView()->slotAddEffect(effect.cloneNode().toElement(), pos, track);
}
void MainWindow::slotRaiseMonitor(bool clipMonitor)
else m_projectMonitorDock->raise();
}
-void MainWindow::slotSetClipDuration(const QString &id, int duration)
+void MainWindow::slotUpdateClip(const QString &id)
{
if (!m_activeDocument) return;
- m_activeDocument->setProducerDuration(id, duration);
+ m_activeTimeline->projectView()->slotUpdateClip(id);
}
void MainWindow::slotConnectMonitors()
{
m_projectList->setRenderer(m_projectMonitor->render);
- connect(m_projectList, SIGNAL(receivedClipDuration(const QString &, int)), this, SLOT(slotSetClipDuration(const QString &, int)));
+ connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &)));
connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *)));
connect(m_projectList, SIGNAL(getFileProperties(const QDomElement &, const QString &, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement &, const QString &, bool)));
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QPixmap &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QPixmap &)));
if (dest.isEmpty()) return;
int in = 0;
int out = 0;
- TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget();
- if (currentTab && zoneOnly) {
- in = currentTab->inPoint();
- out = currentTab->outPoint();
+
+ if (m_activeTimeline && zoneOnly) {
+ in = m_activeTimeline->inPoint();
+ out = m_activeTimeline->outPoint();
}
KTemporaryFile temp;
temp.setAutoRemove(false);
void updateConfiguration();
void slotConnectMonitors();
void slotRaiseMonitor(bool clipMonitor);
- void slotSetClipDuration(const QString &id, int duration);
+ void slotUpdateClip(const QString &id);
void slotUpdateMousePosition(int pos);
void slotAddEffect(QDomElement effect, GenTime pos = GenTime(), int track = -1);
void slotEditProfiles();
item->setProperties(properties, metadata);
Q_ASSERT_X(item->referencedClip(), "void ProjectList::slotReplyGetFileProperties", QString("Item with groupName %1 does not have a clip associated").arg(item->groupName()).toLatin1());
if (replace) item->referencedClip()->setProducer(producer);
- emit receivedClipDuration(clipId, item->clipMaxDuration());
+ else {
+ // Check if duration changed.
+ emit receivedClipDuration(clipId);
+ delete producer;
+ }
m_listView->blockSignals(false);
} else kDebug() << "//////// COULD NOT FIND CLIP TO UPDATE PRPS...";
if (!m_infoQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue()));
signals:
void clipSelected(DocClipBase *);
void getFileProperties(const QDomElement&, const QString &, bool);
- void receivedClipDuration(const QString &, int);
+ void receivedClipDuration(const QString &);
void showClipProperties(DocClipBase *);
void projectModified();
void loadingIsOver();