X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=31ec0d9ee762b13f20076bb4d5ff059054044f8d;hb=4ce2b16c0f8de76f0c3d372f29a2ece650c72f24;hp=8ca2706a39d44dc58458d68f08179cd0da6f2822;hpb=5c822c42a9a536c8d25d1e42e439efaca13dbba3;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 8ca2706a..31ec0d9e 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -17,31 +17,50 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ -#include -#include +#include "kdenlivesettingsdialog.h" +#include "profilesdialog.h" +#include "kdenlivesettings.h" #include #include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include #include #include +#ifndef NO_JOGSHUTTLE #include +#endif /* NO_JOGSHUTTLE */ -#include "profilesdialog.h" -#include "kdenlivesettings.h" -#include "kdenlivesettingsdialog.h" -KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog(parent, "settings", KdenliveSettings::self()) { +KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : + KConfigDialog(parent, "settings", KdenliveSettings::self()), + m_modified(false) +{ QWidget *p1 = new QWidget; m_configMisc.setupUi(p1); - page1 = addPage(p1, i18n("Misc"), "configure"); + m_page1 = addPage(p1, i18n("Misc"), "configure"); + + // Hide multi tab option until Kdenlive really supports it + m_configMisc.kcfg_activatetabs->setVisible(false); + + QWidget *p8 = new QWidget; + m_configProject.setupUi(p8); + m_page8 = addPage(p8, i18n("Project Defaults"), "document-new"); QWidget *p3 = new QWidget; - m_configDisplay.setupUi(p3); - page3 = addPage(p3, i18n("Display"), "display"); + m_configTimeline.setupUi(p3); + m_page3 = addPage(p3, i18n("Timeline"), "video-display"); QWidget *p2 = new QWidget; m_configEnv.setupUi(p2); @@ -50,21 +69,51 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( m_configEnv.rendererpathurl->lineEdit()->setObjectName("kcfg_rendererpath"); m_configEnv.tmppathurl->setMode(KFile::Directory); m_configEnv.tmppathurl->lineEdit()->setObjectName("kcfg_currenttmpfolder"); + m_configEnv.projecturl->setMode(KFile::Directory); + m_configEnv.projecturl->lineEdit()->setObjectName("kcfg_defaultprojectfolder"); m_configEnv.capturefolderurl->setMode(KFile::Directory); m_configEnv.capturefolderurl->lineEdit()->setObjectName("kcfg_capturefolder"); - page2 = addPage(p2, i18n("Environnement"), "terminal"); + m_configEnv.capturefolderurl->setEnabled(!KdenliveSettings::capturetoprojectfolder()); + connect(m_configEnv.kcfg_capturetoprojectfolder, SIGNAL(clicked()), this, SLOT(slotEnableCaptureFolder())); + m_page2 = addPage(p2, i18n("Environment"), "application-x-executable-script"); QWidget *p4 = new QWidget; m_configCapture.setupUi(p4); - page4 = addPage(p4, i18n("Capture"), "audio-card"); + m_page4 = addPage(p4, i18n("Capture"), "media-record"); m_configCapture.tabWidget->setCurrentIndex(KdenliveSettings::defaultcapture()); +#ifdef Q_WS_MAC + m_configCapture.tabWidget->setEnabled(false); + m_configCapture.kcfg_defaultcapture->setEnabled(false); + m_configCapture.label->setText(i18n("Capture is not yet available on OS X.")); +#endif QWidget *p5 = new QWidget; m_configShuttle.setupUi(p5); +#ifndef NO_JOGSHUTTLE connect(m_configShuttle.kcfg_enableshuttle, SIGNAL(stateChanged(int)), this, SLOT(slotCheckShuttle(int))); connect(m_configShuttle.shuttledevicelist, SIGNAL(activated(int)), this, SLOT(slotUpdateShuttleDevice(int))); slotCheckShuttle(KdenliveSettings::enableshuttle()); - page5 = addPage(p5, i18n("JogShuttle"), "input-mouse"); + m_configShuttle.shuttledisabled->hide(); +#else + m_configShuttle.kcfg_enableshuttle->hide(); + m_configShuttle.kcfg_enableshuttle->setDisabled(true); +#endif /* NO_JOGSHUTTLE */ + m_page5 = addPage(p5, i18n("JogShuttle"), "input-mouse"); + + QWidget *p6 = new QWidget; + m_configSdl.setupUi(p6); + + // Disable drop B frames, see Kdenlive issue #1330 + m_configSdl.groupBox->setHidden(true); + + m_page6 = addPage(p6, i18n("Playback"), "media-playback-start"); + + QWidget *p7 = new QWidget; + m_configTranscode.setupUi(p7); + m_page7 = addPage(p7, i18n("Transcode"), "edit-copy"); + connect(m_configTranscode.button_add, SIGNAL(clicked()), this, SLOT(slotAddTranscode())); + connect(m_configTranscode.button_delete, SIGNAL(clicked()), this, SLOT(slotDeleteTranscode())); + connect(m_configTranscode.profiles_list, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotDialogModified())); QStringList actions; actions << i18n("Do nothing"); @@ -78,31 +127,268 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( connect(m_configCapture.kcfg_video4vdevice, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); connect(m_configCapture.kcfg_video4adevice, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); + connect(m_configCapture.kcfg_video4vcodec, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); + connect(m_configCapture.kcfg_video4acodec, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); connect(m_configCapture.kcfg_video4vformat, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); connect(m_configCapture.kcfg_video4aformat, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); - connect(m_configCapture.kcfg_video4vencoding, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); - connect(m_configCapture.kcfg_video4aencoding, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); connect(m_configCapture.kcfg_video4size, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); connect(m_configCapture.kcfg_video4rate, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); + connect(m_configCapture.kcfg_rmd_capture_audio, SIGNAL(clicked(bool)), m_configCapture.audio_group, SLOT(setVisible(bool))); - QStringList profilesNames = ProfilesDialog::getProfileNames(); - m_configMisc.kcfg_profiles_list->addItems(profilesNames); - m_defaultProfile = ProfilesDialog::getSettingsFromFile(KdenliveSettings::default_profile()).value("description"); - if (profilesNames.contains(m_defaultProfile)) { - m_configMisc.kcfg_profiles_list->setCurrentItem(m_defaultProfile); - KdenliveSettings::setProfiles_list(profilesNames.indexOf(m_defaultProfile)); - } + m_configCapture.audio_group->setVisible(KdenliveSettings::rmd_capture_audio()); + + connect(m_configEnv.kp_image, SIGNAL(clicked()), this, SLOT(slotEditImageApplication())); + connect(m_configEnv.kp_audio, SIGNAL(clicked()), this, SLOT(slotEditAudioApplication())); + connect(m_configEnv.kp_player, SIGNAL(clicked()), this, SLOT(slotEditVideoApplication())); + + checkProfile(); slotUpdateDisplay(); - connect(m_configMisc.kcfg_profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); + connect(m_configSdl.kcfg_audio_driver, SIGNAL(currentIndexChanged(int)), this, SLOT(slotCheckAlsaDriver())); + initDevices(); + connect(m_configProject.kcfg_profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); + connect(m_configCapture.kcfg_rmd_capture_type, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateRmdRegionStatus())); + + slotUpdateRmdRegionStatus(); + loadTranscodeProfiles(); + + + //HACK: check dvgrab version, because only dvgrab >= 3.3 supports + // --timestamp option without bug + + if (KdenliveSettings::dvgrab_path().isEmpty() || !QFile::exists(KdenliveSettings::dvgrab_path())) { + QString dvgrabpath = KStandardDirs::findExe("dvgrab"); + KdenliveSettings::setDvgrab_path(dvgrabpath); + } + + + double dvgrabVersion = 0; + if (!KdenliveSettings::dvgrab_path().isEmpty()) { + QProcess *versionCheck = new QProcess; + versionCheck->setProcessChannelMode(QProcess::MergedChannels); + versionCheck->start("dvgrab", QStringList() << "--version"); + if (versionCheck->waitForFinished()) { + QString version = QString(versionCheck->readAll()).simplified(); + if (version.contains(' ')) version = version.section(' ', -1); + dvgrabVersion = version.toDouble(); + + kDebug() << "// FOUND DVGRAB VERSION: " << dvgrabVersion; + } + delete versionCheck; + if (dvgrabVersion < 3.3) { + KdenliveSettings::setFirewiretimestamp(false); + m_configCapture.kcfg_firewiretimestamp->setEnabled(false); + } + m_configCapture.dvgrab_info->setText(i18n("dvgrab version %1 at %2", dvgrabVersion, KdenliveSettings::dvgrab_path())); + } else m_configCapture.dvgrab_info->setText(i18n("dvgrab utility not found, please install it for firewire capture")); + + if (KdenliveSettings::rmd_path().isEmpty() || !QFile::exists(KdenliveSettings::rmd_path())) { + QString rmdpath = KStandardDirs::findExe("recordmydesktop"); + KdenliveSettings::setRmd_path(rmdpath); + } + if (KdenliveSettings::rmd_path().isEmpty()) + m_configCapture.rmd_info->setText(i18n("Recordmydesktop utility not found, please install it for screen grabs")); + else + m_configCapture.rmd_info->setText(i18n("Recordmydesktop found at: %1", KdenliveSettings::rmd_path())); } KdenliveSettingsDialog::~KdenliveSettingsDialog() {} +void KdenliveSettingsDialog::slotUpdateRmdRegionStatus() +{ + m_configCapture.region_group->setHidden(m_configCapture.kcfg_rmd_capture_type->currentIndex() != 1); +} + +void KdenliveSettingsDialog::slotEnableCaptureFolder() +{ + m_configEnv.capturefolderurl->setEnabled(!m_configEnv.kcfg_capturetoprojectfolder->isChecked()); +} + +void KdenliveSettingsDialog::checkProfile() +{ + m_configProject.kcfg_profiles_list->clear(); + QMap profilesInfo = ProfilesDialog::getProfilesInfo(); + QMapIterator i(profilesInfo); + while (i.hasNext()) { + i.next(); + m_configProject.kcfg_profiles_list->addItem(i.key(), i.value()); + } + + if (!KdenliveSettings::default_profile().isEmpty()) { + for (int i = 0; i < m_configProject.kcfg_profiles_list->count(); i++) { + if (m_configProject.kcfg_profiles_list->itemData(i).toString() == KdenliveSettings::default_profile()) { + m_configProject.kcfg_profiles_list->setCurrentIndex(i); + KdenliveSettings::setProfiles_list(i); + break; + } + } + } +} + +void KdenliveSettingsDialog::initDevices() +{ + // Fill audio drivers + m_configSdl.kcfg_audio_driver->addItem(i18n("Automatic"), QString()); +#ifndef Q_WS_MAC + m_configSdl.kcfg_audio_driver->addItem(i18n("OSS"), "dsp"); + m_configSdl.kcfg_audio_driver->addItem(i18n("ALSA"), "alsa"); + m_configSdl.kcfg_audio_driver->addItem(i18n("PulseAudio"), "pulse"); + m_configSdl.kcfg_audio_driver->addItem(i18n("OSS with DMA access"), "dma"); + m_configSdl.kcfg_audio_driver->addItem(i18n("Esound daemon"), "esd"); + m_configSdl.kcfg_audio_driver->addItem(i18n("ARTS daemon"), "artsc"); +#endif + + if (!KdenliveSettings::audiodrivername().isEmpty()) + for (int i = 1; i < m_configSdl.kcfg_audio_driver->count(); i++) { + if (m_configSdl.kcfg_audio_driver->itemData(i).toString() == KdenliveSettings::audiodrivername()) { + m_configSdl.kcfg_audio_driver->setCurrentIndex(i); + KdenliveSettings::setAudio_driver((uint) i); + } + } + + // Fill video drivers + m_configSdl.kcfg_video_driver->addItem(i18n("Automatic"), QString()); +#ifndef Q_WS_MAC + m_configSdl.kcfg_video_driver->addItem(i18n("XVideo"), "x11"); + m_configSdl.kcfg_video_driver->addItem(i18n("X11"), "x11_noaccel"); + m_configSdl.kcfg_video_driver->addItem(i18n("XFree86 DGA 2.0"), "dga"); + m_configSdl.kcfg_video_driver->addItem(i18n("Nano X"), "nanox"); + m_configSdl.kcfg_video_driver->addItem(i18n("Framebuffer console"), "fbcon"); + m_configSdl.kcfg_video_driver->addItem(i18n("Direct FB"), "directfb"); + m_configSdl.kcfg_video_driver->addItem(i18n("SVGAlib"), "svgalib"); + m_configSdl.kcfg_video_driver->addItem(i18n("General graphics interface"), "ggi"); + m_configSdl.kcfg_video_driver->addItem(i18n("Ascii art library"), "aalib"); +#endif + + // Fill the list of audio playback devices + m_configSdl.kcfg_audio_device->addItem(i18n("Default"), QString()); + m_configCapture.kcfg_rmd_alsa_device->addItem(i18n("Default"), QString()); + if (!KStandardDirs::findExe("aplay").isEmpty()) { + m_readProcess.setOutputChannelMode(KProcess::OnlyStdoutChannel); + m_readProcess.setProgram("aplay", QStringList() << "-l"); + connect(&m_readProcess, SIGNAL(readyReadStandardOutput()) , this, SLOT(slotReadAudioDevices())); + m_readProcess.execute(5000); + } else { + // If aplay is not installed on the system, parse the /proc/asound/pcm file + QFile file("/proc/asound/pcm"); + if (file.open(QIODevice::ReadOnly)) { + QTextStream stream(&file); + QString line; + QString deviceId; + while (!stream.atEnd()) { + line = stream.readLine(); + if (line.contains("playback")) { + deviceId = line.section(':', 0, 0); + m_configSdl.kcfg_audio_device->addItem(line.section(':', 1, 1), "plughw:" + QString::number(deviceId.section('-', 0, 0).toInt()) + ',' + QString::number(deviceId.section('-', 1, 1).toInt())); + } + if (line.contains("capture")) { + deviceId = line.section(':', 0, 0); + m_configCapture.kcfg_rmd_alsa_device->addItem(line.section(':', 1, 1), "plughw:" + QString::number(deviceId.section('-', 0, 0).toInt()) + ',' + QString::number(deviceId.section('-', 1, 1).toInt())); + } + } + file.close(); + } + } + if (!KdenliveSettings::audiodevicename().isEmpty()) { + // Select correct alsa device + int ix = m_configSdl.kcfg_audio_device->findData(KdenliveSettings::audiodevicename()); + m_configSdl.kcfg_audio_device->setCurrentIndex(ix); + KdenliveSettings::setAudio_device(ix); + } + if (!KdenliveSettings::rmd_alsadevicename().isEmpty()) { + // Select correct alsa device + int ix = m_configCapture.kcfg_rmd_alsa_device->findData(KdenliveSettings::rmd_alsadevicename()); + m_configCapture.kcfg_rmd_alsa_device->setCurrentIndex(ix); + KdenliveSettings::setRmd_alsa_device(ix); + } +} + + +void KdenliveSettingsDialog::slotReadAudioDevices() +{ + QString result = QString(m_readProcess.readAllStandardOutput()); + kDebug() << "// / / / / / READING APLAY: "; + kDebug() << result; + QStringList lines = result.split('\n'); + foreach(const QString & data, lines) { + kDebug() << "// READING LINE: " << data; + if (data.simplified().startsWith("card")) { + QString card = data.section(':', 0, 0).section(' ', -1); + QString device = data.section(':', 1, 1).section(' ', -1); + m_configSdl.kcfg_audio_device->addItem(data.section(':', -1), "plughw:" + card + ',' + device); + m_configCapture.kcfg_rmd_alsa_device->addItem(data.section(':', -1), "plughw:" + card + ',' + device); + } + } +} + +void KdenliveSettingsDialog::showPage(int page, int option) +{ + switch (page) { + case 1: + setCurrentPage(m_page1); + break; + case 2: + setCurrentPage(m_page2); + break; + case 3: + setCurrentPage(m_page3); + break; + case 4: + setCurrentPage(m_page4); + m_configCapture.tabWidget->setCurrentIndex(option); + break; + case 5: + setCurrentPage(m_page5); + break; + case 6: + setCurrentPage(m_page6); + break; + case 7: + setCurrentPage(m_page7); + break; + default: + setCurrentPage(m_page1); + } +} + +void KdenliveSettingsDialog::slotEditVideoApplication() +{ + KService::Ptr service; + KOpenWithDialog dlg(KUrl::List(), i18n("Select default video player"), m_configEnv.kcfg_defaultplayerapp->text(), this); + if (dlg.exec() != QDialog::Accepted) + return; + + service = dlg.service(); + m_configEnv.kcfg_defaultplayerapp->setText(service->exec()); +} + +void KdenliveSettingsDialog::slotEditAudioApplication() +{ + KService::Ptr service; + KOpenWithDialog dlg(KUrl::List(), i18n("Select default audio editor"), m_configEnv.kcfg_defaultaudioapp->text(), this); + if (dlg.exec() != QDialog::Accepted) + return; + + service = dlg.service(); + m_configEnv.kcfg_defaultaudioapp->setText(service->exec()); +} + +void KdenliveSettingsDialog::slotEditImageApplication() +{ + KService::Ptr service; + KOpenWithDialog dlg(KUrl::List(), i18n("Select default image editor"), m_configEnv.kcfg_defaultimageapp->text(), this); + if (dlg.exec() != QDialog::Accepted) + return; -void KdenliveSettingsDialog::slotCheckShuttle(int state) { + service = dlg.service(); + m_configEnv.kcfg_defaultimageapp->setText(service->exec()); +} + +#ifndef NO_JOGSHUTTLE +void KdenliveSettingsDialog::slotCheckShuttle(int state) +{ m_configShuttle.config_group->setEnabled(state); if (m_configShuttle.shuttledevicelist->count() == 0) { // parse devices @@ -113,7 +399,7 @@ void KdenliveSettingsDialog::slotCheckShuttle(int state) { kDebug() << "/// CHECKING OFR: " << filename; char name[256] = "unknown"; - fd = ::open((char *) filename.toUtf8().data(), O_RDONLY); + fd = KDE_open((char *) filename.toUtf8().data(), O_RDONLY); if (fd >= 0 && ioctl(fd, EVIOCGNAME(sizeof(name)), name) >= 0) { m_configShuttle.shuttledevicelist->addItem(name, filename); } @@ -123,49 +409,209 @@ void KdenliveSettingsDialog::slotCheckShuttle(int state) { } } -void KdenliveSettingsDialog::slotUpdateShuttleDevice(int ix) { +void KdenliveSettingsDialog::slotUpdateShuttleDevice(int ix) +{ QString device = m_configShuttle.shuttledevicelist->itemData(ix).toString(); //KdenliveSettings::setShuttledevice(device); m_configShuttle.kcfg_shuttledevice->setText(device); } +#endif /* NO_JOGSHUTTLE */ -void KdenliveSettingsDialog::rebuildVideo4Commands() { +void KdenliveSettingsDialog::rebuildVideo4Commands() +{ QString captureCommand; - if (!m_configCapture.kcfg_video4adevice->text().isEmpty()) captureCommand = "-f " + m_configCapture.kcfg_video4aformat->text() + " -i " + m_configCapture.kcfg_video4adevice->text(); + if (!m_configCapture.kcfg_video4adevice->text().isEmpty()) captureCommand = "-f " + m_configCapture.kcfg_video4aformat->text() + " -i " + m_configCapture.kcfg_video4adevice->text() + " -acodec " + m_configCapture.kcfg_video4acodec->text(); - captureCommand += " -f " + m_configCapture.kcfg_video4vformat->text() + " -s " + m_configCapture.kcfg_video4size->text() + " -r " + QString::number(m_configCapture.kcfg_video4rate->value()) + " -i " + m_configCapture.kcfg_video4vdevice->text() + " -f " + m_configCapture.kcfg_video4vencoding->text(); + captureCommand += " -f " + m_configCapture.kcfg_video4vformat->text() + " -s " + m_configCapture.kcfg_video4size->text() + " -r " + QString::number(m_configCapture.kcfg_video4rate->value()) + " -i " + m_configCapture.kcfg_video4vdevice->text() + " -vcodec " + m_configCapture.kcfg_video4vcodec->text(); m_configCapture.kcfg_video4capture->setText(captureCommand); +} + + +void KdenliveSettingsDialog::updateSettings() +{ + //kDebug() << "// // // KCONFIG UPDATE called"; + + m_defaultProfile = m_configProject.kcfg_profiles_list->currentText(); + KdenliveSettings::setDefault_profile(m_defaultPath); + + bool resetProfile = false; + bool updateCapturePath = false; + + if (m_configEnv.kcfg_capturetoprojectfolder->isChecked() != KdenliveSettings::capturetoprojectfolder()) { + KdenliveSettings::setCapturetoprojectfolder(m_configEnv.kcfg_capturetoprojectfolder->isChecked()); + updateCapturePath = true; + } + + if (m_configEnv.capturefolderurl->url().path() != KdenliveSettings::capturefolder()) { + KdenliveSettings::setCapturefolder(m_configEnv.capturefolderurl->url().path()); + updateCapturePath = true; + } + + if (m_configCapture.kcfg_dvgrabfilename->text() != KdenliveSettings::dvgrabfilename()) { + KdenliveSettings::setDvgrabfilename(m_configCapture.kcfg_dvgrabfilename->text()); + updateCapturePath = true; + } + + if ((uint) m_configCapture.kcfg_firewireformat->currentIndex() != KdenliveSettings::firewireformat()) { + KdenliveSettings::setFirewireformat(m_configCapture.kcfg_firewireformat->currentIndex()); + updateCapturePath = true; + } + + if (updateCapturePath) emit updateCaptureFolder(); + + QString value = m_configCapture.kcfg_rmd_alsa_device->itemData(m_configCapture.kcfg_rmd_alsa_device->currentIndex()).toString(); + if (value != KdenliveSettings::rmd_alsadevicename()) { + KdenliveSettings::setRmd_alsadevicename(value); + } + + value = m_configCapture.kcfg_rmd_audio_freq->itemText(m_configCapture.kcfg_rmd_audio_freq->currentIndex()); + kDebug() << "// AUDIO FREQ VALUE: " << value << ", CURRENT: " << KdenliveSettings::rmd_freq() << ", IX: " << m_configCapture.kcfg_rmd_audio_freq->currentIndex(); + if (value != KdenliveSettings::rmd_freq()) { + kDebug() << "// SETTING AUDIO FREQ TO: " << value; + KdenliveSettings::setRmd_freq(value); + } + + value = m_configSdl.kcfg_audio_driver->itemData(m_configSdl.kcfg_audio_driver->currentIndex()).toString(); + if (value != KdenliveSettings::audiodrivername()) { + KdenliveSettings::setAudiodrivername(value); + resetProfile = true; + } - QString playbackCommand; - playbackCommand = "-f " + m_configCapture.kcfg_video4vencoding->text(); - m_configCapture.kcfg_video4playback->setText(playbackCommand); + if (value == "alsa") { + // Audio device setting is only valid for alsa driver + value = m_configSdl.kcfg_audio_device->itemData(m_configSdl.kcfg_audio_device->currentIndex()).toString(); + if (value != KdenliveSettings::audiodevicename()) { + KdenliveSettings::setAudiodevicename(value); + resetProfile = true; + } + } else if (KdenliveSettings::audiodevicename().isEmpty() == false) { + KdenliveSettings::setAudiodevicename(QString::null); + resetProfile = true; + } + + value = m_configSdl.kcfg_video_driver->itemData(m_configSdl.kcfg_video_driver->currentIndex()).toString(); + if (value != KdenliveSettings::videodrivername()) { + KdenliveSettings::setVideodrivername(value); + resetProfile = true; + } + + if (m_configSdl.kcfg_window_background->color() != KdenliveSettings::window_background()) { + KdenliveSettings::setWindow_background(m_configSdl.kcfg_window_background->color()); + resetProfile = true; + } + + if (m_configSdl.kcfg_volume->value() != KdenliveSettings::volume()) { + KdenliveSettings::setVolume(m_configSdl.kcfg_volume->value()); + resetProfile = true; + } + + bool updatePreview = false; + if (m_configSdl.kcfg_dropbframes->isChecked() != KdenliveSettings::dropbframes()) { + KdenliveSettings::setDropbframes(m_configSdl.kcfg_dropbframes->isChecked()); + updatePreview = true; + } + + if (m_modified) { + // The transcoding profiles were modified, save. + m_modified = false; + saveTranscodeProfiles(); + } + +#if KDE_IS_VERSION(4,3,0) + KConfigDialog::settingsChangedSlot(); +#endif + + //KConfigDialog::updateSettings(); + if (resetProfile) emit doResetProfile(); + if (updatePreview) emit updatePreviewSettings(); } -bool KdenliveSettingsDialog::hasChanged() { - kDebug() << "// // // KCONFIG hasChanged called: " << m_configMisc.kcfg_profiles_list->currentText() << ", " << m_defaultProfile; - if (m_configMisc.kcfg_profiles_list->currentText() != m_defaultProfile) return true; - return KConfigDialog::hasChanged(); +void KdenliveSettingsDialog::slotUpdateDisplay() +{ + QString currentProfile = m_configProject.kcfg_profiles_list->itemData(m_configProject.kcfg_profiles_list->currentIndex()).toString(); + QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(currentProfile); + m_configProject.p_size->setText(values.value("width") + 'x' + values.value("height")); + m_configProject.p_fps->setText(values.value("frame_rate_num") + '/' + values.value("frame_rate_den")); + m_configProject.p_aspect->setText(values.value("sample_aspect_num") + '/' + values.value("sample_aspect_den")); + m_configProject.p_display->setText(values.value("display_aspect_num") + '/' + values.value("display_aspect_den")); + if (values.value("progressive").toInt() == 0) + m_configProject.p_progressive->setText(i18n("Interlaced")); + else + m_configProject.p_progressive->setText(i18n("Progressive")); + m_defaultProfile = m_configProject.kcfg_profiles_list->itemText(m_configProject.kcfg_profiles_list->currentIndex()); + m_defaultPath = currentProfile; } -void KdenliveSettingsDialog::updateSettings() { - kDebug() << "// // // KCONFIG UPDATE called"; - m_defaultProfile = m_configMisc.kcfg_profiles_list->currentText(); - KdenliveSettings::setDefault_profile(m_defaultPath); - KConfigDialog::updateSettings(); +void KdenliveSettingsDialog::slotCheckAlsaDriver() +{ + QString value = m_configSdl.kcfg_audio_driver->itemData(m_configSdl.kcfg_audio_driver->currentIndex()).toString(); + m_configSdl.kcfg_audio_device->setEnabled(value == "alsa"); +} + +void KdenliveSettingsDialog::loadTranscodeProfiles() +{ + KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc"); + KConfigGroup transConfig(config, "Transcoding"); + // read the entries + m_configTranscode.profiles_list->blockSignals(true); + QMap< QString, QString > profiles = transConfig.entryMap(); + QMapIterator i(profiles); + while (i.hasNext()) { + i.next(); + QTreeWidgetItem *item = new QTreeWidgetItem(m_configTranscode.profiles_list, QStringList() << i.key() << i.value()); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); + } + m_configTranscode.profiles_list->blockSignals(false); } -void KdenliveSettingsDialog::slotUpdateDisplay() { - QString currentProfile = m_configMisc.kcfg_profiles_list->currentText(); - QMap< QString, QString > values = ProfilesDialog::getSettingsForProfile(currentProfile); - m_configMisc.p_size->setText(values.value("width") + "x" + values.value("height")); - m_configMisc.p_fps->setText(values.value("frame_rate_num") + "/" + values.value("frame_rate_den")); - m_configMisc.p_aspect->setText(values.value("sample_aspect_num") + "/" + values.value("sample_aspect_den")); - m_configMisc.p_display->setText(values.value("display_aspect_num") + "/" + values.value("display_aspect_den")); - if (values.value("progressive").toInt() == 0) m_configMisc.p_progressive->setText(i18n("Interlaced")); - else m_configMisc.p_progressive->setText(i18n("Progressive")); - m_defaultPath = values.value("path"); +void KdenliveSettingsDialog::saveTranscodeProfiles() +{ + KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc"); + //KSharedConfigPtr config = KGlobal::config(); + KConfigGroup transConfig(config, "Transcoding"); + // read the entries + transConfig.deleteGroup(); + int max = m_configTranscode.profiles_list->topLevelItemCount(); + for (int i = 0; i < max; i++) { + QTreeWidgetItem *item = m_configTranscode.profiles_list->topLevelItem(i); + transConfig.writeEntry(item->text(0), item->text(1)); + } + config->sync(); +} + +void KdenliveSettingsDialog::slotAddTranscode() +{ + QTreeWidgetItem *item = new QTreeWidgetItem(m_configTranscode.profiles_list, QStringList() << i18n("Name") << i18n("Parameters")); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); + m_configTranscode.profiles_list->setCurrentItem(item); + m_configTranscode.profiles_list->editItem(item); + slotDialogModified(); } +void KdenliveSettingsDialog::slotDeleteTranscode() +{ + QTreeWidgetItem *item = m_configTranscode.profiles_list->currentItem(); + if (item == NULL) return; + delete item; + slotDialogModified(); +} + +void KdenliveSettingsDialog::slotDialogModified() +{ + m_modified = true; +#if KDE_IS_VERSION(4,3,0) + KConfigDialog::updateButtons(); +#endif +} + +//virtual +bool KdenliveSettingsDialog::hasChanged() +{ + if (m_modified) return true; + return KConfigDialog::hasChanged(); +} + + #include "kdenlivesettingsdialog.moc"