X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmainwindow.cpp;h=dd1d83c94587c9c460ff0e36ffad29afec2a9228;hb=a3eee7be24126f5a3458d488f44cd61c66135e17;hp=c4c1515a52436ec7d78f0476e4f2113a97326435;hpb=8cd7e7b5ab508f07f80eae762b54e7cbc8afa36c;p=kdenlive diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c4c1515a..dd1d83c9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -37,7 +37,7 @@ #include "effectslistview.h" #include "effectstack/effectstackview2.h" #include "transitionsettings.h" -#include "renderwidget.h" +#include "widgets/renderwidget.h" #include "renderer.h" #ifdef USE_JOGSHUTTLE #include "jogshuttle.h" @@ -47,7 +47,7 @@ #include "clipproperties.h" #include "wizard.h" #include "commands/editclipcommand.h" -#include "titlewidget.h" +#include "widgets/titlewidget.h" #include "markerdialog.h" #include "clipitem.h" #include "interfaces.h" @@ -62,14 +62,14 @@ #include "scopes/audioscopes/audiosignal.h" #include "scopes/audioscopes/audiospectrum.h" #include "scopes/audioscopes/spectrogram.h" -#include "archivewidget.h" +#include "widgets/archivewidget.h" #include "databackup/backupwidget.h" #include "utils/resourcewidget.h" #include #include -#include +#include #include #include #include @@ -113,6 +113,8 @@ #include #include #include +#include +#include #include #include @@ -148,6 +150,7 @@ static bool sortByNames(const QPair &a, const QPairresize(0, 0); + m_commandStack = new QUndoGroup; setDockNestingEnabled(true); m_timelineArea = new KTabWidget(this); @@ -227,13 +236,13 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_projectListDock = new QDockWidget(i18n("Project Tree"), this); m_projectListDock->setObjectName("project_tree"); - m_projectList = new ProjectList(); + m_projectList = new ProjectList(m_glContext); m_projectListDock->setWidget(m_projectList); addDockWidget(Qt::TopDockWidgetArea, m_projectListDock); m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this); m_clipMonitorDock->setObjectName("clip_monitor"); - m_clipMonitor = new Monitor(Kdenlive::clipMonitor, m_monitorManager, QString(), m_timelineArea); + m_clipMonitor = new Monitor(Kdenlive::ClipMonitor, m_monitorManager, m_glContext, QString(), m_timelineArea); m_clipMonitorDock->setWidget(m_clipMonitor); // Connect the project list @@ -251,13 +260,13 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this); m_projectMonitorDock->setObjectName("project_monitor"); - m_projectMonitor = new Monitor(Kdenlive::projectMonitor, m_monitorManager, QString()); + m_projectMonitor = new Monitor(Kdenlive::ProjectMonitor, m_monitorManager, m_glContext, QString()); m_projectMonitorDock->setWidget(m_projectMonitor); #ifndef Q_WS_MAC m_recMonitorDock = new QDockWidget(i18n("Record Monitor"), this); m_recMonitorDock->setObjectName("record_monitor"); - m_recMonitor = new RecMonitor(Kdenlive::recordMonitor, m_monitorManager); + m_recMonitor = new RecMonitor(Kdenlive::RecordMonitor, m_monitorManager); m_recMonitorDock->setWidget(m_recMonitor); connect(m_recMonitor, SIGNAL(addProjectClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl))); connect(m_recMonitor, SIGNAL(addProjectClipList(KUrl::List)), this, SLOT(slotAddProjectClipList(KUrl::List))); @@ -406,7 +415,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & for (int i = 1; i < 5; ++i) { KAction *load = new KAction(KIcon(), i18n("Layout %1", i), this); load->setData('_' + QString::number(i)); - layoutActions->addAction("load_layout" + QString::number(i), load); + layoutActions->addAction("load_layout" + QString::number(i), load); m_loadLayout->addAction(load); KAction *save = new KAction(KIcon(), i18n("Save As Layout %1", i), this); save->setData('_' + QString::number(i)); @@ -436,7 +445,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_effectList->reloadEffectList(m_effectsMenu, m_effectActions); m_effectsActionCollection->readSettings(); - // Populate View menu with show / hide actions for dock widgets + // Populate View menu with show / hide actions for dock widgets KActionCategory *guiActions = new KActionCategory(i18n("Interface"), actionCollection()); setupGUI(); @@ -535,7 +544,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & connect(m, SIGNAL(triggered(QAction*)), this, SLOT(slotAddVideoEffect(QAction*))); connect(m_effectsMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotAddVideoEffect(QAction*))); - connect(m_transitionsMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotAddTransition(QAction*))); + connect(m_transitionsMenu, SIGNAL(triggered(QAction*)), this, SLOT(slotAddTransition(QAction*))); m_timelineContextMenu = new QMenu(this); m_timelineContextClipMenu = new QMenu(this); @@ -547,7 +556,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_timelineContextClipMenu->addAction(actionCollection()->action("clip_in_project_tree")); //m_timelineContextClipMenu->addAction(actionCollection()->action("clip_to_project_tree")); - m_timelineContextClipMenu->addAction(actionCollection()->action("delete_item")); + m_timelineContextClipMenu->addAction(actionCollection()->action("delete_timeline_clip")); m_timelineContextClipMenu->addSeparator(); m_timelineContextClipMenu->addAction(actionCollection()->action("group_clip")); m_timelineContextClipMenu->addAction(actionCollection()->action("ungroup_clip")); @@ -566,7 +575,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_timelineContextClipMenu->addMenu(m_transitionsMenu); m_timelineContextClipMenu->addMenu(m_effectsMenu); - m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_item")); + m_timelineContextTransitionMenu->addAction(actionCollection()->action("delete_timeline_clip")); m_timelineContextTransitionMenu->addAction(actionCollection()->action(KStandardAction::name(KStandardAction::Copy))); m_timelineContextTransitionMenu->addAction(actionCollection()->action("auto_transition")); @@ -601,25 +610,25 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & QList docks = findChildren(); for (int i = 0; i < docks.count(); ++i) { QDockWidget* dock = docks.at(i); - QAction * a = dock->toggleViewAction(); - if (!a) continue; - KAction* dockInformations = new KAction(this); - dockInformations->setText(a->text()); - dockInformations->setCheckable(true); - dockInformations->setChecked(!dock->isHidden()); - // HACK: since QActions cannot be used in KActionCategory to allow shortcut, we create a duplicate KAction of the dock QAction and link them - connect(a,SIGNAL(toggled(bool)), dockInformations, SLOT(setChecked(bool))); - connect(dockInformations,SIGNAL(triggered(bool)), a, SLOT(trigger())); - pair.first = dockInformations->text(); - pair.second = dockInformations; - viewActions.append(pair); + QAction * a = dock->toggleViewAction(); + if (!a) continue; + KAction* dockInformations = new KAction(this); + dockInformations->setText(a->text()); + dockInformations->setCheckable(true); + dockInformations->setChecked(!dock->isHidden()); + // HACK: since QActions cannot be used in KActionCategory to allow shortcut, we create a duplicate KAction of the dock QAction and link them + connect(a,SIGNAL(toggled(bool)), dockInformations, SLOT(setChecked(bool))); + connect(dockInformations,SIGNAL(triggered(bool)), a, SLOT(trigger())); + pair.first = dockInformations->text(); + pair.second = dockInformations; + viewActions.append(pair); } // Sort dock view action by name qSort(viewActions.begin(), viewActions.end(), sortByNames); // Populate view menu for (int i = 0; i < viewActions.count(); ++i) - viewMenu->addAction(guiActions->addAction(viewActions.at(i).first, viewActions.at(i).second)); + viewMenu->addAction(guiActions->addAction(viewActions.at(i).first, viewActions.at(i).second)); // Populate encoding profiles KConfig conf("encodingprofiles.rc", KConfig::CascadeConfig, "appdata"); @@ -719,6 +728,7 @@ MainWindow::~MainWindow() delete m_monitorManager; delete m_scopeManager; Mlt::Factory::close(); + delete m_glContext; } //virtual @@ -741,7 +751,10 @@ bool MainWindow::queryClose() } } saveOptions(); - if (m_monitorManager) m_monitorManager->stopActiveMonitor(); + if (m_monitorManager) { + m_monitorManager->stopActiveMonitor(); + } + // warn the user to save if document is modified and we have clips in our project list if (m_activeDocument && m_activeDocument->isModified() && ((m_projectList->documentClipList().isEmpty() && !m_activeDocument->url().isEmpty()) || @@ -749,10 +762,11 @@ bool MainWindow::queryClose() raise(); activateWindow(); QString message; - if (m_activeDocument->url().fileName().isEmpty()) + if (m_activeDocument->url().fileName().isEmpty()) { message = i18n("Save changes to document?"); - else + } else { message = i18n("The project \"%1\" has been changed.\nDo you want to save your changes?", m_activeDocument->url().fileName()); + } switch (KMessageBox::warningYesNoCancel(this, message)) { case KMessageBox::Yes : // save document here. If saving fails, return false; @@ -840,7 +854,7 @@ void MainWindow::generateClip() ClipGenerator *iGenerator = qobject_cast(action->parent()); KUrl clipUrl = iGenerator->generatedClip(KdenliveSettings::rendererpath(), action->data().toString(), m_activeDocument->projectFolder(), - QStringList(), QStringList(), m_activeDocument->fps(), m_activeDocument->width(), m_activeDocument->height()); + QStringList(), QStringList(), m_activeDocument->fps(), m_activeDocument->width(), m_activeDocument->height()); if (!clipUrl.isEmpty()) { m_projectList->slotAddClip(QList () << clipUrl); } @@ -877,7 +891,7 @@ void MainWindow::activateShuttleDevice() m_jogProcess = NULL; if (KdenliveSettings::enableshuttle() == false) return; - m_jogProcess = new JogShuttle(KdenliveSettings::shuttledevice()); + m_jogProcess = new JogShuttle(JogShuttle::canonicalDevice(KdenliveSettings::shuttledevice())); m_jogShuttle = new JogShuttleAction(m_jogProcess, JogShuttleConfig::actionMap(KdenliveSettings::shuttlebuttons())); connect(m_jogShuttle, SIGNAL(rewindOneFrame()), m_monitorManager, SLOT(slotRewindOneFrame())); @@ -908,7 +922,7 @@ void MainWindow::slotFullScreen() KToggleFullScreenAction::setFullScreen(this, actionCollection()->action("fullscreen")->isChecked()); } -void MainWindow::slotAddEffect(const QDomElement effect) +void MainWindow::slotAddEffect(const QDomElement &effect) { if (!m_activeDocument) return; if (effect.isNull()) { @@ -924,10 +938,16 @@ void MainWindow::slotAddEffect(const QDomElement effect) void MainWindow::slotUpdateClip(const QString &id) { - if (!m_activeDocument) return; + if (!m_activeDocument) { + return; + } DocClipBase *clip = m_activeDocument->clipManager()->getClipById(id); - if (!clip) return; - if (clip->numReferences() > 0) m_activeTimeline->projectView()->slotUpdateClip(id); + if (!clip) { + return; + } + if (clip->numReferences() > 0) { + m_activeTimeline->projectView()->slotUpdateClip(id); + } if (m_clipMonitor->activeClip() && m_clipMonitor->activeClip()->getId() == id) { Mlt::Producer *monitorProducer = clip->getCloneProducer(); m_clipMonitor->updateClipProducer(monitorProducer); @@ -979,23 +999,23 @@ void MainWindow::slotAdjustProjectMonitor() class NameGrabbingKActionCollection { public: - NameGrabbingKActionCollection(KActionCollection* collection, QStringList& action_names) - : m_collection(collection), m_action_names(action_names) { - m_action_names.clear(); - } - KAction* addAction(const QString& action_name) { - m_action_names << action_name; - return m_collection->addAction(action_name); - } - void addAction(const QString& action_name, QAction* action) { - m_action_names << action_name; - m_collection->addAction(action_name, action); - } - operator KActionCollection*() { return m_collection; } - const QStringList& actionNames() const { return m_action_names; } + NameGrabbingKActionCollection(KActionCollection* collection, QStringList& action_names) + : m_collection(collection), m_action_names(action_names) { + m_action_names.clear(); + } + KAction* addAction(const QString& action_name) { + m_action_names << action_name; + return m_collection->addAction(action_name); + } + void addAction(const QString& action_name, QAction* action) { + m_action_names << action_name; + m_collection->addAction(action_name, action); + } + operator KActionCollection*() { return m_collection; } + const QStringList& actionNames() const { return m_action_names; } private: - KActionCollection* m_collection; - QStringList& m_action_names; + KActionCollection* m_collection; + QStringList& m_action_names; }; void MainWindow::setupActions() @@ -1836,9 +1856,15 @@ void MainWindow::loadLayouts() void MainWindow::slotLoadLayout(QAction *action) { - if (!action) return; + if (!action) { + return; + } + QString layoutId = action->data().toString(); - if (layoutId.isEmpty()) return; + if (layoutId.isEmpty()) { + return; + } + KSharedConfigPtr config = KGlobal::config(); KConfigGroup layouts(config, "Layouts"); QByteArray state = QByteArray::fromBase64(layouts.readEntry(layoutId).toAscii()); @@ -1851,7 +1877,9 @@ void MainWindow::slotSaveLayout(QAction *action) int layoutId = originallayoutName.section('_', -1).toInt(); QString layoutName = QInputDialog::getText(this, i18n("Save Layout"), i18n("Layout name:"), QLineEdit::Normal, originallayoutName.section('_', 0, -2)); - if (layoutName.isEmpty()) return; + if (layoutName.isEmpty()) { + return; + } KSharedConfigPtr config = KGlobal::config(); KConfigGroup layouts(config, "Layouts"); layouts.deleteEntry(originallayoutName); @@ -1889,12 +1917,17 @@ void MainWindow::readOptions() QString path = QDir::homePath() + "/kdenlive"; if (KStandardDirs::makeDir(path) == false) { kDebug() << "/// ERROR CREATING PROJECT FOLDER: " << path; - } else KdenliveSettings::setDefaultprojectfolder(path); + } else { + KdenliveSettings::setDefaultprojectfolder(path); + } } } + } + if (KdenliveSettings::ffmpegpath().isEmpty() || KdenliveSettings::ffplaypath().isEmpty()) { + upgrade = true; } - if (KdenliveSettings::ffmpegpath().isEmpty() || KdenliveSettings::ffplaypath().isEmpty()) upgrade = true; + if (!initialGroup.exists() || upgrade) { // this is our first run, show Wizard QPointer w = new Wizard(upgrade, this); @@ -1907,10 +1940,12 @@ void MainWindow::readOptions() ::exit(1); } } + KConfigGroup treecolumns(config, "Project Tree"); const QByteArray state = treecolumns.readEntry("columns", QByteArray()); - if (!state.isEmpty()) + if (!state.isEmpty()) { m_projectList->setHeaderInfo(state); + } } void MainWindow::slotRunWizard() @@ -1924,8 +1959,9 @@ void MainWindow::slotRunWizard() void MainWindow::newFile(bool showProjectSettings, bool force) { - if (!m_timelineArea->isEnabled() && !force) + if (!m_timelineArea->isEnabled() && !force) { return; + } m_fileRevert->setEnabled(false); QString profileName = KdenliveSettings::default_profile(); KUrl projectFolder = KdenliveSettings::defaultprojectfolder(); @@ -1933,24 +1969,29 @@ void MainWindow::newFile(bool showProjectSettings, bool force) QMap documentMetadata; QPoint projectTracks(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()); if (!showProjectSettings) { - if (!KdenliveSettings::activatetabs()) - if (!closeCurrentDocument()) + if (!KdenliveSettings::activatetabs()) { + if (!closeCurrentDocument()) { return; + } + } } else { QPointer w = new ProjectSettings(NULL, QMap (), QStringList(), projectTracks.x(), projectTracks.y(), KdenliveSettings::defaultprojectfolder(), false, true, this); if (w->exec() != QDialog::Accepted) { delete w; return; } - if (!KdenliveSettings::activatetabs()) + if (!KdenliveSettings::activatetabs()) { if (!closeCurrentDocument()) { delete w; return; } - if (KdenliveSettings::videothumbnails() != w->enableVideoThumbs()) + } + if (KdenliveSettings::videothumbnails() != w->enableVideoThumbs()) { slotSwitchVideoThumbs(); - if (KdenliveSettings::audiothumbnails() != w->enableAudioThumbs()) + } + if (KdenliveSettings::audiothumbnails() != w->enableAudioThumbs()) { slotSwitchAudioThumbs(); + } profileName = w->selectedProfile(); projectFolder = w->selectedFolder(); projectTracks = w->tracks(); @@ -1967,7 +2008,7 @@ void MainWindow::newFile(bool showProjectSettings, bool force) m_timelineArea->setEnabled(true); m_projectList->setEnabled(true); bool openBackup; - KdenliveDoc *doc = new KdenliveDoc(KUrl(), projectFolder, m_commandStack, profileName, documentProperties, documentMetadata, projectTracks, m_projectMonitor->render, m_notesWidget, &openBackup, this); + KdenliveDoc *doc = new KdenliveDoc(KUrl(), projectFolder, m_commandStack, profileName, documentProperties, documentMetadata, projectTracks, m_projectMonitor->render, m_notesWidget, &openBackup, m_glContext, this); doc->m_autosave = new KAutoSaveFile(KUrl(), doc); bool ok; TrackView *trackView = new TrackView(doc, m_tracksActionCollection->actions(), &ok, this); @@ -1982,15 +2023,18 @@ void MainWindow::newFile(bool showProjectSettings, bool force) if (m_timelineArea->count() == 1) { connectDocumentInfo(doc); connectDocument(trackView, doc); - } else + } else { m_timelineArea->setTabBarHidden(false); - m_monitorManager->activateMonitor(Kdenlive::clipMonitor); + } + m_monitorManager->activateMonitor(Kdenlive::ClipMonitor); m_closeAction->setEnabled(m_timelineArea->count() > 1); } void MainWindow::activateDocument() { - if (m_timelineArea->currentWidget() == NULL || !m_timelineArea->isEnabled()) return; + if (m_timelineArea->currentWidget() == NULL || !m_timelineArea->isEnabled()) { + return; + } TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); KdenliveDoc *currentDoc = currentTab->document(); connectDocumentInfo(currentDoc); @@ -2000,19 +2044,25 @@ void MainWindow::activateDocument() bool MainWindow::closeCurrentDocument(bool saveChanges) { QWidget *w = m_timelineArea->currentWidget(); - if (!w) return true; + if (!w) { + return true; + } // closing current document int ix = m_timelineArea->currentIndex() + 1; - if (ix == m_timelineArea->count()) ix = 0; + if (ix == m_timelineArea->count()) { + ix = 0; + } m_timelineArea->setCurrentIndex(ix); TrackView *tabToClose = (TrackView *) w; KdenliveDoc *docToClose = tabToClose->document(); if (docToClose && docToClose->isModified() && saveChanges) { QString message; - if (m_activeDocument->url().fileName().isEmpty()) + if (m_activeDocument->url().fileName().isEmpty()) { message = i18n("Save changes to document?"); - else + } else { message = i18n("The project \"%1\" has been changed.\nDo you want to save your changes?", m_activeDocument->url().fileName()); + } + switch (KMessageBox::warningYesNoCancel(this, message)) { case KMessageBox::Yes : // save document here. If saving fails, return false; @@ -2025,6 +2075,7 @@ bool MainWindow::closeCurrentDocument(bool saveChanges) break; } } + slotTimelineClipSelected(NULL, false); m_clipMonitor->slotSetClipProducer(NULL); m_projectList->slotResetProjectList(); @@ -2033,31 +2084,34 @@ bool MainWindow::closeCurrentDocument(bool saveChanges) m_timelineArea->setTabBarHidden(true); m_closeAction->setEnabled(false); } + if (docToClose == m_activeDocument) { delete m_activeDocument; m_activeDocument = NULL; - m_monitorManager->setDocument(m_activeDocument); + m_monitorManager->setDocument(m_activeDocument); m_effectStack->clear(); m_transitionConfig->slotTransitionItemSelected(NULL, 0, QPoint(), false); } else { delete docToClose; } + if (w == m_activeTimeline) { delete m_activeTimeline; m_activeTimeline = NULL; } else { delete w; } + return true; } bool MainWindow::saveFileAs(const QString &outputFileName) { - QString currentSceneList; m_monitorManager->stopActiveMonitor(); - if (m_activeDocument->saveSceneList(outputFileName, m_projectMonitor->sceneList(), m_projectList->expandedFolders()) == false) + if (m_activeDocument->saveSceneList(outputFileName, m_projectMonitor->sceneList(), m_projectList->expandedFolders()) == false) { return false; + } // Save timeline thumbnails m_activeTimeline->projectView()->saveThumbnails(); @@ -2065,7 +2119,10 @@ bool MainWindow::saveFileAs(const QString &outputFileName) QByteArray hash = QCryptographicHash::hash(KUrl(outputFileName).encodedPath(), QCryptographicHash::Md5).toHex(); if (m_activeDocument->m_autosave == NULL) { m_activeDocument->m_autosave = new KAutoSaveFile(KUrl(hash), this); - } else m_activeDocument->m_autosave->setManagedFile(KUrl(hash)); + } else { + m_activeDocument->m_autosave->setManagedFile(KUrl(hash)); + } + setCaption(m_activeDocument->description()); m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description()); m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), m_activeDocument->url().path()); @@ -2073,6 +2130,7 @@ bool MainWindow::saveFileAs(const QString &outputFileName) m_fileOpenRecent->addUrl(KUrl(outputFileName)); m_fileRevert->setEnabled(true); m_undoView->stack()->setClean(); + return true; } @@ -2082,17 +2140,23 @@ bool MainWindow::saveFileAs() if (outputFile.isEmpty()) { return false; } + if (QFile::exists(outputFile)) { // Show the file dialog again if the user does not want to overwrite the file - if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", outputFile)) == KMessageBox::No) + if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo you want to overwrite it?", outputFile)) == KMessageBox::No) { return saveFileAs(); + } } + return saveFileAs(outputFile); } bool MainWindow::saveFile() { - if (!m_activeDocument) return true; + if (!m_activeDocument) { + return true; + } + if (m_activeDocument->url().isEmpty()) { return saveFileAs(); } else { @@ -2110,7 +2174,10 @@ void MainWindow::openFile() return; } KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder"), getMimeType()); - if (url.isEmpty()) return; + if (url.isEmpty()) { + return; + } + m_fileOpenRecent->addUrl(url); openFile(url); } @@ -2122,9 +2189,13 @@ void MainWindow::openLastFile() newFile(false); return; } + QAction *firstUrlAction = m_fileOpenRecent->selectableActionGroup()->actions().last(); - if (firstUrlAction) firstUrlAction->trigger(); - else newFile(false); + if (firstUrlAction) { + firstUrlAction->trigger(); + } else { + newFile(false); + } } void MainWindow::openFile(const KUrl &url) @@ -2136,22 +2207,22 @@ void MainWindow::openFile(const KUrl &url) kDebug()<<"Opening archive, processing"; QPointer ar = new ArchiveWidget(url); if (ar->exec() == QDialog::Accepted) { - openFile(KUrl(ar->extractedProjectFile())); - } - else if (!m_startUrl.isEmpty()) { - // we tried to open an invalid file from command line, init new project - newFile(false); - } + openFile(KUrl(ar->extractedProjectFile())); + } else if (!m_startUrl.isEmpty()) { + // we tried to open an invalid file from command line, init new project + newFile(false); + } delete ar; return; } + if (!url.fileName().endsWith(".kdenlive")) { // This is not a Kdenlive project file, abort loading KMessageBox::sorry(this, i18n("File %1 is not a Kdenlive project file", url.path())); - if (!m_startUrl.isEmpty()) { - // we tried to open an invalid file from command line, init new project - newFile(false); - } + if (!m_startUrl.isEmpty()) { + // we tried to open an invalid file from command line, init new project + newFile(false); + } return; } @@ -2167,12 +2238,17 @@ void MainWindow::openFile(const KUrl &url) break; } } + if (isOpened) { m_timelineArea->setCurrentIndex(i); return; } - if (!KdenliveSettings::activatetabs()) if (!closeCurrentDocument()) return; + if (!KdenliveSettings::activatetabs()) { + if (!closeCurrentDocument()) { + return; + } + } // Check for backup file QByteArray hash = QCryptographicHash::hash(url.encodedPath(), QCryptographicHash::Md5).toHex(); @@ -2216,7 +2292,7 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) progressDialog.progressBar()->setValue(0); bool openBackup; - KdenliveDoc *doc = new KdenliveDoc(stale ? KUrl(stale->fileName()) : url, KdenliveSettings::defaultprojectfolder(), m_commandStack, KdenliveSettings::default_profile(), QMap (), QMap (), QPoint(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()), m_projectMonitor->render, m_notesWidget, &openBackup, this, &progressDialog); + KdenliveDoc *doc = new KdenliveDoc(stale ? KUrl(stale->fileName()) : url, KdenliveSettings::defaultprojectfolder(), m_commandStack, KdenliveSettings::default_profile(), QMap (), QMap (), QPoint(KdenliveSettings::videotracks(), KdenliveSettings::audiotracks()), m_projectMonitor->render, m_notesWidget, &openBackup, m_glContext, this, &progressDialog); progressDialog.progressBar()->setValue(1); progressDialog.progressBar()->setMaximum(4); @@ -2256,15 +2332,20 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) m_timelineArea->setTabToolTip(m_timelineArea->currentIndex(), doc->url().path()); trackView->setDuration(trackView->duration()); - if (m_timelineArea->count() > 1) m_timelineArea->setTabBarHidden(false); + if (m_timelineArea->count() > 1) { + m_timelineArea->setTabBarHidden(false); + } + slotGotProgressInfo(QString(), -1); m_projectMonitor->adjustRulerSize(trackView->duration()); m_projectMonitor->slotZoneMoved(trackView->inPoint(), trackView->outPoint()); progressDialog.progressBar()->setValue(4); - if (openBackup) slotOpenBackupDialog(url); + if (openBackup) { + slotOpenBackupDialog(url); + } } -void MainWindow::recoverFiles(QList staleFiles, const KUrl &originUrl) +void MainWindow::recoverFiles(const QList &staleFiles, const KUrl &originUrl) { foreach(KAutoSaveFile * stale, staleFiles) { /*if (!stale->open(QIODevice::QIODevice::ReadOnly)) { @@ -2275,8 +2356,11 @@ void MainWindow::recoverFiles(QList staleFiles, const KUrl &ori }*/ kDebug() << "// OPENING RECOVERY: " << stale->fileName() << "\nMANAGED: " << stale->managedFile().path(); // the stalefiles also contain ".lock" files so we must ignore them... bug in KAutoSaveFile? - if (!stale->fileName().endsWith(".lock")) doOpenFile(originUrl, stale); - else KIO::NetAccess::del(KUrl(stale->fileName()), this); + if (!stale->fileName().endsWith(".lock")) { + doOpenFile(originUrl, stale); + } else { + KIO::NetAccess::del(KUrl(stale->fileName()), this); + } } } @@ -2288,13 +2372,15 @@ void MainWindow::parseProfiles(const QString &mltPath) KdenliveSettings::setRendererpath(mltPath + "/bin/melt"); } - if (KdenliveSettings::mltpath().isEmpty()) + if (KdenliveSettings::mltpath().isEmpty()) { KdenliveSettings::setMltpath(QString(MLT_PREFIX) + QString("/share/mlt/profiles/")); + } if (KdenliveSettings::rendererpath().isEmpty() || KdenliveSettings::rendererpath().endsWith("inigo")) { QString meltPath = QString(MLT_PREFIX) + QString("/bin/melt"); - if (!QFile::exists(meltPath)) + if (!QFile::exists(meltPath)) { meltPath = KStandardDirs::findExe("melt"); + } KdenliveSettings::setRendererpath(meltPath); } @@ -2341,7 +2427,9 @@ void MainWindow::parseProfiles(const QString &mltPath) kDebug() << "RESULTING MLT PATH: " << KdenliveSettings::mltpath(); // Parse again MLT profiles to build a list of available video formats - if (profilesList.isEmpty()) parseProfiles(); + if (profilesList.isEmpty()) { + parseProfiles(); + } } @@ -2350,7 +2438,9 @@ void MainWindow::slotEditProfiles() ProfilesDialog *w = new ProfilesDialog; if (w->exec() == QDialog::Accepted) { KdenliveSettingsDialog* d = static_cast (KConfigDialog::exists("settings")); - if (d) d->checkProfile(); + if (d) { + d->checkProfile(); + } } delete w; } @@ -2395,10 +2485,18 @@ void MainWindow::slotEditProjectSettings() #ifndef Q_WS_MAC m_recMonitor->slotUpdateCaptureFolder(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); #endif - if (m_renderWidget) m_renderWidget->setDocumentPath(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); - if (KdenliveSettings::videothumbnails() != w->enableVideoThumbs()) slotSwitchVideoThumbs(); - if (KdenliveSettings::audiothumbnails() != w->enableAudioThumbs()) slotSwitchAudioThumbs(); - if (m_activeDocument->profilePath() != profile) slotUpdateProjectProfile(profile); + if (m_renderWidget) { + m_renderWidget->setDocumentPath(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); + } + if (KdenliveSettings::videothumbnails() != w->enableVideoThumbs()) { + slotSwitchVideoThumbs(); + } + if (KdenliveSettings::audiothumbnails() != w->enableAudioThumbs()) { + slotSwitchAudioThumbs(); + } + if (m_activeDocument->profilePath() != profile) { + slotUpdateProjectProfile(profile); + } if (m_activeDocument->getDocumentProperty("proxyparams") != w->proxyParams()) { m_activeDocument->setModified(); m_activeDocument->setDocumentProperty("proxyparams", w->proxyParams()); @@ -2432,7 +2530,9 @@ void MainWindow::slotEditProjectSettings() m_activeDocument->setModified(); slotUpdateProxySettings(); } - if (w->metadata() != m_activeDocument->metadata()) m_activeDocument->setMetadata(w->metadata()); + if (w->metadata() != m_activeDocument->metadata()) { + m_activeDocument->setMetadata(w->metadata()); + } } delete w; } @@ -2465,9 +2565,13 @@ void MainWindow::slotUpdateProjectProfile(const QString &profile) m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList()); m_effectStack->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode()); m_projectList->updateProjectFormat(m_activeDocument->timecode()); - if (m_renderWidget) m_renderWidget->setProfile(m_activeDocument->mltProfile()); + if (m_renderWidget) { + m_renderWidget->setProfile(m_activeDocument->mltProfile()); + } m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description()); - if (updateFps) m_activeTimeline->updateProjectFps(); + if (updateFps) { + m_activeTimeline->updateProjectFps(); + } m_activeDocument->clipManager()->clearCache(); m_activeTimeline->updateProfile(); m_activeDocument->setModified(true); @@ -2485,7 +2589,9 @@ void MainWindow::slotRenderProject() if (!m_renderWidget) { QString projectfolder = m_activeDocument ? m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) : KdenliveSettings::defaultprojectfolder(); MltVideoProfile profile; - if (m_activeDocument) profile = m_activeDocument->mltProfile(); + if (m_activeDocument) { + profile = m_activeDocument->mltProfile(); + } m_renderWidget = new RenderWidget(projectfolder, m_projectList->useProxy(), profile, this); connect(m_renderWidget, SIGNAL(shutdown()), this, SLOT(slotShutdown())); connect(m_renderWidget, SIGNAL(selectedRenderProfile(QMap)), this, SLOT(slotSetDocumentRenderProfile(QMap))); @@ -2536,21 +2642,22 @@ void MainWindow::slotCleanProject() void MainWindow::slotUpdateMousePosition(int pos) { - if (m_activeDocument) + if (m_activeDocument) { switch (m_timeFormatButton->currentItem()) { case 0: - m_timeFormatButton->setText(m_activeDocument->timecode().getTimecodeFromFrames(pos) + " / " + m_activeDocument->timecode().getTimecodeFromFrames(m_activeTimeline->duration())); + m_timeFormatButton->setText(m_activeDocument->timecode().getTimecodeFromFrames(pos) + " / " + m_activeDocument->timecode().getTimecodeFromFrames(m_activeTimeline->duration())); break; default: - m_timeFormatButton->setText(QString::number(pos) + " / " + QString::number(m_activeTimeline->duration())); + m_timeFormatButton->setText(QString::number(pos) + " / " + QString::number(m_activeTimeline->duration())); } + } } void MainWindow::slotUpdateProjectDuration(int pos) { if (m_activeDocument) { - m_activeTimeline->setDuration(pos); - slotUpdateMousePosition(m_activeTimeline->projectView()->getMousePos()); + m_activeTimeline->setDuration(pos); + slotUpdateMousePosition(m_activeTimeline->projectView()->getMousePos()); } } @@ -2583,7 +2690,9 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha m_closeAction->setEnabled(m_timelineArea->count() > 1); kDebug() << "/////////////////// CONNECTING DOC TO PROJECT VIEW ////////////////"; if (m_activeDocument) { - if (m_activeDocument == doc) return; + if (m_activeDocument == doc) { + return; + } if (m_activeTimeline) { disconnect(m_projectMonitor, SIGNAL(renderPosition(int)), m_activeTimeline, SLOT(moveCursorPos(int))); disconnect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), m_activeTimeline, SLOT(slotSetZone(QPoint))); @@ -2614,7 +2723,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_activeDocument, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool))); disconnect(m_effectStack, SIGNAL(updateEffect(ClipItem*,int,QDomElement,QDomElement,int,bool)), m_activeTimeline->projectView(), SLOT(slotUpdateClipEffect(ClipItem*,int,QDomElement,QDomElement,int,bool))); disconnect(m_effectStack, SIGNAL(removeEffect(ClipItem*,int,QDomElement)), m_activeTimeline->projectView(), SLOT(slotDeleteEffect(ClipItem*,int,QDomElement))); - disconnect(m_effectStack, SIGNAL(addEffect(ClipItem*,QDomElement)), trackView->projectView(), SLOT(slotAddEffect(ClipItem*,QDomElement))); + disconnect(m_effectStack, SIGNAL(addEffect(ClipItem*,QDomElement)), trackView->projectView(), SLOT(slotAddEffect(ClipItem*,QDomElement))); disconnect(m_effectStack, SIGNAL(changeEffectState(ClipItem*,int,QList,bool)), m_activeTimeline->projectView(), SLOT(slotChangeEffectState(ClipItem*,int,QList,bool))); disconnect(m_effectStack, SIGNAL(changeEffectPosition(ClipItem*,int,QList,int)), m_activeTimeline->projectView(), SLOT(slotChangeEffectPosition(ClipItem*,int,QList,int))); disconnect(m_effectStack, SIGNAL(refreshEffectStack(ClipItem*)), m_activeTimeline->projectView(), SLOT(slotRefreshEffects(ClipItem*))); @@ -2622,13 +2731,13 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha disconnect(m_effectStack, SIGNAL(displayMessage(QString,int)), this, SLOT(slotGotProgressInfo(QString,int))); disconnect(m_transitionConfig, SIGNAL(transitionUpdated(Transition*,QDomElement)), m_activeTimeline->projectView() , SLOT(slotTransitionUpdated(Transition*,QDomElement))); disconnect(m_transitionConfig, SIGNAL(seekTimeline(int)), m_activeTimeline->projectView() , SLOT(setCursorPos(int))); - disconnect(m_transitionConfig, SIGNAL(importClipKeyframes(GRAPHICSRECTITEM)), m_activeTimeline->projectView() , SLOT(slotImportClipKeyframes(GRAPHICSRECTITEM))); + disconnect(m_transitionConfig, SIGNAL(importClipKeyframes(GraphicsRectItem)), m_activeTimeline->projectView() , SLOT(slotImportClipKeyframes(GraphicsRectItem))); disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(slotActivateMonitor())); disconnect(m_activeTimeline, SIGNAL(zoneMoved(int,int)), this, SLOT(slotZoneMoved(int,int))); disconnect(m_projectList, SIGNAL(loadingIsOver()), m_activeTimeline->projectView(), SLOT(slotUpdateAllThumbs())); disconnect(m_projectList, SIGNAL(refreshClip(QString)), m_activeTimeline->projectView(), SLOT(slotRefreshThumbs(QString))); - disconnect(m_projectList, SIGNAL(addMarkers(QString,QList)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(QString,QList))); + disconnect(m_projectList, SIGNAL(addMarkers(QString,QList)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(QString,QList))); m_effectStack->clear(); } //m_activeDocument->setRenderer(NULL); @@ -2651,7 +2760,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int))); connect(trackView->projectView(), SIGNAL(forceClipProcessing(QString)), m_projectList, SLOT(slotForceProcessing(QString))); - connect(trackView->projectView(), SIGNAL(importKeyframes(GRAPHICSRECTITEM,QString,int)), this, SLOT(slotProcessImportKeyframes(GRAPHICSRECTITEM,QString,int))); + connect(trackView->projectView(), SIGNAL(importKeyframes(GraphicsRectItem,QString,int)), this, SLOT(slotProcessImportKeyframes(GraphicsRectItem,QString,int))); connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int))); connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint))); @@ -2702,13 +2811,13 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(m_effectStack, SIGNAL(refreshEffectStack(ClipItem*)), trackView->projectView(), SLOT(slotRefreshEffects(ClipItem*))); connect(m_effectStack, SIGNAL(seekTimeline(int)), trackView->projectView(), SLOT(seekCursorPos(int))); - connect(m_effectStack, SIGNAL(importClipKeyframes(GRAPHICSRECTITEM)), trackView->projectView(), SLOT(slotImportClipKeyframes(GRAPHICSRECTITEM))); + connect(m_effectStack, SIGNAL(importClipKeyframes(GraphicsRectItem)), trackView->projectView(), SLOT(slotImportClipKeyframes(GraphicsRectItem))); connect(m_effectStack, SIGNAL(reloadEffects()), this, SLOT(slotReloadEffects())); connect(m_effectStack, SIGNAL(displayMessage(QString,int)), this, SLOT(slotGotProgressInfo(QString,int))); // Transition config signals connect(m_transitionConfig, SIGNAL(transitionUpdated(Transition*,QDomElement)), trackView->projectView() , SLOT(slotTransitionUpdated(Transition*,QDomElement))); - connect(m_transitionConfig, SIGNAL(importClipKeyframes(GRAPHICSRECTITEM)), trackView->projectView() , SLOT(slotImportClipKeyframes(GRAPHICSRECTITEM))); + connect(m_transitionConfig, SIGNAL(importClipKeyframes(GraphicsRectItem)), trackView->projectView() , SLOT(slotImportClipKeyframes(GraphicsRectItem))); connect(m_transitionConfig, SIGNAL(seekTimeline(int)), trackView->projectView() , SLOT(seekCursorPos(int))); connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(slotActivateMonitor())); @@ -2748,7 +2857,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha // Make sure monitor is visible so that it is painted black on startup show(); - m_monitorManager->activateMonitor(Kdenlive::clipMonitor, true); + m_monitorManager->activateMonitor(Kdenlive::ClipMonitor, true); // set tool to select tool m_buttonSelectTool->setChecked(true); } @@ -2781,7 +2890,10 @@ void MainWindow::slotPreferences(int page, int option) * cached, in which case you want to display the cached dialog * instead of creating another one */ - if (m_stopmotion) m_stopmotion->slotLive(false); + if (m_stopmotion) { + m_stopmotion->slotLive(false); + } + if (KConfigDialog::showDialog("settings")) { KdenliveSettingsDialog* d = static_cast (KConfigDialog::exists("settings")); if (page != -1) d->showPage(page, option); @@ -2805,7 +2917,9 @@ void MainWindow::slotPreferences(int page, int option) connect(dialog, SIGNAL(updateCaptureFolder()), this, SLOT(slotUpdateCaptureFolder())); #endif dialog->show(); - if (page != -1) dialog->showPage(page, option); + if (page != -1) { + dialog->showPage(page, option); + } } void MainWindow::slotUpdateCaptureFolder() @@ -2850,8 +2964,9 @@ void MainWindow::slotSwitchSplitAudio() void MainWindow::slotSwitchVideoThumbs() { KdenliveSettings::setVideothumbnails(!KdenliveSettings::videothumbnails()); - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->projectView()->slotUpdateAllThumbs(); + } m_buttonVideoThumbs->setChecked(KdenliveSettings::videothumbnails()); } @@ -2861,8 +2976,9 @@ void MainWindow::slotSwitchAudioThumbs() if (m_activeTimeline) { m_activeTimeline->refresh(); m_activeTimeline->projectView()->checkAutoScroll(); - if (m_activeDocument) + if (m_activeDocument) { m_activeDocument->clipManager()->checkAudioThumbs(); + } } m_buttonAudioThumbs->setChecked(KdenliveSettings::audiothumbnails()); } @@ -2870,8 +2986,9 @@ void MainWindow::slotSwitchAudioThumbs() void MainWindow::slotSwitchMarkersComments() { KdenliveSettings::setShowmarkers(!KdenliveSettings::showmarkers()); - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->refresh(); + } m_buttonShowMarkers->setChecked(KdenliveSettings::showmarkers()); } @@ -2901,15 +3018,17 @@ void MainWindow::slotDeleteItem() } // effect stack has no focus - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->projectView()->deleteSelectedClips(); + } } } void MainWindow::slotUpdateClipMarkers(DocClipBase *clip) { - if (m_clipMonitor->isActive()) + if (m_clipMonitor->isActive()) { m_clipMonitor->checkOverlay(); + } m_clipMonitor->updateMarkers(clip); } @@ -2936,11 +3055,11 @@ void MainWindow::slotAddClipMarker() QString id = clip->getId(); CommentedTime marker(pos, i18n("Marker"), KdenliveSettings::default_marker_type()); QPointer d = new MarkerDialog(clip, marker, - m_activeDocument->timecode(), i18n("Add Marker"), this); + m_activeDocument->timecode(), i18n("Add Marker"), this); if (d->exec() == QDialog::Accepted) { m_activeTimeline->projectView()->slotAddClipMarker(id, QList () << d->newMarker()); - QString hash = clip->getClipHash(); - if (!hash.isEmpty()) m_activeDocument->cacheImage(hash + '#' + QString::number(d->newMarker().time().frames(m_activeDocument->fps())), d->markerImage()); + QString hash = clip->getClipHash(); + if (!hash.isEmpty()) m_activeDocument->cacheImage(hash + '#' + QString::number(d->newMarker().time().frames(m_activeDocument->fps())), d->markerImage()); } delete d; } @@ -3024,11 +3143,11 @@ void MainWindow::slotEditClipMarker() } QPointer d = new MarkerDialog(clip, oldMarker, - m_activeDocument->timecode(), i18n("Edit Marker"), this); + m_activeDocument->timecode(), i18n("Edit Marker"), this); if (d->exec() == QDialog::Accepted) { m_activeTimeline->projectView()->slotAddClipMarker(id, QList () <newMarker()); - QString hash = clip->getClipHash(); - if (!hash.isEmpty()) m_activeDocument->cacheImage(hash + '#' + QString::number(d->newMarker().time().frames(m_activeDocument->fps())), d->markerImage()); + QString hash = clip->getClipHash(); + if (!hash.isEmpty()) m_activeDocument->cacheImage(hash + '#' + QString::number(d->newMarker().time().frames(m_activeDocument->fps())), d->markerImage()); if (d->newMarker().time() != pos) { // remove old marker oldMarker.setMarkerType(-1); @@ -3052,7 +3171,7 @@ void MainWindow::slotAddMarkerGuideQuickly() return; } //TODO: allow user to set default marker category - CommentedTime marker(pos, m_activeDocument->timecode().getDisplayTimecode(pos, false), KdenliveSettings::default_marker_type()); + CommentedTime marker(pos, m_activeDocument->timecode().getDisplayTimecode(pos, false), KdenliveSettings::default_marker_type()); m_activeTimeline->projectView()->slotAddClipMarker(clip->getId(), QList () <projectView()->slotAddGuide(false); @@ -3079,29 +3198,35 @@ void MainWindow::slotRemoveSpace() void MainWindow::slotInsertTrack(int ix) { - m_monitorManager->activateMonitor(Kdenlive::projectMonitor); + m_monitorManager->activateMonitor(Kdenlive::ProjectMonitor); if (m_activeTimeline) { - if (ix == -1) ix = m_activeTimeline->projectView()->selectedTrack(); + if (ix == -1) { + ix = m_activeTimeline->projectView()->selectedTrack(); + } m_activeTimeline->projectView()->slotInsertTrack(ix); } - if (m_activeDocument) + if (m_activeDocument) { m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList()); + } } void MainWindow::slotDeleteTrack(int ix) { - m_monitorManager->activateMonitor(Kdenlive::projectMonitor); + m_monitorManager->activateMonitor(Kdenlive::ProjectMonitor); if (m_activeTimeline) { - if (ix == -1) ix = m_activeTimeline->projectView()->selectedTrack(); + if (ix == -1) { + ix = m_activeTimeline->projectView()->selectedTrack(); + } m_activeTimeline->projectView()->slotDeleteTrack(ix); } - if (m_activeDocument) + if (m_activeDocument) { m_transitionConfig->updateProjectFormat(m_activeDocument->mltProfile(), m_activeDocument->timecode(), m_activeDocument->tracksList()); + } } void MainWindow::slotConfigTrack(int ix) { - m_monitorManager->activateMonitor(Kdenlive::projectMonitor); + m_monitorManager->activateMonitor(Kdenlive::ProjectMonitor); if (m_activeTimeline) m_activeTimeline->projectView()->slotConfigTracks(ix); if (m_activeDocument) @@ -3110,7 +3235,7 @@ void MainWindow::slotConfigTrack(int ix) void MainWindow::slotSelectTrack() { - m_monitorManager->activateMonitor(Kdenlive::projectMonitor); + m_monitorManager->activateMonitor(Kdenlive::ProjectMonitor); if (m_activeTimeline) { m_activeTimeline->projectView()->slotSelectClipsInTrack(); } @@ -3118,7 +3243,7 @@ void MainWindow::slotSelectTrack() void MainWindow::slotSelectAllTracks() { - m_monitorManager->activateMonitor(Kdenlive::projectMonitor); + m_monitorManager->activateMonitor(Kdenlive::ProjectMonitor); if (m_activeTimeline) m_activeTimeline->projectView()->slotSelectAllClips(); } @@ -3209,14 +3334,14 @@ void MainWindow::slotEditItemDuration() m_activeTimeline->projectView()->editItemDuration(); } -void MainWindow::slotAddProjectClip(KUrl url, stringMap data) +void MainWindow::slotAddProjectClip(const KUrl &url, const stringMap &data) { if (m_activeDocument) { m_activeDocument->slotAddClipFile(url, data); } } -void MainWindow::slotAddProjectClipList(KUrl::List urls) +void MainWindow::slotAddProjectClipList(const KUrl::List &urls) { if (m_activeDocument) m_activeDocument->slotAddClipList(urls); @@ -3235,21 +3360,30 @@ void MainWindow::slotAddTransition(QAction *result) void MainWindow::slotAddVideoEffect(QAction *result) { - if (!result) return; - const int EFFECT_VIDEO = 1; - const int EFFECT_AUDIO = 2; + if (!result) { + return; + } + const int VideoEffect = 1; + const int AudioEffect = 2; QStringList info = result->data().toStringList(); - if (info.isEmpty() || info.size() < 3) return; + if (info.isEmpty() || info.size() < 3) { + return; + } QDomElement effect ; - if (info.last() == QString::number((int) EFFECT_VIDEO)) - effect = videoEffects.getEffectByTag(info.at(0), info.at(1)); - else if (info.last() == QString::number((int) EFFECT_AUDIO)) - effect = audioEffects.getEffectByTag(info.at(0), info.at(1)); - else - effect = customEffects.getEffectByTag(info.at(0), info.at(1)); - if (!effect.isNull()) slotAddEffect(effect); - else m_messageLabel->setMessage(i18n("Cannot find effect %1 / %2", info.at(0), info.at(1)), ErrorMessage); + if (info.last() == QString::number((int) VideoEffect)) { + effect = videoEffects.getEffectByTag(info.at(0), info.at(1)); + } else if (info.last() == QString::number((int) AudioEffect)) { + effect = audioEffects.getEffectByTag(info.at(0), info.at(1)); + } else { + effect = customEffects.getEffectByTag(info.at(0), info.at(1)); + } + + if (!effect.isNull()) { + slotAddEffect(effect); + } else { + m_messageLabel->setMessage(i18n("Cannot find effect %1 / %2", info.at(0), info.at(1)), ErrorMessage); + } } @@ -3276,8 +3410,9 @@ void MainWindow::slotSetZoom(int value) value = qMax(m_zoomSlider->minimum(), value); value = qMin(m_zoomSlider->maximum(), value); - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->slotChangeZoom(value); + } m_zoomOut->setEnabled(value < m_zoomSlider->maximum()); m_zoomIn->setEnabled(value > m_zoomSlider->minimum()); @@ -3290,8 +3425,9 @@ void MainWindow::slotSetZoom(int value) void MainWindow::slotShowZoomSliderToolTip(int zoomlevel) { - if (zoomlevel != -1) + if (zoomlevel != -1) { slotUpdateZoomSliderToolTip(zoomlevel); + } QPoint global = m_zoomSlider->rect().topLeft(); global.ry() += m_zoomSlider->height() / 2; @@ -3306,10 +3442,14 @@ void MainWindow::slotUpdateZoomSliderToolTip(int zoomlevel) void MainWindow::slotGotProgressInfo(const QString &message, int progress, MessageType type) { - if (type == DefaultMessage) m_statusProgressBar->setValue(progress); + if (type == DefaultMessage) { + m_statusProgressBar->setValue(progress); + } m_messageLabel->setMessage(message, type); if (progress >= 0) { - if (type == DefaultMessage) m_statusProgressBar->setVisible(true); + if (type == DefaultMessage) { + m_statusProgressBar->setVisible(true); + } } else { m_statusProgressBar->setVisible(false); } @@ -3317,7 +3457,7 @@ void MainWindow::slotGotProgressInfo(const QString &message, int progress, Messa void MainWindow::slotShowClipProperties(DocClipBase *clip) { - if (clip->clipType() == TEXT) { + if (clip->clipType() == Text) { QString titlepath = m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) + "titles/"; if (!clip->getProperty("resource").isEmpty() && clip->getProperty("xmldata").isEmpty()) { // template text clip @@ -3345,7 +3485,9 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) dia_ui.description->setText(clip->getProperty("description")); if (dia->exec() == QDialog::Accepted) { QString textTemplate = dia_ui.template_list->comboBox()->itemData(dia_ui.template_list->comboBox()->currentIndex()).toString(); - if (textTemplate.isEmpty()) textTemplate = dia_ui.template_list->comboBox()->currentText(); + if (textTemplate.isEmpty()) { + textTemplate = dia_ui.template_list->comboBox()->currentText(); + } QMap newprops; @@ -3359,12 +3501,18 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) } QString newtemplate = newprops.value("xmltemplate"); - if (newtemplate.isEmpty()) newtemplate = templatePath; + if (newtemplate.isEmpty()) { + newtemplate = templatePath; + } // template modified we need to update xmldata QString description = newprops.value("description"); - if (description.isEmpty()) description = clip->getProperty("description"); - else newprops.insert("templatetext", description); + if (description.isEmpty()) { + description = clip->getProperty("description"); + } else { + newprops.insert("templatetext", description); + } + //newprops.insert("xmldata", m_projectList->generateTemplateXml(newtemplate, description).toString()); if (!newprops.isEmpty()) { EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newprops), newprops, true); @@ -3386,16 +3534,20 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) // duration changed, we need to update duration newprops.insert("out", QString::number(dia_ui->duration() - 1)); int currentLength = QString(clip->producerProperty("length")).toInt(); - if (currentLength <= dia_ui->duration()) - newprops.insert("length", QString::number(dia_ui->duration())); - else newprops.insert("length", clip->producerProperty("length")); + if (currentLength <= dia_ui->duration()) { + newprops.insert("length", QString::number(dia_ui->duration())); + } else { + newprops.insert("length", clip->producerProperty("length")); + } } if (!path.isEmpty()) { // we are editing an external file, asked if we want to detach from that file or save the result to that title file. if (KMessageBox::questionYesNo(this, i18n("You are editing an external title clip (%1). Do you want to save your changes to the title file or save the changes for this project only?", path), i18n("Save Title"), KGuiItem(i18n("Save to title file")), KGuiItem(i18n("Save in project only"))) == KMessageBox::Yes) { // save to external file dia_ui->saveTitle(path); - } else newprops.insert("resource", QString()); + } else { + newprops.insert("resource", QString()); + } } EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newprops), newprops, true); m_activeDocument->commandStack()->push(command); @@ -3412,20 +3564,20 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) QList list = findChildren(); for (int i = 0; i < list.size(); ++i) { if (list.at(i)->clipId() == clip->getId()) { - // We have one dialog, show it - list.at(i)->raise(); - return; - } + // We have one dialog, show it + list.at(i)->raise(); + return; + } } // any type of clip but a title ClipProperties *dia = new ClipProperties(clip, m_activeDocument->timecode(), m_activeDocument->fps(), this); - if (clip->clipType() == AV || clip->clipType() == VIDEO || clip->clipType() == PLAYLIST || clip->clipType() == SLIDESHOW) { - // request clip thumbnails - connect(m_activeDocument->clipManager(), SIGNAL(gotClipPropertyThumbnail(QString,QImage)), dia, SLOT(slotGotThumbnail(QString,QImage))); - connect(dia, SIGNAL(requestThumb(QString,QList)), m_activeDocument->clipManager(), SLOT(slotRequestThumbs(QString,QList))); - m_activeDocument->clipManager()->slotRequestThumbs(QString('?' + clip->getId()), QList() << clip->getClipThumbFrame()); + if (clip->clipType() == AV || clip->clipType() == Video || clip->clipType() == Playlist || clip->clipType() == SlideShow) { + // request clip thumbnails + connect(m_activeDocument->clipManager(), SIGNAL(gotClipPropertyThumbnail(QString,QImage)), dia, SLOT(slotGotThumbnail(QString,QImage))); + connect(dia, SIGNAL(requestThumb(QString,QList)), m_activeDocument->clipManager(), SLOT(slotRequestThumbs(QString,QList))); + m_activeDocument->clipManager()->slotRequestThumbs(QString('?' + clip->getId()), QList() << clip->getClipThumbFrame()); } connect(dia, SIGNAL(addMarkers(QString,QList)), m_activeTimeline->projectView(), SLOT(slotAddClipMarker(QString,QList))); @@ -3441,9 +3593,12 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip) } -void MainWindow::slotApplyNewClipProperties(const QString id, QMap props, QMap newprops, bool refresh, bool reload) +void MainWindow::slotApplyNewClipProperties(const QString &id, const QMap &props, const QMap &newprops, bool refresh, bool reload) { - if (newprops.isEmpty()) return; + if (newprops.isEmpty()) { + return; + } + EditClipCommand *command = new EditClipCommand(m_projectList, id, props, newprops, true); m_activeDocument->commandStack()->push(command); m_activeDocument->setModified(); @@ -3455,10 +3610,10 @@ void MainWindow::slotApplyNewClipProperties(const QString id, QMap cliplist, QMap commonproperties) +void MainWindow::slotShowClipProperties(const QList &cliplist, const QMap &commonproperties) { QPointer dia = new ClipProperties(cliplist, - m_activeDocument->timecode(), commonproperties, this); + m_activeDocument->timecode(), commonproperties, this); if (dia->exec() == QDialog::Accepted) { QUndoCommand *command = new QUndoCommand(); command->setText(i18n("Edit clips")); @@ -3469,14 +3624,15 @@ void MainWindow::slotShowClipProperties(QList cliplist, QMapclipType() == IMAGE) + if (clip->clipType() == Image) new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newImageProps), newImageProps, true, command); else new EditClipCommand(m_projectList, clip->getId(), clip->currentProperties(newProps), newProps, true, command); } m_activeDocument->commandStack()->push(command); - for (int i = 0; i < cliplist.count(); ++i) + for (int i = 0; i < cliplist.count(); ++i) { m_activeTimeline->projectView()->slotUpdateClip(cliplist.at(i)->getId(), dia->needsTimelineReload()); + } } delete dia; } @@ -3490,34 +3646,42 @@ void MainWindow::customEvent(QEvent* e) void MainWindow::slotTimelineClipSelected(ClipItem* item, bool raise) { if (item != m_mainClip) { - if (m_mainClip) m_mainClip->setMainSelectedClip(false); - if (item) item->setMainSelectedClip(true); - m_mainClip = item; + if (m_mainClip) { + m_mainClip->setMainSelectedClip(false); + } + if (item) { + item->setMainSelectedClip(true); + } + m_mainClip = item; } + m_effectStack->slotClipItemSelected(item); m_projectMonitor->slotSetSelectedClip(item); - if (raise) + if (raise) { m_effectStack->raiseWindow(m_effectStackDock); + } } -void MainWindow::slotTrackSelected(int index, TrackInfo info, bool raise) +void MainWindow::slotTrackSelected(int index, const TrackInfo &info, bool raise) { m_effectStack->slotTrackItemSelected(index, info); - if (raise) + if (raise) { m_effectStack->raiseWindow(m_effectStackDock); + } } -void MainWindow::slotActivateTransitionView(Transition *t) +void MainWindow::slotActivateTransitionView(Transition *transition) { - if (t) + if (transition) m_transitionConfig->raiseWindow(m_transitionConfigDock); } void MainWindow::slotSnapRewind() { if (m_projectMonitor->isActive()) { - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->projectView()->slotSeekToPreviousSnap(); + } } else { m_clipMonitor->slotSeekToPreviousSnap(); } @@ -3526,8 +3690,9 @@ void MainWindow::slotSnapRewind() void MainWindow::slotSnapForward() { if (m_projectMonitor->isActive()) { - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->projectView()->slotSeekToNextSnap(); + } } else { m_clipMonitor->slotSeekToNextSnap(); } @@ -3536,16 +3701,18 @@ void MainWindow::slotSnapForward() void MainWindow::slotClipStart() { if (m_projectMonitor->isActive()) { - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->projectView()->clipStart(); + } } } void MainWindow::slotClipEnd() { if (m_projectMonitor->isActive()) { - if (m_activeTimeline) + if (m_activeTimeline) { m_activeTimeline->projectView()->clipEnd(); + } } } @@ -3568,11 +3735,11 @@ void MainWindow::slotZoneEnd() void MainWindow::slotChangeTool(QAction * action) { if (action == m_buttonSelectTool) - slotSetTool(SELECTTOOL); + slotSetTool(SelectTool); else if (action == m_buttonRazorTool) - slotSetTool(RAZORTOOL); + slotSetTool(RazorTool); else if (action == m_buttonSpacerTool) - slotSetTool(SPACERTOOL); + slotSetTool(SpacerTool); } void MainWindow::slotChangeEdit(QAction * action) @@ -3581,23 +3748,23 @@ void MainWindow::slotChangeEdit(QAction * action) return; if (action == m_overwriteEditTool) - m_activeTimeline->projectView()->setEditMode(OVERWRITEEDIT); + m_activeTimeline->projectView()->setEditMode(OverwriteEdit); else if (action == m_insertEditTool) - m_activeTimeline->projectView()->setEditMode(INSERTEDIT); + m_activeTimeline->projectView()->setEditMode(InsertEdit); else - m_activeTimeline->projectView()->setEditMode(NORMALEDIT); + m_activeTimeline->projectView()->setEditMode(NormalEdit); } -void MainWindow::slotSetTool(PROJECTTOOL tool) +void MainWindow::slotSetTool(ProjectTool tool) { if (m_activeDocument && m_activeTimeline) { //m_activeDocument->setTool(tool); QString message; switch (tool) { - case SPACERTOOL: + case SpacerTool: message = i18n("Ctrl + click to use spacer on current track only"); break; - case RAZORTOOL: + case RazorTool: message = i18n("Click on a clip to cut it"); break; default: @@ -3629,7 +3796,10 @@ void MainWindow::slotPasteEffects() void MainWindow::slotFind() { - if (!m_activeDocument || !m_activeTimeline) return; + if (!m_activeDocument || !m_activeTimeline) { + return; + } + m_projectSearch->setEnabled(false); m_findActivated = true; m_findString.clear(); @@ -3641,10 +3811,11 @@ void MainWindow::slotFind() void MainWindow::slotFindNext() { - if (m_activeTimeline && m_activeTimeline->projectView()->findNextString(m_findString)) + if (m_activeTimeline && m_activeTimeline->projectView()->findNextString(m_findString)) { statusBar()->showMessage(i18n("Found: %1", m_findString)); - else + } else { statusBar()->showMessage(i18n("Reached end of project")); + } m_findTimer.start(4000); } @@ -3695,25 +3866,31 @@ void MainWindow::slotClipInTimeline(const QString &clipId) } inTimelineMenu->addActions(actionList); - if (matching.empty()) + if (matching.empty()) { inTimelineMenu->setEnabled(false); - else + } else { inTimelineMenu->setEnabled(true); + } } } void MainWindow::slotClipInProjectTree() { if (m_activeTimeline) { - QStringList clipIds; - if (m_mainClip) clipIds << m_mainClip->clipProducer(); - else clipIds = m_activeTimeline->projectView()->selectedClips(); - if (clipIds.isEmpty()) + QStringList clipIds; + if (m_mainClip) { + clipIds << m_mainClip->clipProducer(); + } else { + clipIds = m_activeTimeline->projectView()->selectedClips(); + } + if (clipIds.isEmpty()) { return; + } m_projectListDock->raise(); m_projectList->selectItemById(clipIds.at(0)); - if (m_projectMonitor->isActive()) + if (m_projectMonitor->isActive()) { slotSwitchMonitors(); + } } } @@ -3744,10 +3921,11 @@ void MainWindow::keyPressEvent(QKeyEvent *ke) if (ke->key() == Qt::Key_Backspace) { m_findString = m_findString.left(m_findString.length() - 1); - if (!m_findString.isEmpty()) + if (!m_findString.isEmpty()) { findAhead(); - else + } else { findTimeout(); + } m_findTimer.start(4000); ke->accept(); @@ -3796,7 +3974,7 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) } -void MainWindow::slotSaveZone(Render *render, QPoint zone, DocClipBase *baseClip, KUrl path) +void MainWindow::slotSaveZone(Render *render, const QPoint &zone, DocClipBase *baseClip, KUrl path) { KDialog *dialog = new KDialog(this); dialog->setCaption("Save clip zone"); @@ -3809,8 +3987,9 @@ void MainWindow::slotSaveZone(Render *render, QPoint zone, DocClipBase *baseClip QLabel *label1 = new QLabel(i18n("Save clip zone as:"), this); if (path.isEmpty()) { QString tmppath = m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash); - if (baseClip == NULL) tmppath.append("untitled.mlt"); - else { + if (baseClip == NULL) { + tmppath.append("untitled.mlt"); + } else { tmppath.append((baseClip->name().isEmpty() ? baseClip->fileURL().fileName() : baseClip->name()) + '-' + QString::number(zone.x()).rightJustified(4, '0') + ".mlt"); } path = KUrl(tmppath); @@ -3892,8 +4071,7 @@ int MainWindow::getNewStuff(const QString &configFile) KNS3::Entry::List entries; #if KDE_IS_VERSION(4,3,80) QPointer dialog = new KNS3::DownloadDialog(configFile); - dialog->exec(); - if (dialog) entries = dialog->changedEntries(); + if (dialog->exec()) entries = dialog->changedEntries(); foreach(const KNS3::Entry & entry, entries) { if (entry.status() == KNS3::Entry::Installed) kDebug() << "// Installed files: " << entry.installedFiles(); @@ -3980,11 +4158,11 @@ void MainWindow::slotUpdateClipType(QAction *action) void MainWindow::slotDvdWizard(const QString &url) { // We must stop the monitors since we create a new on in the dvd wizard - m_monitorManager->activateMonitor(Kdenlive::dvdMonitor); + m_monitorManager->activateMonitor(Kdenlive::DvdMonitor); QPointer w = new DvdWizard(m_monitorManager, url, this); w->exec(); delete w; - m_monitorManager->activateMonitor(Kdenlive::clipMonitor); + m_monitorManager->activateMonitor(Kdenlive::ClipMonitor); } void MainWindow::slotShowTimeline(bool show) @@ -4011,52 +4189,52 @@ void MainWindow::slotMaximizeCurrent(bool) void MainWindow::loadClipActions() { - QMenu* actionMenu= static_cast(factory()->container("clip_actions", this)); - if (actionMenu){ - actionMenu->clear(); - Mlt::Profile profile; - Mlt::Filter *filter = Mlt::Factory::filter(profile,(char*)"videostab"); - if (filter) { - if (!filter->is_valid()) { - delete filter; - } - else { - delete filter; - QAction *action=actionMenu->addAction(i18n("Stabilize (vstab)")); - action->setData("videostab"); - connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); - } - } - filter = Mlt::Factory::filter(profile,(char*)"videostab2"); - if (filter) { - if (!filter->is_valid()) { - delete filter; - } - else { - delete filter; - QAction *action=actionMenu->addAction(i18n("Stabilize (transcode)")); - action->setData("videostab2"); - connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); - } - } - filter = Mlt::Factory::filter(profile,(char*)"motion_est"); - if (filter) { - if (!filter->is_valid()) { - delete filter; - } - else { - delete filter; - QAction *action=actionMenu->addAction(i18n("Automatic scene split")); - action->setData("motion_est"); - connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); - } - } - if (KdenliveSettings::producerslist().contains("framebuffer")) { - QAction *action=actionMenu->addAction(i18n("Reverse clip")); - action->setData("framebuffer"); - connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); - } - } + QMenu* actionMenu= static_cast(factory()->container("clip_actions", this)); + if (actionMenu){ + actionMenu->clear(); + Mlt::Profile profile; + Mlt::Filter *filter = Mlt::Factory::filter(profile,(char*)"videostab"); + if (filter) { + if (!filter->is_valid()) { + delete filter; + } + else { + delete filter; + QAction *action=actionMenu->addAction(i18n("Stabilize (vstab)")); + action->setData("videostab"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); + } + } + filter = Mlt::Factory::filter(profile,(char*)"videostab2"); + if (filter) { + if (!filter->is_valid()) { + delete filter; + } + else { + delete filter; + QAction *action=actionMenu->addAction(i18n("Stabilize (transcode)")); + action->setData("videostab2"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); + } + } + filter = Mlt::Factory::filter(profile,(char*)"motion_est"); + if (filter) { + if (!filter->is_valid()) { + delete filter; + } + else { + delete filter; + QAction *action=actionMenu->addAction(i18n("Automatic scene split")); + action->setData("motion_est"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); + } + } + if (KdenliveSettings::producerslist().contains("framebuffer")) { + QAction *action=actionMenu->addAction(i18n("Reverse clip")); + action->setData("framebuffer"); + connect(action,SIGNAL(triggered()), this, SLOT(slotStartClipAction())); + } + } } @@ -4112,8 +4290,10 @@ void MainWindow::slotTranscode(const KUrl::List &urls) QAction *action = qobject_cast(sender()); QStringList data = action->data().toStringList(); params = data.at(0); - if (data.count() > 1) desc = data.at(1); - if (data.count() > 3) condition = data.at(3); + if (data.count() > 1) + desc = data.at(1); + if (data.count() > 3) + condition = data.at(3); m_projectList->slotTranscodeClipJob(condition, params, desc); return; } @@ -4151,11 +4331,11 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS QString scriptPath; QString playlistPath; if (scriptExport) { - QString scriptsFolder = m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) + "scripts/"; + //QString scriptsFolder = m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) + "scripts/"; QString path = m_renderWidget->getFreeScriptName(m_activeDocument->url()); - QPointer getUrl = new KUrlRequesterDialog(path, i18n("Create Render Script"), this); - getUrl->fileDialog()->setMode(KFile::File); - getUrl->fileDialog()->setOperationMode(KFileDialog::Saving); + QPointer getUrl = new KUrlRequesterDialog(path, i18n("Create Render Script"), this); + getUrl->fileDialog()->setMode(KFile::File); + getUrl->fileDialog()->setOperationMode(KFileDialog::Saving); if (getUrl->exec() == QDialog::Rejected) { delete getUrl; return; @@ -4377,7 +4557,7 @@ void MainWindow::slotChangePalette(QAction *action, const QString &themename) // Since there was a bug in createApplicationPalette in KDE < 4.6.3 we need // to do the palette loading stuff ourselves. (https://bugs.kde.org/show_bug.cgi?id=263497) QPalette::ColorGroup states[3] = { QPalette::Active, QPalette::Inactive, - QPalette::Disabled }; + QPalette::Disabled }; // TT thinks tooltips shouldn't use active, so we use our active colors for all states KColorScheme schemeTooltip(QPalette::Active, KColorScheme::Tooltip, config); @@ -4490,7 +4670,7 @@ void MainWindow::slotInsertZoneToTimeline() } -void MainWindow::slotDeleteProjectClips(QStringList ids, QMap folderids) +void MainWindow::slotDeleteProjectClips(const QStringList &ids, const QMap &folderids) { if (m_activeDocument && m_activeTimeline) { if (!ids.isEmpty()) { @@ -4565,10 +4745,10 @@ void MainWindow::slotOpenStopmotion() m_stopmotion = new StopmotionWidget(m_monitorManager, m_activeDocument->projectFolder(), m_stopmotion_actions->actions(), this); connect(m_stopmotion, SIGNAL(addOrUpdateSequence(QString)), m_projectList, SLOT(slotAddOrUpdateSequence(QString))); //for (int i = 0; i < m_gfxScopesList.count(); ++i) { - // Check if we need the renderer to send a new frame for update - /*if (!m_scopesList.at(i)->widget()->visibleRegion().isEmpty() && !(static_cast(m_scopesList.at(i)->widget())->autoRefreshEnabled())) request = true;*/ - //connect(m_stopmotion, SIGNAL(gotFrame(QImage)), static_cast(m_gfxScopesList.at(i)->widget()), SLOT(slotRenderZoneUpdated(QImage))); - //static_cast(m_scopesList.at(i)->widget())->slotMonitorCapture(); + // Check if we need the renderer to send a new frame for update + /*if (!m_scopesList.at(i)->widget()->visibleRegion().isEmpty() && !(static_cast(m_scopesList.at(i)->widget())->autoRefreshEnabled())) request = true;*/ + //connect(m_stopmotion, SIGNAL(gotFrame(QImage)), static_cast(m_gfxScopesList.at(i)->widget()), SLOT(slotRenderZoneUpdated(QImage))); + //static_cast(m_scopesList.at(i)->widget())->slotMonitorCapture(); //} } m_stopmotion->show(); @@ -4603,7 +4783,9 @@ void MainWindow::slotArchiveProject() QList list = m_projectList->documentClipList(); QDomDocument doc = m_activeDocument->xmlSceneList(m_projectMonitor->sceneList(), m_projectList->expandedFolders()); ArchiveWidget *d = new ArchiveWidget(m_activeDocument->url().fileName(), doc, list, m_activeTimeline->projectView()->extractTransitionsLumas(), this); - d->exec(); + if (d->exec()) { + m_messageLabel->setMessage(i18n("Archiving project"), OperationCompletedMessage); + } } @@ -4672,34 +4854,34 @@ void MainWindow::slotChangePalette() void MainWindow::slotSaveTimelineClip() { if (m_activeTimeline && m_projectMonitor->render) { - ClipItem *clip = m_activeTimeline->projectView()->getActiveClipUnderCursor(true); - if (!clip) { - m_messageLabel->setMessage(i18n("Select a clip to save"), InformationMessage); - return; - } - KUrl url = KFileDialog::getSaveUrl(m_activeDocument->projectFolder(), "video/mlt-playlist"); - if (!url.isEmpty()) m_projectMonitor->render->saveClip(m_activeDocument->tracksCount() - clip->track(), clip->startPos(), url); + ClipItem *clip = m_activeTimeline->projectView()->getActiveClipUnderCursor(true); + if (!clip) { + m_messageLabel->setMessage(i18n("Select a clip to save"), InformationMessage); + return; + } + KUrl url = KFileDialog::getSaveUrl(m_activeDocument->projectFolder(), "video/mlt-playlist"); + if (!url.isEmpty()) m_projectMonitor->render->saveClip(m_activeDocument->tracksCount() - clip->track(), clip->startPos(), url); } } -void MainWindow::slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data, int maximum) +void MainWindow::slotProcessImportKeyframes(GraphicsRectItem type, const QString& data, int maximum) { - if (type == AVWIDGET) { - // This data should be sent to the effect stack - m_effectStack->setKeyframes(data, maximum); + if (type == AVWidget) { + // This data should be sent to the effect stack + m_effectStack->setKeyframes(data, maximum); } - else if (type == TRANSITIONWIDGET) { - // This data should be sent to the transition stack - m_transitionConfig->setKeyframes(data, maximum); + else if (type == TransitionWidget) { + // This data should be sent to the transition stack + m_transitionConfig->setKeyframes(data, maximum); } else { - // Error + // Error } } void MainWindow::slotAlignPlayheadToMousePos() { - m_monitorManager->activateMonitor(Kdenlive::projectMonitor); + m_monitorManager->activateMonitor(Kdenlive::ProjectMonitor); m_activeTimeline->projectView()->slotAlignPlayheadToMousePos(); } @@ -4707,18 +4889,18 @@ void MainWindow::slotSetDeinterlacer(int ix) { QString value; switch (ix) { - - case 1: - value = "linearblend"; - break; - case 2: - value = "yadif-nospatial"; - break; - case 3: - value = "yadif"; - break; - default: - value = "onefield"; + + case 1: + value = "linearblend"; + break; + case 2: + value = "yadif-nospatial"; + break; + case 3: + value = "yadif"; + break; + default: + value = "onefield"; } KdenliveSettings::setMltdeinterlacer(value); m_monitorManager->setConsumerProperty("deinterlace_method", value); @@ -4728,17 +4910,17 @@ void MainWindow::slotSetInterpolation(int ix) { QString value; switch (ix) { - case 1: - value = "bilinear"; - break; - case 2: - value = "bicubic"; - break; - case 3: - value = "hyper"; - break; - default: - value = "nearest"; + case 1: + value = "bilinear"; + break; + case 2: + value = "bicubic"; + break; + case 3: + value = "hyper"; + break; + default: + value = "nearest"; } KdenliveSettings::setMltinterpolation(value); m_monitorManager->setConsumerProperty("rescale", value);