]> git.sesse.net Git - kdenlive/commitdiff
Save chapters now works in DVD Wizard
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 18 May 2009 22:44:29 +0000 (22:44 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 18 May 2009 22:44:29 +0000 (22:44 +0000)
svn path=/trunk/kdenlive/; revision=3394

src/dvdwizard.cpp
src/dvdwizardchapters.cpp
src/dvdwizardchapters.h
src/monitor.cpp

index 7e370ddc9ad5f436e16e0fea59e0ba901da8cff5..b2e23c87281b8c79d4967883270b2c851aad0ef9 100644 (file)
@@ -121,7 +121,7 @@ DvdWizard::~DvdWizard()
 
 void DvdWizard::slotPageChanged(int page)
 {
-    kDebug() << "// PAGE CHGD: " << page << ", ID: " << visitedPages();
+    //kDebug() << "// PAGE CHGD: " << page << ", ID: " << visitedPages();
     if (page == 1) {
         m_pageChapters->setVobFiles(m_pageVob->isPal(), m_pageVob->selectedUrls(), m_pageVob->durations());
     } else if (page == 2) {
index 1eafceb95971e891758a29d429b1af9ec80ce5bd..549b60d16cb78d6ee85c9d66e6358925d4bcc673 100644 (file)
@@ -32,6 +32,7 @@ DvdWizardChapters::DvdWizardChapters(bool isPal, QWidget *parent) :
     connect(m_view.vob_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateChaptersList()));
     connect(m_view.button_add, SIGNAL(clicked()), this, SLOT(slotAddChapter()));
     connect(m_view.button_delete, SIGNAL(clicked()), this, SLOT(slotRemoveChapter()));
+    connect(m_view.button_save, SIGNAL(clicked()), this, SLOT(slotSaveChapter()));
     connect(m_view.chapters_list, SIGNAL(itemSelectionChanged()), this, SLOT(slotGoToChapter()));
 
     // Build monitor for chapters
@@ -77,6 +78,9 @@ void DvdWizardChapters::slotUpdateChaptersList()
     }
     m_view.chapters_list->clear();
     m_view.chapters_list->addItems(chaptersString);
+
+    bool modified = m_view.vob_list->itemData(m_view.vob_list->currentIndex(), Qt::UserRole + 2).toInt();
+    m_view.button_save->setEnabled(modified);
 }
 
 void DvdWizardChapters::slotAddChapter()
@@ -97,9 +101,13 @@ void DvdWizardChapters::slotAddChapter()
         chaptersString.append(Timecode::getStringTimecode(chapterTimes.at(i), m_tc.fps()));
         currentChaps.append(QString::number(chapterTimes.at(i)));
     }
+    // Save item chapters
     m_view.vob_list->setItemData(m_view.vob_list->currentIndex(), currentChaps, Qt::UserRole + 1);
+    // Mark item as modified
+    m_view.vob_list->setItemData(m_view.vob_list->currentIndex(), 1, Qt::UserRole + 2);
     m_view.chapters_list->clear();
     m_view.chapters_list->addItems(chaptersString);
+    m_view.button_save->setEnabled(true);
 }
 
 void DvdWizardChapters::slotRemoveChapter()
@@ -107,7 +115,11 @@ void DvdWizardChapters::slotRemoveChapter()
     int ix = m_view.chapters_list->currentRow();
     QStringList currentChaps = m_view.vob_list->itemData(m_view.vob_list->currentIndex(), Qt::UserRole + 1).toStringList();
     currentChaps.removeAt(ix);
+
+    // Save item chapters
     m_view.vob_list->setItemData(m_view.vob_list->currentIndex(), currentChaps, Qt::UserRole + 1);
+    // Mark item as modified
+    m_view.vob_list->setItemData(m_view.vob_list->currentIndex(), 1, Qt::UserRole + 2);
 
     // rebuild chapters
     QStringList chaptersString;
@@ -116,6 +128,7 @@ void DvdWizardChapters::slotRemoveChapter()
     }
     m_view.chapters_list->clear();
     m_view.chapters_list->addItems(chaptersString);
+    m_view.button_save->setEnabled(true);
 }
 
 void DvdWizardChapters::slotGoToChapter()
@@ -206,3 +219,34 @@ QStringList DvdWizardChapters::selectedTargets() const
     }
     return result;
 }
+
+void DvdWizardChapters::slotSaveChapter()
+{
+    QDomDocument doc;
+    QDomElement chapters = doc.createElement("chapters");
+    chapters.setAttribute("fps", m_tc.fps());
+    doc.appendChild(chapters);
+
+    QStringList chaptersList = m_view.vob_list->itemData(m_view.vob_list->currentIndex(), Qt::UserRole + 1).toStringList();
+
+    for (int i = 0; i < chaptersList.count(); i++) {
+        QDomElement chapter = doc.createElement("chapter");
+        chapters.appendChild(chapter);
+        chapter.setAttribute("title", i18n("Chapter %1", i));
+        chapter.setAttribute("time", chaptersList.at(i));
+    }
+    // save chapters file
+    QFile file(m_view.vob_list->currentText() + ".dvdchapter");
+    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+        kWarning() << "//////  ERROR writing DVD CHAPTER file: " << m_view.vob_list->currentText() + ".dvdchapter";
+    } else {
+        file.write(doc.toString().toUtf8());
+        if (file.error() != QFile::NoError)
+            kWarning() << "//////  ERROR writing DVD CHAPTER file: " << m_view.vob_list->currentText() + ".dvdchapter";
+        else {
+            m_view.vob_list->setItemData(m_view.vob_list->currentIndex(), 0, Qt::UserRole + 2);
+            m_view.button_save->setEnabled(false);
+        }
+        file.close();
+    }
+}
index 7747102fb1246552b5d94df45379ee2ece38efd5..77887d53d53b20eca536837a3e3707bb278771e3 100644 (file)
@@ -58,6 +58,7 @@ private slots:
     void slotAddChapter();
     void slotRemoveChapter();
     void slotGoToChapter();
+    void slotSaveChapter();
 };
 
 #endif
index a4db4461b66d1aea53b33f2a739e6b505e1be176..092de52e406825ffce5a70ea3376e6b6b212e22d 100644 (file)
@@ -66,8 +66,10 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
     m_playIcon = KIcon("media-playback-start");
     m_pauseIcon = KIcon("media-playback-pause");
 
-    toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart()));
-    toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd()));
+    if (name != "chapter") {
+        toolbar->addAction(KIcon("kdenlive-zone-start"), i18n("Set zone start"), this, SLOT(slotSetZoneStart()));
+        toolbar->addAction(KIcon("kdenlive-zone-end"), i18n("Set zone end"), this, SLOT(slotSetZoneEnd()));
+    } else m_ruler->setZone(-3, -2);
 
     toolbar->addAction(KIcon("media-seek-backward"), i18n("Rewind"), this, SLOT(slotRewind()));
     toolbar->addAction(KIcon("media-skip-backward"), i18n("Rewind 1 frame"), this, SLOT(slotRewindOneFrame()));
@@ -87,12 +89,16 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
 
     playButton->setDefaultAction(m_playAction);
 
-    QToolButton *configButton = new QToolButton(toolbar);
-    m_configMenu = new QMenu(i18n("Misc..."), this);
-    configButton->setIcon(KIcon("system-run"));
-    configButton->setMenu(m_configMenu);
-    configButton->setPopupMode(QToolButton::QToolButton::InstantPopup);
-    toolbar->addWidget(configButton);
+    if (name != "chapter") {
+        QToolButton *configButton = new QToolButton(toolbar);
+        m_configMenu = new QMenu(i18n("Misc..."), this);
+        configButton->setIcon(KIcon("system-run"));
+        configButton->setMenu(m_configMenu);
+        configButton->setPopupMode(QToolButton::QToolButton::InstantPopup);
+        toolbar->addWidget(configButton);
+        m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne()));
+        m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo()));
+    }
 
     QWidget *spacer = new QWidget(this);
     spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
@@ -123,9 +129,6 @@ Monitor::Monitor(QString name, MonitorManager *manager, QWidget *parent) :
     connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
     connect(render, SIGNAL(rendererStopped(int)), this, SLOT(rendererStopped(int)));
 
-    m_configMenu->addSeparator();
-    m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (100%)"), this, SLOT(slotSetSizeOneToOne()));
-    m_configMenu->addAction(KIcon("transform-scale"), i18n("Resize (50%)"), this, SLOT(slotSetSizeOneToTwo()));
     //render->createVideoXWindow(m_ui.video_frame->winId(), -1);
     m_length = 0;