X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=64f9aaeb2668bccaf2d258f44e622912a09f745b;hb=d9b09bd1f1fbd5c1dbbbce217ae89ceb57f090c5;hp=34297068c8e61ff847ac971ade8d10fabbb2b8fe;hpb=664d1a3d5bf9c771936ca98d48163fa4df6ffc0e;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 34297068..64f9aaeb 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -22,9 +22,9 @@ #ifdef USE_V4L #include "v4l/v4lcapture.h" #endif -#include "blackmagic/devices.h" #include "encodingprofilesdialog.h" #include "kdenlivesettings.h" +#include "renderer.h" #include #include @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -43,10 +44,11 @@ #include #include #include + #ifdef USE_JOGSHUTTLE -#include "jogaction.h" -#include "jogshuttleconfig.h" -#include + #include "jogaction.h" + #include "jogshuttleconfig.h" + #include #endif @@ -65,6 +67,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map m_configMisc.kcfg_activatetabs->setVisible(false); // Hide avformat-novalidate trick, causes crash (bug #2205 and #2206) m_configMisc.kcfg_projectloading_avformatnovalidate->setVisible(false); + + m_configMisc.kcfg_use_exiftool->setEnabled(!KStandardDirs::findExe("exiftool").isEmpty()); QWidget *p8 = new QWidget; m_configProject.setupUi(p8); @@ -83,6 +87,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map m_configEnv.mltpathurl->setMode(KFile::Directory); m_configEnv.mltpathurl->lineEdit()->setObjectName("kcfg_mltpath"); m_configEnv.rendererpathurl->lineEdit()->setObjectName("kcfg_rendererpath"); + m_configEnv.ffmpegurl->lineEdit()->setObjectName("kcfg_ffmpegpath"); + m_configEnv.ffplayurl->lineEdit()->setObjectName("kcfg_ffplaypath"); m_configEnv.kcfg_mltthreads->setMaximum( QThread::idealThreadCount() < 4 ? QThread::idealThreadCount() : 3 ); m_configEnv.tmppathurl->setMode(KFile::Directory); m_configEnv.tmppathurl->lineEdit()->setObjectName("kcfg_currenttmpfolder"); @@ -100,10 +106,10 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map #ifdef USE_V4L // Video 4 Linux device detection - for (int i = 0; i < 10; i++) { - QString path = "/dev/video" + QString::number(i); + for (int i = 0; i < 10; ++i) { + QString path = QLatin1String("/dev/video") + QString::number(i); if (QFile::exists(path)) { - QStringList deviceInfo = V4lCaptureHandler::getDeviceName(path.toUtf8().constData()); + QStringList deviceInfo = V4lCaptureHandler::getDeviceName(path); if (!deviceInfo.isEmpty()) { m_configCapture.kcfg_detectedv4ldevices->addItem(deviceInfo.at(0), path); m_configCapture.kcfg_detectedv4ldevices->setItemData(m_configCapture.kcfg_detectedv4ldevices->count() - 1, deviceInfo.at(1), Qt::UserRole + 1); @@ -112,7 +118,6 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map } connect(m_configCapture.kcfg_detectedv4ldevices, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdatev4lDevice())); connect(m_configCapture.kcfg_v4l_format, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdatev4lCaptureProfile())); - connect(m_configCapture.kcfg_v4l_captureaudio, SIGNAL(toggled(bool)), m_configCapture.kcfg_v4l_alsadevice, SLOT(setEnabled(bool))); connect(m_configCapture.config_v4l, SIGNAL(clicked()), this, SLOT(slotEditVideo4LinuxProfile())); slotUpdatev4lDevice(); @@ -120,54 +125,45 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map m_page4 = addPage(p4, i18n("Capture"), "media-record"); m_configCapture.tabWidget->setCurrentIndex(KdenliveSettings::defaultcapture()); -#ifndef USE_V4L +#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 this platform.")); + m_configCapture.label->setText(i18n("Capture is not yet available on Mac OS X.")); #endif QWidget *p5 = new QWidget; m_configShuttle.setupUi(p5); + m_configShuttle.toolBtnReload->setIcon(KIcon("view-refresh")); #ifdef USE_JOGSHUTTLE connect(m_configShuttle.kcfg_enableshuttle, SIGNAL(stateChanged(int)), this, SLOT(slotCheckShuttle(int))); connect(m_configShuttle.shuttledevicelist, SIGNAL(activated(int)), this, SLOT(slotUpdateShuttleDevice(int))); + connect(m_configShuttle.toolBtnReload, SIGNAL(clicked(bool)), this, SLOT(slotReloadShuttleDevices())); + slotCheckShuttle(KdenliveSettings::enableshuttle()); m_configShuttle.shuttledisabled->hide(); // Store the button pointers into an array for easier handling them in the other functions. + // TODO: impl enumerator or live with cut and paste :-))) + setupJogshuttleBtns(KdenliveSettings::shuttledevice()); + +#if 0 m_shuttle_buttons.push_back(m_configShuttle.shuttle1); m_shuttle_buttons.push_back(m_configShuttle.shuttle2); m_shuttle_buttons.push_back(m_configShuttle.shuttle3); m_shuttle_buttons.push_back(m_configShuttle.shuttle4); m_shuttle_buttons.push_back(m_configShuttle.shuttle5); + m_shuttle_buttons.push_back(m_configShuttle.shuttle6); + m_shuttle_buttons.push_back(m_configShuttle.shuttle7); + m_shuttle_buttons.push_back(m_configShuttle.shuttle8); + m_shuttle_buttons.push_back(m_configShuttle.shuttle9); + m_shuttle_buttons.push_back(m_configShuttle.shuttle10); + m_shuttle_buttons.push_back(m_configShuttle.shuttle11); + m_shuttle_buttons.push_back(m_configShuttle.shuttle12); + m_shuttle_buttons.push_back(m_configShuttle.shuttle13); + m_shuttle_buttons.push_back(m_configShuttle.shuttle14); + m_shuttle_buttons.push_back(m_configShuttle.shuttle15); +#endif - // populate the buttons with the current configuration. The items are sorted - // according to the user-selected language, so they do not appear in random order. - QList action_names = mappable_actions.keys(); - qSort(action_names); - - // Here we need to compute the action_id -> index-in-action_names. We iterate over the - // action_names, as the sorting may depend on the user-language. - QStringList actions_map = JogShuttleConfig::actionMap(KdenliveSettings::shuttlebuttons()); - QMap action_pos; - foreach (const QString& action_id, actions_map) { - // This loop find out at what index is the string that would map to the action_id. - for (int i = 0; i < action_names.size(); i++) { - if (mappable_actions[action_names[i]] == action_id) { - action_pos[action_id] = i; - break; - } - } - } - - int i = 0; - foreach (KComboBox* button, m_shuttle_buttons) { - button->addItems(action_names); - connect(button, SIGNAL(activated(int)), this, SLOT(slotShuttleModified())); - ++i; - if (i < actions_map.size()) - button->setCurrentIndex(action_pos[actions_map[i]]); - } #else /* ! USE_JOGSHUTTLE */ m_configShuttle.kcfg_enableshuttle->hide(); m_configShuttle.kcfg_enableshuttle->setDisabled(true); @@ -176,10 +172,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map QWidget *p6 = new QWidget; m_configSdl.setupUi(p6); - -#ifndef USE_OPENGL - m_configSdl.kcfg_openglmonitors->setHidden(true); -#endif + m_configSdl.reload_blackmagic->setIcon(KIcon("view-refresh")); + connect(m_configSdl.reload_blackmagic, SIGNAL(clicked(bool)), this, SLOT(slotReloadBlackMagic())); m_page6 = addPage(p6, i18n("Playback"), "media-playback-start"); @@ -188,11 +182,18 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map 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())); - - connect(m_configCapture.kcfg_rmd_capture_audio, SIGNAL(clicked(bool)), m_configCapture.audio_group, SLOT(setVisible(bool))); - - m_configCapture.audio_group->setVisible(KdenliveSettings::rmd_capture_audio()); + connect(m_configTranscode.profiles_list, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(slotDialogModified())); + connect(m_configTranscode.profiles_list, SIGNAL(currentRowChanged(int)), this, SLOT(slotSetTranscodeProfile())); + + connect(m_configTranscode.profile_name, SIGNAL(textChanged(QString)), this, SLOT(slotEnableTranscodeUpdate())); + connect(m_configTranscode.profile_description, SIGNAL(textChanged(QString)), this, SLOT(slotEnableTranscodeUpdate())); + connect(m_configTranscode.profile_extension, SIGNAL(textChanged(QString)), this, SLOT(slotEnableTranscodeUpdate())); + connect(m_configTranscode.profile_parameters, SIGNAL(textChanged()), this, SLOT(slotEnableTranscodeUpdate())); + connect(m_configTranscode.profile_audioonly, SIGNAL(stateChanged(int)), this, SLOT(slotEnableTranscodeUpdate())); + + connect(m_configTranscode.button_update, SIGNAL(pressed()), this, SLOT(slotUpdateTranscodingProfile())); + + m_configTranscode.profile_parameters->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 5); connect(m_configEnv.kp_image, SIGNAL(clicked()), this, SLOT(slotEditImageApplication())); connect(m_configEnv.kp_audio, SIGNAL(clicked()), this, SLOT(slotEditAudioApplication())); @@ -206,9 +207,9 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map 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())); + connect(m_configCapture.kcfg_grab_capture_type, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateGrabRegionStatus())); - slotUpdateRmdRegionStatus(); + slotUpdateGrabRegionStatus(); loadTranscodeProfiles(); @@ -230,7 +231,7 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map connect(m_configCapture.kcfg_decklink_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDecklinkProfile())); connect(m_configCapture.decklink_showprofileinfo, SIGNAL(clicked(bool)), m_configCapture.decklink_parameters, SLOT(setVisible(bool))); - // v4l profile + // ffmpeg profile m_configCapture.v4l_showprofileinfo->setIcon(KIcon("help-about")); m_configCapture.v4l_manageprofile->setIcon(KIcon("configure")); m_configCapture.v4l_parameters->setVisible(false); @@ -239,6 +240,16 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map connect(m_configCapture.v4l_manageprofile, SIGNAL(clicked(bool)), this, SLOT(slotManageEncodingProfile())); connect(m_configCapture.kcfg_v4l_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateV4lProfile())); connect(m_configCapture.v4l_showprofileinfo, SIGNAL(clicked(bool)), m_configCapture.v4l_parameters, SLOT(setVisible(bool))); + + // screen grab profile + m_configCapture.grab_showprofileinfo->setIcon(KIcon("help-about")); + m_configCapture.grab_manageprofile->setIcon(KIcon("configure")); + m_configCapture.grab_parameters->setVisible(false); + m_configCapture.grab_parameters->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 4); + m_configCapture.grab_parameters->setPlainText(KdenliveSettings::grab_parameters()); + connect(m_configCapture.grab_manageprofile, SIGNAL(clicked(bool)), this, SLOT(slotManageEncodingProfile())); + connect(m_configCapture.kcfg_grab_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateGrabProfile())); + connect(m_configCapture.grab_showprofileinfo, SIGNAL(clicked(bool)), m_configCapture.grab_parameters, SLOT(setVisible(bool))); // proxy profile stuff m_configProject.proxy_showprofileinfo->setIcon(KIcon("help-about")); @@ -253,18 +264,14 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map slotUpdateProxyProfile(-1); slotUpdateV4lProfile(-1); + slotUpdateGrabProfile(-1); slotUpdateDecklinkProfile(-1); - BMInterface::getBlackMagicDeviceList(m_configCapture.kcfg_decklink_capturedevice); - if (m_configCapture.kcfg_decklink_capturedevice->count() > 0) { - QStringList modes = m_configCapture.kcfg_decklink_capturedevice->itemData(m_configCapture.kcfg_decklink_capturedevice->currentIndex()).toStringList(); - m_configCapture.kcfg_decklink_capturedevice->setToolTip(i18n("Supported capture modes:\n") + modes.join("\n")); + Render::getBlackMagicDeviceList(m_configCapture.kcfg_decklink_capturedevice); + if (!Render::getBlackMagicOutputDeviceList(m_configSdl.kcfg_blackmagic_output_device)) { + // No blackmagic card found + m_configSdl.kcfg_external_display->setEnabled(false); } - connect(m_configCapture.kcfg_decklink_capturedevice, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateHDMIModes())); - - if (BMInterface::getBlackMagicOutputDeviceList(m_configSdl.kcfg_blackmagic_output_device)) { - // Found blackmagic card - } else m_configSdl.kcfg_external_display->setEnabled(false); double dvgrabVersion = 0; if (!KdenliveSettings::dvgrab_path().isEmpty()) { @@ -285,28 +292,111 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map } 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); +void KdenliveSettingsDialog::setupJogshuttleBtns(QString device) +{ + QList list; + QList list1; + + list << m_configShuttle.shuttle1; + list << m_configShuttle.shuttle2; + list << m_configShuttle.shuttle3; + list << m_configShuttle.shuttle4; + list << m_configShuttle.shuttle5; + list << m_configShuttle.shuttle6; + list << m_configShuttle.shuttle7; + list << m_configShuttle.shuttle8; + list << m_configShuttle.shuttle9; + list << m_configShuttle.shuttle10; + list << m_configShuttle.shuttle11; + list << m_configShuttle.shuttle12; + list << m_configShuttle.shuttle13; + list << m_configShuttle.shuttle14; + list << m_configShuttle.shuttle15; + + list1 << m_configShuttle.label_2; // #1 + list1 << m_configShuttle.label_4; // #2 + list1 << m_configShuttle.label_3; // #3 + list1 << m_configShuttle.label_7; // #4 + list1 << m_configShuttle.label_5; // #5 + list1 << m_configShuttle.label_6; // #6 + list1 << m_configShuttle.label_8; // #7 + list1 << m_configShuttle.label_9; // #8 + list1 << m_configShuttle.label_10; // #9 + list1 << m_configShuttle.label_11; // #10 + list1 << m_configShuttle.label_12; // #11 + list1 << m_configShuttle.label_13; // #12 + list1 << m_configShuttle.label_14; // #13 + list1 << m_configShuttle.label_15; // #14 + list1 << m_configShuttle.label_16; // #15 + + + for (int i = 0; i < list.count(); i++) { + list[i]->hide(); + list1[i]->hide(); } - 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() {} +#ifdef USE_JOGSHUTTLE + int keysCount = JogShuttle::keysCount(device); -void KdenliveSettingsDialog::slotUpdateHDMIModes() -{ - QStringList modes = m_configCapture.kcfg_decklink_capturedevice->itemData(m_configCapture.kcfg_decklink_capturedevice->currentIndex()).toStringList(); - m_configCapture.kcfg_decklink_capturedevice->setToolTip(i18n("Supported capture modes:\n") + modes.join("\n")); + for (int i = 0; i < keysCount; i++) { + m_shuttle_buttons.push_back(list[i]); + list[i]->show(); + list1[i]->show(); + } + + // populate the buttons with the current configuration. The items are sorted + // according to the user-selected language, so they do not appear in random order. + QMap mappable_actions(m_mappable_actions); + QList action_names = mappable_actions.keys(); + QList::Iterator iter = action_names.begin(); + kDebug() << "::::::::::::::::"; + while (iter != action_names.end()) { + kDebug() << *iter; + ++iter; + } + + kDebug() << "::::::::::::::::"; + + qSort(action_names); + iter = action_names.begin(); + while (iter != action_names.end()) { + kDebug() << *iter; + ++iter; + } + kDebug() << "::::::::::::::::"; + + // Here we need to compute the action_id -> index-in-action_names. We iterate over the + // action_names, as the sorting may depend on the user-language. + QStringList actions_map = JogShuttleConfig::actionMap(KdenliveSettings::shuttlebuttons()); + QMap action_pos; + foreach (const QString& action_id, actions_map) { + // This loop find out at what index is the string that would map to the action_id. + for (int i = 0; i < action_names.size(); ++i) { + if (mappable_actions[action_names.at(i)] == action_id) { + action_pos[action_id] = i; + break; + } + } + } + + int i = 0; + foreach (KComboBox* button, m_shuttle_buttons) { + button->addItems(action_names); + connect(button, SIGNAL(activated(int)), this, SLOT(slotShuttleModified())); + ++i; + if (i < actions_map.size()) + button->setCurrentIndex(action_pos[actions_map[i]]); + } +#endif } -void KdenliveSettingsDialog::slotUpdateRmdRegionStatus() +KdenliveSettingsDialog::~KdenliveSettingsDialog() {} + +void KdenliveSettingsDialog::slotUpdateGrabRegionStatus() { - m_configCapture.region_group->setHidden(m_configCapture.kcfg_rmd_capture_type->currentIndex() != 1); + m_configCapture.region_group->setHidden(m_configCapture.kcfg_grab_capture_type->currentIndex() != 1); } void KdenliveSettingsDialog::slotEnableCaptureFolder() @@ -325,7 +415,7 @@ void KdenliveSettingsDialog::checkProfile() } if (!KdenliveSettings::default_profile().isEmpty()) { - for (int i = 0; i < m_configProject.kcfg_profiles_list->count(); i++) { + 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); @@ -349,7 +439,7 @@ void KdenliveSettingsDialog::initDevices() #endif if (!KdenliveSettings::audiodrivername().isEmpty()) - for (int i = 1; i < m_configSdl.kcfg_audio_driver->count(); i++) { + 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); @@ -370,9 +460,9 @@ void KdenliveSettingsDialog::initDevices() m_configSdl.kcfg_video_driver->addItem(i18n("Ascii art library"), "aalib"); #endif - // Fill the list of audio playback devices + // Fill the list of audio playback / recording devices m_configSdl.kcfg_audio_device->addItem(i18n("Default"), QString()); - m_configCapture.kcfg_rmd_alsa_device->addItem(i18n("Default"), QString()); + m_configCapture.kcfg_v4l_alsadevice->addItem(i18n("Default"), "default"); if (!KStandardDirs::findExe("aplay").isEmpty()) { m_readProcess.setOutputChannelMode(KProcess::OnlyStdoutChannel); m_readProcess.setProgram("aplay", QStringList() << "-l"); @@ -381,25 +471,28 @@ void KdenliveSettingsDialog::initDevices() } 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)) { + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream stream(&file); - QString line; + QString line = stream.readLine(); QString deviceId; - while (!stream.atEnd()) { - line = stream.readLine(); + while (!line.isNull()) { 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())); - m_configCapture.kcfg_v4l_alsadevice->addItem(line.section(':', 1, 1), "hw:" + QString::number(deviceId.section('-', 0, 0).toInt()) + ',' + QString::number(deviceId.section('-', 1, 1).toInt())); + m_configCapture.kcfg_v4l_alsadevice->addItem(line.section(':', 1, 1).simplified(), "hw:" + QString::number(deviceId.section('-', 0, 0).toInt()) + ',' + QString::number(deviceId.section('-', 1, 1).toInt())); } + line = stream.readLine(); } file.close(); - } + } else kDebug()<<" / / / /CANNOT READ PCM"; } + + // Add pulseaudio capture option + m_configCapture.kcfg_v4l_alsadevice->addItem(i18n("PulseAudio"), "pulse"); + if (!KdenliveSettings::audiodevicename().isEmpty()) { // Select correct alsa device int ix = m_configSdl.kcfg_audio_device->findData(KdenliveSettings::audiodevicename()); @@ -407,13 +500,6 @@ void KdenliveSettingsDialog::initDevices() 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); - } - if (!KdenliveSettings::v4l_alsadevicename().isEmpty()) { // Select correct alsa device int ix = m_configCapture.kcfg_v4l_alsadevice->findData(KdenliveSettings::v4l_alsadevicename()); @@ -433,12 +519,11 @@ void KdenliveSettingsDialog::slotReadAudioDevices() QStringList lines = result.split('\n'); foreach(const QString & data, lines) { //kDebug() << "// READING LINE: " << data; - if (!data.startsWith(" ") && data.count(':') > 1) { + if (!data.startsWith(' ') && data.count(':') > 1) { 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); - m_configCapture.kcfg_v4l_alsadevice->addItem(data.section(':', -1), "hw:" + card + ',' + device); + m_configSdl.kcfg_audio_device->addItem(data.section(':', -1).simplified(), "plughw:" + card + ',' + device); + m_configCapture.kcfg_v4l_alsadevice->addItem(data.section(':', -1).simplified(), "hw:" + card + ',' + device); } } } @@ -476,67 +561,66 @@ void KdenliveSettingsDialog::showPage(int page, int option) 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; + QPointer dlg = new KOpenWithDialog(KUrl::List(), i18n("Select default video player"), m_configEnv.kcfg_defaultplayerapp->text(), this); + if (dlg->exec() == QDialog::Accepted) { + service = dlg->service(); + m_configEnv.kcfg_defaultplayerapp->setText(service->exec()); + } - service = dlg.service(); - m_configEnv.kcfg_defaultplayerapp->setText(service->exec()); + delete dlg; } 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; + QPointer dlg = new KOpenWithDialog(KUrl::List(), i18n("Select default audio editor"), m_configEnv.kcfg_defaultaudioapp->text(), this); + if (dlg->exec() == QDialog::Accepted) { + service = dlg->service(); + m_configEnv.kcfg_defaultaudioapp->setText(service->exec()); + } - service = dlg.service(); - m_configEnv.kcfg_defaultaudioapp->setText(service->exec()); + delete dlg; } 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; - - service = dlg.service(); - m_configEnv.kcfg_defaultimageapp->setText(service->exec()); + QPointer dlg = new KOpenWithDialog(KUrl::List(), i18n("Select default image editor"), m_configEnv.kcfg_defaultimageapp->text(), this); + if (dlg->exec() == QDialog::Accepted) { + service = dlg->service(); + m_configEnv.kcfg_defaultimageapp->setText(service->exec()); + } + delete dlg; } -#ifdef USE_JOGSHUTTLE void KdenliveSettingsDialog::slotCheckShuttle(int state) { +#ifdef USE_JOGSHUTTLE m_configShuttle.config_group->setEnabled(state); - if (m_configShuttle.shuttledevicelist->count() == 0) { - // parse devices - QString baseName = "/dev/input/event"; - int fd; - for (int i = 0; i < 30; i++) { - QString filename = baseName + QString::number(i); - kDebug() << "/// CHECKING OFR: " << filename; - - char name[256] = "unknown"; - 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); - } - ::close(fd); - } - if (KdenliveSettings::shuttledevice().isEmpty()) QTimer::singleShot(1500, this, SLOT(slotUpdateShuttleDevice())); + m_configShuttle.shuttledevicelist->clear(); + + QStringList devNames = KdenliveSettings::shuttledevicenames(); + QStringList devPaths = KdenliveSettings::shuttledevicepaths(); + + if (devNames.count() != devPaths.count()) { + return; + } + for (int i = 0; i < devNames.count(); i++) { + m_configShuttle.shuttledevicelist->addItem( + devNames.at(i), devPaths.at(i)); } +#endif /* USE_JOGSHUTTLE */ } void KdenliveSettingsDialog::slotUpdateShuttleDevice(int ix) { +#ifdef USE_JOGSHUTTLE QString device = m_configShuttle.shuttledevicelist->itemData(ix).toString(); //KdenliveSettings::setShuttledevice(device); + setupJogshuttleBtns(device); m_configShuttle.kcfg_shuttledevice->setText(device); -} - #endif /* USE_JOGSHUTTLE */ +} void KdenliveSettingsDialog::updateWidgets() { @@ -545,12 +629,12 @@ void KdenliveSettingsDialog::updateWidgets() #ifdef USE_JOGSHUTTLE // revert jog shuttle device if (m_configShuttle.shuttledevicelist->count() > 0) { - for (int i = 0; i < m_configShuttle.shuttledevicelist->count(); i++) { - if (m_configShuttle.shuttledevicelist->itemData(i) == KdenliveSettings::shuttledevice()) { - m_configShuttle.shuttledevicelist->setCurrentIndex(i); - break; - } - } + for (int i = 0; i < m_configShuttle.shuttledevicelist->count(); ++i) { + if (m_configShuttle.shuttledevicelist->itemData(i) == KdenliveSettings::shuttledevice()) { + m_configShuttle.shuttledevicelist->setCurrentIndex(i); + break; + } + } } // Revert jog shuttle buttons @@ -559,19 +643,19 @@ void KdenliveSettingsDialog::updateWidgets() QStringList actions_map = JogShuttleConfig::actionMap(KdenliveSettings::shuttlebuttons()); QMap action_pos; foreach (const QString& action_id, actions_map) { - // This loop find out at what index is the string that would map to the action_id. - for (int i = 0; i < action_names.size(); i++) { - if (m_mappable_actions[action_names[i]] == action_id) { - action_pos[action_id] = i; - break; - } - } + // This loop find out at what index is the string that would map to the action_id. + for (int i = 0; i < action_names.size(); ++i) { + if (m_mappable_actions[action_names[i]] == action_id) { + action_pos[action_id] = i; + break; + } + } } int i = 0; foreach (KComboBox* button, m_shuttle_buttons) { - ++i; - if (i < actions_map.size()) - button->setCurrentIndex(action_pos[actions_map[i]]); + ++i; + if (i < actions_map.size()) + button->setCurrentIndex(action_pos[actions_map[i]]); } #endif /* USE_JOGSHUTTLE */ } @@ -587,8 +671,8 @@ void KdenliveSettingsDialog::updateSettings() bool updateCapturePath = false; /*if (m_configShuttle.shuttledevicelist->count() > 0) { - QString device = m_configShuttle.shuttledevicelist->itemData(m_configShuttle.shuttledevicelist->currentIndex()).toString(); - if (device != KdenliveSettings::shuttledevice()) KdenliveSettings::setShuttledevice(device); + QString device = m_configShuttle.shuttledevicelist->itemData(m_configShuttle.shuttledevicelist->currentIndex()).toString(); + if (device != KdenliveSettings::shuttledevice()) KdenliveSettings::setShuttledevice(device); }*/ if (m_configEnv.kcfg_capturetoprojectfolder->isChecked() != KdenliveSettings::capturetoprojectfolder()) { @@ -617,42 +701,40 @@ void KdenliveSettingsDialog::updateSettings() } // Check encoding profiles + // FFmpeg QString data = m_configCapture.kcfg_v4l_profile->itemData(m_configCapture.kcfg_v4l_profile->currentIndex()).toString(); - if (!data.isEmpty() && (data.section(";", 0, 0) != KdenliveSettings::v4l_parameters() || data.section(";", 1, 1) != KdenliveSettings::v4l_extension())) { - KdenliveSettings::setV4l_parameters(data.section(";", 0, 0)); - KdenliveSettings::setV4l_extension(data.section(";", 1, 1)); + if (!data.isEmpty() && (data.section(';', 0, 0) != KdenliveSettings::v4l_parameters() || data.section(';', 1, 1) != KdenliveSettings::v4l_extension())) { + KdenliveSettings::setV4l_parameters(data.section(';', 0, 0)); + KdenliveSettings::setV4l_extension(data.section(';', 1, 1)); } + // screengrab + data = m_configCapture.kcfg_grab_profile->itemData(m_configCapture.kcfg_grab_profile->currentIndex()).toString(); + if (!data.isEmpty() && (data.section(';', 0, 0) != KdenliveSettings::grab_parameters() || data.section(';', 1, 1) != KdenliveSettings::grab_extension())) { + KdenliveSettings::setGrab_parameters(data.section(';', 0, 0)); + KdenliveSettings::setGrab_extension(data.section(';', 1, 1)); + } + + // decklink data = m_configCapture.kcfg_decklink_profile->itemData(m_configCapture.kcfg_decklink_profile->currentIndex()).toString(); - if (!data.isEmpty() && (data.section(";", 0, 0) != KdenliveSettings::decklink_parameters() || data.section(";", 1, 1) != KdenliveSettings::decklink_extension())) { - KdenliveSettings::setDecklink_parameters(data.section(";", 0, 0)); - KdenliveSettings::setDecklink_extension(data.section(";", 1, 1)); + if (!data.isEmpty() && (data.section(';', 0, 0) != KdenliveSettings::decklink_parameters() || data.section(';', 1, 1) != KdenliveSettings::decklink_extension())) { + KdenliveSettings::setDecklink_parameters(data.section(';', 0, 0)); + KdenliveSettings::setDecklink_extension(data.section(';', 1, 1)); } + // proxies data = m_configProject.kcfg_proxy_profile->itemData(m_configProject.kcfg_proxy_profile->currentIndex()).toString(); - if (!data.isEmpty() && (data.section(";", 0, 0) != KdenliveSettings::proxyparams() || data.section(";", 1, 1) != KdenliveSettings::proxyextension())) { - KdenliveSettings::setProxyparams(data.section(";", 0, 0)); - KdenliveSettings::setProxyextension(data.section(";", 1, 1)); + if (!data.isEmpty() && (data.section(';', 0, 0) != KdenliveSettings::proxyparams() || data.section(';', 1, 1) != KdenliveSettings::proxyextension())) { + KdenliveSettings::setProxyparams(data.section(';', 0, 0)); + KdenliveSettings::setProxyextension(data.section(';', 1, 1)); } 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_v4l_alsadevice->itemData(m_configCapture.kcfg_v4l_alsadevice->currentIndex()).toString(); + QString value = m_configCapture.kcfg_v4l_alsadevice->itemData(m_configCapture.kcfg_v4l_alsadevice->currentIndex()).toString(); if (value != KdenliveSettings::v4l_alsadevicename()) { KdenliveSettings::setV4l_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); - } - if (m_configSdl.kcfg_external_display->isChecked() != KdenliveSettings::external_display()) { KdenliveSettings::setExternal_display(m_configSdl.kcfg_external_display->isChecked()); resetProfile = true; @@ -709,7 +791,7 @@ void KdenliveSettingsDialog::updateSettings() QString maps = JogShuttleConfig::actionMap(actions); //fprintf(stderr, "Shuttle config: %s\n", JogShuttleConfig::actionMap(actions).toAscii().constData()); if (KdenliveSettings::shuttlebuttons() != maps) - KdenliveSettings::setShuttlebuttons(maps); + KdenliveSettings::setShuttlebuttons(maps); #endif KConfigDialog::settingsChangedSlot(); @@ -741,52 +823,117 @@ void KdenliveSettingsDialog::slotCheckAlsaDriver() void KdenliveSettingsDialog::loadTranscodeProfiles() { - KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc"); + KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc", KConfig::CascadeConfig); KConfigGroup transConfig(config, "Transcoding"); // read the entries m_configTranscode.profiles_list->blockSignals(true); + m_configTranscode.profiles_list->clear(); 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); + QListWidgetItem *item = new QListWidgetItem(i.key()); + QString data = i.value(); + if (data.contains(';')) item->setToolTip(data.section(';', 1, 1)); + item->setData(Qt::UserRole, data); + m_configTranscode.profiles_list->addItem(item); + //item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable); } m_configTranscode.profiles_list->blockSignals(false); + m_configTranscode.profiles_list->setCurrentRow(0); } void KdenliveSettingsDialog::saveTranscodeProfiles() { - KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc"); + KSharedConfigPtr config = KSharedConfig::openConfig("kdenlivetranscodingrc", KConfig::CascadeConfig); //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)); + int max = m_configTranscode.profiles_list->count(); + for (int i = 0; i < max; ++i) { + QListWidgetItem *item = m_configTranscode.profiles_list->item(i); + transConfig.writeEntry(item->text(), item->data(Qt::UserRole).toString()); } 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); + if (!m_configTranscode.profiles_list->findItems(m_configTranscode.profile_name->text(), Qt::MatchExactly).isEmpty()) { + KMessageBox::sorry(this, i18n("A profile with that name already exists")); + return; + } + QListWidgetItem *item = new QListWidgetItem(m_configTranscode.profile_name->text()); + QString data = m_configTranscode.profile_parameters->toPlainText(); + data.append(" %1." + m_configTranscode.profile_extension->text()); + data.append(';'); + if (!m_configTranscode.profile_description->text().isEmpty()) + data.append(m_configTranscode.profile_description->text()); + if (m_configTranscode.profile_audioonly->isChecked()) data.append(";audio"); + item->setData(Qt::UserRole, data); + m_configTranscode.profiles_list->addItem(item); m_configTranscode.profiles_list->setCurrentItem(item); - m_configTranscode.profiles_list->editItem(item); + slotDialogModified(); +} + +void KdenliveSettingsDialog::slotUpdateTranscodingProfile() +{ + QListWidgetItem *item = m_configTranscode.profiles_list->currentItem(); + if (!item) return; + m_configTranscode.button_update->setEnabled(false); + item->setText(m_configTranscode.profile_name->text()); + QString data = m_configTranscode.profile_parameters->toPlainText(); + data.append(" %1." + m_configTranscode.profile_extension->text()); + data.append(';'); + if (!m_configTranscode.profile_description->text().isEmpty()) + data.append(m_configTranscode.profile_description->text()); + if (m_configTranscode.profile_audioonly->isChecked()) data.append(";audio"); + item->setData(Qt::UserRole, data); slotDialogModified(); } void KdenliveSettingsDialog::slotDeleteTranscode() { - QTreeWidgetItem *item = m_configTranscode.profiles_list->currentItem(); + QListWidgetItem *item = m_configTranscode.profiles_list->currentItem(); if (item == NULL) return; delete item; slotDialogModified(); } +void KdenliveSettingsDialog::slotEnableTranscodeUpdate() +{ + if (!m_configTranscode.profile_box->isEnabled()) return; + bool allow = true; + if (m_configTranscode.profile_name->text().isEmpty() || m_configTranscode.profile_extension->text().isEmpty()) allow = false; + m_configTranscode.button_update->setEnabled(allow); +} + +void KdenliveSettingsDialog::slotSetTranscodeProfile() +{ + m_configTranscode.profile_box->setEnabled(false); + m_configTranscode.button_update->setEnabled(false); + m_configTranscode.profile_name->clear(); + m_configTranscode.profile_description->clear(); + m_configTranscode.profile_extension->clear(); + m_configTranscode.profile_parameters->clear(); + m_configTranscode.profile_audioonly->setChecked(false); + QListWidgetItem *item = m_configTranscode.profiles_list->currentItem(); + if (!item) { + return; + } + m_configTranscode.profile_name->setText(item->text()); + QString data = item->data(Qt::UserRole).toString(); + if (data.contains(';')) { + m_configTranscode.profile_description->setText(data.section(';', 1, 1)); + if (data.section(';', 2, 2) == "audio") m_configTranscode.profile_audioonly->setChecked(true); + data = data.section(';', 0, 0).simplified(); + } + m_configTranscode.profile_extension->setText(data.section('.', -1)); + m_configTranscode.profile_parameters->setPlainText(data.section(' ', 0, -2)); + m_configTranscode.profile_box->setEnabled(true); +} + void KdenliveSettingsDialog::slotShuttleModified() { #ifdef USE_JOGSHUTTLE @@ -828,19 +975,19 @@ void KdenliveSettingsDialog::slotUpdatev4lDevice() m_configCapture.kcfg_v4l_format->addItem(i18n("Current settings")); } - QStringList pixelformats = info.split(">", QString::SkipEmptyParts); + QStringList pixelformats = info.split('>', QString::SkipEmptyParts); QString itemSize; QString pixelFormat; QStringList itemRates; - for (int i = 0; i < pixelformats.count(); i++) { + for (int i = 0; i < pixelformats.count(); ++i) { QString format = pixelformats.at(i).section(':', 0, 0); - QStringList sizes = pixelformats.at(i).split(":", QString::SkipEmptyParts); + QStringList sizes = pixelformats.at(i).split(':', QString::SkipEmptyParts); pixelFormat = sizes.takeFirst(); for (int j = 0; j < sizes.count(); j++) { - itemSize = sizes.at(j).section("=", 0, 0); - itemRates = sizes.at(j).section("=", 1, 1).split(",", QString::SkipEmptyParts); + itemSize = sizes.at(j).section('=', 0, 0); + itemRates = sizes.at(j).section('=', 1, 1).split(',', QString::SkipEmptyParts); for (int k = 0; k < itemRates.count(); k++) { - m_configCapture.kcfg_v4l_format->addItem("[" + format + "] " + itemSize + " (" + itemRates.at(k) + ")", QStringList() << format << itemSize.section('x', 0, 0) << itemSize.section('x', 1, 1) << itemRates.at(k).section('/', 0, 0) << itemRates.at(k).section('/', 1, 1)); + m_configCapture.kcfg_v4l_format->addItem('[' + format + "] " + itemSize + " (" + itemRates.at(k) + ')', QStringList() << format << itemSize.section('x', 0, 0) << itemSize.section('x', 1, 1) << itemRates.at(k).section('/', 0, 0) << itemRates.at(k).section('/', 1, 1)); } } } @@ -916,10 +1063,9 @@ void KdenliveSettingsDialog::slotManageEncodingProfile() { int type = 0; if (currentPage() == m_page4) { - if (m_configCapture.tabWidget->currentIndex() == 1) type = 1; - else if (m_configCapture.tabWidget->currentIndex() == 3) type = 2; + type = m_configCapture.tabWidget->currentIndex(); } - EncodingProfilesDialog *d = new EncodingProfilesDialog(type); + QPointer d = new EncodingProfilesDialog(type); d->exec(); delete d; loadEncodingProfiles(); @@ -927,7 +1073,7 @@ void KdenliveSettingsDialog::slotManageEncodingProfile() void KdenliveSettingsDialog::loadEncodingProfiles() { - KConfig conf("encodingprofiles.rc", KConfig::FullConfig, "appdata"); + KConfig conf("encodingprofiles.rc", KConfig::CascadeConfig, "appdata"); // Load v4l profiles m_configCapture.kcfg_v4l_profile->blockSignals(true); @@ -942,17 +1088,31 @@ void KdenliveSettingsDialog::loadEncodingProfiles() } m_configCapture.kcfg_v4l_profile->blockSignals(false); if (!currentItem.isEmpty()) m_configCapture.kcfg_v4l_profile->setCurrentIndex(m_configCapture.kcfg_v4l_profile->findText(currentItem)); + + // Load Screen Grab profiles + m_configCapture.kcfg_grab_profile->blockSignals(true); + currentItem = m_configCapture.kcfg_grab_profile->currentText(); + m_configCapture.kcfg_grab_profile->clear(); + KConfigGroup group2(&conf, "screengrab"); + values = group2.entryMap(); + QMapIterator j(values); + while (j.hasNext()) { + j.next(); + if (!j.key().isEmpty()) m_configCapture.kcfg_grab_profile->addItem(j.key(), j.value()); + } + m_configCapture.kcfg_grab_profile->blockSignals(false); + if (!currentItem.isEmpty()) m_configCapture.kcfg_grab_profile->setCurrentIndex(m_configCapture.kcfg_grab_profile->findText(currentItem)); // Load Decklink profiles m_configCapture.kcfg_decklink_profile->blockSignals(true); currentItem = m_configCapture.kcfg_decklink_profile->currentText(); m_configCapture.kcfg_decklink_profile->clear(); - KConfigGroup group2(&conf, "decklink"); - values = group2.entryMap(); - QMapIterator j(values); - while (j.hasNext()) { - j.next(); - if (!j.key().isEmpty()) m_configCapture.kcfg_decklink_profile->addItem(j.key(), j.value()); + KConfigGroup group3(&conf, "decklink"); + values = group3.entryMap(); + QMapIterator k(values); + while (k.hasNext()) { + k.next(); + if (!k.key().isEmpty()) m_configCapture.kcfg_decklink_profile->addItem(k.key(), k.value()); } m_configCapture.kcfg_decklink_profile->blockSignals(false); if (!currentItem.isEmpty()) m_configCapture.kcfg_decklink_profile->setCurrentIndex(m_configCapture.kcfg_decklink_profile->findText(currentItem)); @@ -961,12 +1121,12 @@ void KdenliveSettingsDialog::loadEncodingProfiles() m_configProject.kcfg_proxy_profile->blockSignals(true); currentItem = m_configProject.kcfg_proxy_profile->currentText(); m_configProject.kcfg_proxy_profile->clear(); - KConfigGroup group3(&conf, "proxy"); - values = group3.entryMap(); - QMapIterator k(values); - while (k.hasNext()) { - k.next(); - if (!k.key().isEmpty()) m_configProject.kcfg_proxy_profile->addItem(k.key(), k.value()); + KConfigGroup group4(&conf, "proxy"); + values = group4.entryMap(); + QMapIterator l(values); + while (l.hasNext()) { + l.next(); + if (!l.key().isEmpty()) m_configProject.kcfg_proxy_profile->addItem(l.key(), l.value()); } if (!currentItem.isEmpty()) m_configProject.kcfg_proxy_profile->setCurrentIndex(m_configProject.kcfg_proxy_profile->findText(currentItem)); m_configProject.kcfg_proxy_profile->blockSignals(false); @@ -980,7 +1140,7 @@ void KdenliveSettingsDialog::slotUpdateDecklinkProfile(int ix) else ix = m_configCapture.kcfg_decklink_profile->currentIndex(); QString data = m_configCapture.kcfg_decklink_profile->itemData(ix).toString(); if (data.isEmpty()) return; - m_configCapture.decklink_parameters->setPlainText(data.section(";", 0, 0)); + m_configCapture.decklink_parameters->setPlainText(data.section(';', 0, 0)); // } @@ -990,7 +1150,17 @@ void KdenliveSettingsDialog::slotUpdateV4lProfile(int ix) else ix = m_configCapture.kcfg_v4l_profile->currentIndex(); QString data = m_configCapture.kcfg_v4l_profile->itemData(ix).toString(); if (data.isEmpty()) return; - m_configCapture.v4l_parameters->setPlainText(data.section(";", 0, 0)); + m_configCapture.v4l_parameters->setPlainText(data.section(';', 0, 0)); + // +} + +void KdenliveSettingsDialog::slotUpdateGrabProfile(int ix) +{ + if (ix == -1) ix = KdenliveSettings::grab_profile(); + else ix = m_configCapture.kcfg_grab_profile->currentIndex(); + QString data = m_configCapture.kcfg_grab_profile->itemData(ix).toString(); + if (data.isEmpty()) return; + m_configCapture.grab_parameters->setPlainText(data.section(';', 0, 0)); // } @@ -1000,14 +1170,14 @@ void KdenliveSettingsDialog::slotUpdateProxyProfile(int ix) else ix = m_configProject.kcfg_proxy_profile->currentIndex(); QString data = m_configProject.kcfg_proxy_profile->itemData(ix).toString(); if (data.isEmpty()) return; - m_configProject.proxyparams->setPlainText(data.section(";", 0, 0)); + m_configProject.proxyparams->setPlainText(data.section(';', 0, 0)); // } void KdenliveSettingsDialog::slotEditVideo4LinuxProfile() { QString vl4ProfilePath = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); - ProfilesDialog *w = new ProfilesDialog(vl4ProfilePath); + QPointer w = new ProfilesDialog(vl4ProfilePath); if (w->exec() == QDialog::Accepted) { // save and update profile loadCurrentV4lProfileInfo(); @@ -1015,6 +1185,55 @@ void KdenliveSettingsDialog::slotEditVideo4LinuxProfile() delete w; } +void KdenliveSettingsDialog::slotReloadBlackMagic() +{ + Render::getBlackMagicDeviceList(m_configCapture.kcfg_decklink_capturedevice, true); + if (!Render::getBlackMagicOutputDeviceList(m_configSdl.kcfg_blackmagic_output_device), true) { + // No blackmagic card found + m_configSdl.kcfg_external_display->setEnabled(false); + } + m_configSdl.kcfg_external_display->setEnabled(KdenliveSettings::decklink_device_found()); +} + +void KdenliveSettingsDialog::slotReloadShuttleDevices() +{ +#ifdef USE_JOGSHUTTLE + QString devDirStr = "/dev/input/by-id"; + QDir devDir(devDirStr); + if (!devDir.exists()) { + devDirStr = "/dev/input"; + } + + DeviceMap devMap = JogShuttle::enumerateDevices(devDirStr); + if (!devMap.isEmpty()) { + m_configShuttle.shuttledevicelist->clear(); + } + + QStringList devNamesList; + QStringList devPathList; + DeviceMapIter iter = devMap.begin(); + if (iter == devMap.end()) { + KdenliveSettings::shuttledevicenames().clear(); + KdenliveSettings::shuttledevicepaths().clear(); + m_configShuttle.shuttledevicelist->clear(); + } + while (iter != devMap.end()) { + kDebug() << iter.key() << ": " << iter.value(); + m_configShuttle.shuttledevicelist->addItem(iter.key(), iter.value()); + devNamesList << iter.key(); + devPathList << iter.value(); + ++iter; + } + + KdenliveSettings::setShuttledevicenames(devNamesList); + KdenliveSettings::setShuttledevicepaths(devPathList); + QTimer::singleShot(200, this, SLOT(slotUpdateShuttleDevice())); + + kDebug() << "Devices reloaded"; + +#endif //USE_JOGSHUTTLE +} + #include "kdenlivesettingsdialog.moc"