+ KIO::NetAccess::del(KUrl(m_status.tmp_folder->url().path(KUrl::AddTrailingSlash) + "DVD"), this);
+}
+
+
+void DvdWizard::slotPreview()
+{
+ QStringList programNames;
+ programNames << "xine" << "vlc";
+ QString exec;
+ foreach(const QString &prog, programNames) {
+ exec = KStandardDirs::findExe(prog);
+ if (!exec.isEmpty()) {
+ break;
+ }
+ }
+ if (exec.isEmpty()) {
+ KMessageBox::sorry(this, i18n("Previewing requires one of these applications (%1)", programNames.join(",")));
+ }
+ else QProcess::startDetached(exec, QStringList() << "dvd://" + m_status.iso_image->url().path());
+}
+
+void DvdWizard::slotBurn()
+{
+ QAction *action = qobject_cast<QAction *>(sender());
+ QString exec = action->data().toString();
+ QStringList args;
+ if (exec.endsWith("k3b")) args << "--image" << m_status.iso_image->url().path();
+ else args << "--image=" + m_status.iso_image->url().path();
+ QProcess::startDetached(exec, args);
+}
+
+
+void DvdWizard::slotGenerate()
+{
+ // clear job icons
+ if ((m_dvdauthor && m_dvdauthor->state() != QProcess::NotRunning) || (m_mkiso && m_mkiso->state() != QProcess::NotRunning)) return;
+ for (int i = 0; i < m_status.job_progress->count(); ++i)
+ m_status.job_progress->item(i)->setIcon(KIcon());
+ QString warnMessage;
+ if (KIO::NetAccess::exists(KUrl(m_status.tmp_folder->url().path(KUrl::AddTrailingSlash) + "DVD"), KIO::NetAccess::SourceSide, this))
+ warnMessage.append(i18n("Folder %1 already exists. Overwrite?\n", m_status.tmp_folder->url().path(KUrl::AddTrailingSlash) + "DVD"));
+ if (KIO::NetAccess::exists(KUrl(m_status.iso_image->url().path()), KIO::NetAccess::SourceSide, this))
+ warnMessage.append(i18n("Image file %1 already exists. Overwrite?", m_status.iso_image->url().path()));
+
+ if (warnMessage.isEmpty() || KMessageBox::questionYesNo(this, warnMessage) == KMessageBox::Yes) {
+ KIO::NetAccess::del(KUrl(m_status.tmp_folder->url().path(KUrl::AddTrailingSlash) + "DVD"), this);
+ QTimer::singleShot(300, this, SLOT(generateDvd()));
+ m_status.button_preview->setEnabled(false);
+ m_status.button_burn->setEnabled(false);
+ m_status.job_progress->setEnabled(true);
+ m_status.button_start->setEnabled(false);
+ }
+}
+
+void DvdWizard::slotAbort()
+{
+ // clear job icons
+ if (m_dvdauthor && m_dvdauthor->state() != QProcess::NotRunning) m_dvdauthor->terminate();
+ else if (m_mkiso && m_mkiso->state() != QProcess::NotRunning) m_mkiso->terminate();
+}
+
+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->dvdFormat(), m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());
+
+ QDomDocument doc;
+ QDomElement dvdproject = doc.createElement("dvdproject");
+ dvdproject.setAttribute("profile", m_pageVob->dvdProfile());
+ dvdproject.setAttribute("tmp_folder", m_status.tmp_folder->url().path());
+ dvdproject.setAttribute("iso_image", m_status.iso_image->url().path());
+ dvdproject.setAttribute("intro_movie", m_pageVob->introMovie());
+
+ doc.appendChild(dvdproject);
+ QDomElement menu = m_pageMenu->toXml();
+ if (!menu.isNull()) dvdproject.appendChild(doc.importNode(menu, true));
+ QDomElement chaps = m_pageChapters->toXml();
+ if (!chaps.isNull()) dvdproject.appendChild(doc.importNode(chaps, true));
+
+ QFile file(url.path());
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ kWarning() << "////// ERROR writing to file: " << url.path();
+ KMessageBox::error(this, i18n("Cannot write to file %1", url.path()));
+ return;
+ }
+
+ file.write(doc.toString().toUtf8());
+ if (file.error() != QFile::NoError) {
+ KMessageBox::error(this, i18n("Cannot write to file %1", url.path()));
+ }
+ file.close();
+}
+
+
+void DvdWizard::slotLoad()
+{
+ const KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog:///projectfolder"), "*.kdvd");
+ if (url.isEmpty())
+ return;
+ QDomDocument doc;
+ QFile file(url.path());
+ doc.setContent(&file, false);
+ file.close();
+ QDomElement dvdproject = doc.documentElement();
+ if (dvdproject.tagName() != "dvdproject") {
+ KMessageBox::error(this, i18n("File %1 is not a Kdenlive project file.", url.path()));
+ return;
+ }
+
+ QString profile = dvdproject.attribute("profile");
+ m_pageVob->setProfile(profile);
+ m_pageVob->clear();
+ m_status.tmp_folder->setUrl(KUrl(dvdproject.attribute("tmp_folder")));
+ m_status.iso_image->setUrl(KUrl(dvdproject.attribute("iso_image")));
+ QString intro = dvdproject.attribute("intro_movie");
+ if (!intro.isEmpty()) {
+ m_pageVob->slotAddVobFile(KUrl(intro));
+ m_pageVob->setUseIntroMovie(true);
+ }
+
+ QDomNodeList vobs = doc.elementsByTagName("vob");
+ for (int i = 0; i < vobs.count(); ++i) {
+ QDomElement e = vobs.at(i).toElement();
+ m_pageVob->slotAddVobFile(KUrl(e.attribute("file")), e.attribute("chapters"));
+ }
+ m_pageMenu->loadXml(m_pageVob->dvdFormat(), dvdproject.firstChildElement("menu"));