]> git.sesse.net Git - kdenlive/commitdiff
Fix several DVD wizard monitor issue, might solve:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 25 Sep 2009 21:02:41 +0000 (21:02 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Fri, 25 Sep 2009 21:02:41 +0000 (21:02 +0000)
http://www.kdenlive.org:80/mantis/view.php?id=1164

svn path=/trunk/kdenlive/; revision=3929

src/dvdwizard.cpp
src/dvdwizardchapters.cpp
src/dvdwizardchapters.h
src/kdenlivedoc.cpp
src/mainwindow.cpp
src/monitor.cpp
src/monitor.h
src/monitormanager.cpp
src/renderer.cpp
src/renderer.h
src/widgets/dvdwizardchapters_ui.ui

index 7ecbc93a0bb30436b6512312bf0481ccdc378a31..c0e273ea19fa94445d64e8850d1fb8c53d0ec0f3 100644 (file)
@@ -46,7 +46,6 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
 {
     setWindowTitle(i18n("DVD Wizard"));
     //setPixmap(QWizard::WatermarkPixmap, QPixmap(KStandardDirs::locate("appdata", "banner.png")));
-    setAttribute(Qt::WA_DeleteOnClose);
     m_pageVob = new DvdWizardVob(profile, this);
     m_pageVob->setTitle(i18n("Select Files For Your DVD"));
     addPage(m_pageVob);
@@ -76,8 +75,6 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
 
     addPage(page4);
 
-
-
     connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotPageChanged(int)));
     connect(m_status.button_start, SIGNAL(clicked()), this, SLOT(slotGenerate()));
     connect(m_status.button_abort, SIGNAL(clicked()), this, SLOT(slotAbort()));
@@ -119,6 +116,7 @@ DvdWizard::DvdWizard(const QString &url, const QString &profile, QWidget *parent
 DvdWizard::~DvdWizard()
 {
     // m_menuFile.remove();
+    blockSignals(true);
     delete m_burnMenu;
     if (m_dvdauthor) {
         m_dvdauthor->blockSignals(true);
@@ -138,10 +136,12 @@ void DvdWizard::slotPageChanged(int page)
     //kDebug() << "// PAGE CHGD: " << page << ", ID: " << visitedPages();
     if (page == 0) {
         // Update chapters that were modified in page 1
+        m_pageChapters->stopMonitor();
         m_pageVob->updateChapters(m_pageChapters->chaptersData());
     } else if (page == 1) {
-        m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
+        m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->isWide(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
     } else if (page == 2) {
+        m_pageChapters->stopMonitor();
         m_pageMenu->setTargets(m_pageChapters->selectedTitles(), m_pageChapters->selectedTargets());
         m_pageMenu->changeProfile(m_pageVob->isPal());
     }
@@ -654,7 +654,7 @@ void DvdWizard::slotSave()
     KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog:///projectfolder"), "*.kdvd", this, i18n("Save DVD Project"));
     if (url.isEmpty()) return;
 
-    if (currentId() == 0) m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
+    if (currentId() == 0) m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->isWide(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
 
     QDomDocument doc;
     QDomElement dvdproject = doc.createElement("dvdproject");
index 61e984ba518bd71e882e54360f82516932e72789..ac7793beeccb6813759ca605ee7f9a5c7e90d26f 100644 (file)
@@ -25,7 +25,8 @@
 
 DvdWizardChapters::DvdWizardChapters(bool isPal, QWidget *parent) :
         QWizardPage(parent),
-        m_isPal(isPal)
+        m_isPal(isPal),
+        m_monitor(NULL)
 
 {
     m_view.setupUi(this);
@@ -41,19 +42,15 @@ DvdWizardChapters::DvdWizardChapters(bool isPal, QWidget *parent) :
 
     m_manager = new MonitorManager(this);
     m_manager->resetProfiles(m_tc);
-    m_monitor = new Monitor("chapter", m_manager, this);
-    m_monitor->start();
-
-    QVBoxLayout *vbox = new QVBoxLayout;
-    vbox->addWidget(m_monitor);
-    m_view.monitor_frame->setLayout(vbox);
-
-
+    //m_view.monitor_frame->setVisible(false);
 }
 
 DvdWizardChapters::~DvdWizardChapters()
 {
-    delete m_monitor;
+    if (m_monitor) {
+        m_monitor->stop();
+        delete m_monitor;
+    }
     delete m_manager;
 }
 
@@ -64,6 +61,11 @@ bool DvdWizardChapters::isComplete() const
     return true;
 }
 
+void DvdWizardChapters::stopMonitor()
+{
+    if (m_monitor) m_monitor->stop();
+}
+
 void DvdWizardChapters::slotUpdateChaptersList()
 {
     m_monitor->slotOpenFile(m_view.vob_list->currentText());
@@ -132,13 +134,30 @@ void DvdWizardChapters::slotGoToChapter()
     m_monitor->setTimePos(m_view.chapters_list->currentItem()->text() + ":00");
 }
 
-void DvdWizardChapters::setVobFiles(bool isPal, const QStringList movies, const QStringList durations, const QStringList chapters)
+void DvdWizardChapters::setVobFiles(bool isPal, bool isWide, const QStringList movies, const QStringList durations, const QStringList chapters)
 {
     m_isPal = isPal;
-    if (m_isPal) m_tc.setFormat(25);
-    else m_tc.setFormat(30000.0 / 1001, true);
+    QString profile;
+    if (m_isPal) {
+        m_tc.setFormat(25);
+        profile = "dv_pal";
+    } else {
+        m_tc.setFormat(30000.0 / 1001, true);
+        profile = "dv_ntsc";
+    }
+    if (isWide) profile.append("_wide");
     m_manager->resetProfiles(m_tc);
-    m_monitor->resetProfile();
+
+    if (m_monitor == NULL) {
+
+        m_monitor = new Monitor("chapter", m_manager, profile, this);
+        m_monitor->start();
+        QVBoxLayout *vbox = new QVBoxLayout;
+        vbox->addWidget(m_monitor);
+        m_view.monitor_frame->setLayout(vbox);
+        /*updateGeometry();
+        adjustSize();*/
+    } else m_monitor->resetProfile(profile);
 
     m_view.vob_list->clear();
     for (int i = 0; i < movies.count(); i++) {
index 2291176f8c9789a9c628839a9f6b7252ae8b154c..620da01493e96d5c586df6c0345c28e80ed34072 100644 (file)
@@ -39,12 +39,13 @@ public:
     virtual bool isComplete() const;
     void changeProfile(bool isPal);
     void setPal(bool isPal);
-    void setVobFiles(bool isPal, const QStringList movies, const QStringList durations, const QStringList chapters);
+    void setVobFiles(bool isPal, bool isWide, const QStringList movies, const QStringList durations, const QStringList chapters);
     QStringList selectedTitles() const;
     QStringList selectedTargets() const;
     QStringList chapters(int ix) const;
     QDomElement toXml() const;
     QMap <QString, QString> chaptersData() const;
+    void stopMonitor();
 
 private:
     Ui::DvdWizardChapters_UI m_view;
index 76575c079f76ed604cf27e9535a4e29ba7c0a050..bf96d7154fa7d3bb65502b36681842bc9558476e 100644 (file)
@@ -249,7 +249,7 @@ KdenliveDoc::~KdenliveDoc()
 
 int KdenliveDoc::setSceneList()
 {
-    m_render->resetProfile();
+    m_render->resetProfile(KdenliveSettings::current_profile());
     if (m_render->setSceneList(m_document.toString(), m_documentProperties.value("position").toInt()) == -1) {
         // INVALID MLT Consumer, something is wrong
         return -1;
index 4955b99bb593b4847d155f62dd2283574f41441b..e4cc0fbb6c9c8dc1753c4fc60976062197dd74df 100644 (file)
@@ -184,14 +184,14 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
 
     m_clipMonitorDock = new QDockWidget(i18n("Clip Monitor"), this);
     m_clipMonitorDock->setObjectName("clip_monitor");
-    m_clipMonitor = new Monitor("clip", m_monitorManager, this);
+    m_clipMonitor = new Monitor("clip", m_monitorManager, QString(), this);
     m_clipMonitorDock->setWidget(m_clipMonitor);
     addDockWidget(Qt::TopDockWidgetArea, m_clipMonitorDock);
     //m_clipMonitor->stop();
 
     m_projectMonitorDock = new QDockWidget(i18n("Project Monitor"), this);
     m_projectMonitorDock->setObjectName("project_monitor");
-    m_projectMonitor = new Monitor("project", m_monitorManager, this);
+    m_projectMonitor = new Monitor("project", m_monitorManager, QString(), this);
     m_projectMonitorDock->setWidget(m_projectMonitor);
     addDockWidget(Qt::TopDockWidgetArea, m_projectMonitorDock);
 
@@ -2667,8 +2667,8 @@ void MainWindow::slotUpdateClipType(QAction *action)
 
 void MainWindow::slotDvdWizard(const QString &url, const QString &profile)
 {
-    DvdWizard *w = new DvdWizard(url, profile, this);
-    w->exec();
+    DvdWizard w(url, profile, this);
+    w.exec();
 }
 
 void MainWindow::slotShowTimeline(bool show)
index 2142f76e312ad551392273bc2659f0aeee1b1b1e..cedfc4e4cda61af0bb1d31aa64e8c652110b9f65 100644 (file)
@@ -41,7 +41,7 @@
 #include <QIntValidator>
 
 
-Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
+Monitor::Monitor(QString name, MonitorManager *manager, QString profile, QWidget *parent) :
         QWidget(parent),
         render(NULL),
         m_name(name),
@@ -130,12 +130,14 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
 
     //m_ruler->setPixelPerMark(3);
 
+    if (profile.isEmpty()) profile = KdenliveSettings::current_profile();
+
     QVBoxLayout *rendererBox = new QVBoxLayout(m_ui.video_frame);
     rendererBox->setContentsMargins(0, 0, 0, 0);
 #ifdef Q_WS_MAC
     m_glWidget = new VideoGLWidget(m_ui.video_frame);
     rendererBox->addWidget(m_glWidget);
-    render = new Render(m_name, (int) m_ui.video_frame->winId(), -1, this);
+    render = new Render(m_name, (int) m_ui.video_frame->winId(), -1, profile, this);
     m_glWidget->setImageAspectRatio(render->dar());
     m_glWidget->setBackgroundColor(KdenliveSettings::window_background());
     m_glWidget->resize(m_ui.video_frame->size());
@@ -144,7 +146,7 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
 #else
     m_monitorRefresh = new MonitorRefresh(m_ui.video_frame);
     rendererBox->addWidget(m_monitorRefresh);
-    render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, this);
+    render = new Render(m_name, (int) m_monitorRefresh->winId(), -1, profile, this);
     m_monitorRefresh->setRenderer(render);
 #endif
 
@@ -781,10 +783,10 @@ void Monitor::slotSaveZone()
 }
 
 
-void Monitor::resetProfile()
+void Monitor::resetProfile(const QString profile)
 {
     if (render == NULL) return;
-    render->resetProfile();
+    render->resetProfile(profile);
 }
 
 void Monitor::saveSceneList(QString path, QDomElement info)
index 3f3fe8fd394e2a46bf2a2156e2e48134289c0757..978e080d01d9ec944d5b3cf37d22b919ef97a75b 100644 (file)
@@ -68,10 +68,10 @@ class Monitor : public QWidget
     Q_OBJECT
 
 public:
-    Monitor(QString name, MonitorManager *manager, QWidget *parent = 0);
+    Monitor(QString name, MonitorManager *manager, QString profile = QString(), QWidget *parent = 0);
     virtual ~Monitor();
     Render *render;
-    void resetProfile();
+    void resetProfile(const QString profile);
     QString name() const;
     void resetSize();
     bool isActive() const;
index 7e2d184af9eddfd9fccf54e1486b5238affe3996..0656a4d865e5878c65cfcc94107d4cf66bab1d4d 100644 (file)
@@ -50,7 +50,7 @@ void MonitorManager::initMonitors(Monitor *clipMonitor, Monitor *projectMonitor)
 
 void MonitorManager::activateMonitor(QString name)
 {
-    if (m_blocked) return;
+    if (m_blocked || m_clipMonitor == NULL) return;
     if (m_activeMonitor == name) return;
     if (name == "clip") {
         m_projectMonitor->stop();
@@ -67,7 +67,7 @@ void MonitorManager::activateMonitor(QString name)
 
 void MonitorManager::switchMonitors()
 {
-    if (m_blocked) return;
+    if (m_blocked || m_clipMonitor == NULL) return;
     if (m_clipMonitor->isActive()) {
         m_clipMonitor->stop();
         m_projectMonitor->start();
@@ -168,9 +168,9 @@ void MonitorManager::slotResetProfiles()
     if (m_blocked) return;
     if (m_projectMonitor == NULL || m_clipMonitor == NULL) return;
     activateMonitor("clip");
-    m_clipMonitor->resetProfile();
+    m_clipMonitor->resetProfile(KdenliveSettings::current_profile());
     activateMonitor("project");
-    m_projectMonitor->resetProfile();
+    m_projectMonitor->resetProfile(KdenliveSettings::current_profile());
     //m_projectMonitor->refreshMonitor(true);
 }
 
index d4ae97559cb458e20382927add81f2f93ea70f79..1c397d3b4aa8b2d4afa663a5cca961cb1a26faae 100644 (file)
@@ -67,7 +67,7 @@ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr
     }
 }
 
-Render::Render(const QString & rendererName, int winid, int /* extid */, QWidget *parent) :
+Render::Render(const QString & rendererName, int winid, int /* extid */, QString profile, QWidget *parent) :
         QObject(parent),
         m_isBlocked(0),
         m_name(rendererName),
@@ -84,14 +84,12 @@ Render::Render(const QString & rendererName, int winid, int /* extid */, QWidget
         , m_glWidget(0)
 #endif
 {
-    kDebug() << "//////////  USING PROFILE: " << (char*)KdenliveSettings::current_profile().toUtf8().data();
-
     /*if (rendererName == "project") m_monitorId = 10000;
     else m_monitorId = 10001;*/
     /*m_osdTimer = new QTimer(this);
     connect(m_osdTimer, SIGNAL(timeout()), this, SLOT(slotOsdTimeout()));*/
-
-    buildConsumer();
+    if (profile.isEmpty()) profile = KdenliveSettings::current_profile();
+    buildConsumer(profile);
 
     m_mltProducer = m_blackClip->cut(0, 50);
     m_mltConsumer->connect(*m_mltProducer);
@@ -151,10 +149,10 @@ void Render::closeMlt()
 }
 
 
-void Render::buildConsumer()
+void Render::buildConsumer(const QString profileName)
 {
     char *tmp;
-    m_activeProfile = KdenliveSettings::current_profile();
+    m_activeProfile = profileName;
     tmp = decodedString(m_activeProfile);
     setenv("MLT_PROFILE", tmp, 1);
     delete m_blackClip;
@@ -232,14 +230,14 @@ void Render::buildConsumer()
 
 }
 
-int Render::resetProfile()
+int Render::resetProfile(const QString profileName)
 {
     if (!m_mltConsumer) return 0;
-    if (m_activeProfile == KdenliveSettings::current_profile()) {
+    if (m_activeProfile == profileName) {
         kDebug() << "reset to same profile, nothing to do";
         return 1;
     }
-    kDebug() << "// RESETTING PROFILE FROM: " << m_activeProfile << " TO: " << KdenliveSettings::current_profile();
+    kDebug() << "// RESETTING PROFILE FROM: " << m_activeProfile << " TO: " << profileName; //KdenliveSettings::current_profile();
     if (m_isSplitView) slotSplitView(false);
     if (!m_mltConsumer->is_stopped()) m_mltConsumer->stop();
     m_mltConsumer->purge();
@@ -270,7 +268,7 @@ int Render::resetProfile()
     }
     m_mltProducer = NULL;
 
-    buildConsumer();
+    buildConsumer(profileName);
     double new_fps = m_mltProfile->fps();
     if (current_fps != new_fps) {
         // fps changed, we must update the scenelist positions
index 8414f633e07f82b65050df223b9e041e2229ee52..241459a17171cdcf6d3e44dcbc3b79d432eb9e40 100644 (file)
@@ -81,7 +81,7 @@ Q_OBJECT public:
                       APP_NOEXIST
                     };
 
-    Render(const QString & rendererName, int winid, int extid, QWidget *parent = 0);
+    Render(const QString & rendererName, int winid, int extid, QString profile = QString(), QWidget *parent = 0);
     ~Render();
 
     /** Seeks the renderer clip to the given time. */
@@ -161,7 +161,7 @@ Q_OBJECT public:
 
     /** Turn on or off on screen display */
     void refreshDisplay();
-    int resetProfile();
+    int resetProfile(const QString profileName);
     double fps() const;
     int renderWidth() const;
     int renderHeight() const;
@@ -250,7 +250,7 @@ private:   // Private attributes & methods
     void mltPasteEffects(Mlt::Producer *source, Mlt::Producer *dest);
     QMap<QString, QString> mltGetTransitionParamsFromXml(QDomElement xml);
     QMap<QString, Mlt::Producer *> m_slowmotionProducers;
-    void buildConsumer();
+    void buildConsumer(const QString profileName);
     void resetZoneMode();
     void fillSlowMotionProducers();
 
index db23d8f5dc9c076f573627a7253b10d13d5849f9..030b815cc407cf45f636e5b017ff904241c1bdd9 100644 (file)
      </property>
     </spacer>
    </item>
-   <item row="0" column="0" colspan="5">
-    <widget class="QGroupBox" name="monitor_frame">
-     <property name="title">
-      <string/>
+   <item row="0" column="0" colspan="4">
+    <widget class="QFrame" name="monitor_frame">
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
      </property>
     </widget>
    </item>