X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=36a6d645d2404fa4fa9602b43c20a3f74d2b997d;hb=8feb092507a7bff209dae60353bcd000bd82c969;hp=e752b39a45c3878fb5ad428f1eb112dbcccbcc1f;hpb=f96f3cb2a66004be5bf8883460eba20ac3bcca05;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index e752b39a..36a6d645 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -34,19 +34,24 @@ #include #include #include +#include #include #include #include #include #ifndef NO_JOGSHUTTLE +#include "jogaction.h" +#include "jogshuttleconfig.h" #include #endif /* NO_JOGSHUTTLE */ -KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : +KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& mappable_actions, QWidget * parent) : KConfigDialog(parent, "settings", KdenliveSettings::self()), - m_modified(false) + m_modified(false), + m_shuttleModified(false), + m_mappable_actions(mappable_actions) { QWidget *p1 = new QWidget; @@ -59,6 +64,11 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : QWidget *p8 = new QWidget; m_configProject.setupUi(p8); m_page8 = addPage(p8, i18n("Project Defaults"), "document-new"); + connect(m_configProject.kcfg_generateproxy, SIGNAL(toggled(bool)), m_configProject.kcfg_proxyminsize, SLOT(setEnabled(bool))); + m_configProject.kcfg_proxyminsize->setEnabled(KdenliveSettings::generateproxy()); + connect(m_configProject.kcfg_generateimageproxy, SIGNAL(toggled(bool)), m_configProject.kcfg_proxyimageminsize, SLOT(setEnabled(bool))); + m_configProject.kcfg_proxyimageminsize->setEnabled(KdenliveSettings::generateimageproxy()); + m_configProject.kcfg_proxyparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 5); QWidget *p3 = new QWidget; m_configTimeline.setupUi(p3); @@ -69,6 +79,7 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : m_configEnv.mltpathurl->setMode(KFile::Directory); m_configEnv.mltpathurl->lineEdit()->setObjectName("kcfg_mltpath"); m_configEnv.rendererpathurl->lineEdit()->setObjectName("kcfg_rendererpath"); + m_configEnv.kcfg_mltthreads->setMaximum(QThread::idealThreadCount()); m_configEnv.tmppathurl->setMode(KFile::Directory); m_configEnv.tmppathurl->lineEdit()->setObjectName("kcfg_currenttmpfolder"); m_configEnv.projecturl->setMode(KFile::Directory); @@ -82,15 +93,17 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : QWidget *p4 = new QWidget; m_configCapture.setupUi(p4); -#ifndef Q_WS_MAC +#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); - 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); + 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())); @@ -106,22 +119,55 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : QWidget *p5 = new QWidget; m_configShuttle.setupUi(p5); -#ifndef NO_JOGSHUTTLE +#ifdef NO_JOGSHUTTLE + m_configShuttle.kcfg_enableshuttle->hide(); + m_configShuttle.kcfg_enableshuttle->setDisabled(true); +#else 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()); m_configShuttle.shuttledisabled->hide(); -#else - m_configShuttle.kcfg_enableshuttle->hide(); - m_configShuttle.kcfg_enableshuttle->setDisabled(true); + + // Store the button pointers into an array for easier handling them in the other functions. + 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); + + // 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]]); + } #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); #if not defined(Q_WS_MAC) && not defined(USE_OPEN_GL) m_configSdl.kcfg_openglmonitors->setHidden(true); #endif @@ -134,17 +180,7 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(QWidget * parent) : 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"); - actions << i18n("Play / Pause"); - actions << i18n("Cut"); - m_configShuttle.kcfg_shuttle1->addItems(actions); - m_configShuttle.kcfg_shuttle2->addItems(actions); - m_configShuttle.kcfg_shuttle3->addItems(actions); - m_configShuttle.kcfg_shuttle4->addItems(actions); - m_configShuttle.kcfg_shuttle5->addItems(actions); - + 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())); @@ -187,6 +223,10 @@ 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())); + 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()) { QProcess *versionCheck = new QProcess; @@ -445,6 +485,7 @@ void KdenliveSettingsDialog::slotUpdateShuttleDevice(int ix) //KdenliveSettings::setShuttledevice(device); m_configShuttle.kcfg_shuttledevice->setText(device); } + #endif /* NO_JOGSHUTTLE */ void KdenliveSettingsDialog::rebuildVideo4Commands() @@ -455,17 +496,58 @@ void KdenliveSettingsDialog::rebuildVideo4Commands() 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::updateWidgets() +{ + // Revert widgets to last saved state (for example when user pressed "Cancel") + // kDebug() << "// // // KCONFIG Revert called"; +#ifndef NO_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; + } + } + } + // Revert jog shuttle buttons + QList action_names = m_mappable_actions.keys(); + qSort(action_names); + 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; + } + } + } + int i = 0; + foreach (KComboBox* button, m_shuttle_buttons) { + ++i; + if (i < actions_map.size()) + button->setCurrentIndex(action_pos[actions_map[i]]); + } +#endif +} void KdenliveSettingsDialog::updateSettings() { - //kDebug() << "// // // KCONFIG UPDATE called"; - + // Save changes to settings (for example when user pressed "Apply" or "Ok") + // 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_configShuttle.shuttledevicelist->count() > 0) { + 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()) { KdenliveSettings::setCapturetoprojectfolder(m_configEnv.kcfg_capturetoprojectfolder->isChecked()); @@ -501,6 +583,11 @@ void KdenliveSettingsDialog::updateSettings() 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; + } + value = m_configSdl.kcfg_audio_driver->itemData(m_configSdl.kcfg_audio_driver->currentIndex()).toString(); if (value != KdenliveSettings::audiodrivername()) { KdenliveSettings::setAudiodrivername(value); @@ -534,11 +621,17 @@ void KdenliveSettingsDialog::updateSettings() 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_configProject.kcfg_enableproxy->isChecked() != KdenliveSettings::enableproxy()) { + KdenliveSettings::setEnableproxy(m_configProject.kcfg_enableproxy->isChecked()); + } + + if (m_configProject.kcfg_generateproxy->isChecked() != KdenliveSettings::generateproxy()) { + KdenliveSettings::setGenerateproxy(m_configProject.kcfg_generateproxy->isChecked()); + } + + if (m_configProject.kcfg_proxyminsize->value() != KdenliveSettings::proxyminsize()) { + KdenliveSettings::setProxyminsize(m_configProject.kcfg_proxyminsize->value()); } if (m_modified) { @@ -547,13 +640,26 @@ void KdenliveSettingsDialog::updateSettings() saveTranscodeProfiles(); } +#ifndef NO_JOGSHUTTLE + m_shuttleModified = false; + + QStringList actions; + actions << "monitor_pause"; // the Job rest position action. + foreach (KComboBox* button, m_shuttle_buttons) { + actions << m_mappable_actions[button->currentText()]; + } + QString maps = JogShuttleConfig::actionMap(actions); + //fprintf(stderr, "Shuttle config: %s\n", JogShuttleConfig::actionMap(actions).toAscii().constData()); + if (KdenliveSettings::shuttlebuttons() != maps) + KdenliveSettings::setShuttlebuttons(maps); +#endif + #if KDE_IS_VERSION(4,3,0) KConfigDialog::settingsChangedSlot(); #endif //KConfigDialog::updateSettings(); if (resetProfile) emit doResetProfile(); - if (updatePreview) emit updatePreviewSettings(); } void KdenliveSettingsDialog::slotUpdateDisplay() @@ -626,6 +732,22 @@ void KdenliveSettingsDialog::slotDeleteTranscode() slotDialogModified(); } +void KdenliveSettingsDialog::slotShuttleModified() +{ +#ifndef NO_JOGSHUTTLE + QStringList actions; + actions << "monitor_pause"; // the Job rest position action. + foreach (KComboBox* button, m_shuttle_buttons) { + actions << m_mappable_actions[button->currentText()]; + } + QString maps = JogShuttleConfig::actionMap(actions); + m_shuttleModified = KdenliveSettings::shuttlebuttons() != maps; +#endif +#if KDE_IS_VERSION(4,3,0) + KConfigDialog::updateButtons(); +#endif +} + void KdenliveSettingsDialog::slotDialogModified() { m_modified = true; @@ -637,7 +759,7 @@ void KdenliveSettingsDialog::slotDialogModified() //virtual bool KdenliveSettingsDialog::hasChanged() { - if (m_modified) return true; + if (m_modified || m_shuttleModified) return true; return KConfigDialog::hasChanged(); } @@ -647,6 +769,7 @@ void KdenliveSettingsDialog::slotUpdatev4lDevice() 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(); }