X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=add9a255109da9d466a44ea8373547c360c849b8;hb=0e9a1f923a067e05ba721722f9417547f9cd76da;hp=285cd4f43208a92b52fc9edf26e840fabfe87f95;hpb=c69ac32e6d351f7ceb968fd000eb67ea5a377db3;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 285cd4f4..add9a255 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -17,14 +17,21 @@ * 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 @@ -34,22 +41,22 @@ #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 *p3 = new QWidget; m_configDisplay.setupUi(p3); - page3 = addPage(p3, i18n("Display"), "display"); + m_page3 = addPage(p3, i18n("Display"), "video-display"); QWidget *p2 = new QWidget; m_configEnv.setupUi(p2); @@ -62,11 +69,11 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( m_configEnv.projecturl->lineEdit()->setObjectName("kcfg_defaultprojectfolder"); m_configEnv.capturefolderurl->setMode(KFile::Directory); m_configEnv.capturefolderurl->lineEdit()->setObjectName("kcfg_capturefolder"); - page2 = addPage(p2, i18n("Environment"), "terminal"); + 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()); QWidget *p5 = new QWidget; @@ -80,11 +87,18 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( m_configShuttle.kcfg_enableshuttle->hide(); m_configShuttle.kcfg_enableshuttle->setDisabled(true); #endif /* NO_JOGSHUTTLE */ - page5 = addPage(p5, i18n("JogShuttle"), "input-mouse"); + m_page5 = addPage(p5, i18n("JogShuttle"), "input-mouse"); QWidget *p6 = new QWidget; m_configSdl.setupUi(p6); - page6 = addPage(p6, i18n("Playback"), "audio-card"); + 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"); @@ -115,11 +129,13 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( slotUpdateDisplay(); + connect(m_configSdl.kcfg_audio_driver, SIGNAL(currentIndexChanged(int)), this, SLOT(slotCheckAlsaDriver())); initDevices(); connect(m_configMisc.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 @@ -143,7 +159,7 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( kDebug() << "// FOUND DVGRAB VERSION: " << dvgrabVersion; } - if (versionCheck) delete versionCheck; + delete versionCheck; if (dvgrabVersion < 3.3) { KdenliveSettings::setFirewiretimestamp(false); m_configCapture.kcfg_firewiretimestamp->setEnabled(false); @@ -161,11 +177,13 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent): KConfigDialog( KdenliveSettingsDialog::~KdenliveSettingsDialog() {} -void KdenliveSettingsDialog::slotUpdateRmdRegionStatus() { +void KdenliveSettingsDialog::slotUpdateRmdRegionStatus() +{ m_configCapture.region_group->setHidden(m_configCapture.kcfg_rmd_capture_type->currentIndex() != 1); } -void KdenliveSettingsDialog::checkProfile() { +void KdenliveSettingsDialog::checkProfile() +{ m_configMisc.kcfg_profiles_list->clear(); QMap profilesInfo = ProfilesDialog::getProfilesInfo(); QMapIterator i(profilesInfo); @@ -185,7 +203,8 @@ void KdenliveSettingsDialog::checkProfile() { } } -void KdenliveSettingsDialog::initDevices() { +void KdenliveSettingsDialog::initDevices() +{ // Fill audio drivers m_configSdl.kcfg_audio_driver->addItem(i18n("Automatic"), QString()); m_configSdl.kcfg_audio_driver->addItem(i18n("OSS"), "dsp"); @@ -259,7 +278,8 @@ void KdenliveSettingsDialog::initDevices() { } -void KdenliveSettingsDialog::slotReadAudioDevices() { +void KdenliveSettingsDialog::slotReadAudioDevices() +{ QString result = QString(m_readProcess.readAllStandardOutput()); kDebug() << "// / / / / / READING APLAY: "; kDebug() << result; @@ -275,29 +295,31 @@ void KdenliveSettingsDialog::slotReadAudioDevices() { } } -void KdenliveSettingsDialog::showPage(int page, int option) { +void KdenliveSettingsDialog::showPage(int page, int option) +{ switch (page) { case 1: - setCurrentPage(page1); + setCurrentPage(m_page1); break; case 2: - setCurrentPage(page2); + setCurrentPage(m_page2); break; case 3: - setCurrentPage(page3); + setCurrentPage(m_page3); break; case 4: - setCurrentPage(page4); + setCurrentPage(m_page4); m_configCapture.tabWidget->setCurrentIndex(option); break; case 5: - setCurrentPage(page5); + setCurrentPage(m_page5); break; } } -void KdenliveSettingsDialog::slotEditVideoApplication() { +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) @@ -307,7 +329,8 @@ void KdenliveSettingsDialog::slotEditVideoApplication() { m_configEnv.kcfg_defaultplayerapp->setText(service->exec()); } -void KdenliveSettingsDialog::slotEditAudioApplication() { +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) @@ -317,7 +340,8 @@ void KdenliveSettingsDialog::slotEditAudioApplication() { m_configEnv.kcfg_defaultaudioapp->setText(service->exec()); } -void KdenliveSettingsDialog::slotEditImageApplication() { +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) @@ -328,7 +352,8 @@ void KdenliveSettingsDialog::slotEditImageApplication() { } #ifndef NO_JOGSHUTTLE -void KdenliveSettingsDialog::slotCheckShuttle(int state) { +void KdenliveSettingsDialog::slotCheckShuttle(int state) +{ m_configShuttle.config_group->setEnabled(state); if (m_configShuttle.shuttledevicelist->count() == 0) { // parse devices @@ -349,14 +374,16 @@ 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(); @@ -365,19 +392,22 @@ void KdenliveSettingsDialog::rebuildVideo4Commands() { } -void KdenliveSettingsDialog::updateSettings() { - kDebug() << "// // // KCONFIG UPDATE called"; +void KdenliveSettingsDialog::updateSettings() +{ + //kDebug() << "// // // KCONFIG UPDATE called"; + m_defaultProfile = m_configMisc.kcfg_profiles_list->currentText(); KdenliveSettings::setDefault_profile(m_defaultPath); bool resetProfile = false; - QString value = m_configSdl.kcfg_audio_device->itemData(m_configSdl.kcfg_audio_device->currentIndex()).toString(); - if (value != KdenliveSettings::audiodevicename()) { - KdenliveSettings::setAudiodevicename(value); - resetProfile = true; + + if (m_configEnv.capturefolderurl->url().path() != KdenliveSettings::capturefolder()) { + kDebug() << "/// CAPT FOLDER UPDATED"; + KdenliveSettings::setCapturefolder(m_configEnv.capturefolderurl->url().path()); + emit updateCaptureFolder(); } - value = m_configCapture.kcfg_rmd_alsa_device->itemData(m_configCapture.kcfg_rmd_alsa_device->currentIndex()).toString(); + 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); } @@ -395,6 +425,18 @@ void KdenliveSettingsDialog::updateSettings() { resetProfile = true; } + 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); @@ -407,12 +449,23 @@ void KdenliveSettingsDialog::updateSettings() { updatePreview = true; } - KConfigDialog::updateSettings(); + 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(); } -void KdenliveSettingsDialog::slotUpdateDisplay() { +void KdenliveSettingsDialog::slotUpdateDisplay() +{ QString currentProfile = m_configMisc.kcfg_profiles_list->itemData(m_configMisc.kcfg_profiles_list->currentIndex()).toString(); QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(currentProfile); m_configMisc.p_size->setText(values.value("width") + 'x' + values.value("height")); @@ -425,6 +478,76 @@ void KdenliveSettingsDialog::slotUpdateDisplay() { m_defaultPath = currentProfile; } +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::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"