| @@ -0,0 +1,760 @@ | |||
| From 626731e752b4694051b3d447cebb90116fd37186 Mon Sep 17 00:00:00 2001 | |||
| From: rncbc <rncbc@rncbc.org> | |||
| Date: Sat, 19 Dec 2020 16:25:19 +0000 | |||
| Subject: [PATCH] - Add Clear preset button to Setup dialog (refactored from | |||
| an original patch by kmatheussen #113) | |||
| - Use default values for most preset parameters: sample | |||
| rate, frames/period (aka. buffer-size), periods/buffer, | |||
| realtime priority, port maximum, client timeout, word | |||
| length, wait time, channel maximum (refactored from an | |||
| original patch by kmatheussen #112) | |||
| --- | |||
| ChangeLog | 12 ++ | |||
| src/images/clear1.png | Bin 0 -> 579 bytes | |||
| src/qjackctl.qrc | 1 + | |||
| src/qjackctlMainForm.cpp | 21 ++- | |||
| src/qjackctlSetup.cpp | 271 ++++++++++++++++++++++++-------------- | |||
| src/qjackctlSetup.h | 7 + | |||
| src/qjackctlSetupForm.cpp | 55 +++++++- | |||
| src/qjackctlSetupForm.h | 1 + | |||
| src/qjackctlSetupForm.ui | 57 ++++---- | |||
| 9 files changed, 274 insertions(+), 151 deletions(-) | |||
| create mode 100644 src/images/clear1.png | |||
| diff --git a/ChangeLog b/ChangeLog | |||
| index d79615ce..2cf233b2 100644 | |||
| --- a/ChangeLog | |||
| +++ b/ChangeLog | |||
| @@ -4,6 +4,18 @@ QjackCtl - JACK Audio Connection Kit Qt GUI Interface | |||
| ChangeLog | |||
| +GIT HEAD | |||
| + | |||
| +- Add Clear preset button to Setup dialog (refactored | |||
| + from an original patch by kmatheussen #113) | |||
| + | |||
| +- Use default values for most preset parameters: sample | |||
| + rate, frames/period (aka. buffer-size), periods/buffer, | |||
| + realtime priority, port maximum, client timeout, word | |||
| + length, wait time, channel maximum (refactored from an | |||
| + original patch by kmatheussen #112) | |||
| + | |||
| + | |||
| 0.9.0 2020-12-17 A Winter'20 Release. | |||
| - List only available backend drivers when JACK D-BUS | |||
| diff --git a/src/qjackctl.qrc b/src/qjackctl.qrc | |||
| index 55d8d1c7..21303a4e 100644 | |||
| --- a/src/qjackctl.qrc | |||
| +++ b/src/qjackctl.qrc | |||
| @@ -38,6 +38,7 @@ | |||
| <file>images/asocketi.png</file> | |||
| <file>images/asocketo.png</file> | |||
| <file>images/backward1.png</file> | |||
| + <file>images/clear1.png</file> | |||
| <file>images/client1.png</file> | |||
| <file>images/connect1.png</file> | |||
| <file>images/connections1.png</file> | |||
| diff --git a/src/qjackctlMainForm.cpp b/src/qjackctlMainForm.cpp | |||
| index ee9afa45..28d916b1 100644 | |||
| --- a/src/qjackctlMainForm.cpp | |||
| +++ b/src/qjackctlMainForm.cpp | |||
| @@ -1449,12 +1449,11 @@ void qjackctlMainForm::startJack (void) | |||
| const QString sPath = QString::fromUtf8(::getenv("PATH")); | |||
| QStringList paths = sPath.split(chPathSep); | |||
| #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) | |||
| - paths = paths << QString("%1\\JACK2").arg(getenv("PROGRAMFILES")) | |||
| - << QString("%1\\JACK2").arg(getenv("PROGRAMFILES(x86)")); | |||
| + paths.append(QString("%1\\JACK2").arg(::getenv("PROGRAMFILES"))); | |||
| + paths.append(QString("%1\\JACK2").arg(::getenv("PROGRAMFILES(x86)"))); | |||
| + #elif defined(__APPLE__) | |||
| + paths.append("/usr/local/bin/"); | |||
| #endif | |||
| - #if defined(__APPLE__) | |||
| - paths = paths << "/usr/local/bin/"; | |||
| - #endif | |||
| QStringListIterator iter(paths); | |||
| while (iter.hasNext()) { | |||
| const QString& sDirectory = iter.next(); | |||
| @@ -1514,7 +1513,7 @@ void qjackctlMainForm::startJack (void) | |||
| if (m_preset.iFrames > 0 && !bNet) | |||
| args.append("-p" + QString::number(m_preset.iFrames)); | |||
| if (bAlsa || bSun || bOss || bFirewire) { | |||
| - if (m_preset.iPeriods > 0) | |||
| + if (m_preset.iPeriods > 1) | |||
| args.append("-n" + QString::number(m_preset.iPeriods)); | |||
| } | |||
| if (bAlsa) { | |||
| @@ -1570,7 +1569,7 @@ void qjackctlMainForm::startJack (void) | |||
| else if (bOss || bSun) { | |||
| if (m_preset.bIgnoreHW) | |||
| args.append("-b"); | |||
| - if (m_preset.iWordLength > 0) | |||
| + if (m_preset.iWordLength > 0 && m_preset.iWordLength != 16) | |||
| args.append("-w" + QString::number(m_preset.iWordLength)); | |||
| if (!m_preset.sInDevice.isEmpty() && m_preset.iAudio != QJACKCTL_PLAYBACK) | |||
| args.append("-C" + formatQuoted(m_preset.sInDevice)); | |||
| @@ -4365,7 +4364,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) | |||
| if (bAlsa || bSun || bOss || bFirewire) { | |||
| setDBusDriverParameter("nperiods", | |||
| (unsigned int) preset.iPeriods, | |||
| - preset.iPeriods > 0); | |||
| + preset.iPeriods > 1); | |||
| } | |||
| if (bAlsa) { | |||
| setDBusDriverParameter("softmode", preset.bSoftMode); | |||
| @@ -4436,7 +4435,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) | |||
| !sOutDevice.isEmpty() && preset.iAudio != QJACKCTL_CAPTURE); | |||
| setDBusDriverParameter("inchannels", | |||
| (unsigned int) preset.iInChannels, | |||
| - preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); | |||
| + preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); | |||
| setDBusDriverParameter("outchannels", | |||
| (unsigned int) preset.iOutChannels, | |||
| preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); | |||
| @@ -4444,7 +4443,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) | |||
| else if (bCoreaudio || bFirewire || bNet) { | |||
| setDBusDriverParameter("inchannels", | |||
| (unsigned int) preset.iInChannels, | |||
| - preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); | |||
| + preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); | |||
| setDBusDriverParameter("outchannels", | |||
| (unsigned int) preset.iOutChannels, | |||
| preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); | |||
| @@ -4452,7 +4451,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) | |||
| if (bDummy) { | |||
| setDBusDriverParameter("wait", | |||
| (unsigned int) preset.iWait, | |||
| - preset.iWait > 0); | |||
| + preset.iWait > 0 && preset.iWait != 21333); | |||
| } | |||
| else | |||
| if (!bNet) { | |||
| diff --git a/src/qjackctlSetup.cpp b/src/qjackctlSetup.cpp | |||
| index 8294606c..963cdfff 100644 | |||
| --- a/src/qjackctlSetup.cpp | |||
| +++ b/src/qjackctlSetup.cpp | |||
| @@ -40,14 +40,6 @@ | |||
| #include <jack/jack.h> | |||
| #endif | |||
| -#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) | |||
| -#define DEFAULT_DRIVER "portaudio" | |||
| -#elif defined(__APPLE__) | |||
| -#define DEFAULT_DRIVER "coreaudio" | |||
| -#else | |||
| -#define DEFAULT_DRIVER "alsa" | |||
| -#endif | |||
| - | |||
| // Constructor. | |||
| qjackctlSetup::qjackctlSetup (void) | |||
| @@ -370,6 +362,170 @@ bool qjackctlSetup::saveAliases (void) | |||
| } | |||
| +//--------------------------------------------------------------------------- | |||
| +// Preset struct methods. | |||
| + | |||
| +void qjackctlPreset::clear (void) | |||
| +{ | |||
| + sServerPrefix.clear(); | |||
| + sServerName .clear(); | |||
| + bRealtime = true; | |||
| + bSoftMode = false; | |||
| + bMonitor = false; | |||
| + bShorts = false; | |||
| + bNoMemLock = false; | |||
| + bUnlockMem = false; | |||
| + bHWMeter = false; | |||
| + bIgnoreHW = false; | |||
| + iPriority = 0; | |||
| + iFrames = 0; | |||
| + iSampleRate = 0; | |||
| + iPeriods = 0; | |||
| + iWordLength = 0; | |||
| + iWait = 0; | |||
| + iChan = 0; | |||
| + sDriver .clear(); | |||
| + sInterface .clear(); | |||
| + iAudio = 0; | |||
| + iDither = 0; | |||
| + iTimeout = 0; | |||
| + sInDevice .clear(); | |||
| + sOutDevice .clear(); | |||
| + iInChannels = 0; | |||
| + iOutChannels = 0; | |||
| + iInLatency = 0; | |||
| + iOutLatency = 0; | |||
| + iStartDelay = 2; | |||
| + bSync = false; | |||
| + bVerbose = false; | |||
| + iPortMax = 0; | |||
| + sMidiDriver .clear(); | |||
| + sServerSuffix.clear(); | |||
| + uClockSource = 0; | |||
| + ucSelfConnectMode = ' '; | |||
| + | |||
| + fixup(); | |||
| +} | |||
| + | |||
| + | |||
| +void qjackctlPreset::load ( QSettings& settings, const QString& sSuffix ) | |||
| +{ | |||
| + settings.beginGroup("/Settings" + sSuffix); | |||
| + | |||
| + sServerPrefix = settings.value("/Server", sServerPrefix).toString(); | |||
| + sServerName = settings.value("/ServerName", sServerName).toString(); | |||
| + bRealtime = settings.value("/Realtime", bRealtime).toBool(); | |||
| + bSoftMode = settings.value("/SoftMode", bSoftMode).toBool(); | |||
| + bMonitor = settings.value("/Monitor", bMonitor).toBool(); | |||
| + bShorts = settings.value("/Shorts", bShorts).toBool(); | |||
| + bNoMemLock = settings.value("/NoMemLock", bNoMemLock).toBool(); | |||
| + bUnlockMem = settings.value("/UnlockMem", bUnlockMem).toBool(); | |||
| + bHWMeter = settings.value("/HWMeter", bHWMeter).toBool(); | |||
| + bIgnoreHW = settings.value("/IgnoreHW", bIgnoreHW).toBool(); | |||
| + iPriority = settings.value("/Priority", iPriority).toInt(); | |||
| + iFrames = settings.value("/Frames", iFrames).toInt(); | |||
| + iSampleRate = settings.value("/SampleRate", iSampleRate).toInt(); | |||
| + iPeriods = settings.value("/Periods", iPeriods).toInt(); | |||
| + iWordLength = settings.value("/WordLength", iWordLength).toInt(); | |||
| + iWait = settings.value("/Wait", iWait).toInt(); | |||
| + iChan = settings.value("/Chan", iChan).toInt(); | |||
| + sDriver = settings.value("/Driver", sDriver).toString(); | |||
| + sInterface = settings.value("/Interface", sInterface).toString(); | |||
| + iAudio = settings.value("/Audio", iAudio).toInt(); | |||
| + iDither = settings.value("/Dither", iDither).toInt(); | |||
| + iTimeout = settings.value("/Timeout", iTimeout).toInt(); | |||
| + sInDevice = settings.value("/InDevice", sInDevice).toString(); | |||
| + sOutDevice = settings.value("/OutDevice", sOutDevice).toString(); | |||
| + iInChannels = settings.value("/InChannels", iInChannels).toInt(); | |||
| + iOutChannels = settings.value("/OutChannels", iOutChannels).toInt(); | |||
| + iInLatency = settings.value("/InLatency", iInLatency).toInt(); | |||
| + iOutLatency = settings.value("/OutLatency", iOutLatency).toInt(); | |||
| + iStartDelay = settings.value("/StartDelay", iStartDelay).toInt(); | |||
| + bSync = settings.value("/Sync", bSync).toBool(); | |||
| + bVerbose = settings.value("/Verbose", bVerbose).toBool(); | |||
| + iPortMax = settings.value("/PortMax", iPortMax).toInt(); | |||
| + sMidiDriver = settings.value("/MidiDriver", sMidiDriver).toString(); | |||
| + sServerSuffix = settings.value("/ServerSuffix", sServerSuffix).toString(); | |||
| + uClockSource = settings.value("/ClockSource", uClockSource).toUInt(); | |||
| + ucSelfConnectMode = settings.value("/SelfConnectMode", ucSelfConnectMode).value<uchar>(); | |||
| + | |||
| + settings.endGroup(); | |||
| + | |||
| + fixup(); | |||
| +} | |||
| + | |||
| +void qjackctlPreset::save ( QSettings& settings, const QString& sSuffix ) | |||
| +{ | |||
| + settings.beginGroup("/Settings" + sSuffix); | |||
| + | |||
| + settings.setValue("/Server", sServerPrefix); | |||
| + settings.setValue("/ServerName", sServerName); | |||
| + settings.setValue("/Realtime", bRealtime); | |||
| + settings.setValue("/SoftMode", bSoftMode); | |||
| + settings.setValue("/Monitor", bMonitor); | |||
| + settings.setValue("/Shorts", bShorts); | |||
| + settings.setValue("/NoMemLock", bNoMemLock); | |||
| + settings.setValue("/UnlockMem", bUnlockMem); | |||
| + settings.setValue("/HWMeter", bHWMeter); | |||
| + settings.setValue("/IgnoreHW", bIgnoreHW); | |||
| + settings.setValue("/Priority", iPriority); | |||
| + settings.setValue("/Frames", iFrames); | |||
| + settings.setValue("/SampleRate", iSampleRate); | |||
| + settings.setValue("/Periods", iPeriods); | |||
| + settings.setValue("/WordLength", iWordLength); | |||
| + settings.setValue("/Wait", iWait); | |||
| + settings.setValue("/Chan", iChan); | |||
| + settings.setValue("/Driver", sDriver); | |||
| + settings.setValue("/Interface", sInterface); | |||
| + settings.setValue("/Audio", iAudio); | |||
| + settings.setValue("/Dither", iDither); | |||
| + settings.setValue("/Timeout", iTimeout); | |||
| + settings.setValue("/InDevice", sInDevice); | |||
| + settings.setValue("/OutDevice", sOutDevice); | |||
| + settings.setValue("/InChannels", iInChannels); | |||
| + settings.setValue("/OutChannels", iOutChannels); | |||
| + settings.setValue("/InLatency", iInLatency); | |||
| + settings.setValue("/OutLatency", iOutLatency); | |||
| + settings.setValue("/StartDelay", iStartDelay); | |||
| + settings.setValue("/Sync", bSync); | |||
| + settings.setValue("/Verbose", bVerbose); | |||
| + settings.setValue("/PortMax", iPortMax); | |||
| + settings.setValue("/MidiDriver", sMidiDriver); | |||
| + settings.setValue("/ServerSuffix", sServerSuffix); | |||
| + settings.setValue("/ClockSource", uClockSource); | |||
| + settings.setValue("/SelfConnectMode", ucSelfConnectMode); | |||
| + | |||
| + settings.endGroup(); | |||
| +} | |||
| + | |||
| +void qjackctlPreset::fixup (void) | |||
| +{ | |||
| + if (sServerPrefix.isEmpty()) { | |||
| + sServerPrefix = "jackd"; | |||
| + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) | |||
| + sServerPrefix += " -S -X winmme"; | |||
| + #endif | |||
| + } | |||
| + | |||
| + if (sDriver.isEmpty()) { | |||
| + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) | |||
| + sDriver = "portaudio"; | |||
| + #elif defined(__APPLE__) | |||
| + sDriver = "coreaudio"; | |||
| + #else | |||
| + sDriver = "alsa"; | |||
| + #endif | |||
| + } | |||
| + | |||
| +#ifdef CONFIG_JACK_MIDI | |||
| + if (!sMidiDriver.isEmpty() | |||
| + && sMidiDriver != "raw" | |||
| + && sMidiDriver != "seq") | |||
| + sMidiDriver.clear(); | |||
| +#endif | |||
| +} | |||
| + | |||
| + | |||
| //--------------------------------------------------------------------------- | |||
| // Preset management methods. | |||
| @@ -383,56 +539,7 @@ bool qjackctlSetup::loadPreset ( qjackctlPreset& preset, const QString& sPreset | |||
| return false; | |||
| } | |||
| - m_settings.beginGroup("/Settings" + sSuffix); | |||
| -#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) | |||
| - preset.sServerPrefix = m_settings.value("/Server", "jackd -S -X winmme").toString(); | |||
| -#else | |||
| - preset.sServerPrefix = m_settings.value("/Server", "jackd").toString(); | |||
| -#endif | |||
| - preset.sServerName = m_settings.value("/ServerName").toString(); | |||
| - preset.bRealtime = m_settings.value("/Realtime", true).toBool(); | |||
| - preset.bSoftMode = m_settings.value("/SoftMode", false).toBool(); | |||
| - preset.bMonitor = m_settings.value("/Monitor", false).toBool(); | |||
| - preset.bShorts = m_settings.value("/Shorts", false).toBool(); | |||
| - preset.bNoMemLock = m_settings.value("/NoMemLock", false).toBool(); | |||
| - preset.bUnlockMem = m_settings.value("/UnlockMem", false).toBool(); | |||
| - preset.bHWMeter = m_settings.value("/HWMeter", false).toBool(); | |||
| - preset.bIgnoreHW = m_settings.value("/IgnoreHW", false).toBool(); | |||
| - preset.iPriority = m_settings.value("/Priority", 0).toInt(); | |||
| - preset.iFrames = m_settings.value("/Frames", 1024).toInt(); | |||
| - preset.iSampleRate = m_settings.value("/SampleRate", 48000).toInt(); | |||
| - preset.iPeriods = m_settings.value("/Periods", 2).toInt(); | |||
| - preset.iWordLength = m_settings.value("/WordLength", 16).toInt(); | |||
| - preset.iWait = m_settings.value("/Wait", 21333).toInt(); | |||
| - preset.iChan = m_settings.value("/Chan", 0).toInt(); | |||
| - preset.sDriver = m_settings.value("/Driver", DEFAULT_DRIVER).toString(); | |||
| - preset.sInterface = m_settings.value("/Interface").toString(); | |||
| - preset.iAudio = m_settings.value("/Audio", 0).toInt(); | |||
| - preset.iDither = m_settings.value("/Dither", 0).toInt(); | |||
| - preset.iTimeout = m_settings.value("/Timeout", 500).toInt(); | |||
| - preset.sInDevice = m_settings.value("/InDevice").toString(); | |||
| - preset.sOutDevice = m_settings.value("/OutDevice").toString(); | |||
| - preset.iInChannels = m_settings.value("/InChannels", 0).toInt(); | |||
| - preset.iOutChannels = m_settings.value("/OutChannels", 0).toInt(); | |||
| - preset.iInLatency = m_settings.value("/InLatency", 0).toInt(); | |||
| - preset.iOutLatency = m_settings.value("/OutLatency", 0).toInt(); | |||
| - preset.iStartDelay = m_settings.value("/StartDelay", 2).toInt(); | |||
| - preset.bSync = m_settings.value("/Sync", false).toBool(); | |||
| - preset.bVerbose = m_settings.value("/Verbose", false).toBool(); | |||
| - preset.iPortMax = m_settings.value("/PortMax", 256).toInt(); | |||
| - preset.sMidiDriver = m_settings.value("/MidiDriver").toString(); | |||
| - preset.sServerSuffix = m_settings.value("/ServerSuffix").toString(); | |||
| - preset.uClockSource = m_settings.value("/ClockSource", 0).toUInt(); | |||
| - preset.ucSelfConnectMode = m_settings.value("/SelfConnectMode", ' ').value<uchar>(); | |||
| - m_settings.endGroup(); | |||
| - | |||
| -#ifdef CONFIG_JACK_MIDI | |||
| - if (!preset.sMidiDriver.isEmpty() && | |||
| - preset.sMidiDriver != "raw" && | |||
| - preset.sMidiDriver != "seq") | |||
| - preset.sMidiDriver.clear(); | |||
| -#endif | |||
| - | |||
| + preset.load(m_settings, sSuffix); | |||
| return true; | |||
| } | |||
| @@ -446,45 +553,7 @@ bool qjackctlSetup::savePreset ( qjackctlPreset& preset, const QString& sPreset | |||
| presets.prepend(sPreset); | |||
| } | |||
| - m_settings.beginGroup("/Settings" + sSuffix); | |||
| - m_settings.setValue("/Server", preset.sServerPrefix); | |||
| - m_settings.setValue("/ServerName", preset.sServerName); | |||
| - m_settings.setValue("/Realtime", preset.bRealtime); | |||
| - m_settings.setValue("/SoftMode", preset.bSoftMode); | |||
| - m_settings.setValue("/Monitor", preset.bMonitor); | |||
| - m_settings.setValue("/Shorts", preset.bShorts); | |||
| - m_settings.setValue("/NoMemLock", preset.bNoMemLock); | |||
| - m_settings.setValue("/UnlockMem", preset.bUnlockMem); | |||
| - m_settings.setValue("/HWMeter", preset.bHWMeter); | |||
| - m_settings.setValue("/IgnoreHW", preset.bIgnoreHW); | |||
| - m_settings.setValue("/Priority", preset.iPriority); | |||
| - m_settings.setValue("/Frames", preset.iFrames); | |||
| - m_settings.setValue("/SampleRate", preset.iSampleRate); | |||
| - m_settings.setValue("/Periods", preset.iPeriods); | |||
| - m_settings.setValue("/WordLength", preset.iWordLength); | |||
| - m_settings.setValue("/Wait", preset.iWait); | |||
| - m_settings.setValue("/Chan", preset.iChan); | |||
| - m_settings.setValue("/Driver", preset.sDriver); | |||
| - m_settings.setValue("/Interface", preset.sInterface); | |||
| - m_settings.setValue("/Audio", preset.iAudio); | |||
| - m_settings.setValue("/Dither", preset.iDither); | |||
| - m_settings.setValue("/Timeout", preset.iTimeout); | |||
| - m_settings.setValue("/InDevice", preset.sInDevice); | |||
| - m_settings.setValue("/OutDevice", preset.sOutDevice); | |||
| - m_settings.setValue("/InChannels", preset.iInChannels); | |||
| - m_settings.setValue("/OutChannels", preset.iOutChannels); | |||
| - m_settings.setValue("/InLatency", preset.iInLatency); | |||
| - m_settings.setValue("/OutLatency", preset.iOutLatency); | |||
| - m_settings.setValue("/StartDelay", preset.iStartDelay); | |||
| - m_settings.setValue("/Sync", preset.bSync); | |||
| - m_settings.setValue("/Verbose", preset.bVerbose); | |||
| - m_settings.setValue("/PortMax", preset.iPortMax); | |||
| - m_settings.setValue("/MidiDriver", preset.sMidiDriver); | |||
| - m_settings.setValue("/ServerSuffix", preset.sServerSuffix); | |||
| - m_settings.setValue("/ClockSource", preset.uClockSource); | |||
| - m_settings.setValue("/SelfConnectMode", preset.ucSelfConnectMode); | |||
| - m_settings.endGroup(); | |||
| - | |||
| + preset.save(m_settings, sSuffix); | |||
| return true; | |||
| } | |||
| @@ -493,13 +562,15 @@ bool qjackctlSetup::deletePreset ( const QString& sPreset ) | |||
| QString sSuffix; | |||
| if (sPreset != sDefPresetName && !sPreset.isEmpty()) { | |||
| sSuffix = '/' + sPreset; | |||
| - int iPreset = presets.indexOf(sPreset); | |||
| + const int iPreset = presets.indexOf(sPreset); | |||
| if (iPreset < 0) | |||
| return false; | |||
| presets.removeAt(iPreset); | |||
| - m_settings.remove("/Settings" + sSuffix); | |||
| - m_settings.remove("/Aliases" + sSuffix); | |||
| } | |||
| + | |||
| + m_settings.remove("/Settings" + sSuffix); | |||
| + m_settings.remove("/Aliases" + sSuffix); | |||
| + | |||
| return true; | |||
| } | |||
| diff --git a/src/qjackctlSetup.h b/src/qjackctlSetup.h | |||
| index 18ca99e9..e03f60d9 100644 | |||
| --- a/src/qjackctlSetup.h | |||
| +++ b/src/qjackctlSetup.h | |||
| @@ -47,6 +47,13 @@ class QSplitter; | |||
| // Server settings preset struct. | |||
| struct qjackctlPreset | |||
| { | |||
| + qjackctlPreset() { clear(); } | |||
| + | |||
| + void clear(); | |||
| + void load(QSettings& settings, const QString& sSuffix); | |||
| + void save(QSettings& settings, const QString& sSuffix); | |||
| + void fixup(); | |||
| + | |||
| QString sServerPrefix; | |||
| QString sServerName; | |||
| bool bRealtime; | |||
| diff --git a/src/qjackctlSetupForm.cpp b/src/qjackctlSetupForm.cpp | |||
| index ee64fa3b..4b934fab 100644 | |||
| --- a/src/qjackctlSetupForm.cpp | |||
| +++ b/src/qjackctlSetupForm.cpp | |||
| @@ -95,8 +95,9 @@ qjackctlSetupForm::qjackctlSetupForm ( QWidget *pParent ) | |||
| m_pTimeDisplayButtonGroup->setExclusive(true); | |||
| // Setup clock-source combo-box. | |||
| + const QString& sDefName = tr(g_pszDefName); | |||
| m_ui.ClockSourceComboBox->clear(); | |||
| - m_ui.ClockSourceComboBox->addItem(g_pszDefName, uint(0)); | |||
| + m_ui.ClockSourceComboBox->addItem(sDefName, uint(0)); | |||
| m_ui.ClockSourceComboBox->addItem(tr("System"), uint('s')); | |||
| m_ui.ClockSourceComboBox->addItem(tr("Cycle"), uint('c')); | |||
| m_ui.ClockSourceComboBox->addItem(tr("HPET"), uint('h')); | |||
| @@ -157,11 +158,28 @@ qjackctlSetupForm::qjackctlSetupForm ( QWidget *pParent ) | |||
| m_ui.ServerPrefixComboBox->setCompleter(nullptr); | |||
| m_ui.ServerSuffixComboBox->setCompleter(nullptr); | |||
| + m_ui.PrioritySpinBox->setSpecialValueText(sDefName); | |||
| + m_ui.SampleRateComboBox->insertItem(0, sDefName); | |||
| + m_ui.FramesComboBox->insertItem(0, sDefName); | |||
| + m_ui.PeriodsSpinBox->setSpecialValueText(sDefName); | |||
| + m_ui.PortMaxComboBox->insertItem(0, sDefName); | |||
| + m_ui.TimeoutComboBox->insertItem(0, sDefName); | |||
| + m_ui.WaitComboBox->insertItem(0, sDefName); | |||
| + m_ui.WordLengthComboBox->insertItem(0, sDefName); | |||
| + m_ui.ChanSpinBox->setSpecialValueText(sDefName); | |||
| + m_ui.InChannelsSpinBox->setSpecialValueText(sDefName); | |||
| + m_ui.OutChannelsSpinBox->setSpecialValueText(sDefName); | |||
| + m_ui.InLatencySpinBox->setSpecialValueText(sDefName); | |||
| + m_ui.OutLatencySpinBox->setSpecialValueText(sDefName); | |||
| + | |||
| // UI connections... | |||
| QObject::connect(m_ui.PresetComboBox, | |||
| SIGNAL(editTextChanged(const QString&)), | |||
| SLOT(changeCurrentPreset(const QString&))); | |||
| + QObject::connect(m_ui.PresetClearPushButton, | |||
| + SIGNAL(clicked()), | |||
| + SLOT(clearCurrentPreset())); | |||
| QObject::connect(m_ui.PresetSavePushButton, | |||
| SIGNAL(clicked()), | |||
| SLOT(saveCurrentPreset())); | |||
| @@ -766,15 +784,24 @@ void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) | |||
| m_ui.HWMeterCheckBox->setChecked(preset.bHWMeter); | |||
| m_ui.IgnoreHWCheckBox->setChecked(preset.bIgnoreHW); | |||
| m_ui.PrioritySpinBox->setValue(preset.iPriority); | |||
| + const QString& sDefName = tr(g_pszDefName); | |||
| setComboBoxCurrentText(m_ui.FramesComboBox, | |||
| - QString::number(preset.iFrames)); | |||
| + preset.iFrames > 0 | |||
| + ? QString::number(preset.iFrames) | |||
| + : sDefName); | |||
| setComboBoxCurrentText(m_ui.SampleRateComboBox, | |||
| - QString::number(preset.iSampleRate)); | |||
| + preset.iSampleRate > 0 | |||
| + ? QString::number(preset.iSampleRate) | |||
| + : sDefName); | |||
| m_ui.PeriodsSpinBox->setValue(preset.iPeriods); | |||
| setComboBoxCurrentText(m_ui.WordLengthComboBox, | |||
| - QString::number(preset.iWordLength)); | |||
| + preset.iWordLength > 0 && preset.iWordLength != 16 | |||
| + ? QString::number(preset.iWordLength) | |||
| + : sDefName); | |||
| setComboBoxCurrentText(m_ui.WaitComboBox, | |||
| - QString::number(preset.iWait)); | |||
| + preset.iWait > 0 && preset.iWait != 21333 | |||
| + ? QString::number(preset.iWait) | |||
| + : sDefName); | |||
| m_ui.ChanSpinBox->setValue(preset.iChan); | |||
| setComboBoxCurrentText(m_ui.DriverComboBox, preset.sDriver); | |||
| setComboBoxCurrentText(m_ui.InterfaceComboBox, | |||
| @@ -784,7 +811,9 @@ void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) | |||
| m_ui.AudioComboBox->setCurrentIndex(preset.iAudio); | |||
| m_ui.DitherComboBox->setCurrentIndex(preset.iDither); | |||
| setComboBoxCurrentText(m_ui.TimeoutComboBox, | |||
| - QString::number(preset.iTimeout)); | |||
| + preset.iTimeout > 0 && preset.iTimeout != 500 | |||
| + ? QString::number(preset.iTimeout) | |||
| + : sDefName); | |||
| setComboBoxCurrentData(m_ui.ClockSourceComboBox, | |||
| uint(preset.uClockSource)); | |||
| setComboBoxCurrentText(m_ui.InDeviceComboBox, | |||
| @@ -805,7 +834,9 @@ void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) | |||
| QVariant::fromValue<uchar> (preset.ucSelfConnectMode)); | |||
| m_ui.VerboseCheckBox->setChecked(preset.bVerbose); | |||
| setComboBoxCurrentText(m_ui.PortMaxComboBox, | |||
| - QString::number(preset.iPortMax)); | |||
| + preset.iPortMax > 0 && preset.iPortMax != 256 | |||
| + ? QString::number(preset.iPortMax) | |||
| + : sDefName); | |||
| #ifdef CONFIG_JACK_MIDI | |||
| setComboBoxCurrentText(m_ui.MidiDriverComboBox, | |||
| preset.sMidiDriver); | |||
| @@ -995,6 +1026,16 @@ void qjackctlSetupForm::changeCurrentPreset ( const QString& sPreset ) | |||
| optionsChanged(); | |||
| } | |||
| + | |||
| +void qjackctlSetupForm::clearCurrentPreset (void) | |||
| +{ | |||
| + // Clear current settings... | |||
| + qjackctlPreset preset; | |||
| + setCurrentPreset(preset); | |||
| + settingsChanged(); | |||
| +} | |||
| + | |||
| + | |||
| void qjackctlSetupForm::saveCurrentPreset (void) | |||
| { | |||
| const QString sPreset = m_ui.PresetComboBox->currentText(); | |||
| diff --git a/src/qjackctlSetupForm.h b/src/qjackctlSetupForm.h | |||
| index 97e1a32f..cbd70dff 100644 | |||
| --- a/src/qjackctlSetupForm.h | |||
| +++ b/src/qjackctlSetupForm.h | |||
| @@ -54,6 +54,7 @@ class qjackctlSetupForm : public QDialog | |||
| protected slots: | |||
| void changeCurrentPreset(const QString&); | |||
| + void clearCurrentPreset(); | |||
| void saveCurrentPreset(); | |||
| void deleteCurrentPreset(); | |||
| diff --git a/src/qjackctlSetupForm.ui b/src/qjackctlSetupForm.ui | |||
| index e78624b7..bb064f7d 100644 | |||
| --- a/src/qjackctlSetupForm.ui | |||
| +++ b/src/qjackctlSetupForm.ui | |||
| @@ -95,6 +95,22 @@ | |||
| </item> | |||
| </widget> | |||
| </item> | |||
| + <item> | |||
| + <widget class="QPushButton" name="PresetClearPushButton"> | |||
| + <property name="toolTip"> | |||
| + <string>Clear settings of current preset name</string> | |||
| + </property> | |||
| + <property name="text"> | |||
| + <string>Clea&r</string> | |||
| + </property> | |||
| + <property name="icon"> | |||
| + <iconset resource="qjackctl.qrc">:/images/clear1.png</iconset> | |||
| + </property> | |||
| + <property name="autoDefault"> | |||
| + <bool>false</bool> | |||
| + </property> | |||
| + </widget> | |||
| + </item> | |||
| <item> | |||
| <widget class="QPushButton" name="PresetSavePushButton"> | |||
| <property name="toolTip"> | |||
| @@ -597,11 +613,14 @@ | |||
| <string>Number of periods in the hardware buffer</string> | |||
| </property> | |||
| <property name="minimum"> | |||
| - <number>2</number> | |||
| + <number>1</number> | |||
| </property> | |||
| <property name="maximum"> | |||
| <number>999</number> | |||
| </property> | |||
| + <property name="value"> | |||
| + <number>1</number> | |||
| + </property> | |||
| </widget> | |||
| </item> | |||
| </layout> | |||
| @@ -1064,9 +1083,6 @@ | |||
| <property name="toolTip"> | |||
| <string>Scheduler priority when running realtime</string> | |||
| </property> | |||
| - <property name="specialValueText"> | |||
| - <string>(default)</string> | |||
| - </property> | |||
| <property name="singleStep"> | |||
| <number>1</number> | |||
| </property> | |||
| @@ -1074,7 +1090,7 @@ | |||
| <number>5</number> | |||
| </property> | |||
| <property name="maximum"> | |||
| - <number>99</number> | |||
| + <number>95</number> | |||
| </property> | |||
| </widget> | |||
| </item> | |||
| @@ -1108,9 +1124,6 @@ | |||
| <bold>false</bold> | |||
| </font> | |||
| </property> | |||
| - <property name="acceptDrops"> | |||
| - <bool>false</bool> | |||
| - </property> | |||
| <property name="toolTip"> | |||
| <string>Word length</string> | |||
| </property> | |||
| @@ -1165,9 +1178,6 @@ | |||
| <bold>false</bold> | |||
| </font> | |||
| </property> | |||
| - <property name="acceptDrops"> | |||
| - <bool>false</bool> | |||
| - </property> | |||
| <property name="toolTip"> | |||
| <string>Number of microseconds to wait between engine processes (dummy)</string> | |||
| </property> | |||
| @@ -1217,9 +1227,6 @@ | |||
| <property name="toolTip"> | |||
| <string>Maximum number of audio channels to allocate</string> | |||
| </property> | |||
| - <property name="specialValueText"> | |||
| - <string>(default)</string> | |||
| - </property> | |||
| <property name="maximum"> | |||
| <number>999</number> | |||
| </property> | |||
| @@ -1268,7 +1275,7 @@ | |||
| <bool>true</bool> | |||
| </property> | |||
| <property name="currentIndex"> | |||
| - <number>1</number> | |||
| + <number>0</number> | |||
| </property> | |||
| <item> | |||
| <property name="text"> | |||
| @@ -1330,7 +1337,7 @@ | |||
| <bool>true</bool> | |||
| </property> | |||
| <property name="currentIndex"> | |||
| - <number>1</number> | |||
| + <number>0</number> | |||
| </property> | |||
| <item> | |||
| <property name="text"> | |||
| @@ -1357,11 +1364,6 @@ | |||
| <string>5000</string> | |||
| </property> | |||
| </item> | |||
| - <item> | |||
| - <property name="text"> | |||
| - <string>10000</string> | |||
| - </property> | |||
| - </item> | |||
| </widget> | |||
| </item> | |||
| <item row="6" column="0"> | |||
| @@ -1710,9 +1712,6 @@ | |||
| <property name="toolTip"> | |||
| <string>Maximum input audio hardware channels to allocate</string> | |||
| </property> | |||
| - <property name="specialValueText"> | |||
| - <string>(default)</string> | |||
| - </property> | |||
| <property name="maximum"> | |||
| <number>999</number> | |||
| </property> | |||
| @@ -1741,9 +1740,6 @@ | |||
| <property name="toolTip"> | |||
| <string>Maximum output audio hardware channels to allocate</string> | |||
| </property> | |||
| - <property name="specialValueText"> | |||
| - <string>(default)</string> | |||
| - </property> | |||
| <property name="maximum"> | |||
| <number>999</number> | |||
| </property> | |||
| @@ -1794,9 +1790,6 @@ | |||
| <property name="toolTip"> | |||
| <string>External input latency (frames)</string> | |||
| </property> | |||
| - <property name="specialValueText"> | |||
| - <string>(default)</string> | |||
| - </property> | |||
| <property name="maximum"> | |||
| <number>9999999</number> | |||
| </property> | |||
| @@ -1825,9 +1818,6 @@ | |||
| <property name="toolTip"> | |||
| <string>External output latency (frames)</string> | |||
| </property> | |||
| - <property name="specialValueText"> | |||
| - <string>(default)</string> | |||
| - </property> | |||
| <property name="maximum"> | |||
| <number>9999999</number> | |||
| </property> | |||
| @@ -4209,6 +4199,7 @@ | |||
| <tabstops> | |||
| <tabstop>SetupTabWidget</tabstop> | |||
| <tabstop>PresetComboBox</tabstop> | |||
| + <tabstop>PresetClearPushButton</tabstop> | |||
| <tabstop>PresetSavePushButton</tabstop> | |||
| <tabstop>PresetDeletePushButton</tabstop> | |||
| <tabstop>SettingsTabWidget</tabstop> | |||