Signed-off-by: falkTX <falktx@falktx.com>tags/v2.1-rc1
| @@ -985,6 +985,13 @@ | |||||
| </property> | </property> | ||||
| </spacer> | </spacer> | ||||
| </item> | </item> | ||||
| <item row="3" column="0" colspan="4"> | |||||
| <widget class="QCheckBox" name="cb_engine_reset_xruns"> | |||||
| <property name="text"> | |||||
| <string>Reset Xrun counter after project load</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| </layout> | </layout> | ||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| @@ -1260,46 +1260,51 @@ typedef enum { | |||||
| */ | */ | ||||
| ENGINE_OPTION_MAX_PARAMETERS = 7, | ENGINE_OPTION_MAX_PARAMETERS = 7, | ||||
| /*! | |||||
| * Reset Xrun counter after project load. | |||||
| */ | |||||
| ENGINE_OPTION_RESET_XRUNS = 8, | |||||
| /*! | /*! | ||||
| * Timeout value for how much to wait for UI bridges to respond, in milliseconds. | * Timeout value for how much to wait for UI bridges to respond, in milliseconds. | ||||
| * Default is 4000 (4 seconds). | * Default is 4000 (4 seconds). | ||||
| */ | */ | ||||
| ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 8, | |||||
| ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 9, | |||||
| /*! | /*! | ||||
| * Audio buffer size. | * Audio buffer size. | ||||
| * Default is 512. | * Default is 512. | ||||
| */ | */ | ||||
| ENGINE_OPTION_AUDIO_BUFFER_SIZE = 9, | |||||
| ENGINE_OPTION_AUDIO_BUFFER_SIZE = 10, | |||||
| /*! | /*! | ||||
| * Audio sample rate. | * Audio sample rate. | ||||
| * Default is 44100. | * Default is 44100. | ||||
| */ | */ | ||||
| ENGINE_OPTION_AUDIO_SAMPLE_RATE = 10, | |||||
| ENGINE_OPTION_AUDIO_SAMPLE_RATE = 11, | |||||
| /*! | /*! | ||||
| * Wherever to use 3 audio periods instead of the default 2. | * Wherever to use 3 audio periods instead of the default 2. | ||||
| * Default is false. | * Default is false. | ||||
| */ | */ | ||||
| ENGINE_OPTION_AUDIO_TRIPLE_BUFFER = 11, | |||||
| ENGINE_OPTION_AUDIO_TRIPLE_BUFFER = 12, | |||||
| /*! | /*! | ||||
| * Audio driver. | * Audio driver. | ||||
| * Default depends on platform. | * Default depends on platform. | ||||
| */ | */ | ||||
| ENGINE_OPTION_AUDIO_DRIVER = 12, | |||||
| ENGINE_OPTION_AUDIO_DRIVER = 13, | |||||
| /*! | /*! | ||||
| * Audio device (within a driver). | * Audio device (within a driver). | ||||
| * Default unset. | * Default unset. | ||||
| */ | */ | ||||
| ENGINE_OPTION_AUDIO_DEVICE = 13, | |||||
| ENGINE_OPTION_AUDIO_DEVICE = 14, | |||||
| /*! | /*! | ||||
| * Wherever to enable OSC support in the engine. | * Wherever to enable OSC support in the engine. | ||||
| */ | */ | ||||
| ENGINE_OPTION_OSC_ENABLED = 14, | |||||
| ENGINE_OPTION_OSC_ENABLED = 15, | |||||
| /*! | /*! | ||||
| * The network TCP port to use for OSC. | * The network TCP port to use for OSC. | ||||
| @@ -1307,7 +1312,7 @@ typedef enum { | |||||
| * A value of < 0 means to not enable the TCP port for OSC. | * A value of < 0 means to not enable the TCP port for OSC. | ||||
| * @note Valid ports begin at 1024 and end at 32767 (inclusive) | * @note Valid ports begin at 1024 and end at 32767 (inclusive) | ||||
| */ | */ | ||||
| ENGINE_OPTION_OSC_PORT_TCP = 15, | |||||
| ENGINE_OPTION_OSC_PORT_TCP = 16, | |||||
| /*! | /*! | ||||
| * The network UDP port to use for OSC. | * The network UDP port to use for OSC. | ||||
| @@ -1316,87 +1321,87 @@ typedef enum { | |||||
| * @note Disabling this option prevents DSSI UIs from working! | * @note Disabling this option prevents DSSI UIs from working! | ||||
| * @note Valid ports begin at 1024 and end at 32767 (inclusive) | * @note Valid ports begin at 1024 and end at 32767 (inclusive) | ||||
| */ | */ | ||||
| ENGINE_OPTION_OSC_PORT_UDP = 16, | |||||
| ENGINE_OPTION_OSC_PORT_UDP = 17, | |||||
| /*! | /*! | ||||
| * Set path used for a specific file type. | * Set path used for a specific file type. | ||||
| * Uses value as the file format, valueStr as actual path. | * Uses value as the file format, valueStr as actual path. | ||||
| */ | */ | ||||
| ENGINE_OPTION_FILE_PATH = 17, | |||||
| ENGINE_OPTION_FILE_PATH = 18, | |||||
| /*! | /*! | ||||
| * Set path used for a specific plugin type. | * Set path used for a specific plugin type. | ||||
| * Uses value as the plugin format, valueStr as actual path. | * Uses value as the plugin format, valueStr as actual path. | ||||
| * @see PluginType | * @see PluginType | ||||
| */ | */ | ||||
| ENGINE_OPTION_PLUGIN_PATH = 18, | |||||
| ENGINE_OPTION_PLUGIN_PATH = 19, | |||||
| /*! | /*! | ||||
| * Set path to the binary files. | * Set path to the binary files. | ||||
| * Default unset. | * Default unset. | ||||
| * @note Must be set for plugin and UI bridges to work | * @note Must be set for plugin and UI bridges to work | ||||
| */ | */ | ||||
| ENGINE_OPTION_PATH_BINARIES = 19, | |||||
| ENGINE_OPTION_PATH_BINARIES = 20, | |||||
| /*! | /*! | ||||
| * Set path to the resource files. | * Set path to the resource files. | ||||
| * Default unset. | * Default unset. | ||||
| * @note Must be set for some internal plugins to work | * @note Must be set for some internal plugins to work | ||||
| */ | */ | ||||
| ENGINE_OPTION_PATH_RESOURCES = 20, | |||||
| ENGINE_OPTION_PATH_RESOURCES = 21, | |||||
| /*! | /*! | ||||
| * Prevent bad plugin and UI behaviour. | * Prevent bad plugin and UI behaviour. | ||||
| * @note: Linux only | * @note: Linux only | ||||
| */ | */ | ||||
| ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 21, | |||||
| ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 22, | |||||
| /*! | /*! | ||||
| * Set UI scaling used in frontend, so backend can do the same for plugin UIs. | * Set UI scaling used in frontend, so backend can do the same for plugin UIs. | ||||
| */ | */ | ||||
| ENGINE_OPTION_FRONTEND_UI_SCALE = 22, | |||||
| ENGINE_OPTION_FRONTEND_UI_SCALE = 23, | |||||
| /*! | /*! | ||||
| * Set frontend winId, used to define as parent window for plugin UIs. | * Set frontend winId, used to define as parent window for plugin UIs. | ||||
| */ | */ | ||||
| ENGINE_OPTION_FRONTEND_WIN_ID = 23, | |||||
| ENGINE_OPTION_FRONTEND_WIN_ID = 24, | |||||
| #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | ||||
| /*! | /*! | ||||
| * Set path to wine executable. | * Set path to wine executable. | ||||
| */ | */ | ||||
| ENGINE_OPTION_WINE_EXECUTABLE = 24, | |||||
| ENGINE_OPTION_WINE_EXECUTABLE = 25, | |||||
| /*! | /*! | ||||
| * Enable automatic wineprefix detection. | * Enable automatic wineprefix detection. | ||||
| */ | */ | ||||
| ENGINE_OPTION_WINE_AUTO_PREFIX = 25, | |||||
| ENGINE_OPTION_WINE_AUTO_PREFIX = 26, | |||||
| /*! | /*! | ||||
| * Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. | * Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. | ||||
| */ | */ | ||||
| ENGINE_OPTION_WINE_FALLBACK_PREFIX = 26, | |||||
| ENGINE_OPTION_WINE_FALLBACK_PREFIX = 27, | |||||
| /*! | /*! | ||||
| * Enable realtime priority for Wine application and server threads. | * Enable realtime priority for Wine application and server threads. | ||||
| */ | */ | ||||
| ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 27, | |||||
| ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 28, | |||||
| /*! | /*! | ||||
| * Base realtime priority for Wine threads. | * Base realtime priority for Wine threads. | ||||
| */ | */ | ||||
| ENGINE_OPTION_WINE_BASE_RT_PRIO = 28, | |||||
| ENGINE_OPTION_WINE_BASE_RT_PRIO = 29, | |||||
| /*! | /*! | ||||
| * Wine server realtime priority. | * Wine server realtime priority. | ||||
| */ | */ | ||||
| ENGINE_OPTION_WINE_SERVER_RT_PRIO = 29, | |||||
| ENGINE_OPTION_WINE_SERVER_RT_PRIO = 30, | |||||
| #endif | #endif | ||||
| /*! | /*! | ||||
| * Capture console output into debug callbacks. | * Capture console output into debug callbacks. | ||||
| */ | */ | ||||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 30 | |||||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 31 | |||||
| } EngineOption; | } EngineOption; | ||||
| @@ -235,6 +235,7 @@ struct CARLA_API EngineOptions { | |||||
| const char* transportExtra; | const char* transportExtra; | ||||
| bool forceStereo; | bool forceStereo; | ||||
| bool resetXruns; | |||||
| bool preferPluginBridges; | bool preferPluginBridges; | ||||
| bool preferUiBridges; | bool preferUiBridges; | ||||
| bool uisAlwaysOnTop; | bool uisAlwaysOnTop; | ||||
| @@ -189,21 +189,24 @@ static void carla_engine_init_common(CarlaEngine* const engine) | |||||
| #ifdef BUILD_BRIDGE | #ifdef BUILD_BRIDGE | ||||
| /* | /* | ||||
| if (const char* const uisAlwaysOnTop = std::getenv("ENGINE_OPTION_FORCE_STEREO")) | |||||
| engine->setOption(CB::ENGINE_OPTION_FORCE_STEREO, (std::strcmp(uisAlwaysOnTop, "true") == 0) ? 1 : 0, nullptr); | |||||
| if (const char* const forceStereo = std::getenv("ENGINE_OPTION_FORCE_STEREO")) | |||||
| engine->setOption(CB::ENGINE_OPTION_FORCE_STEREO, (std::strcmp(forceStereo, "true") == 0) ? 1 : 0, nullptr); | |||||
| if (const char* const uisAlwaysOnTop = std::getenv("ENGINE_OPTION_PREFER_PLUGIN_BRIDGES")) | |||||
| engine->setOption(CB::ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, (std::strcmp(uisAlwaysOnTop, "true") == 0) ? 1 : 0, nullptr); | |||||
| if (const char* const preferPluginBridges = std::getenv("ENGINE_OPTION_PREFER_PLUGIN_BRIDGES")) | |||||
| engine->setOption(CB::ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, (std::strcmp(preferPluginBridges, "true") == 0) ? 1 : 0, nullptr); | |||||
| if (const char* const uisAlwaysOnTop = std::getenv("ENGINE_OPTION_PREFER_UI_BRIDGES")) | |||||
| engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, (std::strcmp(uisAlwaysOnTop, "true") == 0) ? 1 : 0, nullptr); | |||||
| if (const char* const preferUiBridges = std::getenv("ENGINE_OPTION_PREFER_UI_BRIDGES")) | |||||
| engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, (std::strcmp(preferUiBridges, "true") == 0) ? 1 : 0, nullptr); | |||||
| */ | */ | ||||
| if (const char* const uisAlwaysOnTop = std::getenv("ENGINE_OPTION_UIS_ALWAYS_ON_TOP")) | if (const char* const uisAlwaysOnTop = std::getenv("ENGINE_OPTION_UIS_ALWAYS_ON_TOP")) | ||||
| engine->setOption(CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP, (std::strcmp(uisAlwaysOnTop, "true") == 0) ? 1 : 0, nullptr); | engine->setOption(CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP, (std::strcmp(uisAlwaysOnTop, "true") == 0) ? 1 : 0, nullptr); | ||||
| if (const char* const maxParameters = std::getenv("ENGINE_OPTION_MAX_PARAMETERS")) | if (const char* const maxParameters = std::getenv("ENGINE_OPTION_MAX_PARAMETERS")) | ||||
| engine->setOption(CB::ENGINE_OPTION_MAX_PARAMETERS, std::atoi(maxParameters), nullptr); | |||||
| engine->setOption(CB::ENGINE_OPTION_MAX_PARAMETERS, std::atoi(maxParameters), nullptr); | |||||
| if (const char* const resetXruns = std::getenv("ENGINE_OPTION_RESET_XRUNS")) | |||||
| engine->setOption(CB::ENGINE_OPTION_RESET_XRUNS, (std::strcmp(resetXruns, "true") == 0) ? 1 : 0, nullptr); | |||||
| if (const char* const uiBridgesTimeout = std::getenv("ENGINE_OPTION_UI_BRIDGES_TIMEOUT")) | if (const char* const uiBridgesTimeout = std::getenv("ENGINE_OPTION_UI_BRIDGES_TIMEOUT")) | ||||
| engine->setOption(CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT, std::atoi(uiBridgesTimeout), nullptr); | engine->setOption(CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT, std::atoi(uiBridgesTimeout), nullptr); | ||||
| @@ -236,14 +239,14 @@ static void carla_engine_init_common(CarlaEngine* const engine) | |||||
| engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_SFZ, pathSFZ); | engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_SFZ, pathSFZ); | ||||
| if (const char* const binaryDir = std::getenv("ENGINE_OPTION_PATH_BINARIES")) | if (const char* const binaryDir = std::getenv("ENGINE_OPTION_PATH_BINARIES")) | ||||
| engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, binaryDir); | |||||
| engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, binaryDir); | |||||
| else | else | ||||
| engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, waterBinaryDir.getFullPathName().toRawUTF8()); | |||||
| engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, waterBinaryDir.getFullPathName().toRawUTF8()); | |||||
| if (const char* const resourceDir = std::getenv("ENGINE_OPTION_PATH_RESOURCES")) | if (const char* const resourceDir = std::getenv("ENGINE_OPTION_PATH_RESOURCES")) | ||||
| engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, resourceDir); | |||||
| engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, resourceDir); | |||||
| else | else | ||||
| engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, waterBinaryDir.getChildFile("resources").getFullPathName().toRawUTF8()); | |||||
| engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, waterBinaryDir.getChildFile("resources").getFullPathName().toRawUTF8()); | |||||
| if (const char* const preventBadBehaviour = std::getenv("ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR")) | if (const char* const preventBadBehaviour = std::getenv("ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR")) | ||||
| engine->setOption(CB::ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, (std::strcmp(preventBadBehaviour, "true") == 0) ? 1 : 0, nullptr); | engine->setOption(CB::ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, (std::strcmp(preventBadBehaviour, "true") == 0) ? 1 : 0, nullptr); | ||||
| @@ -256,6 +259,7 @@ static void carla_engine_init_common(CarlaEngine* const engine) | |||||
| engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, gStandalone.engineOptions.preferUiBridges ? 1 : 0, nullptr); | engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, gStandalone.engineOptions.preferUiBridges ? 1 : 0, nullptr); | ||||
| engine->setOption(CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP, gStandalone.engineOptions.uisAlwaysOnTop ? 1 : 0, nullptr); | engine->setOption(CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP, gStandalone.engineOptions.uisAlwaysOnTop ? 1 : 0, nullptr); | ||||
| engine->setOption(CB::ENGINE_OPTION_MAX_PARAMETERS, static_cast<int>(gStandalone.engineOptions.maxParameters), nullptr); | engine->setOption(CB::ENGINE_OPTION_MAX_PARAMETERS, static_cast<int>(gStandalone.engineOptions.maxParameters), nullptr); | ||||
| engine->setOption(CB::ENGINE_OPTION_RESET_XRUNS, gStandalone.engineOptions.resetXruns ? 1 : 0, nullptr); | |||||
| engine->setOption(CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT, static_cast<int>(gStandalone.engineOptions.uiBridgesTimeout), nullptr); | engine->setOption(CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT, static_cast<int>(gStandalone.engineOptions.uiBridgesTimeout), nullptr); | ||||
| engine->setOption(CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE, static_cast<int>(gStandalone.engineOptions.audioBufferSize), nullptr); | engine->setOption(CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE, static_cast<int>(gStandalone.engineOptions.audioBufferSize), nullptr); | ||||
| engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, static_cast<int>(gStandalone.engineOptions.audioSampleRate), nullptr); | engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, static_cast<int>(gStandalone.engineOptions.audioSampleRate), nullptr); | ||||
| @@ -409,15 +413,19 @@ bool carla_engine_init(const char* driverName, const char* clientName) | |||||
| } | } | ||||
| #ifdef BUILD_BRIDGE | #ifdef BUILD_BRIDGE | ||||
| bool carla_engine_init_bridge(const char audioBaseName[6+1], const char rtClientBaseName[6+1], const char nonRtClientBaseName[6+1], | |||||
| const char nonRtServerBaseName[6+1], const char* clientName) | |||||
| bool carla_engine_init_bridge(const char audioBaseName[6+1], | |||||
| const char rtClientBaseName[6+1], | |||||
| const char nonRtClientBaseName[6+1], | |||||
| const char nonRtServerBaseName[6+1], | |||||
| const char* const clientName) | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(audioBaseName != nullptr && audioBaseName[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(audioBaseName != nullptr && audioBaseName[0] != '\0', false); | ||||
| CARLA_SAFE_ASSERT_RETURN(rtClientBaseName != nullptr && rtClientBaseName[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(rtClientBaseName != nullptr && rtClientBaseName[0] != '\0', false); | ||||
| CARLA_SAFE_ASSERT_RETURN(nonRtClientBaseName != nullptr && nonRtClientBaseName[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(nonRtClientBaseName != nullptr && nonRtClientBaseName[0] != '\0', false); | ||||
| CARLA_SAFE_ASSERT_RETURN(nonRtServerBaseName != nullptr && nonRtServerBaseName[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(nonRtServerBaseName != nullptr && nonRtServerBaseName[0] != '\0', false); | ||||
| CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); | ||||
| carla_debug("carla_engine_init_bridge(\"%s\", \"%s\", \"%s\", \"%s\", \"%s\")", audioBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName, clientName); | |||||
| carla_debug("carla_engine_init_bridge(\"%s\", \"%s\", \"%s\", \"%s\", \"%s\")", | |||||
| audioBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName, clientName); | |||||
| CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(gStandalone.engine == nullptr, "Engine is already initialized", false); | CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(gStandalone.engine == nullptr, "Engine is already initialized", false); | ||||
| @@ -694,6 +702,11 @@ void carla_set_engine_option(EngineOption option, int value, const char* valueSt | |||||
| gStandalone.engineOptions.maxParameters = static_cast<uint>(value); | gStandalone.engineOptions.maxParameters = static_cast<uint>(value); | ||||
| break; | break; | ||||
| case CB::ENGINE_OPTION_RESET_XRUNS: | |||||
| CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); | |||||
| gStandalone.engineOptions.resetXruns = (value != 0); | |||||
| break; | |||||
| case CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT: | case CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT: | ||||
| CARLA_SAFE_ASSERT_RETURN(value >= 0,); | CARLA_SAFE_ASSERT_RETURN(value >= 0,); | ||||
| gStandalone.engineOptions.uiBridgesTimeout = static_cast<uint>(value); | gStandalone.engineOptions.uiBridgesTimeout = static_cast<uint>(value); | ||||
| @@ -1704,6 +1704,11 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||||
| pData->options.maxParameters = static_cast<uint>(value); | pData->options.maxParameters = static_cast<uint>(value); | ||||
| break; | break; | ||||
| case ENGINE_OPTION_RESET_XRUNS: | |||||
| CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); | |||||
| pData->options.resetXruns = (value != 0); | |||||
| break; | |||||
| case ENGINE_OPTION_UI_BRIDGES_TIMEOUT: | case ENGINE_OPTION_UI_BRIDGES_TIMEOUT: | ||||
| CARLA_SAFE_ASSERT_RETURN(value >= 0,); | CARLA_SAFE_ASSERT_RETURN(value >= 0,); | ||||
| pData->options.uiBridgesTimeout = static_cast<uint>(value); | pData->options.uiBridgesTimeout = static_cast<uint>(value); | ||||
| @@ -2881,6 +2886,9 @@ bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc) | |||||
| } | } | ||||
| #endif | #endif | ||||
| if (pData->options.resetXruns) | |||||
| clearXruns(); | |||||
| callback(true, true, ENGINE_CALLBACK_PROJECT_LOAD_FINISHED, 0, 0, 0, 0, 0.0f, nullptr); | callback(true, true, ENGINE_CALLBACK_PROJECT_LOAD_FINISHED, 0, 0, 0, 0, 0.0f, nullptr); | ||||
| callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, 0, 0, 0, 0, 0.0f, "Loading project"); | callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, 0, 0, 0, 0, 0.0f, "Loading project"); | ||||
| return true; | return true; | ||||
| @@ -184,6 +184,7 @@ EngineOptions::EngineOptions() noexcept | |||||
| #endif | #endif | ||||
| transportExtra(nullptr), | transportExtra(nullptr), | ||||
| forceStereo(false), | forceStereo(false), | ||||
| resetXruns(false), | |||||
| preferPluginBridges(false), | preferPluginBridges(false), | ||||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | ||||
| preferUiBridges(false), | preferUiBridges(false), | ||||
| @@ -893,95 +893,98 @@ ENGINE_OPTION_UIS_ALWAYS_ON_TOP = 6 | |||||
| # Default is MAX_DEFAULT_PARAMETERS. | # Default is MAX_DEFAULT_PARAMETERS. | ||||
| ENGINE_OPTION_MAX_PARAMETERS = 7 | ENGINE_OPTION_MAX_PARAMETERS = 7 | ||||
| # Reset Xrun counter after project load. | |||||
| ENGINE_OPTION_RESET_XRUNS = 8 | |||||
| # Timeout value for how much to wait for UI bridges to respond, in milliseconds. | # Timeout value for how much to wait for UI bridges to respond, in milliseconds. | ||||
| # Default is 4000 (4 seconds). | # Default is 4000 (4 seconds). | ||||
| ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 8 | |||||
| ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 9 | |||||
| # Audio buffer size. | # Audio buffer size. | ||||
| # Default is 512. | # Default is 512. | ||||
| ENGINE_OPTION_AUDIO_BUFFER_SIZE = 9 | |||||
| ENGINE_OPTION_AUDIO_BUFFER_SIZE = 10 | |||||
| # Audio sample rate. | # Audio sample rate. | ||||
| # Default is 44100. | # Default is 44100. | ||||
| ENGINE_OPTION_AUDIO_SAMPLE_RATE = 10 | |||||
| ENGINE_OPTION_AUDIO_SAMPLE_RATE = 11 | |||||
| # Wherever to use 3 audio periods instead of the default 2. | # Wherever to use 3 audio periods instead of the default 2. | ||||
| # Default is false. | # Default is false. | ||||
| ENGINE_OPTION_AUDIO_TRIPLE_BUFFER = 11 | |||||
| ENGINE_OPTION_AUDIO_TRIPLE_BUFFER = 12 | |||||
| # Audio driver. | # Audio driver. | ||||
| # Default dppends on platform. | # Default dppends on platform. | ||||
| ENGINE_OPTION_AUDIO_DRIVER = 12 | |||||
| ENGINE_OPTION_AUDIO_DRIVER = 13 | |||||
| # Audio device (within a driver). | # Audio device (within a driver). | ||||
| # Default unset. | # Default unset. | ||||
| ENGINE_OPTION_AUDIO_DEVICE = 13 | |||||
| ENGINE_OPTION_AUDIO_DEVICE = 14 | |||||
| # Wherever to enable OSC support in the engine. | # Wherever to enable OSC support in the engine. | ||||
| ENGINE_OPTION_OSC_ENABLED = 14 | |||||
| ENGINE_OPTION_OSC_ENABLED = 15 | |||||
| # The network TCP port to use for OSC. | # The network TCP port to use for OSC. | ||||
| # A value of 0 means use a random port. | # A value of 0 means use a random port. | ||||
| # A value of < 0 means to not enable the TCP port for OSC. | # A value of < 0 means to not enable the TCP port for OSC. | ||||
| # @note Valid ports begin at 1024 and end at 32767 (inclusive) | # @note Valid ports begin at 1024 and end at 32767 (inclusive) | ||||
| ENGINE_OPTION_OSC_PORT_TCP = 15 | |||||
| ENGINE_OPTION_OSC_PORT_TCP = 16 | |||||
| # The network UDP port to use for OSC. | # The network UDP port to use for OSC. | ||||
| # A value of 0 means use a random port. | # A value of 0 means use a random port. | ||||
| # A value of < 0 means to not enable the UDP port for OSC. | # A value of < 0 means to not enable the UDP port for OSC. | ||||
| # @note Disabling this option prevents DSSI UIs from working! | # @note Disabling this option prevents DSSI UIs from working! | ||||
| # @note Valid ports begin at 1024 and end at 32767 (inclusive) | # @note Valid ports begin at 1024 and end at 32767 (inclusive) | ||||
| ENGINE_OPTION_OSC_PORT_UDP = 16 | |||||
| ENGINE_OPTION_OSC_PORT_UDP = 17 | |||||
| # Set path used for a specific file type. | # Set path used for a specific file type. | ||||
| # Uses value as the file format, valueStr as actual path. | # Uses value as the file format, valueStr as actual path. | ||||
| ENGINE_OPTION_FILE_PATH = 17 | |||||
| ENGINE_OPTION_FILE_PATH = 18 | |||||
| # Set path used for a specific plugin type. | # Set path used for a specific plugin type. | ||||
| # Uses value as the plugin format, valueStr as actual path. | # Uses value as the plugin format, valueStr as actual path. | ||||
| # @see PluginType | # @see PluginType | ||||
| ENGINE_OPTION_PLUGIN_PATH = 18 | |||||
| ENGINE_OPTION_PLUGIN_PATH = 19 | |||||
| # Set path to the binary files. | # Set path to the binary files. | ||||
| # Default unset. | # Default unset. | ||||
| # @note Must be set for plugin and UI bridges to work | # @note Must be set for plugin and UI bridges to work | ||||
| ENGINE_OPTION_PATH_BINARIES = 19 | |||||
| ENGINE_OPTION_PATH_BINARIES = 20 | |||||
| # Set path to the resource files. | # Set path to the resource files. | ||||
| # Default unset. | # Default unset. | ||||
| # @note Must be set for some internal plugins to work | # @note Must be set for some internal plugins to work | ||||
| ENGINE_OPTION_PATH_RESOURCES = 20 | |||||
| ENGINE_OPTION_PATH_RESOURCES = 21 | |||||
| # Prevent bad plugin and UI behaviour. | # Prevent bad plugin and UI behaviour. | ||||
| # @note: Linux only | # @note: Linux only | ||||
| ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 21 | |||||
| ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 22 | |||||
| # Set UI scaling used in frontend, so backend can do the same for plugin UIs. | # Set UI scaling used in frontend, so backend can do the same for plugin UIs. | ||||
| ENGINE_OPTION_FRONTEND_UI_SCALE = 22 | |||||
| ENGINE_OPTION_FRONTEND_UI_SCALE = 23 | |||||
| # Set frontend winId, used to define as parent window for plugin UIs. | # Set frontend winId, used to define as parent window for plugin UIs. | ||||
| ENGINE_OPTION_FRONTEND_WIN_ID = 23 | |||||
| ENGINE_OPTION_FRONTEND_WIN_ID = 24 | |||||
| # Set path to wine executable. | # Set path to wine executable. | ||||
| ENGINE_OPTION_WINE_EXECUTABLE = 24 | |||||
| ENGINE_OPTION_WINE_EXECUTABLE = 25 | |||||
| # Enable automatic wineprefix detection. | # Enable automatic wineprefix detection. | ||||
| ENGINE_OPTION_WINE_AUTO_PREFIX = 25 | |||||
| ENGINE_OPTION_WINE_AUTO_PREFIX = 26 | |||||
| # Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. | # Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. | ||||
| ENGINE_OPTION_WINE_FALLBACK_PREFIX = 26 | |||||
| ENGINE_OPTION_WINE_FALLBACK_PREFIX = 27 | |||||
| # Enable realtime priority for Wine application and server threads. | # Enable realtime priority for Wine application and server threads. | ||||
| ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 27 | |||||
| ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 28 | |||||
| # Base realtime priority for Wine threads. | # Base realtime priority for Wine threads. | ||||
| ENGINE_OPTION_WINE_BASE_RT_PRIO = 28 | |||||
| ENGINE_OPTION_WINE_BASE_RT_PRIO = 29 | |||||
| # Wine server realtime priority. | # Wine server realtime priority. | ||||
| ENGINE_OPTION_WINE_SERVER_RT_PRIO = 29 | |||||
| ENGINE_OPTION_WINE_SERVER_RT_PRIO = 30 | |||||
| # Capture console output into debug callbacks | # Capture console output into debug callbacks | ||||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 30 | |||||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 31 | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # Engine Process Mode | # Engine Process Mode | ||||
| @@ -1498,6 +1501,7 @@ class CarlaHostMeta(object): | |||||
| self.forceStereo = False | self.forceStereo = False | ||||
| self.manageUIs = False | self.manageUIs = False | ||||
| self.maxParameters = 0 | self.maxParameters = 0 | ||||
| self.resetXruns = False | |||||
| self.preferPluginBridges = False | self.preferPluginBridges = False | ||||
| self.preferUIBridges = False | self.preferUIBridges = False | ||||
| self.preventBadBehaviour = False | self.preventBadBehaviour = False | ||||
| @@ -99,7 +99,8 @@ CarlaHost::CarlaHost() | |||||
| exportLV2(false), | exportLV2(false), | ||||
| forceStereo(false), | forceStereo(false), | ||||
| manageUIs(false), | manageUIs(false), | ||||
| maxParameters(false), | |||||
| maxParameters(0), | |||||
| resetXruns(false), | |||||
| preferPluginBridges(false), | preferPluginBridges(false), | ||||
| preferUIBridges(false), | preferUIBridges(false), | ||||
| preventBadBehaviour(false), | preventBadBehaviour(false), | ||||
| @@ -2549,6 +2550,7 @@ void loadHostSettings(CarlaHost& host) | |||||
| host.exportLV2 = settings.valueBool(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT); | host.exportLV2 = settings.valueBool(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT); | ||||
| host.manageUIs = settings.valueBool(CARLA_KEY_ENGINE_MANAGE_UIS, CARLA_DEFAULT_MANAGE_UIS); | host.manageUIs = settings.valueBool(CARLA_KEY_ENGINE_MANAGE_UIS, CARLA_DEFAULT_MANAGE_UIS); | ||||
| host.maxParameters = settings.valueUInt(CARLA_KEY_ENGINE_MAX_PARAMETERS, CARLA_DEFAULT_MAX_PARAMETERS); | host.maxParameters = settings.valueUInt(CARLA_KEY_ENGINE_MAX_PARAMETERS, CARLA_DEFAULT_MAX_PARAMETERS); | ||||
| host.resetXruns = settings.valueBool(CARLA_KEY_ENGINE_RESET_XRUNS, CARLA_DEFAULT_RESET_XRUNS); | |||||
| host.forceStereo = settings.valueBool(CARLA_KEY_ENGINE_FORCE_STEREO, CARLA_DEFAULT_FORCE_STEREO); | host.forceStereo = settings.valueBool(CARLA_KEY_ENGINE_FORCE_STEREO, CARLA_DEFAULT_FORCE_STEREO); | ||||
| host.preferPluginBridges = settings.valueBool(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES); | host.preferPluginBridges = settings.valueBool(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES); | ||||
| host.preferUIBridges = settings.valueBool(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, CARLA_DEFAULT_PREFER_UI_BRIDGES); | host.preferUIBridges = settings.valueBool(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, CARLA_DEFAULT_PREFER_UI_BRIDGES); | ||||
| @@ -72,6 +72,7 @@ public: | |||||
| bool forceStereo; | bool forceStereo; | ||||
| bool manageUIs; | bool manageUIs; | ||||
| uint maxParameters; | uint maxParameters; | ||||
| bool resetXruns; | |||||
| bool preferPluginBridges; | bool preferPluginBridges; | ||||
| bool preferUIBridges; | bool preferUIBridges; | ||||
| bool preventBadBehaviour; | bool preventBadBehaviour; | ||||
| @@ -2955,6 +2955,7 @@ def loadHostSettings(host): | |||||
| host.exportLV2 = settings.value(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT, bool) | host.exportLV2 = settings.value(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT, bool) | ||||
| host.manageUIs = settings.value(CARLA_KEY_ENGINE_MANAGE_UIS, CARLA_DEFAULT_MANAGE_UIS, bool) | host.manageUIs = settings.value(CARLA_KEY_ENGINE_MANAGE_UIS, CARLA_DEFAULT_MANAGE_UIS, bool) | ||||
| host.maxParameters = settings.value(CARLA_KEY_ENGINE_MAX_PARAMETERS, CARLA_DEFAULT_MAX_PARAMETERS, int) | host.maxParameters = settings.value(CARLA_KEY_ENGINE_MAX_PARAMETERS, CARLA_DEFAULT_MAX_PARAMETERS, int) | ||||
| host.resetXruns = settings.value(CARLA_KEY_ENGINE_RESET_XRUNS, CARLA_DEFAULT_RESET_XRUNS, bool) | |||||
| host.forceStereo = settings.value(CARLA_KEY_ENGINE_FORCE_STEREO, CARLA_DEFAULT_FORCE_STEREO, bool) | host.forceStereo = settings.value(CARLA_KEY_ENGINE_FORCE_STEREO, CARLA_DEFAULT_FORCE_STEREO, bool) | ||||
| host.preferPluginBridges = settings.value(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES, bool) | host.preferPluginBridges = settings.value(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES, bool) | ||||
| host.preferUIBridges = settings.value(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, CARLA_DEFAULT_PREFER_UI_BRIDGES, bool) | host.preferUIBridges = settings.value(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, CARLA_DEFAULT_PREFER_UI_BRIDGES, bool) | ||||
| @@ -3008,6 +3009,7 @@ def setHostSettings(host): | |||||
| host.set_engine_option(ENGINE_OPTION_FORCE_STEREO, host.forceStereo, "") | host.set_engine_option(ENGINE_OPTION_FORCE_STEREO, host.forceStereo, "") | ||||
| host.set_engine_option(ENGINE_OPTION_MAX_PARAMETERS, host.maxParameters, "") | host.set_engine_option(ENGINE_OPTION_MAX_PARAMETERS, host.maxParameters, "") | ||||
| host.set_engine_option(ENGINE_OPTION_RESET_XRUNS, host.resetXruns, "") | |||||
| host.set_engine_option(ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, host.preferPluginBridges, "") | host.set_engine_option(ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, host.preferPluginBridges, "") | ||||
| host.set_engine_option(ENGINE_OPTION_PREFER_UI_BRIDGES, host.preferUIBridges, "") | host.set_engine_option(ENGINE_OPTION_PREFER_UI_BRIDGES, host.preferUIBridges, "") | ||||
| host.set_engine_option(ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, host.preventBadBehaviour, "") | host.set_engine_option(ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, host.preventBadBehaviour, "") | ||||
| @@ -435,9 +435,9 @@ enum PluginPathIndexes { | |||||
| struct CarlaSettingsW::PrivateData { | struct CarlaSettingsW::PrivateData { | ||||
| Ui::CarlaSettingsW ui; | Ui::CarlaSettingsW ui; | ||||
| const CarlaHost& host; | |||||
| CarlaHost& host; | |||||
| PrivateData(CarlaSettingsW* const self, const CarlaHost& h) | |||||
| PrivateData(CarlaSettingsW* const self, CarlaHost& h) | |||||
| : ui(), | : ui(), | ||||
| host(h) | host(h) | ||||
| { | { | ||||
| @@ -578,6 +578,7 @@ struct CarlaSettingsW::PrivateData { | |||||
| ui.cb_engine_process_mode_other->setCurrentIndex(0); | ui.cb_engine_process_mode_other->setCurrentIndex(0); | ||||
| ui.sb_engine_max_params->setValue(static_cast<int>(host.maxParameters)); | ui.sb_engine_max_params->setValue(static_cast<int>(host.maxParameters)); | ||||
| ui.cb_engine_reset_xruns->setChecked(host.resetXruns); | |||||
| ui.ch_engine_manage_uis->setChecked(host.manageUIs); | ui.ch_engine_manage_uis->setChecked(host.manageUIs); | ||||
| ui.ch_engine_prefer_ui_bridges->setChecked(host.preferUIBridges); | ui.ch_engine_prefer_ui_bridges->setChecked(host.preferUIBridges); | ||||
| ui.sb_engine_ui_bridges_timeout->setValue(host.uiBridgesTimeout); | ui.sb_engine_ui_bridges_timeout->setValue(host.uiBridgesTimeout); | ||||
| @@ -746,6 +747,429 @@ struct CarlaSettingsW::PrivateData { | |||||
| CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR)); | CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR)); | ||||
| } | } | ||||
| void saveSettings() | |||||
| { | |||||
| { | |||||
| QSafeSettings settings; | |||||
| host.experimental = ui.ch_main_experimental->isChecked(); | |||||
| if (! host.experimental) | |||||
| resetExperimentalSettings(); | |||||
| // -------------------------------------------------------------------------------------------------------- | |||||
| // Main | |||||
| settings.setValue(CARLA_KEY_MAIN_PROJECT_FOLDER, ui.le_main_proj_folder->text()); | |||||
| settings.setValue(CARLA_KEY_MAIN_CONFIRM_EXIT, ui.ch_main_confirm_exit->isChecked()); | |||||
| settings.setValue(CARLA_KEY_MAIN_USE_PRO_THEME, ui.ch_main_theme_pro->isChecked()); | |||||
| settings.setValue(CARLA_KEY_MAIN_PRO_THEME_COLOR, ui.cb_main_theme_color->currentText()); | |||||
| settings.setValue(CARLA_KEY_MAIN_REFRESH_INTERVAL, ui.sb_main_refresh_interval->value()); | |||||
| // -------------------------------------------------------------------------------------------------------- | |||||
| // Canvas | |||||
| settings.setValue(CARLA_KEY_CANVAS_THEME, ui.cb_canvas_theme->currentText()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_SIZE, ui.cb_canvas_size->currentText()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_USE_BEZIER_LINES, ui.cb_canvas_bezier_lines->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_AUTO_HIDE_GROUPS, ui.cb_canvas_hide_groups->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS, ui.cb_canvas_auto_select->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_EYE_CANDY, ui.cb_canvas_eyecandy->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_FANCY_EYE_CANDY, ui.cb_canvas_fancy_eyecandy->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_USE_OPENGL, ui.cb_canvas_use_opengl->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_HQ_ANTIALIASING, ui.cb_canvas_render_hq_aa->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_ANTIALIASING, ui.cb_canvas_render_aa->checkState()); // 0, 1, 2 match their enum variants | |||||
| settings.setValue(CARLA_KEY_CANVAS_FULL_REPAINTS, ui.cb_canvas_full_repaints->isChecked()); | |||||
| settings.setValue(CARLA_KEY_CANVAS_INLINE_DISPLAYS, ui.cb_canvas_inline_displays->isChecked()); | |||||
| } | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| QSafeSettings settings("falkTX", "Carla2"); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Main | |||||
| settings.setValue(CARLA_KEY_MAIN_EXPERIMENTAL, host.experimental); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Engine | |||||
| const QCarlaString audioDriver = ui.cb_engine_audio_driver->currentText(); | |||||
| if (audioDriver.isNotEmpty() && host.audioDriverForced.isEmpty() && ! host.isPlugin) | |||||
| settings.setValue(CARLA_KEY_ENGINE_AUDIO_DRIVER, audioDriver); | |||||
| if (! host.processModeForced) | |||||
| { | |||||
| // engine sends callback if processMode really changes | |||||
| if (audioDriver == "JACK") | |||||
| host.nextProcessMode = static_cast<EngineProcessMode>(ui.cb_engine_process_mode_jack->currentIndex()); | |||||
| else | |||||
| host.nextProcessMode = static_cast<EngineProcessMode>(ui.cb_engine_process_mode_other->currentIndex() + PROCESS_MODE_NON_JACK_PADDING); | |||||
| settings.setValue(CARLA_KEY_ENGINE_PROCESS_MODE, host.nextProcessMode); | |||||
| } | |||||
| host.exportLV2 = ui.ch_exp_export_lv2->isChecked(); | |||||
| host.forceStereo = ui.ch_engine_force_stereo->isChecked(); | |||||
| host.resetXruns = ui.cb_engine_reset_xruns->isChecked(); | |||||
| host.maxParameters = static_cast<uint>(std::max(0, ui.sb_engine_max_params->value())); | |||||
| host.manageUIs = ui.ch_engine_manage_uis->isChecked(); | |||||
| host.preferPluginBridges = ui.ch_engine_prefer_plugin_bridges->isChecked(); | |||||
| host.preferUIBridges = ui.ch_engine_prefer_ui_bridges->isChecked(); | |||||
| host.showLogs = ui.ch_main_show_logs->isChecked(); | |||||
| host.showPluginBridges = ui.cb_exp_plugin_bridges->isChecked(); | |||||
| host.showWineBridges = ui.ch_exp_wine_bridges->isChecked(); | |||||
| host.uiBridgesTimeout = ui.sb_engine_ui_bridges_timeout->value(); | |||||
| host.uisAlwaysOnTop = ui.ch_engine_uis_always_on_top->isChecked(); | |||||
| if (ui.ch_engine_force_stereo->isEnabled()) | |||||
| settings.setValue(CARLA_KEY_ENGINE_FORCE_STEREO, host.forceStereo); | |||||
| settings.setValue(CARLA_KEY_MAIN_SHOW_LOGS, host.showLogs); | |||||
| settings.setValue(CARLA_KEY_ENGINE_MAX_PARAMETERS, host.maxParameters); | |||||
| settings.setValue(CARLA_KEY_ENGINE_RESET_XRUNS, host.resetXruns); | |||||
| settings.setValue(CARLA_KEY_ENGINE_MANAGE_UIS, host.manageUIs); | |||||
| settings.setValue(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, host.preferPluginBridges); | |||||
| settings.setValue(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, host.preferUIBridges); | |||||
| settings.setValue(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, host.uiBridgesTimeout); | |||||
| settings.setValue(CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP, host.uisAlwaysOnTop); | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, host.exportLV2); | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, host.showPluginBridges); | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_WINE_BRIDGES, host.showWineBridges); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // OSC | |||||
| settings.setValue(CARLA_KEY_OSC_ENABLED, ui.ch_osc_enable->isChecked()); | |||||
| settings.setValue(CARLA_KEY_OSC_TCP_PORT_ENABLED, ui.group_osc_tcp_port->isChecked()); | |||||
| settings.setValue(CARLA_KEY_OSC_UDP_PORT_ENABLED, ui.group_osc_udp_port->isChecked()); | |||||
| settings.setValue(CARLA_KEY_OSC_TCP_PORT_RANDOM, ui.rb_osc_tcp_port_random->isChecked()); | |||||
| settings.setValue(CARLA_KEY_OSC_UDP_PORT_RANDOM, ui.rb_osc_udp_port_random->isChecked()); | |||||
| settings.setValue(CARLA_KEY_OSC_TCP_PORT_NUMBER, ui.sb_osc_tcp_port_number->value()); | |||||
| settings.setValue(CARLA_KEY_OSC_UDP_PORT_NUMBER, ui.sb_osc_udp_port_number->value()); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // File Paths | |||||
| QStringList audioPaths; | |||||
| QStringList midiPaths; | |||||
| for (int i=0; i < ui.lw_files_audio->count(); ++i) | |||||
| audioPaths.append(ui.lw_files_audio->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_files_midi->count(); ++i) | |||||
| midiPaths.append(ui.lw_files_midi->item(i)->text()); | |||||
| /* TODO | |||||
| host.set_engine_option(ENGINE_OPTION_FILE_PATH, FILE_AUDIO, splitter.join(audioPaths)); | |||||
| host.set_engine_option(ENGINE_OPTION_FILE_PATH, FILE_MIDI, splitter.join(midiPaths)); | |||||
| */ | |||||
| settings.setValue(CARLA_KEY_PATHS_AUDIO, audioPaths); | |||||
| settings.setValue(CARLA_KEY_PATHS_MIDI, midiPaths); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Plugin Paths | |||||
| QStringList ladspas; | |||||
| QStringList dssis; | |||||
| QStringList lv2s; | |||||
| QStringList vst2s; | |||||
| QStringList vst3s; | |||||
| QStringList sf2s; | |||||
| QStringList sfzs; | |||||
| for (int i=0; i < ui.lw_ladspa->count(); ++i) | |||||
| ladspas.append(ui.lw_ladspa->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_dssi->count(); ++i) | |||||
| dssis.append(ui.lw_dssi->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_lv2->count(); ++i) | |||||
| lv2s.append(ui.lw_lv2->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_vst->count(); ++i) | |||||
| vst2s.append(ui.lw_vst->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_vst3->count(); ++i) | |||||
| vst3s.append(ui.lw_vst3->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_sf2->count(); ++i) | |||||
| sf2s.append(ui.lw_sf2->item(i)->text()); | |||||
| for (int i=0; i < ui.lw_sfz->count(); ++i) | |||||
| sfzs.append(ui.lw_sfz->item(i)->text()); | |||||
| /* TODO | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_LADSPA, splitter.join(ladspas)); | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_DSSI, splitter.join(dssis)); | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_LV2, splitter.join(lv2s)); | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_VST2, splitter.join(vst2s)); | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_VST3, splitter.join(vst3s)); | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_SF2, splitter.join(sf2s)); | |||||
| host.set_engine_option(ENGINE_OPTION_PLUGIN_PATH, PLUGIN_SFZ, splitter.join(sfzs)); | |||||
| */ | |||||
| settings.setValue(CARLA_KEY_PATHS_LADSPA, ladspas); | |||||
| settings.setValue(CARLA_KEY_PATHS_DSSI, dssis); | |||||
| settings.setValue(CARLA_KEY_PATHS_LV2, lv2s); | |||||
| settings.setValue(CARLA_KEY_PATHS_VST2, vst2s); | |||||
| settings.setValue(CARLA_KEY_PATHS_VST3, vst3s); | |||||
| settings.setValue(CARLA_KEY_PATHS_SF2, sf2s); | |||||
| settings.setValue(CARLA_KEY_PATHS_SFZ, sfzs); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Wine | |||||
| settings.setValue(CARLA_KEY_WINE_EXECUTABLE, ui.le_wine_exec->text()); | |||||
| settings.setValue(CARLA_KEY_WINE_AUTO_PREFIX, ui.cb_wine_prefix_detect->isChecked()); | |||||
| settings.setValue(CARLA_KEY_WINE_FALLBACK_PREFIX, ui.le_wine_prefix_fallback->text()); | |||||
| settings.setValue(CARLA_KEY_WINE_RT_PRIO_ENABLED, ui.group_wine_realtime->isChecked()); | |||||
| settings.setValue(CARLA_KEY_WINE_BASE_RT_PRIO, ui.sb_wine_base_prio->value()); | |||||
| settings.setValue(CARLA_KEY_WINE_SERVER_RT_PRIO, ui.sb_wine_server_prio->value()); | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Experimental | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, ui.ch_exp_jack_apps->isChecked()); | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, ui.ch_exp_load_lib_global->isChecked()); | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, ui.ch_exp_prevent_bad_behaviour->isChecked()); | |||||
| } | |||||
| void resetSettings() | |||||
| { | |||||
| switch (ui.lw_page->currentRow()) | |||||
| { | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Main | |||||
| case TAB_INDEX_MAIN: | |||||
| ui.le_main_proj_folder->setText(CARLA_DEFAULT_MAIN_PROJECT_FOLDER); | |||||
| ui.ch_main_theme_pro->setChecked(CARLA_DEFAULT_MAIN_USE_PRO_THEME && ui.group_main_theme->isEnabled()); | |||||
| ui.cb_main_theme_color->setCurrentIndex(ui.cb_main_theme_color->findText(CARLA_DEFAULT_MAIN_PRO_THEME_COLOR)); | |||||
| ui.sb_main_refresh_interval->setValue(CARLA_DEFAULT_MAIN_REFRESH_INTERVAL); | |||||
| ui.ch_main_confirm_exit->setChecked(CARLA_DEFAULT_MAIN_CONFIRM_EXIT); | |||||
| ui.ch_main_show_logs->setChecked(CARLA_DEFAULT_MAIN_SHOW_LOGS); | |||||
| break; | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Canvas | |||||
| case TAB_INDEX_CANVAS: | |||||
| ui.cb_canvas_theme->setCurrentIndex(ui.cb_canvas_theme->findText(CARLA_DEFAULT_CANVAS_THEME)); | |||||
| ui.cb_canvas_size->setCurrentIndex(ui.cb_canvas_size->findText(CARLA_DEFAULT_CANVAS_SIZE)); | |||||
| ui.cb_canvas_bezier_lines->setChecked(CARLA_DEFAULT_CANVAS_USE_BEZIER_LINES); | |||||
| ui.cb_canvas_hide_groups->setChecked(CARLA_DEFAULT_CANVAS_AUTO_HIDE_GROUPS); | |||||
| ui.cb_canvas_auto_select->setChecked(CARLA_DEFAULT_CANVAS_AUTO_SELECT_ITEMS); | |||||
| ui.cb_canvas_eyecandy->setChecked(CARLA_DEFAULT_CANVAS_EYE_CANDY); | |||||
| ui.cb_canvas_render_aa->setCheckState(Qt::PartiallyChecked); // CARLA_DEFAULT_CANVAS_ANTIALIASING | |||||
| ui.cb_canvas_full_repaints->setChecked(CARLA_DEFAULT_CANVAS_FULL_REPAINTS); | |||||
| break; | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Engine | |||||
| case TAB_INDEX_ENGINE: | |||||
| if (! host.isPlugin) | |||||
| ui.cb_engine_audio_driver->setCurrentIndex(0); | |||||
| if (! host.processModeForced) | |||||
| { | |||||
| if (ui.cb_engine_audio_driver->currentText() == "JACK") | |||||
| { | |||||
| ui.cb_engine_process_mode_jack->setCurrentIndex(CARLA_DEFAULT_PROCESS_MODE); | |||||
| ui.sw_engine_process_mode->setCurrentIndex(0); // show all modes | |||||
| } | |||||
| else | |||||
| { | |||||
| ui.cb_engine_process_mode_other->setCurrentIndex(CARLA_DEFAULT_PROCESS_MODE-PROCESS_MODE_NON_JACK_PADDING); | |||||
| ui.sw_engine_process_mode->setCurrentIndex(1); // hide single+multi client modes | |||||
| } | |||||
| } | |||||
| ui.sb_engine_max_params->setValue(CARLA_DEFAULT_MAX_PARAMETERS); | |||||
| ui.cb_engine_reset_xruns->setChecked(CARLA_DEFAULT_RESET_XRUNS); | |||||
| ui.ch_engine_uis_always_on_top->setChecked(CARLA_DEFAULT_UIS_ALWAYS_ON_TOP); | |||||
| ui.ch_engine_prefer_ui_bridges->setChecked(CARLA_DEFAULT_PREFER_UI_BRIDGES); | |||||
| ui.sb_engine_ui_bridges_timeout->setValue(CARLA_DEFAULT_UI_BRIDGES_TIMEOUT); | |||||
| ui.ch_engine_manage_uis->setChecked(CARLA_DEFAULT_MANAGE_UIS); | |||||
| break; | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // OSC | |||||
| case TAB_INDEX_OSC: | |||||
| ui.ch_osc_enable->setChecked(CARLA_DEFAULT_OSC_ENABLED); | |||||
| ui.group_osc_tcp_port->setChecked(CARLA_DEFAULT_OSC_TCP_PORT_ENABLED); | |||||
| ui.group_osc_udp_port->setChecked(CARLA_DEFAULT_OSC_UDP_PORT_ENABLED); | |||||
| ui.sb_osc_tcp_port_number->setValue(CARLA_DEFAULT_OSC_TCP_PORT_NUMBER); | |||||
| ui.sb_osc_udp_port_number->setValue(CARLA_DEFAULT_OSC_UDP_PORT_NUMBER); | |||||
| if (CARLA_DEFAULT_OSC_TCP_PORT_RANDOM) | |||||
| { | |||||
| ui.rb_osc_tcp_port_specific->setChecked(false); | |||||
| ui.rb_osc_tcp_port_random->setChecked(true); | |||||
| } | |||||
| else | |||||
| { | |||||
| ui.rb_osc_tcp_port_random->setChecked(false); | |||||
| ui.rb_osc_tcp_port_specific->setChecked(true); | |||||
| } | |||||
| if (CARLA_DEFAULT_OSC_UDP_PORT_RANDOM) | |||||
| { | |||||
| ui.rb_osc_udp_port_specific->setChecked(false); | |||||
| ui.rb_osc_udp_port_random->setChecked(true); | |||||
| } | |||||
| else | |||||
| { | |||||
| ui.rb_osc_udp_port_random->setChecked(false); | |||||
| ui.rb_osc_udp_port_specific->setChecked(true); | |||||
| } | |||||
| break; | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Plugin Paths | |||||
| case TAB_INDEX_FILEPATHS: | |||||
| switch (ui.tw_filepaths->currentIndex()) | |||||
| { | |||||
| case FILEPATH_INDEX_AUDIO: | |||||
| ui.lw_files_audio->clear(); | |||||
| break; | |||||
| case FILEPATH_INDEX_MIDI: | |||||
| ui.lw_files_midi->clear(); | |||||
| break; | |||||
| } | |||||
| break; | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Plugin Paths | |||||
| case TAB_INDEX_PLUGINPATHS: | |||||
| { | |||||
| QStringList paths; | |||||
| switch (ui.tw_paths->currentIndex()) | |||||
| { | |||||
| case PLUGINPATH_INDEX_LADSPA: | |||||
| paths = CARLA_DEFAULT_LADSPA_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_ladspa->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_ladspa->addItem(path); | |||||
| } | |||||
| break; | |||||
| case PLUGINPATH_INDEX_DSSI: | |||||
| paths = CARLA_DEFAULT_DSSI_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_dssi->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_dssi->addItem(path); | |||||
| } | |||||
| break; | |||||
| case PLUGINPATH_INDEX_LV2: | |||||
| paths = CARLA_DEFAULT_LV2_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_lv2->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_lv2->addItem(path); | |||||
| } | |||||
| break; | |||||
| case PLUGINPATH_INDEX_VST2: | |||||
| paths = CARLA_DEFAULT_VST2_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_vst->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_vst->addItem(path); | |||||
| } | |||||
| break; | |||||
| case PLUGINPATH_INDEX_VST3: | |||||
| paths = CARLA_DEFAULT_VST3_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_vst3->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_vst3->addItem(path); | |||||
| } | |||||
| break; | |||||
| case PLUGINPATH_INDEX_SF2: | |||||
| paths = CARLA_DEFAULT_SF2_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_sf2->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_sf2->addItem(path); | |||||
| } | |||||
| break; | |||||
| case PLUGINPATH_INDEX_SFZ: | |||||
| paths = CARLA_DEFAULT_SFZ_PATH; | |||||
| paths.sort(); | |||||
| ui.lw_sfz->clear(); | |||||
| for (const auto& path : paths) | |||||
| { | |||||
| if (path.isEmpty()) | |||||
| continue; | |||||
| ui.lw_sfz->addItem(path); | |||||
| } | |||||
| break; | |||||
| } | |||||
| break; | |||||
| } | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Wine | |||||
| case TAB_INDEX_WINE: | |||||
| ui.le_wine_exec->setText(CARLA_DEFAULT_WINE_EXECUTABLE); | |||||
| ui.cb_wine_prefix_detect->setChecked(CARLA_DEFAULT_WINE_AUTO_PREFIX); | |||||
| ui.le_wine_prefix_fallback->setText(CARLA_DEFAULT_WINE_FALLBACK_PREFIX); | |||||
| ui.group_wine_realtime->setChecked(CARLA_DEFAULT_WINE_RT_PRIO_ENABLED); | |||||
| ui.sb_wine_base_prio->setValue(CARLA_DEFAULT_WINE_BASE_RT_PRIO); | |||||
| ui.sb_wine_server_prio->setValue(CARLA_DEFAULT_WINE_SERVER_RT_PRIO); | |||||
| break; | |||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Experimental | |||||
| case TAB_INDEX_EXPERIMENTAL: | |||||
| resetExperimentalSettings(); | |||||
| break; | |||||
| } | |||||
| } | |||||
| void resetExperimentalSettings() | void resetExperimentalSettings() | ||||
| { | { | ||||
| // Forever experimental | // Forever experimental | ||||
| @@ -766,7 +1190,7 @@ struct CarlaSettingsW::PrivateData { | |||||
| } | } | ||||
| }; | }; | ||||
| CarlaSettingsW::CarlaSettingsW(QWidget* const parent, const CarlaHost& host, const bool hasCanvas, const bool hasCanvasGL) | |||||
| CarlaSettingsW::CarlaSettingsW(QWidget* const parent, CarlaHost& host, const bool hasCanvas, const bool hasCanvasGL) | |||||
| : QDialog(parent), | : QDialog(parent), | ||||
| self(new PrivateData(this, host)) | self(new PrivateData(this, host)) | ||||
| { | { | ||||
| @@ -929,12 +1353,12 @@ CarlaSettingsW::~CarlaSettingsW() | |||||
| void CarlaSettingsW::slot_saveSettings() | void CarlaSettingsW::slot_saveSettings() | ||||
| { | { | ||||
| // TODO | |||||
| self->saveSettings(); | |||||
| } | } | ||||
| void CarlaSettingsW::slot_resetSettings() | void CarlaSettingsW::slot_resetSettings() | ||||
| { | { | ||||
| // TODO | |||||
| self->resetSettings(); | |||||
| } | } | ||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -93,7 +93,7 @@ class CarlaSettingsW : public QDialog | |||||
| Q_OBJECT | Q_OBJECT | ||||
| public: | public: | ||||
| CarlaSettingsW(QWidget* parent, const CarlaHost& host, bool hasCanvas, bool hasCanvasGL); | |||||
| CarlaSettingsW(QWidget* parent, CarlaHost& host, bool hasCanvas, bool hasCanvasGL); | |||||
| ~CarlaSettingsW() override; | ~CarlaSettingsW() override; | ||||
| private: | private: | ||||
| @@ -574,6 +574,7 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.cb_engine_process_mode_other.setCurrentIndex(0) | self.ui.cb_engine_process_mode_other.setCurrentIndex(0) | ||||
| self.ui.sb_engine_max_params.setValue(self.host.maxParameters) | self.ui.sb_engine_max_params.setValue(self.host.maxParameters) | ||||
| self.ui.cb_engine_reset_xruns.setChecked(self.host.resetXruns) | |||||
| self.ui.ch_engine_manage_uis.setChecked(self.host.manageUIs) | self.ui.ch_engine_manage_uis.setChecked(self.host.manageUIs) | ||||
| self.ui.ch_engine_prefer_ui_bridges.setChecked(self.host.preferUIBridges) | self.ui.ch_engine_prefer_ui_bridges.setChecked(self.host.preferUIBridges) | ||||
| self.ui.sb_engine_ui_bridges_timeout.setValue(self.host.uiBridgesTimeout) | self.ui.sb_engine_ui_bridges_timeout.setValue(self.host.uiBridgesTimeout) | ||||
| @@ -794,6 +795,7 @@ class CarlaSettingsW(QDialog): | |||||
| self.host.exportLV2 = self.ui.ch_exp_export_lv2.isChecked() | self.host.exportLV2 = self.ui.ch_exp_export_lv2.isChecked() | ||||
| self.host.forceStereo = self.ui.ch_engine_force_stereo.isChecked() | self.host.forceStereo = self.ui.ch_engine_force_stereo.isChecked() | ||||
| self.host.resetXruns = self.ui.cb_engine_reset_xruns.isChecked() | |||||
| self.host.maxParameters = self.ui.sb_engine_max_params.value() | self.host.maxParameters = self.ui.sb_engine_max_params.value() | ||||
| self.host.manageUIs = self.ui.ch_engine_manage_uis.isChecked() | self.host.manageUIs = self.ui.ch_engine_manage_uis.isChecked() | ||||
| self.host.preferPluginBridges = self.ui.ch_engine_prefer_plugin_bridges.isChecked() | self.host.preferPluginBridges = self.ui.ch_engine_prefer_plugin_bridges.isChecked() | ||||
| @@ -809,6 +811,7 @@ class CarlaSettingsW(QDialog): | |||||
| settings.setValue(CARLA_KEY_MAIN_SHOW_LOGS, self.host.showLogs) | settings.setValue(CARLA_KEY_MAIN_SHOW_LOGS, self.host.showLogs) | ||||
| settings.setValue(CARLA_KEY_ENGINE_MAX_PARAMETERS, self.host.maxParameters) | settings.setValue(CARLA_KEY_ENGINE_MAX_PARAMETERS, self.host.maxParameters) | ||||
| settings.setValue(CARLA_KEY_ENGINE_RESET_XRUNS, self.host.resetXruns) | |||||
| settings.setValue(CARLA_KEY_ENGINE_MANAGE_UIS, self.host.manageUIs) | settings.setValue(CARLA_KEY_ENGINE_MANAGE_UIS, self.host.manageUIs) | ||||
| settings.setValue(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, self.host.preferPluginBridges) | settings.setValue(CARLA_KEY_ENGINE_PREFER_PLUGIN_BRIDGES, self.host.preferPluginBridges) | ||||
| settings.setValue(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, self.host.preferUIBridges) | settings.setValue(CARLA_KEY_ENGINE_PREFER_UI_BRIDGES, self.host.preferUIBridges) | ||||
| @@ -958,6 +961,7 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.sw_engine_process_mode.setCurrentIndex(1) # hide single+multi client modes | self.ui.sw_engine_process_mode.setCurrentIndex(1) # hide single+multi client modes | ||||
| self.ui.sb_engine_max_params.setValue(CARLA_DEFAULT_MAX_PARAMETERS) | self.ui.sb_engine_max_params.setValue(CARLA_DEFAULT_MAX_PARAMETERS) | ||||
| self.ui.cb_engine_reset_xruns.setChecked(CARLA_DEFAULT_RESET_XRUNS) | |||||
| self.ui.ch_engine_uis_always_on_top.setChecked(CARLA_DEFAULT_UIS_ALWAYS_ON_TOP) | self.ui.ch_engine_uis_always_on_top.setChecked(CARLA_DEFAULT_UIS_ALWAYS_ON_TOP) | ||||
| self.ui.ch_engine_prefer_ui_bridges.setChecked(CARLA_DEFAULT_PREFER_UI_BRIDGES) | self.ui.ch_engine_prefer_ui_bridges.setChecked(CARLA_DEFAULT_PREFER_UI_BRIDGES) | ||||
| self.ui.sb_engine_ui_bridges_timeout.setValue(CARLA_DEFAULT_UI_BRIDGES_TIMEOUT) | self.ui.sb_engine_ui_bridges_timeout.setValue(CARLA_DEFAULT_UI_BRIDGES_TIMEOUT) | ||||
| @@ -151,6 +151,7 @@ static const char* const* const MIDI_CC_LIST = { | |||||
| #define CARLA_KEY_ENGINE_MANAGE_UIS "Engine/ManageUIs" /* bool */ | #define CARLA_KEY_ENGINE_MANAGE_UIS "Engine/ManageUIs" /* bool */ | ||||
| #define CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP "Engine/UIsAlwaysOnTop" /* bool */ | #define CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP "Engine/UIsAlwaysOnTop" /* bool */ | ||||
| #define CARLA_KEY_ENGINE_MAX_PARAMETERS "Engine/MaxParameters" /* int */ | #define CARLA_KEY_ENGINE_MAX_PARAMETERS "Engine/MaxParameters" /* int */ | ||||
| #define CARLA_KEY_ENGINE_RESET_XRUNS "Engine/ResetXruns" /* bool */ | |||||
| #define CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT "Engine/UiBridgesTimeout" /* int */ | #define CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT "Engine/UiBridgesTimeout" /* int */ | ||||
| #define CARLA_KEY_OSC_ENABLED "OSC/Enabled" | #define CARLA_KEY_OSC_ENABLED "OSC/Enabled" | ||||
| @@ -228,6 +229,7 @@ static const char* const* const MIDI_CC_LIST = { | |||||
| #define CARLA_DEFAULT_MANAGE_UIS true | #define CARLA_DEFAULT_MANAGE_UIS true | ||||
| #define CARLA_DEFAULT_UIS_ALWAYS_ON_TOP false | #define CARLA_DEFAULT_UIS_ALWAYS_ON_TOP false | ||||
| #define CARLA_DEFAULT_MAX_PARAMETERS MAX_DEFAULT_PARAMETERS | #define CARLA_DEFAULT_MAX_PARAMETERS MAX_DEFAULT_PARAMETERS | ||||
| #define CARLA_DEFAULT_RESET_XRUNS false | |||||
| #define CARLA_DEFAULT_UI_BRIDGES_TIMEOUT 4000 | #define CARLA_DEFAULT_UI_BRIDGES_TIMEOUT 4000 | ||||
| #define CARLA_DEFAULT_AUDIO_BUFFER_SIZE 512 | #define CARLA_DEFAULT_AUDIO_BUFFER_SIZE 512 | ||||
| @@ -212,6 +212,7 @@ CARLA_KEY_ENGINE_PREFER_UI_BRIDGES = "Engine/PreferUiBridges" # bool | |||||
| CARLA_KEY_ENGINE_MANAGE_UIS = "Engine/ManageUIs" # bool | CARLA_KEY_ENGINE_MANAGE_UIS = "Engine/ManageUIs" # bool | ||||
| CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP = "Engine/UIsAlwaysOnTop" # bool | CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP = "Engine/UIsAlwaysOnTop" # bool | ||||
| CARLA_KEY_ENGINE_MAX_PARAMETERS = "Engine/MaxParameters" # int | CARLA_KEY_ENGINE_MAX_PARAMETERS = "Engine/MaxParameters" # int | ||||
| CARLA_KEY_ENGINE_RESET_XRUNS = "Engine/ResetXruns" # bool | |||||
| CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT = "Engine/UiBridgesTimeout" # int | CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT = "Engine/UiBridgesTimeout" # int | ||||
| CARLA_KEY_OSC_ENABLED = "OSC/Enabled" | CARLA_KEY_OSC_ENABLED = "OSC/Enabled" | ||||
| @@ -285,6 +286,7 @@ CARLA_DEFAULT_PREFER_UI_BRIDGES = True | |||||
| CARLA_DEFAULT_MANAGE_UIS = True | CARLA_DEFAULT_MANAGE_UIS = True | ||||
| CARLA_DEFAULT_UIS_ALWAYS_ON_TOP = False | CARLA_DEFAULT_UIS_ALWAYS_ON_TOP = False | ||||
| CARLA_DEFAULT_MAX_PARAMETERS = MAX_DEFAULT_PARAMETERS | CARLA_DEFAULT_MAX_PARAMETERS = MAX_DEFAULT_PARAMETERS | ||||
| CARLA_DEFAULT_RESET_XRUNS = False | |||||
| CARLA_DEFAULT_UI_BRIDGES_TIMEOUT = 4000 | CARLA_DEFAULT_UI_BRIDGES_TIMEOUT = 4000 | ||||
| CARLA_DEFAULT_AUDIO_BUFFER_SIZE = 512 | CARLA_DEFAULT_AUDIO_BUFFER_SIZE = 512 | ||||
| @@ -342,6 +342,8 @@ const char* EngineOption2Str(const EngineOption option) noexcept | |||||
| return "ENGINE_OPTION_UIS_ALWAYS_ON_TOP"; | return "ENGINE_OPTION_UIS_ALWAYS_ON_TOP"; | ||||
| case ENGINE_OPTION_MAX_PARAMETERS: | case ENGINE_OPTION_MAX_PARAMETERS: | ||||
| return "ENGINE_OPTION_MAX_PARAMETERS"; | return "ENGINE_OPTION_MAX_PARAMETERS"; | ||||
| case ENGINE_OPTION_RESET_XRUNS: | |||||
| return "ENGINE_OPTION_RESET_XRUNS"; | |||||
| case ENGINE_OPTION_UI_BRIDGES_TIMEOUT: | case ENGINE_OPTION_UI_BRIDGES_TIMEOUT: | ||||
| return "ENGINE_OPTION_UI_BRIDGES_TIMEOUT"; | return "ENGINE_OPTION_UI_BRIDGES_TIMEOUT"; | ||||
| case ENGINE_OPTION_AUDIO_BUFFER_SIZE: | case ENGINE_OPTION_AUDIO_BUFFER_SIZE: | ||||