m_commandStack->push(command);
}
}
+ m_document->setModified(true);
}
void CustomTrackView::slotDeleteEffect(ClipItem *clip, QDomElement effect) {
AddEffectCommand *command = new AddEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), effect, false);
m_commandStack->push(command);
+ m_document->setModified(true);
}
void CustomTrackView::updateEffect(int track, GenTime pos, QDomElement effect) {
m_document->renderer()->mltRemoveEffect(track, pos, index);
} else m_document->renderer()->mltEditEffect(m_tracksCount - clip->track(), clip->startPos(), effectParams);
}
+ m_document->setModified(true);
}
void CustomTrackView::slotChangeEffectState(ClipItem *clip, QDomElement effect, bool disable) {
effect.setAttribute("disabled", disable);
EditEffectCommand *command = new EditEffectCommand(this, m_tracksCount - clip->track(), clip->startPos(), oldEffect, effect, true);
m_commandStack->push(command);
+ m_document->setModified(true);
}
void CustomTrackView::slotUpdateClipEffect(ClipItem *clip, QDomElement oldeffect, QDomElement effect) {
m_document->updateClip(m_dropItem->baseClip()->getId());
// kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<<m_tracksCount<<", DROP: "<<m_dropItem->track();
m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), m_dropItem->startPos(), m_dropItem->xml());
+ m_document->setModified(true);
} else QGraphicsView::dropEvent(event);
m_dropItem = NULL;
}
m_commandStack->push(command);
m_document->renderer()->doRefresh();
}
+ m_document->setModified(true);
m_operationMode = NONE;
m_dragItem = NULL;
}
void KdenliveDoc::setUrl(KUrl url) {
m_url = url;
- m_modified = false;
+}
+
+void KdenliveDoc::setModified(bool mod) {
+ if (mod == m_modified) return;
+ m_modified = mod;
+ emit docModified(m_modified);
}
QString KdenliveDoc::description() const {
void KdenliveDoc::deleteProjectClip(const uint clipId) {
emit deletTimelineClip(clipId);
m_clipManager->slotDeleteClip(clipId);
+ setModified(true);
}
void KdenliveDoc::deleteClip(const uint clipId) {
void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group) {
kDebug() << "///////// DOCUM, ADD CLP: " << url;
m_clipManager->slotAddClipFile(url, group);
+ setModified(true);
}
DocClipBase *KdenliveDoc::getBaseClip(int clipId) {
void KdenliveDoc::slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group) {
m_clipManager->slotAddColorClipFile(name, color, duration, group);
+ setModified(true);
}
#include "kdenlivedoc.moc"
void setUrl(KUrl url);
QDomElement documentInfoXml();
void setProfilePath(QString path);
+ /** Set to true if document needs saving, false otherwise */
+ void setModified(bool mod);
private:
KUrl m_url;
void updateClipDisplay(int);
void deletTimelineClip(int);
void thumbsProgress(KUrl, int);
+ /** emited when the document state has been modified (= needs saving or not) */
+ void docModified(bool);
};
#endif
setCaption(m_activeDocument->description());
m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description());
m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), m_activeDocument->url().path());
+ m_activeDocument->setModified(false);
}
void MainWindow::saveFileAs() {
}
}
+void MainWindow::slotUpdateDocumentState(bool modified) {
+ if (modified) {
+ m_timelineArea->setTabTextColor(m_timelineArea->currentIndex(), palette().color(QPalette::Link));
+ m_timelineArea->setTabIcon(m_timelineArea->currentIndex(), KIcon("document-save"));
+ } else {
+ m_timelineArea->setTabTextColor(m_timelineArea->currentIndex(), palette().color(QPalette::Text));
+ m_timelineArea->setTabIcon(m_timelineArea->currentIndex(), KIcon("kdenlive"));
+ }
+}
+
void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) { //changed
//m_projectMonitor->stop();
kDebug() << "/////////////////// CONNECTING DOC TO PROJECT VIEW ////////////////";
disconnect(m_activeDocument, SIGNAL(deletTimelineClip(int)), m_activeTimeline, SLOT(slotDeleteClip(int)));
disconnect(m_activeDocument, SIGNAL(thumbsProgress(KUrl, int)), this, SLOT(slotGotProgressInfo(KUrl, int)));
disconnect(m_activeTimeline, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*)));
+ disconnect(m_activeDocument, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
disconnect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
disconnect(effectStack, SIGNAL(removeEffect(ClipItem*, QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*, QDomElement)));
disconnect(effectStack, SIGNAL(changeEffectState(ClipItem*, QDomElement, bool)), m_activeTimeline->projectView(), SLOT(slotChangeEffectState(ClipItem*, QDomElement, bool)));
connect(doc, SIGNAL(updateClipDisplay(int)), m_projectList, SLOT(slotUpdateClip(int)));
connect(doc, SIGNAL(deletTimelineClip(int)), trackView, SLOT(slotDeleteClip(int)));
connect(doc, SIGNAL(thumbsProgress(KUrl, int)), this, SLOT(slotGotProgressInfo(KUrl, int)));
+ connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
connect(trackView, SIGNAL(clipItemSelected(ClipItem*)), effectStack, SLOT(slotClipItemSelected(ClipItem*)));
connect(effectStack, SIGNAL(updateClipEffect(ClipItem*, QDomElement, QDomElement)), trackView->projectView(), SLOT(slotUpdateClipEffect(ClipItem*, QDomElement, QDomElement)));
void slotRenderProject();
void slotDoRender(const QString &dest, const QString &render, const QStringList &avformat_args, bool zoneOnly, bool playAfter);
void slotFullScreen();
+ void slotUpdateDocumentState(bool modified);
};
#endif