| @@ -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> | |||||