X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmainwindow.cpp;h=4a1a0c670d46e5b628c5337125f13e86c3db3c7d;hb=f6969659f4b8a2ace136908d36097c9e08434fdb;hp=93e32f5661c7654e8ebab2d18a1c5a709c41ce57;hpb=fa374a96b9848a08e066f654a65111f0b77aca0a;p=kdenlive diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 93e32f56..4a1a0c67 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -79,8 +79,14 @@ #include #include #include +#if KDE_IS_VERSION(4,3,80) +#include +#include +#else #include #include +#define KNS3 KNS +#endif /* KDE_IS_VERSION(4,3,80) */ #include #include @@ -421,6 +427,9 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor); slotConnectMonitors(); + // Disable drop B frames, see Kdenlive issue #1330, see also kdenlivesettingsdialog.cpp + KdenliveSettings::setDropbframes(false); + // Open or create a file. Command line argument passed in Url has // precedence, then "openlastproject", then just a plain empty file. // If opening Url fails, openlastproject will _not_ be used. @@ -696,6 +705,7 @@ void MainWindow::slotConnectMonitors() m_projectList->setRenderer(m_projectMonitor->render); //connect(m_projectList, SIGNAL(receivedClipDuration(const QString &)), this, SLOT(slotUpdateClip(const QString &))); + connect(m_projectList, SIGNAL(deleteProjectClips(QStringList, QMap)), this, SLOT(slotDeleteProjectClips(QStringList, QMap))); connect(m_projectList, SIGNAL(showClipProperties(DocClipBase *)), this, SLOT(slotShowClipProperties(DocClipBase *))); connect(m_projectList, SIGNAL(showClipProperties(QList , QMap)), this, SLOT(slotShowClipProperties(QList , QMap))); connect(m_projectList, SIGNAL(getFileProperties(const QDomElement, const QString &, int, bool)), m_projectMonitor->render, SLOT(getFileProperties(const QDomElement, const QString &, int, bool))); @@ -748,7 +758,7 @@ void MainWindow::setupActions() statusBar()->setStyleSheet(QString("QStatusBar QLabel {font-size:%1pt;} QStatusBar::item { border: 0px; font-size:%1pt;padding:0px; }").arg(statusBar()->font().pointSize())); QString style1 = "QToolBar { border: 0px } QToolButton { border-style: inset; border:1px solid #999999;border-radius: 3px;margin: 0px 3px;padding: 0px;} QToolButton:checked { background-color: rgba(224, 224, 0, 100); border-style: inset; border:1px solid #cc6666;border-radius: 3px;}"; - // create edit mode buttons + //create edit mode buttons m_normalEditTool = new KAction(KIcon("kdenlive-normal-edit"), i18n("Normal mode"), this); m_normalEditTool->setShortcut(i18nc("Normal editing", "n")); toolbar->addAction(m_normalEditTool); @@ -940,11 +950,13 @@ void MainWindow::setupActions() collection->addAction("manage_profiles", profilesAction); connect(profilesAction, SIGNAL(triggered(bool)), this, SLOT(slotEditProfiles())); - KNS::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas"); + KNS3::standardAction(i18n("Download New Wipes..."), this, SLOT(slotGetNewLumaStuff()), actionCollection(), "get_new_lumas"); + + KNS3::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles"); - KNS::standardAction(i18n("Download New Render Profiles..."), this, SLOT(slotGetNewRenderStuff()), actionCollection(), "get_new_profiles"); + KNS3::standardAction(i18n("Download New Project Profiles..."), this, SLOT(slotGetNewMltProfileStuff()), actionCollection(), "get_new_mlt_profiles"); - KNS::standardAction(i18n("Download New Project Profiles..."), this, SLOT(slotGetNewMltProfileStuff()), actionCollection(), "get_new_mlt_profiles"); + KNS3::standardAction(i18n("Download New Title Templates..."), this, SLOT(slotGetNewTitleStuff()), actionCollection(), "get_new_titles"); KAction* wizAction = new KAction(KIcon("configure"), i18n("Run Config Wizard"), this); collection->addAction("run_wizard", wizAction); @@ -1464,6 +1476,7 @@ void MainWindow::newFile(bool showProjectSettings, bool force) connectDocumentInfo(doc); connectDocument(trackView, doc); } else m_timelineArea->setTabBarHidden(false); + m_monitorManager->activateMonitor("clip"); m_closeAction->setEnabled(m_timelineArea->count() > 1); } @@ -1675,9 +1688,9 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale) if (m_timelineArea->count() > 1) m_timelineArea->setTabBarHidden(false); slotGotProgressInfo(QString(), -1); - m_clipMonitor->refreshMonitor(true); m_projectMonitor->adjustRulerSize(trackView->duration()); m_projectMonitor->slotZoneMoved(trackView->inPoint(), trackView->outPoint()); + m_clipMonitor->refreshMonitor(true); } void MainWindow::recoverFiles(QList staleFiles) @@ -1852,7 +1865,7 @@ void MainWindow::slotRenderProject() QString projectfolder = m_activeDocument ? m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) : KdenliveSettings::defaultprojectfolder(); m_renderWidget = new RenderWidget(projectfolder, this); connect(m_renderWidget, SIGNAL(shutdown()), this, SLOT(slotShutdown())); - connect(m_renderWidget, SIGNAL(selectedRenderProfile(const QString &, const QString &, const QString&)), this, SLOT(slotSetDocumentRenderProfile(const QString &, const QString &, const QString&))); + connect(m_renderWidget, SIGNAL(selectedRenderProfile(const QString &, const QString &, const QString &, const QString&)), this, SLOT(slotSetDocumentRenderProfile(const QString &, const QString &, const QString &, const QString&))); connect(m_renderWidget, SIGNAL(prepareRenderingData(bool, bool, const QString&)), this, SLOT(slotPrepareRendering(bool, bool, const QString&))); connect(m_renderWidget, SIGNAL(abortProcess(const QString &)), this, SIGNAL(abortRenderJob(const QString &))); connect(m_renderWidget, SIGNAL(openDvdWizard(const QString &, const QString &)), this, SLOT(slotDvdWizard(const QString &, const QString &))); @@ -1860,7 +1873,7 @@ void MainWindow::slotRenderProject() m_renderWidget->setProfile(m_activeDocument->mltProfile()); m_renderWidget->setGuides(m_activeDocument->guidesXml(), m_activeDocument->projectDuration()); m_renderWidget->setDocumentPath(m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash)); - m_renderWidget->setRenderProfile(m_activeDocument->getDocumentProperty("renderdestination"), m_activeDocument->getDocumentProperty("renderprofile"), m_activeDocument->getDocumentProperty("renderurl")); + m_renderWidget->setRenderProfile(m_activeDocument->getDocumentProperty("renderdestination"), m_activeDocument->getDocumentProperty("rendercategory"), m_activeDocument->getDocumentProperty("renderprofile"), m_activeDocument->getDocumentProperty("renderurl")); } } /*TrackView *currentTab = (TrackView *) m_timelineArea->currentWidget(); @@ -2045,13 +2058,13 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc) //cha connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int))); - trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup); + trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup, (QMenu*)(factory()->container("marker_menu", this))); m_activeTimeline = trackView; if (m_renderWidget) { m_renderWidget->setProfile(doc->mltProfile()); m_renderWidget->setGuides(doc->guidesXml(), doc->projectDuration()); m_renderWidget->setDocumentPath(doc->projectFolder().path(KUrl::AddTrailingSlash)); - m_renderWidget->setRenderProfile(doc->getDocumentProperty("renderdestination"), doc->getDocumentProperty("renderprofile"), doc->getDocumentProperty("renderurl")); + m_renderWidget->setRenderProfile(doc->getDocumentProperty("renderdestination"), doc->getDocumentProperty("rendercategory"), doc->getDocumentProperty("renderprofile"), doc->getDocumentProperty("renderurl")); } //doc->setRenderer(m_projectMonitor->render); m_commandStack->setActiveStack(doc->commandStack()); @@ -2896,69 +2909,59 @@ void MainWindow::slotResizeItemEnd() if (m_activeTimeline) m_activeTimeline->projectView()->setOutPoint(); } +int MainWindow::getNewStuff(const QString &configFile) +{ + KNS3::Entry::List entries; +#if KDE_IS_VERSION(4,3,80) + KNS3::DownloadDialog dialog(configFile); + dialog.exec(); + entries = dialog.changedEntries(); + foreach(const KNS3::Entry &entry, entries) { + if (entry.status() == KNS3::Entry::Installed) + kDebug() << "// Installed files: " << entry.installedFiles(); + } +#else + KNS::Engine engine(0); + if (engine.init(configFile)) + entries = engine.downloadDialogModal(this); + foreach(KNS::Entry *entry, entries) { + if (entry->status() == KNS::Entry::Installed) + kDebug() << "// Installed files: " << entry->installedFiles(); + } +#endif /* KDE_IS_VERSION(4,3,80) */ + return entries.size(); +} + +void MainWindow::slotGetNewTitleStuff() +{ + if (getNewStuff("kdenlive_titles.knsrc") > 0) { + TitleWidget::refreshTitleTemplates(); + } +} + void MainWindow::slotGetNewLumaStuff() { - //KNS::Entry::List download(); - KNS::Entry::List entries = KNS::Engine::download(); - // list of changed entries - kDebug() << "// PARSING KNS"; - foreach(KNS::Entry* entry, entries) { - // care only about installed ones - if (entry->status() == KNS::Entry::Installed) { - foreach(const QString &file, entry->installedFiles()) { - kDebug() << "// CURRENTLY INSTALLED: " << file; - } - } + if (getNewStuff("kdenlive_wipes.knsrc") > 0) { + initEffects::refreshLumas(); + m_activeTimeline->projectView()->reloadTransitionLumas(); } - qDeleteAll(entries); - initEffects::refreshLumas(); - m_activeTimeline->projectView()->reloadTransitionLumas(); } void MainWindow::slotGetNewRenderStuff() { - //KNS::Entry::List download(); - - KNS::Engine engine(0); - if (engine.init("kdenlive_render.knsrc")) { - KNS::Entry::List entries = engine.downloadDialogModal(this); - - if (entries.size() > 0) { - foreach(KNS::Entry* entry, entries) { - // care only about installed ones - if (entry->status() == KNS::Entry::Installed) { - foreach(const QString &file, entry->installedFiles()) { - kDebug() << "// CURRENTLY INSTALLED: " << file; - } - } - } - } - if (m_renderWidget) m_renderWidget->reloadProfiles(); + if (getNewStuff("kdenlive_renderprofiles.knsrc") > 0) { + if (m_renderWidget) + m_renderWidget->reloadProfiles(); } } void MainWindow::slotGetNewMltProfileStuff() { - //KNS::Entry::List download(); - - KNS::Engine engine(0); - if (engine.init("kdenlive_mltprofiles.knsrc")) { - KNS::Entry::List entries = engine.downloadDialogModal(this); - - if (entries.size() > 0) { - foreach(KNS::Entry* entry, entries) { - // care only about installed ones - if (entry->status() == KNS::Entry::Installed) { - foreach(const QString &file, entry->installedFiles()) { - kDebug() << "// CURRENTLY INSTALLED: " << file; - } - } - } - - // update the list of profiles in settings dialog - KdenliveSettingsDialog* d = static_cast (KConfigDialog::exists("settings")); - if (d) d->checkProfile(); - } + if (getNewStuff("kdenlive_projectprofiles.knsrc") > 0) { + // update the list of profiles in settings dialog + KdenliveSettingsDialog* d = static_cast (KConfigDialog::exists("settings")); + if (d) + d->checkProfile(); } } @@ -3073,10 +3076,11 @@ void MainWindow::slotTranscodeClip() slotTranscode(urls); } -void MainWindow::slotSetDocumentRenderProfile(const QString &dest, const QString &name, const QString &file) +void MainWindow::slotSetDocumentRenderProfile(const QString &dest, const QString &group, const QString &name, const QString &file) { if (m_activeDocument == NULL) return; m_activeDocument->setDocumentProperty("renderdestination", dest); + m_activeDocument->setDocumentProperty("rendercategory", group); m_activeDocument->setDocumentProperty("renderprofile", name); m_activeDocument->setDocumentProperty("renderurl", file); m_activeDocument->setModified(true); @@ -3170,6 +3174,7 @@ void MainWindow::slotUpdateTimecodeFormat(int ix) KdenliveSettings::setFrametimecode(ix == 1); m_clipMonitor->updateTimecodeFormat(); m_projectMonitor->updateTimecodeFormat(); + m_activeTimeline->projectView()->clearSelection(); } void MainWindow::slotRemoveFocus() @@ -3195,6 +3200,9 @@ void MainWindow::slotShutdown() if (interface && interface->isServiceRegistered("org.kde.ksmserver")) { QDBusInterface smserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface"); smserver.call("logout", 1, 2, 2); + } else if (interface && interface->isServiceRegistered("org.gnome.SessionManager")) { + QDBusInterface smserver("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager"); + smserver.call("Shutdown"); } } @@ -3277,7 +3285,7 @@ QPixmap MainWindow::createSchemePreviewIcon(const KSharedConfigPtr &config) void MainWindow::slotSwitchMonitors() { - m_monitorManager->slotSwitchMonitors(); + m_monitorManager->slotSwitchMonitors(m_clipMonitor->isActive()); if (m_projectMonitor->isActive()) m_activeTimeline->projectView()->setFocus(); else m_projectList->focusTree(); } @@ -3296,5 +3304,16 @@ void MainWindow::slotInsertZoneToTimeline() m_activeTimeline->projectView()->insertClipCut(m_clipMonitor->activeClip(), info.at(1).toInt(), info.at(2).toInt()); } + +void MainWindow::slotDeleteProjectClips(QStringList ids, QMap folderids) +{ + for (int i = 0; i < ids.size(); ++i) { + m_activeTimeline->slotDeleteClip(ids.at(i)); + } + m_activeDocument->clipManager()->slotDeleteClips(ids); + if (!folderids.isEmpty()) m_projectList->deleteProjectFolder(folderids); + +} + #include "mainwindow.moc"