X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivesettingsdialog.cpp;h=b298e8c6ddaa1a597f7d8e104244df12a4bb3808;hb=fabec436114bfe0a226453fc2c5ad2eb85cb54a0;hp=42e5813338897ecd55a89a2c52e288507b8b06d3;hpb=937f547e26859d0ef9ddc0ac38d6986ab591b3fd;p=kdenlive diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 42e58133..b298e8c6 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -133,9 +133,12 @@ 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(); @@ -523,43 +526,17 @@ void KdenliveSettingsDialog::slotCheckShuttle(int state) { #ifdef USE_JOGSHUTTLE m_configShuttle.config_group->setEnabled(state); - if (m_configShuttle.shuttledevicelist->count() == 0) { - QString devDirStr = "/dev/input/by-id/"; - QDir devDir(devDirStr); - if (devDir.exists()) { - QStringList fileList = devDir.entryList(QDir::Files); - foreach (const QString &fileName, fileList) { - QString devFullPath(devDirStr + fileName); - QString fileLink = JogShuttle::enumerateDevice(devFullPath); - kDebug() << QString(" [%1] ").arg(fileName); - kDebug() << QString(" [%1] ").arg(fileLink); - char name[256] = "unknown"; - int fd = KDE_open((char*)fileLink.toUtf8().data(), O_RDONLY); - if (fd >= 0 && ioctl(fd, EVIOCGNAME(sizeof(name)), name) >= 0) { - m_configShuttle.shuttledevicelist->addItem(name, devFullPath); - } - ::close(fd); - } - } else { - // 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); - } - } + m_configShuttle.shuttledevicelist->clear(); - if (KdenliveSettings::shuttledevice().isEmpty()) { - QTimer::singleShot(1500, this, SLOT(slotUpdateShuttleDevice())); - } + 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 */ } @@ -1145,6 +1122,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 reloded"; + +#endif //USE_JOGSHUTTLE +} + #include "kdenlivesettingsdialog.moc"