X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=e997fa76fab527a423d20a99c4f663667a64f854;hb=0a381233be965974d175f34899ed5422e71e6d00;hp=e7a8f4321015ff65b1de52ed9eed3568ec4635ab;hpb=aae5aed612d1126a481464fd57471d69cde11d8e;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index e7a8f432..e997fa76 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -19,6 +19,8 @@ #include "kdenlivesettingsdialog.h" #include "profilesdialog.h" +#include "v4l/v4lcapture.h" +#include "blackmagic/devices.h" #include "kdenlivesettings.h" #include @@ -43,8 +45,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : - KConfigDialog(parent, "settings", KdenliveSettings::self()), - m_modified(false) + KConfigDialog(parent, "settings", KdenliveSettings::self()), + m_modified(false) { QWidget *p1 = new QWidget; @@ -54,9 +56,13 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : // 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); - m_page3 = addPage(p3, i18n("Display"), "video-display"); + m_configTimeline.setupUi(p3); + m_page3 = addPage(p3, i18n("Timeline"), "video-display"); QWidget *p2 = new QWidget; m_configEnv.setupUi(p2); @@ -69,10 +75,29 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : m_configEnv.projecturl->lineEdit()->setObjectName("kcfg_defaultprojectfolder"); m_configEnv.capturefolderurl->setMode(KFile::Directory); m_configEnv.capturefolderurl->lineEdit()->setObjectName("kcfg_capturefolder"); + 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); + +#if !defined(Q_WS_MAC) && !defined(Q_OS_FREEBSD) + V4lCaptureHandler v4l(NULL); + // Video 4 Linux device detection + for (int i = 0; i < 10; i++) { + QString path = "/dev/video" + QString::number(i); + if (QFile::exists(path)) { + QStringList deviceInfo = v4l.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); + } + } + } + connect(m_configCapture.kcfg_detectedv4ldevices, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdatev4lDevice())); +#endif + m_page4 = addPage(p4, i18n("Capture"), "media-record"); m_configCapture.tabWidget->setCurrentIndex(KdenliveSettings::defaultcapture()); #ifdef Q_WS_MAC @@ -97,8 +122,9 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : QWidget *p6 = new QWidget; m_configSdl.setupUi(p6); - // Disable drop B frames, see Kdenlive issue #1330 - m_configSdl.groupBox->setHidden(true); +#if not defined(Q_WS_MAC) && not defined(USE_OPEN_GL) + m_configSdl.kcfg_openglmonitors->setHidden(true); +#endif m_page6 = addPage(p6, i18n("Playback"), "media-playback-start"); @@ -142,7 +168,7 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : 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_configProject.kcfg_profiles_list, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDisplay())); connect(m_configCapture.kcfg_rmd_capture_type, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateRmdRegionStatus())); slotUpdateRmdRegionStatus(); @@ -158,6 +184,9 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : } + BMInterface::getBlackMagicDeviceList(m_configCapture.kcfg_hdmi_capturedevice, m_configCapture.kcfg_hdmi_capturemode); + connect(m_configCapture.kcfg_hdmi_capturedevice, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateHDMIModes())); + double dvgrabVersion = 0; if (!KdenliveSettings::dvgrab_path().isEmpty()) { QProcess *versionCheck = new QProcess; @@ -182,31 +211,45 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : 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())); + 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::slotUpdateHDMIModes() +{ + QStringList modes = m_configCapture.kcfg_hdmi_capturedevice->itemData(m_configCapture.kcfg_hdmi_capturedevice->currentIndex()).toStringList(); + m_configCapture.kcfg_hdmi_capturemode->clear(); + m_configCapture.kcfg_hdmi_capturemode->insertItems(0, modes); +} + 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_configMisc.kcfg_profiles_list->clear(); + m_configProject.kcfg_profiles_list->clear(); QMap profilesInfo = ProfilesDialog::getProfilesInfo(); QMapIterator i(profilesInfo); while (i.hasNext()) { i.next(); - m_configMisc.kcfg_profiles_list->addItem(i.key(), i.value()); + m_configProject.kcfg_profiles_list->addItem(i.key(), i.value()); } if (!KdenliveSettings::default_profile().isEmpty()) { - for (int i = 0; i < m_configMisc.kcfg_profiles_list->count(); i++) { - if (m_configMisc.kcfg_profiles_list->itemData(i).toString() == KdenliveSettings::default_profile()) { - m_configMisc.kcfg_profiles_list->setCurrentIndex(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); break; } @@ -299,7 +342,7 @@ void KdenliveSettingsDialog::slotReadAudioDevices() kDebug() << "// / / / / / READING APLAY: "; kDebug() << result; QStringList lines = result.split('\n'); - foreach(const QString &data, lines) { + foreach(const QString & data, lines) { kDebug() << "// READING LINE: " << data; if (data.simplified().startsWith("card")) { QString card = data.section(':', 0, 0).section(' ', -1); @@ -418,12 +461,17 @@ void KdenliveSettingsDialog::updateSettings() { //kDebug() << "// // // KCONFIG UPDATE called"; - m_defaultProfile = m_configMisc.kcfg_profiles_list->currentText(); + 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; @@ -487,12 +535,6 @@ void KdenliveSettingsDialog::updateSettings() 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; @@ -505,20 +547,21 @@ void KdenliveSettingsDialog::updateSettings() //KConfigDialog::updateSettings(); if (resetProfile) emit doResetProfile(); - if (updatePreview) emit updatePreviewSettings(); } void KdenliveSettingsDialog::slotUpdateDisplay() { - QString currentProfile = m_configMisc.kcfg_profiles_list->itemData(m_configMisc.kcfg_profiles_list->currentIndex()).toString(); + QString currentProfile = m_configProject.kcfg_profiles_list->itemData(m_configProject.kcfg_profiles_list->currentIndex()).toString(); QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(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_defaultProfile = m_configMisc.kcfg_profiles_list->itemText(m_configMisc.kcfg_profiles_list->currentIndex()); + 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; } @@ -591,6 +634,14 @@ bool KdenliveSettingsDialog::hasChanged() return KConfigDialog::hasChanged(); } +void KdenliveSettingsDialog::slotUpdatev4lDevice() +{ + QString device = m_configCapture.kcfg_detectedv4ldevices->itemData(m_configCapture.kcfg_detectedv4ldevices->currentIndex()).toString(); + if (!device.isEmpty()) m_configCapture.kcfg_video4vdevice->setText(device); + QString size = m_configCapture.kcfg_detectedv4ldevices->itemData(m_configCapture.kcfg_detectedv4ldevices->currentIndex(), Qt::UserRole + 1).toString(); + if (!size.isEmpty()) m_configCapture.kcfg_video4size->setText(size); + rebuildVideo4Commands(); +} #include "kdenlivesettingsdialog.moc"