const double DOCUMENTVERSION = 0.85;
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, MainWindow *parent) :
- QObject(parent),
- m_autosave(NULL),
- m_url(url),
- m_render(render),
- m_commandStack(new QUndoStack(undoGroup)),
- m_modified(false),
- m_projectFolder(projectFolder)
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, KTextEdit *notes, MainWindow *parent) :
+ QObject(parent),
+ m_autosave(NULL),
+ m_url(url),
+ m_render(render),
+ m_notesWidget(notes),
+ m_commandStack(new QUndoStack(undoGroup)),
+ m_modified(false),
+ m_projectFolder(projectFolder)
{
m_clipManager = new ClipManager(this);
m_autoSaveTimer = new QTimer(this);
QDomElement infoXml = mlt.firstChildElement("kdenlivedoc");
QDomElement e;
+ // Read notes
+ QDomElement notesxml = infoXml.firstChildElement("documentnotes");
+ if (!notesxml.isNull()) m_notesWidget->setText(notesxml.firstChild().nodeValue());
+
// Build tracks
QDomElement tracksinfo = infoXml.firstChildElement("tracksinfo");
if (!tracksinfo.isNull()) {
docproperties.setAttribute("position", m_render->seekPosition().frames(m_fps));
addedXml.appendChild(docproperties);
+ QDomElement docnotes = sceneList.createElement("documentnotes");
+ QDomText value = sceneList.createTextNode(m_notesWidget->toPlainText());
+ docnotes.appendChild(value);
+ addedXml.appendChild(docnotes);
+
// Add profile info
QDomElement profileinfo = sceneList.createElement("profileinfo");
profileinfo.setAttribute("description", m_profile.description);
}
void KdenliveDoc::slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration,
- const bool loop, const bool crop, const bool fade,
- const QString &luma_duration, const QString &luma_file, const int softness,
- const QString &animation, QString group, const QString &groupId)
+ const bool loop, const bool crop, const bool fade,
+ const QString &luma_duration, const QString &luma_file, const int softness,
+ const QString &animation, QString group, const QString &groupId)
{
m_clipManager->slotAddSlideshowClipFile(name, path, count, duration, loop,
crop, fade, luma_duration,
class MainWindow;
class TrackInfo;
+class KTextEdit;
+
class KdenliveDoc: public QObject
{
Q_OBJECT public:
- KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, MainWindow *parent = 0);
+ KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, KTextEdit *notes, MainWindow *parent = 0);
~KdenliveDoc();
QDomNodeList producersList();
double fps() const;
int m_height;
Timecode m_timecode;
Render *m_render;
+ KTextEdit *m_notesWidget;
QUndoStack *m_commandStack;
ClipManager *m_clipManager;
MltVideoProfile m_profile;
connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int)));
#endif
+ m_notesDock = new QDockWidget(i18n("Project Notes"), this);
+ m_notesDock->setObjectName("notes_widget");
+ m_notesWidget = new KTextEdit();
+ m_notesWidget->setTabChangesFocus(true);
+ m_notesWidget->setClickMessage(i18n("Enter your project notes here..."));
+ m_notesDock->setWidget(m_notesWidget);
+ addDockWidget(Qt::TopDockWidgetArea, m_notesDock);
+
m_effectStackDock = new QDockWidget(i18n("Effect Stack"), this);
m_effectStackDock->setObjectName("effect_stack");
m_effectStack = new EffectStackView(m_projectMonitor);
}
m_timelineArea->setEnabled(true);
m_projectList->setEnabled(true);
- KdenliveDoc *doc = new KdenliveDoc(KUrl(), projectFolder, m_commandStack, profileName, projectTracks, m_projectMonitor->render, this);
+ KdenliveDoc *doc = new KdenliveDoc(KUrl(), projectFolder, m_commandStack, profileName, projectTracks, m_projectMonitor->render, m_notesWidget, this);
doc->m_autosave = new KAutoSaveFile(KUrl(), doc);
bool ok;
TrackView *trackView = new TrackView(doc, &ok, this);
{
if (!m_timelineArea->isEnabled()) return;
m_fileRevert->setEnabled(true);
- KdenliveDoc *doc = new KdenliveDoc(url, KdenliveSettings::defaultprojectfolder(), m_commandStack, KdenliveSettings::default_profile(), QPoint(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()), m_projectMonitor->render, this);
+ KdenliveDoc *doc = new KdenliveDoc(url, KdenliveSettings::defaultprojectfolder(), m_commandStack, KdenliveSettings::default_profile(), QPoint(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()), m_projectMonitor->render, m_notesWidget, this);
if (stale == NULL) {
stale = new KAutoSaveFile(url, doc);
doc->m_autosave = stale;
disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeTimeline, SLOT(slotSetZone(QPoint)));
disconnect(m_projectMonitor, SIGNAL(durationChanged(int)), m_activeTimeline, SLOT(setDuration(int)));
disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeDocument, SLOT(setModified()));
+ disconnect(m_notesWidget, SIGNAL(textChanged()), m_activeDocument, SLOT(setModified()));
disconnect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeDocument, SLOT(setModified()));
disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified()));
disconnect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &)));
connect(doc, SIGNAL(deleteTimelineClip(const QString &)), trackView, SLOT(slotDeleteClip(const QString &)));
connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
connect(doc, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated()));
-
+ connect(m_notesWidget, SIGNAL(textChanged()), doc, SLOT(setModified()));
connect(trackView->projectView(), SIGNAL(clipItemSelected(ClipItem*, int)), m_effectStack, SLOT(slotClipItemSelected(ClipItem*, int)));
connect(trackView->projectView(), SIGNAL(updateClipMarkers(DocClipBase *)), this, SLOT(slotUpdateClipMarkers(DocClipBase*)));