X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=64f9aaeb2668bccaf2d258f44e622912a09f745b;hb=d9b09bd1f1fbd5c1dbbbce217ae89ceb57f090c5;hp=f8eb77f24445a6353b5353410dca099d8b2ebec8;hpb=45adaf0e93ffa28bfeb3425a099ca95e70fd0d79;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index f8eb77f2..64f9aaeb 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -44,10 +44,11 @@ #include #include #include + #ifdef USE_JOGSHUTTLE -#include "jogaction.h" -#include "jogshuttleconfig.h" -#include + #include "jogaction.h" + #include "jogshuttleconfig.h" + #include #endif @@ -132,14 +133,20 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map 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); @@ -155,34 +162,8 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map 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.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]]); - } #else /* ! USE_JOGSHUTTLE */ m_configShuttle.kcfg_enableshuttle->hide(); m_configShuttle.kcfg_enableshuttle->setDisabled(true); @@ -194,10 +175,6 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map m_configSdl.reload_blackmagic->setIcon(KIcon("view-refresh")); connect(m_configSdl.reload_blackmagic, SIGNAL(clicked(bool)), this, SLOT(slotReloadBlackMagic())); -#ifndef USE_OPENGL - m_configSdl.kcfg_openglmonitors->setHidden(true); -#endif - m_page6 = addPage(p6, i18n("Playback"), "media-playback-start"); QWidget *p7 = new QWidget; @@ -317,6 +294,104 @@ KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap& map } else m_configCapture.dvgrab_info->setText(i18n("dvgrab utility not found, please install it for firewire capture")); } +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(); + } + +#ifdef USE_JOGSHUTTLE + int keysCount = JogShuttle::keysCount(device); + + 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 +} + KdenliveSettingsDialog::~KdenliveSettingsDialog() {} void KdenliveSettingsDialog::slotUpdateGrabRegionStatus() @@ -522,22 +597,17 @@ 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 device: " << 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 */ } @@ -547,6 +617,7 @@ 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 */ } @@ -1123,6 +1194,46 @@ void KdenliveSettingsDialog::slotReloadBlackMagic() } 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"