From 2ca42e6e5c050248a2994f4acd6ce111c1a16f34 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 11 Jun 2011 16:29:56 +0000 Subject: [PATCH] Allow to manually edit video4linux capture profile svn path=/trunk/kdenlive/; revision=5701 --- src/kdenlivesettingsdialog.cpp | 16 ++++++++++- src/kdenlivesettingsdialog.h | 1 + src/profilesdialog.cpp | 49 +++++++++++++++++++++++++++++++-- src/profilesdialog.h | 6 +++- src/widgets/configcapture_ui.ui | 4 +-- 5 files changed, 70 insertions(+), 6 deletions(-) diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 950db589..35a00e95 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -111,6 +111,7 @@ 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(); #endif @@ -828,7 +829,9 @@ void KdenliveSettingsDialog::slotUpdatev4lDevice() m_configCapture.kcfg_v4l_format->clear(); QString vl4ProfilePath = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); - if (QFile::exists(vl4ProfilePath)) m_configCapture.kcfg_v4l_format->addItem(i18n("Current settings")); + if (QFile::exists(vl4ProfilePath)) { + m_configCapture.kcfg_v4l_format->addItem(i18n("Current settings")); + } QStringList pixelformats = info.split(">", QString::SkipEmptyParts); QString itemSize; @@ -1013,6 +1016,17 @@ void KdenliveSettingsDialog::slotUpdateProxyProfile(int ix) // } +void KdenliveSettingsDialog::slotEditVideo4LinuxProfile() +{ + QString vl4ProfilePath = KStandardDirs::locateLocal("appdata", "profiles/video4linux"); + ProfilesDialog *w = new ProfilesDialog(vl4ProfilePath); + if (w->exec() == QDialog::Accepted) { + // save and update profile + loadCurrentV4lProfileInfo(); + } + delete w; +} + #include "kdenlivesettingsdialog.moc" diff --git a/src/kdenlivesettingsdialog.h b/src/kdenlivesettingsdialog.h index 7692fc07..6334af20 100644 --- a/src/kdenlivesettingsdialog.h +++ b/src/kdenlivesettingsdialog.h @@ -75,6 +75,7 @@ private slots: void slotUpdateDecklinkProfile(int ix = 0); void slotUpdateProxyProfile(int ix = 0); void slotUpdateV4lProfile(int ix = 0); + void slotEditVideo4LinuxProfile(); private: KPageWidgetItem *m_page1; diff --git a/src/profilesdialog.cpp b/src/profilesdialog.cpp index c9aa53c2..c8c4a0dd 100644 --- a/src/profilesdialog.cpp +++ b/src/profilesdialog.cpp @@ -71,6 +71,47 @@ ProfilesDialog::ProfilesDialog(QWidget * parent) : connect(m_view.size_w, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); } + +ProfilesDialog::ProfilesDialog(QString profilePath, QWidget * parent) : + QDialog(parent), + m_profileIsModified(false), + m_isCustomProfile(true), + m_customProfilePath(profilePath) +{ + m_view.setupUi(this); + + // Fill colorspace list (see mlt_profile.h) + m_view.colorspace->addItem(getColorspaceDescription(601), 601); + m_view.colorspace->addItem(getColorspaceDescription(709), 709); + m_view.colorspace->addItem(getColorspaceDescription(240), 240); + m_view.colorspace->addItem(getColorspaceDescription(0), 0); + + QStringList profilesFilter; + profilesFilter << "*"; + + m_view.button_save->setIcon(KIcon("document-save")); + m_view.button_save->setToolTip(i18n("Save profile")); + m_view.button_create->setHidden(true); + m_view.profiles_list->setHidden(true); + m_view.button_delete->setHidden(true); + m_view.button_default->setHidden(true); + m_view.description->setEnabled(false); + + slotUpdateDisplay(profilePath); + connect(m_view.button_save, SIGNAL(clicked()), this, SLOT(slotSaveProfile())); + + connect(m_view.description, SIGNAL(textChanged(const QString &)), this, SLOT(slotProfileEdited())); + connect(m_view.frame_num, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.frame_den, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.aspect_num, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.aspect_den, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.display_num, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.display_den, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.progressive, SIGNAL(stateChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.size_h, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); + connect(m_view.size_w, SIGNAL(valueChanged(int)), this, SLOT(slotProfileEdited())); +} + void ProfilesDialog::slotProfileEdited() { m_profileIsModified = true; @@ -138,6 +179,10 @@ void ProfilesDialog::slotSetDefaultProfile() bool ProfilesDialog::slotSaveProfile() { + if (!m_customProfilePath.isEmpty()) { + saveProfile(m_customProfilePath); + return true; + } const QString profileDesc = m_view.description->text(); int ix = m_view.profiles_list->findText(profileDesc); if (ix != -1) { @@ -517,7 +562,7 @@ void ProfilesDialog::saveProfile(MltVideoProfile &profile, QString profilePath) } -void ProfilesDialog::slotUpdateDisplay() +void ProfilesDialog::slotUpdateDisplay(QString currentProfile) { if (askForSave() == false) { m_view.profiles_list->blockSignals(true); @@ -527,7 +572,7 @@ void ProfilesDialog::slotUpdateDisplay() } m_selectedProfileIndex = m_view.profiles_list->currentIndex(); - QString currentProfile = m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString(); + if (currentProfile.isEmpty()) currentProfile = m_view.profiles_list->itemData(m_view.profiles_list->currentIndex()).toString(); m_isCustomProfile = currentProfile.contains('/'); m_view.button_create->setEnabled(true); m_view.button_delete->setEnabled(m_isCustomProfile); diff --git a/src/profilesdialog.h b/src/profilesdialog.h index ada0736a..c83cb463 100644 --- a/src/profilesdialog.h +++ b/src/profilesdialog.h @@ -31,6 +31,8 @@ class ProfilesDialog : public QDialog public: ProfilesDialog(QWidget * parent = 0); + /** @brief Using this constructor, the dialog only allows editing one profile. */ + ProfilesDialog(QString profilePath, QWidget * parent = 0); void fillList(const QString selectedProfile = QString()); static QMap< QString, QString > getSettingsForProfile(const QString profileName); @@ -81,7 +83,7 @@ protected: virtual void closeEvent(QCloseEvent *event); private slots: - void slotUpdateDisplay(); + void slotUpdateDisplay(QString currentProfile = QString()); void slotCreateProfile(); bool slotSaveProfile(); void slotDeleteProfile(); @@ -94,6 +96,8 @@ private: int m_selectedProfileIndex; bool m_profileIsModified; bool m_isCustomProfile; + /** @brief If we are in single profile editing, should contain the path for this profile. */ + QString m_customProfilePath; void saveProfile(const QString path); bool askForSave(); }; diff --git a/src/widgets/configcapture_ui.ui b/src/widgets/configcapture_ui.ui index b8c838b6..371a78d1 100644 --- a/src/widgets/configcapture_ui.ui +++ b/src/widgets/configcapture_ui.ui @@ -7,7 +7,7 @@ 0 0 405 - 532 + 545 @@ -306,7 +306,7 @@ - + Edit -- 2.39.2