From: Jean-Baptiste Mardelle Date: Mon, 18 May 2009 22:44:29 +0000 (+0000) Subject: Save chapters now works in DVD Wizard X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=71b6881cc63970ddcfd767205af9f3f628e62c74;p=kdenlive Save chapters now works in DVD Wizard svn path=/trunk/kdenlive/; revision=3394 --- diff --git a/src/dvdwizard.cpp b/src/dvdwizard.cpp index 7e370ddc..b2e23c87 100644 --- a/src/dvdwizard.cpp +++ b/src/dvdwizard.cpp @@ -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) { diff --git a/src/dvdwizardchapters.cpp b/src/dvdwizardchapters.cpp index 1eafceb9..549b60d1 100644 --- a/src/dvdwizardchapters.cpp +++ b/src/dvdwizardchapters.cpp @@ -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(); + } +} diff --git a/src/dvdwizardchapters.h b/src/dvdwizardchapters.h index 7747102f..77887d53 100644 --- a/src/dvdwizardchapters.h +++ b/src/dvdwizardchapters.h @@ -58,6 +58,7 @@ private slots: void slotAddChapter(); void slotRemoveChapter(); void slotGoToChapter(); + void slotSaveChapter(); }; #endif diff --git a/src/monitor.cpp b/src/monitor.cpp index a4db4461..092de52e 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -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;