]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
Cleanup widget for color parameter:
[kdenlive] / src / mainwindow.cpp
index 2ff3cfdf79cf939ccd2b647c53556de889e0373b..11c42b57fd2b75feb93f6d9c8a60e5e08bbb54b3 100644 (file)
@@ -87,7 +87,6 @@
 #include <KProcess>
 #include <KActionMenu>
 #include <KMenu>
-#include <locale.h>
 #include <ktogglefullscreenaction.h>
 #include <KFileItem>
 #include <KNotification>
@@ -148,14 +147,19 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
 #endif /* NO_JOGSHUTTLE */
     m_findActivated(false),
     m_stopmotion(NULL)
-{
+{   
     qRegisterMetaType<QVector<int16_t> > ();
+
+    // Init locale
+    QLocale systemLocale = QLocale();
+    systemLocale.setNumberOptions(QLocale::OmitGroupSeparator);
+    QLocale::setDefault(systemLocale);
+
     // Create DBus interface
     new MainWindowAdaptor(this);
     QDBusConnection dbus = QDBusConnection::sessionBus();
     dbus.registerObject("/MainWindow", this);
 
-    setlocale(LC_NUMERIC, "POSIX");
     if (!KdenliveSettings::colortheme().isEmpty()) slotChangePalette(NULL, KdenliveSettings::colortheme());
     setFont(KGlobalSettings::toolBarFont());
     parseProfiles(MltPath);
@@ -214,6 +218,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
     m_recMonitor = new RecMonitor("record", 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)));
     connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int)));
 #endif
     m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor, m_recMonitor);
@@ -359,6 +364,7 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
 
 
     setupActions();
+    connect(m_commandStack, SIGNAL(cleanChanged(bool)), m_saveAction, SLOT(setDisabled(bool)));
 
 
     // Close non-general docks for the initial layout
@@ -565,7 +571,6 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
     connect(m_projectMonitorDock, SIGNAL(visibilityChanged(bool)), m_projectMonitor, SLOT(refreshMonitor(bool)));
     connect(m_clipMonitorDock, SIGNAL(visibilityChanged(bool)), m_clipMonitor, SLOT(refreshMonitor(bool)));
     //connect(m_monitorManager, SIGNAL(connectMonitors()), this, SLOT(slotConnectMonitors()));
-    connect(m_monitorManager, SIGNAL(raiseMonitor(AbstractMonitor *)), this, SLOT(slotRaiseMonitor(AbstractMonitor *)));
     connect(m_monitorManager, SIGNAL(checkColorScopes()), this, SLOT(slotUpdateColorScopes()));
     connect(m_monitorManager, SIGNAL(clearScopes()), this, SLOT(slotClearColorScopes()));
     connect(m_effectList, SIGNAL(addEffect(const QDomElement)), this, SLOT(slotAddEffect(const QDomElement)));
@@ -828,12 +833,6 @@ void MainWindow::slotAddEffect(const QDomElement effect)
     else m_activeTimeline->projectView()->slotAddEffect(effectToAdd, GenTime(), -1);
 }
 
-void MainWindow::slotRaiseMonitor(AbstractMonitor *monitor)
-{
-    if (monitor == m_clipMonitor) m_clipMonitorDock->raise();
-    else if (monitor == m_projectMonitor) m_projectMonitorDock->raise();
-}
-
 void MainWindow::slotUpdateClip(const QString &id)
 {
     if (!m_activeDocument) return;
@@ -1590,6 +1589,13 @@ void MainWindow::setupActions()
     connect(reloadClip , SIGNAL(triggered()), m_projectList, SLOT(slotReloadClip()));
     reloadClip->setEnabled(false);
 
+    QAction *proxyClip = new KAction(i18n("Proxy Clip"), this);
+    collection.addAction("proxy_clip", proxyClip);
+    proxyClip->setData("proxy_clip");
+    proxyClip->setCheckable(true);
+    proxyClip->setChecked(false);
+    connect(proxyClip, SIGNAL(toggled(bool)), m_projectList, SLOT(slotProxyCurrentItem(bool)));
+    
     QAction *stopMotion = new KAction(KIcon("image-x-generic"), i18n("Stop Motion Capture"), this);
     collection.addAction("stopmotion", stopMotion);
     connect(stopMotion , SIGNAL(triggered()), this, SLOT(slotOpenStopmotion()));
@@ -1603,6 +1609,7 @@ void MainWindow::setupActions()
     addClips->addAction(addFolderButton);
 
     addClips->addAction(reloadClip);
+    addClips->addAction(proxyClip);
     addClips->addAction(clipProperties);
     addClips->addAction(openClip);
     addClips->addAction(deleteClip);
@@ -1900,6 +1907,7 @@ bool MainWindow::saveFileAs(const QString &outputFileName)
     m_activeDocument->setModified(false);
     m_fileOpenRecent->addUrl(KUrl(outputFileName));
     m_fileRevert->setEnabled(true);
+    m_undoView->stack()->setClean();
     return true;
 }
 
@@ -2020,7 +2028,8 @@ void MainWindow::doOpenFile(const KUrl &url, KAutoSaveFile *stale)
         delete m_stopmotion;
         m_stopmotion = NULL;
     }
-
+    
+    m_timer.start();
     KProgressDialog progressDialog(this, i18n("Loading project"), i18n("Loading project"));
     progressDialog.setAllowCancel(false);
     progressDialog.progressBar()->setMaximum(4);
@@ -2200,6 +2209,7 @@ void MainWindow::slotEditProjectSettings()
 {
     QPoint p = m_activeDocument->getTracksCount();
     ProjectSettings *w = new ProjectSettings(m_projectList, m_activeTimeline->projectView()->extractTransitionsLumas(), p.x(), p.y(), m_activeDocument->projectFolder().path(), true, !m_activeDocument->isModified(), this);
+    connect(w, SIGNAL(disableProxies()), this, SLOT(slotDisableProxies()));
 
     if (w->exec() == QDialog::Accepted) {
         QString profile = w->selectedProfile();
@@ -2248,6 +2258,13 @@ void MainWindow::slotEditProjectSettings()
     delete w;
 }
 
+void MainWindow::slotDisableProxies()
+{
+    m_activeDocument->setDocumentProperty("enableproxy", QString::number((int) false));
+    m_activeDocument->setModified();
+    slotUpdateProxySettings();
+}
+
 void MainWindow::slotUpdateProjectProfile(const QString &profile)
 {
     // Recreate the stopmotion widget if profile changes
@@ -2273,6 +2290,8 @@ void MainWindow::slotUpdateProjectProfile(const QString &profile)
     if (m_renderWidget) m_renderWidget->setProfile(m_activeDocument->mltProfile());
     m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description());
     if (updateFps) m_activeTimeline->updateProjectFps();
+    m_activeDocument->clipManager()->clearCache();
+    m_activeTimeline->updateProfile();
     m_activeDocument->setModified(true);
     m_commandStack->activeStack()->clear();
     //Update the mouse position display so it will display in DF/NDF format by default based on the project setting.
@@ -2470,7 +2489,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
 
     connect(doc, SIGNAL(docModified(bool)), this, SLOT(slotUpdateDocumentState(bool)));
     connect(doc, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated()));
-    connect(doc, SIGNAL(saveTimelinePreview(const QString)), trackView, SLOT(slotSaveTimelinePreview(const QString)));
+    connect(doc, SIGNAL(saveTimelinePreview(const QString &)), trackView, SLOT(slotSaveTimelinePreview(const QString)));
     
     connect(m_notesWidget, SIGNAL(textChanged()), doc, SLOT(setModified()));
 
@@ -2509,6 +2528,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
     connect(trackView, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
     connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs()));
+    connect(m_projectList, SIGNAL(loadingIsOver()), this, SLOT(slotElapsedTime()));
     connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
     connect(m_projectList, SIGNAL(updateRenderStatus()), this, SLOT(slotCheckRenderStatus()));
 
@@ -2615,7 +2635,7 @@ void MainWindow::updateConfiguration()
     if (m_activeTimeline) {
         m_activeTimeline->refresh();
         m_activeTimeline->projectView()->checkAutoScroll();
-        m_activeTimeline->projectView()->checkTrackHeight();
+        m_activeTimeline->checkTrackHeight();
         if (m_activeDocument)
             m_activeDocument->clipManager()->checkAudioThumbs();
     }
@@ -2977,6 +2997,12 @@ void MainWindow::slotAddProjectClip(KUrl url)
         m_activeDocument->slotAddClipFile(url, QString());
 }
 
+void MainWindow::slotAddProjectClipList(KUrl::List urls)
+{
+    if (m_activeDocument)
+        m_activeDocument->slotAddClipList(urls, QString());
+}
+
 void MainWindow::slotAddTransition(QAction *result)
 {
     if (!result) return;
@@ -3858,11 +3884,23 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS
     if (m_renderWidget->automaticAudioExport()) {
         exportAudio = m_activeTimeline->checkProjectAudio();
     } else exportAudio = m_renderWidget->selectedAudioExport();
+
+    // Set playlist audio volume to 100%
+    QDomDocument doc;
+    doc.setContent(playlistContent);
+    QDomElement tractor = doc.documentElement().firstChildElement("tractor");
+    if (!tractor.isNull()) {
+        QDomNodeList props = tractor.elementsByTagName("property");
+        for (int i = 0; i < props.count(); i++) {
+            if (props.at(i).toElement().attribute("name") == "meta.volume") {
+                props.at(i).firstChild().setNodeValue("1");
+                break;
+            }
+        }
+    }
     
     // Do we want proxy rendering
     if (m_projectList->useProxy() && !m_renderWidget->proxyRendering()) {
-        QDomDocument doc;
-        doc.setContent(playlistContent);
         QString root = doc.documentElement().attribute("root");
 
         // replace proxy clips with originals
@@ -3906,8 +3944,8 @@ void MainWindow::slotPrepareRendering(bool scriptExport, bool zoneOnly, const QS
                 playlistContent.replace(key, i.value());
             }
         }*/
-        playlistContent = doc.toString();
     }
+    playlistContent = doc.toString();
     
     // Do save scenelist
     QFile file(playlistPath);
@@ -4264,7 +4302,7 @@ void MainWindow::slotOpenStopmotion()
 {
     if (m_stopmotion == NULL) {
         m_stopmotion = new StopmotionWidget(m_monitorManager, m_activeDocument->projectFolder(), m_stopmotion_actions->actions(), this);
-        connect(m_stopmotion, SIGNAL(addOrUpdateSequence(const QString)), m_projectList, SLOT(slotAddOrUpdateSequence(const QString)));
+        connect(m_stopmotion, SIGNAL(addOrUpdateSequence(const QString &)), m_projectList, SLOT(slotAddOrUpdateSequence(const 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<AbstractScopeWidget *>(m_scopesList.at(i)->widget())->autoRefreshEnabled())) request = true;*/
@@ -4344,6 +4382,10 @@ void MainWindow::slotBlockClipMonitor(const QString id)
 }
 
 
+void MainWindow::slotElapsedTime()
+{
+    kDebug()<<"-----------------------------------------\n"<<"Time elapsed: "<<m_timer.elapsed()<<"\n-------------------------";
+}
 
 #include "mainwindow.moc"