| @@ -42,6 +42,7 @@ | |||||
| <file>48x48/juce.png</file> | <file>48x48/juce.png</file> | ||||
| <file>48x48/folder.png</file> | <file>48x48/folder.png</file> | ||||
| <file>48x48/warning.png</file> | <file>48x48/warning.png</file> | ||||
| <file>48x48/wine.png</file> | |||||
| <file>48x48/carla.png</file> | <file>48x48/carla.png</file> | ||||
| <file>48x48/carla-control.png</file> | <file>48x48/carla-control.png</file> | ||||
| @@ -7,7 +7,7 @@ | |||||
| <x>0</x> | <x>0</x> | ||||
| <y>0</y> | <y>0</y> | ||||
| <width>612</width> | <width>612</width> | ||||
| <height>465</height> | |||||
| <height>484</height> | |||||
| </rect> | </rect> | ||||
| </property> | </property> | ||||
| <property name="minimumSize"> | <property name="minimumSize"> | ||||
| @@ -86,6 +86,11 @@ | |||||
| <string>paths</string> | <string>paths</string> | ||||
| </property> | </property> | ||||
| </row> | </row> | ||||
| <row> | |||||
| <property name="text"> | |||||
| <string>wine</string> | |||||
| </property> | |||||
| </row> | |||||
| <row> | <row> | ||||
| <property name="text"> | <property name="text"> | ||||
| <string>experimental</string> | <string>experimental</string> | ||||
| @@ -172,6 +177,24 @@ | |||||
| </property> | </property> | ||||
| </item> | </item> | ||||
| <item row="4" column="0"> | <item row="4" column="0"> | ||||
| <property name="text"> | |||||
| <string>Wine</string> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <weight>75</weight> | |||||
| <bold>true</bold> | |||||
| </font> | |||||
| </property> | |||||
| <property name="icon"> | |||||
| <iconset resource="../resources.qrc"> | |||||
| <normaloff>:/48x48/wine.png</normaloff>:/48x48/wine.png</iconset> | |||||
| </property> | |||||
| <property name="flags"> | |||||
| <set>ItemIsSelectable|ItemIsEnabled</set> | |||||
| </property> | |||||
| </item> | |||||
| <item row="5" column="0"> | |||||
| <property name="text"> | <property name="text"> | ||||
| <string>Experimental</string> | <string>Experimental</string> | ||||
| </property> | </property> | ||||
| @@ -1380,6 +1403,290 @@ | |||||
| </item> | </item> | ||||
| </layout> | </layout> | ||||
| </widget> | </widget> | ||||
| <widget class="QWidget" name="page_wine"> | |||||
| <layout class="QVBoxLayout" name="verticalLayout_25"> | |||||
| <property name="margin"> | |||||
| <number>2</number> | |||||
| </property> | |||||
| <item> | |||||
| <layout class="QHBoxLayout" name="horizontalLayout_17"> | |||||
| <item> | |||||
| <widget class="QLabel" name="label_29"> | |||||
| <property name="text"> | |||||
| <string><b>Wine</b></string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="horizontalSpacer_26"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLabel" name="label_icon_engine_4"> | |||||
| <property name="text"> | |||||
| <string notr="true"/> | |||||
| </property> | |||||
| <property name="pixmap"> | |||||
| <pixmap resource="../resources.qrc">:/48x48/wine.png</pixmap> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignHCenter|Qt::AlignTop</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| </layout> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QGroupBox" name="group_wine_exec"> | |||||
| <property name="title"> | |||||
| <string>Executable</string> | |||||
| </property> | |||||
| <layout class="QHBoxLayout" name="horizontalLayout_18"> | |||||
| <item> | |||||
| <widget class="QLabel" name="label_8"> | |||||
| <property name="text"> | |||||
| <string>Path to 'wine' binary:</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLineEdit" name="le_wine_exec"/> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QGroupBox" name="group_wine_prefix"> | |||||
| <property name="title"> | |||||
| <string>Prefix</string> | |||||
| </property> | |||||
| <layout class="QGridLayout" name="gridLayout_6"> | |||||
| <item row="0" column="0" colspan="2"> | |||||
| <widget class="QCheckBox" name="cb_wine_prefix_detect"> | |||||
| <property name="text"> | |||||
| <string>Auto-detect Wine prefix based on plugin filename</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="1" column="0"> | |||||
| <widget class="QLabel" name="label"> | |||||
| <property name="text"> | |||||
| <string>Fallback:</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="1" column="1"> | |||||
| <widget class="QLineEdit" name="le_wine_prefix_fallback"/> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QGroupBox" name="group_wine_realtime"> | |||||
| <property name="title"> | |||||
| <string>Realtime Priority</string> | |||||
| </property> | |||||
| <property name="checkable"> | |||||
| <bool>true</bool> | |||||
| </property> | |||||
| <layout class="QGridLayout" name="gridLayout_5"> | |||||
| <item row="1" column="3"> | |||||
| <spacer name="horizontalSpacer_28"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item row="0" column="3"> | |||||
| <spacer name="horizontalSpacer_27"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item row="0" column="2"> | |||||
| <widget class="QSpinBox" name="sb_wine_base_prio"> | |||||
| <property name="minimum"> | |||||
| <number>1</number> | |||||
| </property> | |||||
| <property name="maximum"> | |||||
| <number>89</number> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="0" column="1"> | |||||
| <widget class="QLabel" name="label_2"> | |||||
| <property name="text"> | |||||
| <string>Base priority:</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="1" column="1"> | |||||
| <widget class="QLabel" name="label_3"> | |||||
| <property name="text"> | |||||
| <string>WineServer priority:</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="1" column="2"> | |||||
| <widget class="QSpinBox" name="sb_wine_server_prio"> | |||||
| <property name="minimum"> | |||||
| <number>1</number> | |||||
| </property> | |||||
| <property name="maximum"> | |||||
| <number>99</number> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="0" column="0"> | |||||
| <spacer name="horizontalSpacer_29"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item row="1" column="0"> | |||||
| <spacer name="horizontalSpacer_30"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <layout class="QHBoxLayout" name="horizontalLayout_14"> | |||||
| <item> | |||||
| <spacer name="horizontalSpacer_24"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLabel" name="label_26"> | |||||
| <property name="maximumSize"> | |||||
| <size> | |||||
| <width>22</width> | |||||
| <height>22</height> | |||||
| </size> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string/> | |||||
| </property> | |||||
| <property name="pixmap"> | |||||
| <pixmap resource="../resources.qrc">:/16x16/dialog-information.png</pixmap> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLabel" name="label_27"> | |||||
| <property name="text"> | |||||
| <string>These options are not available for Carla as plugin</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="horizontalSpacer_25"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| </layout> | |||||
| </item> | |||||
| <item> | |||||
| <spacer name="verticalSpacer_5"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Vertical</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>20</width> | |||||
| <height>115</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item> | |||||
| <widget class="QLabel" name="label_28"> | |||||
| <property name="maximumSize"> | |||||
| <size> | |||||
| <width>16777215</width> | |||||
| <height>5</height> | |||||
| </size> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string/> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| <widget class="QWidget" name="page_experimental"> | <widget class="QWidget" name="page_experimental"> | ||||
| <layout class="QVBoxLayout" name="verticalLayout_21"> | <layout class="QVBoxLayout" name="verticalLayout_21"> | ||||
| <property name="margin"> | <property name="margin"> | ||||
| @@ -1494,6 +1801,16 @@ | |||||
| </property> | </property> | ||||
| </widget> | </widget> | ||||
| </item> | </item> | ||||
| <item> | |||||
| <widget class="QCheckBox" name="ch_exp_wine_bridges"> | |||||
| <property name="enabled"> | |||||
| <bool>false</bool> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Enable Wine bridges</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item> | <item> | ||||
| <widget class="QCheckBox" name="ch_exp_jack_apps"> | <widget class="QCheckBox" name="ch_exp_jack_apps"> | ||||
| <property name="text"> | <property name="text"> | ||||
| @@ -1753,5 +2070,21 @@ This mode is not available for VST plugins.</string> | |||||
| </hint> | </hint> | ||||
| </hints> | </hints> | ||||
| </connection> | </connection> | ||||
| <connection> | |||||
| <sender>cb_exp_plugin_bridges</sender> | |||||
| <signal>toggled(bool)</signal> | |||||
| <receiver>ch_exp_wine_bridges</receiver> | |||||
| <slot>setEnabled(bool)</slot> | |||||
| <hints> | |||||
| <hint type="sourcelabel"> | |||||
| <x>402</x> | |||||
| <y>122</y> | |||||
| </hint> | |||||
| <hint type="destinationlabel"> | |||||
| <x>402</x> | |||||
| <y>145</y> | |||||
| </hint> | |||||
| </hints> | |||||
| </connection> | |||||
| </connections> | </connections> | ||||
| </ui> | </ui> | ||||
| @@ -1090,10 +1090,40 @@ typedef enum { | |||||
| */ | */ | ||||
| ENGINE_OPTION_FRONTEND_WIN_ID = 17, | ENGINE_OPTION_FRONTEND_WIN_ID = 17, | ||||
| /*! | |||||
| * Set path to wine executable. | |||||
| */ | |||||
| ENGINE_OPTION_WINE_EXECUTABLE = 18, | |||||
| /*! | |||||
| * Enable automatic wineprefix detection. | |||||
| */ | |||||
| ENGINE_OPTION_WINE_AUTO_PREFIX = 19, | |||||
| /*! | |||||
| * Fallback wineprefix to use if automatic detection fails or is diabled, and WINEPREFIX is not set. | |||||
| */ | |||||
| ENGINE_OPTION_WINE_FALLBACK_PREFIX = 20, | |||||
| /*! | |||||
| * Enable realtie priority for Wine application and server threads. | |||||
| */ | |||||
| ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 21, | |||||
| /*! | |||||
| * Base realtime priority for Wine threads. | |||||
| */ | |||||
| ENGINE_OPTION_WINE_BASE_RT_PRIO = 22, | |||||
| /*! | |||||
| * Wine server realtime priority. | |||||
| */ | |||||
| ENGINE_OPTION_WINE_SERVER_RT_PRIO = 23, | |||||
| /*! | /*! | ||||
| * Capture console output into debug callbacks. | * Capture console output into debug callbacks. | ||||
| */ | */ | ||||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 18 | |||||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 24 | |||||
| } EngineOption; | } EngineOption; | ||||
| @@ -254,6 +254,25 @@ struct CARLA_API EngineOptions { | |||||
| bool preventBadBehaviour; | bool preventBadBehaviour; | ||||
| uintptr_t frontendWinId; | uintptr_t frontendWinId; | ||||
| struct Wine { | |||||
| const char* exec; | |||||
| bool autoPrefix; | |||||
| const char* fallbackPrefix; | |||||
| bool rtPrio; | |||||
| int baseRtPrio; | |||||
| int serverRtPrio; | |||||
| Wine() | |||||
| : exec(nullptr), | |||||
| autoPrefix(true), | |||||
| fallbackPrefix(nullptr), | |||||
| rtPrio(true), | |||||
| baseRtPrio(15), | |||||
| serverRtPrio(10) {} | |||||
| } wine; | |||||
| #ifndef DOXYGEN | #ifndef DOXYGEN | ||||
| EngineOptions() noexcept; | EngineOptions() noexcept; | ||||
| ~EngineOptions() noexcept; | ~EngineOptions() noexcept; | ||||
| @@ -224,6 +224,8 @@ static void carla_engine_init_common() | |||||
| gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE, static_cast<int>(gStandalone.engineOptions.audioBufferSize), nullptr); | gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE, static_cast<int>(gStandalone.engineOptions.audioBufferSize), nullptr); | ||||
| gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, static_cast<int>(gStandalone.engineOptions.audioSampleRate), nullptr); | gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, static_cast<int>(gStandalone.engineOptions.audioSampleRate), nullptr); | ||||
| gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, static_cast<int>(gStandalone.engineOptions.audioSampleRate), nullptr); | |||||
| if (gStandalone.engineOptions.audioDevice != nullptr) | if (gStandalone.engineOptions.audioDevice != nullptr) | ||||
| gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_DEVICE, 0, gStandalone.engineOptions.audioDevice); | gStandalone.engine->setOption(CB::ENGINE_OPTION_AUDIO_DEVICE, 0, gStandalone.engineOptions.audioDevice); | ||||
| @@ -1243,8 +1243,9 @@ class CarlaHostMeta(object): | |||||
| self.preferPluginBridges = False | self.preferPluginBridges = False | ||||
| self.preferUIBridges = False | self.preferUIBridges = False | ||||
| self.preventBadBehaviour = False | self.preventBadBehaviour = False | ||||
| self.showPluginBridges = False | |||||
| self.showLogs = False | self.showLogs = False | ||||
| self.showPluginBridges = False | |||||
| self.showWineBridges = False | |||||
| self.uiBridgesTimeout = 0 | self.uiBridgesTimeout = 0 | ||||
| self.uisAlwaysOnTop = False | self.uisAlwaysOnTop = False | ||||
| @@ -1073,6 +1073,18 @@ class PluginRefreshW(QDialog): | |||||
| self.ui.label_win64.hide() | self.ui.label_win64.hide() | ||||
| self.ui.sep_format.hide() | self.ui.sep_format.hide() | ||||
| elif not host.showWineBridges: | |||||
| self.ui.ch_win32.setChecked(False) | |||||
| self.ui.ch_win32.setEnabled(False) | |||||
| self.ui.ch_win32.setVisible(False) | |||||
| self.ui.ch_win64.setChecked(False) | |||||
| self.ui.ch_win64.setEnabled(False) | |||||
| self.ui.ch_win64.setVisible(False) | |||||
| self.ui.ico_win32.hide() | |||||
| self.ui.ico_win64.hide() | |||||
| self.ui.label_win32.hide() | |||||
| self.ui.label_win64.hide() | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Resize to minimum size, as it's very likely UI stuff was hidden | # Resize to minimum size, as it's very likely UI stuff was hidden | ||||
| @@ -1319,9 +1331,9 @@ class PluginDatabaseW(QDialog): | |||||
| self.loadSettings() | self.loadSettings() | ||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Disable bridges (experimental for now) | |||||
| # Disable bridges if not enabled in settings | |||||
| if not host.experimental: | |||||
| if not host.showPluginBridges: | |||||
| self.ui.ch_native.setChecked(True) | self.ui.ch_native.setChecked(True) | ||||
| self.ui.ch_native.setEnabled(False) | self.ui.ch_native.setEnabled(False) | ||||
| self.ui.ch_native.setVisible(False) | self.ui.ch_native.setVisible(False) | ||||
| @@ -1333,6 +1345,11 @@ class PluginDatabaseW(QDialog): | |||||
| self.ui.ch_bridged_wine.setVisible(False) | self.ui.ch_bridged_wine.setVisible(False) | ||||
| self.ui.l_arch.setVisible(False) | self.ui.l_arch.setVisible(False) | ||||
| elif not host.showWineBridges: | |||||
| self.ui.ch_bridged_wine.setChecked(False) | |||||
| self.ui.ch_bridged_wine.setEnabled(False) | |||||
| self.ui.ch_bridged_wine.setVisible(False) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Set-up connections | # Set-up connections | ||||
| @@ -2554,15 +2554,20 @@ def loadHostSettings(host): | |||||
| except: | except: | ||||
| host.preventBadBehaviour = CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR | host.preventBadBehaviour = CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR | ||||
| try: | |||||
| host.showLogs = settings.value(CARLA_KEY_MAIN_SHOW_LOGS, CARLA_DEFAULT_MAIN_SHOW_LOGS, type=bool) | |||||
| except: | |||||
| host.showLogs = CARLA_DEFAULT_MAIN_SHOW_LOGS | |||||
| try: | try: | ||||
| host.showPluginBridges = settings.value(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES, type=bool) | host.showPluginBridges = settings.value(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES, type=bool) | ||||
| except: | except: | ||||
| host.showPluginBridges = CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES | host.showPluginBridges = CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES | ||||
| try: | try: | ||||
| host.showLogs = settings.value(CARLA_KEY_MAIN_SHOW_LOGS, CARLA_DEFAULT_MAIN_SHOW_LOGS, type=bool) | |||||
| host.showWineBridges = settings.value(CARLA_KEY_EXPERIMENTAL_WINE_BRIDGES, CARLA_DEFAULT_EXPERIMENTAL_WINE_BRIDGES, type=bool) | |||||
| except: | except: | ||||
| host.showLogs = CARLA_DEFAULT_MAIN_SHOW_LOGS | |||||
| host.showWineBridges = CARLA_DEFAULT_EXPERIMENTAL_WINE_BRIDGES | |||||
| try: | try: | ||||
| host.uiBridgesTimeout = settings.value(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, CARLA_DEFAULT_UI_BRIDGES_TIMEOUT, type=int) | host.uiBridgesTimeout = settings.value(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, CARLA_DEFAULT_UI_BRIDGES_TIMEOUT, type=int) | ||||
| @@ -193,8 +193,9 @@ class CarlaSettingsW(QDialog): | |||||
| TAB_INDEX_CANVAS = 1 | TAB_INDEX_CANVAS = 1 | ||||
| TAB_INDEX_ENGINE = 2 | TAB_INDEX_ENGINE = 2 | ||||
| TAB_INDEX_PATHS = 3 | TAB_INDEX_PATHS = 3 | ||||
| TAB_INDEX_EXPERIMENTAL = 4 | |||||
| TAB_INDEX_NONE = 5 | |||||
| TAB_INDEX_WINE = 4 | |||||
| TAB_INDEX_EXPERIMENTAL = 5 | |||||
| TAB_INDEX_NONE = 6 | |||||
| # Path indexes | # Path indexes | ||||
| PATH_INDEX_LADSPA = 0 | PATH_INDEX_LADSPA = 0 | ||||
| @@ -275,6 +276,11 @@ class CarlaSettingsW(QDialog): | |||||
| if host.isControl or host.isPlugin: | if host.isControl or host.isPlugin: | ||||
| self.ui.ch_exp_load_lib_global.hide() | self.ui.ch_exp_load_lib_global.hide() | ||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) | |||||
| if not LINUX: | |||||
| self.ui.ch_exp_wine_bridges.setVisible(False) | |||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) | |||||
| # FIXME, pipes on win32 not working | # FIXME, pipes on win32 not working | ||||
| if WINDOWS: | if WINDOWS: | ||||
| @@ -315,6 +321,7 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.lw_sfz.currentRowChanged.connect(self.slot_pluginPathRowChanged) | self.ui.lw_sfz.currentRowChanged.connect(self.slot_pluginPathRowChanged) | ||||
| self.ui.ch_main_experimental.toggled.connect(self.slot_enableExperimental) | self.ui.ch_main_experimental.toggled.connect(self.slot_enableExperimental) | ||||
| self.ui.ch_exp_wine_bridges.toggled.connect(self.slot_enableWineBridges) | |||||
| self.ui.cb_canvas_eyecandy.toggled.connect(self.slot_canvasEyeCandyToggled) | self.ui.cb_canvas_eyecandy.toggled.connect(self.slot_canvasEyeCandyToggled) | ||||
| self.ui.cb_canvas_fancy_eyecandy.toggled.connect(self.slot_canvasFancyEyeCandyToggled) | self.ui.cb_canvas_fancy_eyecandy.toggled.connect(self.slot_canvasFancyEyeCandyToggled) | ||||
| @@ -374,6 +381,10 @@ class CarlaSettingsW(QDialog): | |||||
| if not self.host.experimental: | if not self.host.experimental: | ||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_EXPERIMENTAL) | self.ui.lw_page.hideRow(self.TAB_INDEX_EXPERIMENTAL) | ||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) | |||||
| elif not self.host.showWineBridges: | |||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Engine | # Engine | ||||
| @@ -415,6 +426,8 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.ch_engine_force_stereo.setChecked(self.host.forceStereo or not self.ui.ch_engine_force_stereo.isEnabled()) | self.ui.ch_engine_force_stereo.setChecked(self.host.forceStereo or not self.ui.ch_engine_force_stereo.isEnabled()) | ||||
| self.ui.ch_engine_prefer_plugin_bridges.setChecked(self.host.preferPluginBridges) | self.ui.ch_engine_prefer_plugin_bridges.setChecked(self.host.preferPluginBridges) | ||||
| self.ui.ch_exp_export_lv2.setChecked(self.host.exportLV2) | self.ui.ch_exp_export_lv2.setChecked(self.host.exportLV2) | ||||
| self.ui.cb_exp_plugin_bridges.setChecked(self.host.showPluginBridges) | |||||
| self.ui.ch_exp_wine_bridges.setChecked(self.host.showWineBridges) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Paths | # Paths | ||||
| @@ -470,11 +483,34 @@ class CarlaSettingsW(QDialog): | |||||
| self.ui.lw_sfz.addItem(sfz) | self.ui.lw_sfz.addItem(sfz) | ||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Experimental | |||||
| # Wine | |||||
| self.ui.le_wine_exec.setText(settings.value(CARLA_KEY_WINE_EXECUTABLE, | |||||
| CARLA_DEFAULT_WINE_EXECUTABLE, | |||||
| type=str)) | |||||
| self.ui.cb_wine_prefix_detect.setChecked(settings.value(CARLA_KEY_WINE_AUTO_PREFIX, | |||||
| CARLA_DEFAULT_WINE_AUTO_PREFIX, | |||||
| type=bool)) | |||||
| self.ui.le_wine_prefix_fallback.setText(settings.value(CARLA_KEY_WINE_FALLBACK_PREFIX, | |||||
| CARLA_DEFAULT_WINE_FALLBACK_PREFIX, | |||||
| type=str)) | |||||
| self.ui.cb_exp_plugin_bridges.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, | |||||
| CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES, | |||||
| type=bool)) | |||||
| self.ui.group_wine_realtime.setChecked(settings.value(CARLA_KEY_WINE_RT_PRIO_ENABLED, | |||||
| CARLA_DEFAULT_WINE_RT_PRIO_ENABLED, | |||||
| type=bool)) | |||||
| self.ui.sb_wine_base_prio.setValue(settings.value(CARLA_KEY_WINE_BASE_RT_PRIO, | |||||
| CARLA_DEFAULT_WINE_BASE_RT_PRIO, | |||||
| type=int)) | |||||
| self.ui.sb_wine_server_prio.setValue(settings.value(CARLA_KEY_WINE_SERVER_RT_PRIO, | |||||
| CARLA_DEFAULT_WINE_SERVER_RT_PRIO, | |||||
| type=int)) | |||||
| # ---------------------------------------------------------------------------------------------------- | |||||
| # Experimental | |||||
| self.ui.ch_exp_jack_apps.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_JACK_APPS, | self.ui.ch_exp_jack_apps.setChecked(settings.value(CARLA_KEY_EXPERIMENTAL_JACK_APPS, | ||||
| CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS, | CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS, | ||||
| @@ -558,6 +594,8 @@ class CarlaSettingsW(QDialog): | |||||
| self.host.preferPluginBridges = self.ui.ch_engine_prefer_plugin_bridges.isChecked() | self.host.preferPluginBridges = self.ui.ch_engine_prefer_plugin_bridges.isChecked() | ||||
| self.host.preferUIBridges = self.ui.ch_engine_prefer_ui_bridges.isChecked() | self.host.preferUIBridges = self.ui.ch_engine_prefer_ui_bridges.isChecked() | ||||
| self.host.showLogs = self.ui.ch_main_show_logs.isChecked() | self.host.showLogs = self.ui.ch_main_show_logs.isChecked() | ||||
| self.host.showPluginBridges = self.ui.cb_exp_plugin_bridges.isChecked() | |||||
| self.host.showWineBridges = self.ui.ch_exp_wine_bridges.isChecked() | |||||
| self.host.uiBridgesTimeout = self.ui.sb_engine_ui_bridges_timeout.value() | self.host.uiBridgesTimeout = self.ui.sb_engine_ui_bridges_timeout.value() | ||||
| self.host.uisAlwaysOnTop = self.ui.ch_engine_uis_always_on_top.isChecked() | self.host.uisAlwaysOnTop = self.ui.ch_engine_uis_always_on_top.isChecked() | ||||
| @@ -581,6 +619,8 @@ class CarlaSettingsW(QDialog): | |||||
| settings.setValue(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, self.host.uiBridgesTimeout) | settings.setValue(CARLA_KEY_ENGINE_UI_BRIDGES_TIMEOUT, self.host.uiBridgesTimeout) | ||||
| settings.setValue(CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP, self.host.uisAlwaysOnTop) | settings.setValue(CARLA_KEY_ENGINE_UIS_ALWAYS_ON_TOP, self.host.uisAlwaysOnTop) | ||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, self.host.exportLV2) | settings.setValue(CARLA_KEY_EXPERIMENTAL_EXPORT_LV2, self.host.exportLV2) | ||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, self.host.showPluginBridges) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_WINE_BRIDGES, self.host.showWineBridges) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Paths | # Paths | ||||
| @@ -636,10 +676,23 @@ class CarlaSettingsW(QDialog): | |||||
| settings.setValue(CARLA_KEY_PATHS_SF2, sf2s) | settings.setValue(CARLA_KEY_PATHS_SF2, sf2s) | ||||
| settings.setValue(CARLA_KEY_PATHS_SFZ, sfzs) | settings.setValue(CARLA_KEY_PATHS_SFZ, sfzs) | ||||
| # ---------------------------------------------------------------------------------------------------- | |||||
| # Wine | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, self.ui.ch_exp_jack_apps.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | |||||
| settings.setValue(CARLA_KEY_WINE_EXECUTABLE, self.ui.le_wine_exec.text()) | |||||
| settings.setValue(CARLA_KEY_WINE_AUTO_PREFIX, self.ui.cb_wine_prefix_detect.isChecked()) | |||||
| settings.setValue(CARLA_KEY_WINE_FALLBACK_PREFIX, self.ui.le_wine_prefix_fallback.text()) | |||||
| settings.setValue(CARLA_KEY_WINE_RT_PRIO_ENABLED, self.ui.group_wine_realtime.isChecked()) | |||||
| settings.setValue(CARLA_KEY_WINE_BASE_RT_PRIO, self.ui.sb_wine_base_prio.value()) | |||||
| settings.setValue(CARLA_KEY_WINE_SERVER_RT_PRIO, self.ui.sb_wine_server_prio.value()) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Experimental | # Experimental | ||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES, self.ui.cb_exp_plugin_bridges.isChecked()) | |||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, self.ui.ch_exp_jack_apps.isChecked()) | settings.setValue(CARLA_KEY_EXPERIMENTAL_JACK_APPS, self.ui.ch_exp_jack_apps.isChecked()) | ||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | settings.setValue(CARLA_KEY_EXPERIMENTAL_LOAD_LIB_GLOBAL, self.ui.ch_exp_load_lib_global.isChecked()) | ||||
| settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | settings.setValue(CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR, self.ui.ch_exp_prevent_bad_behaviour.isChecked()) | ||||
| @@ -770,6 +823,17 @@ class CarlaSettingsW(QDialog): | |||||
| if not path: continue | if not path: continue | ||||
| self.ui.lw_sfz.addItem(path) | self.ui.lw_sfz.addItem(path) | ||||
| # ---------------------------------------------------------------------------------------------------- | |||||
| # Wine | |||||
| elif self.ui.lw_page.currentRow() == self.TAB_INDEX_WINE: | |||||
| self.ui.le_wine_exec.setText(CARLA_DEFAULT_WINE_EXECUTABLE) | |||||
| self.ui.cb_wine_prefix_detect.setChecked(CARLA_DEFAULT_WINE_AUTO_PREFIX) | |||||
| self.ui.le_wine_prefix_fallback.setText(CARLA_DEFAULT_WINE_FALLBACK_PREFIX) | |||||
| self.ui.group_wine_realtime.setChecked(CARLA_DEFAULT_WINE_RT_PRIO_ENABLED) | |||||
| self.ui.sb_wine_base_prio.setValue(CARLA_DEFAULT_WINE_BASE_RT_PRIO) | |||||
| self.ui.sb_wine_server_prio.setValue(CARLA_DEFAULT_WINE_SERVER_RT_PRIO) | |||||
| # ---------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------- | ||||
| # Experimental | # Experimental | ||||
| @@ -779,6 +843,7 @@ class CarlaSettingsW(QDialog): | |||||
| def resetExperimentalSettings(self): | def resetExperimentalSettings(self): | ||||
| # Forever experimental | # Forever experimental | ||||
| self.ui.cb_exp_plugin_bridges.setChecked(CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES) | self.ui.cb_exp_plugin_bridges.setChecked(CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES) | ||||
| self.ui.ch_exp_wine_bridges.setChecked(CARLA_DEFAULT_EXPERIMENTAL_WINE_BRIDGES) | |||||
| self.ui.ch_exp_jack_apps.setChecked(CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS) | self.ui.ch_exp_jack_apps.setChecked(CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS) | ||||
| self.ui.ch_exp_export_lv2.setChecked(CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT) | self.ui.ch_exp_export_lv2.setChecked(CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT) | ||||
| self.ui.ch_exp_load_lib_global.setChecked(CARLA_DEFAULT_EXPERIMENTAL_LOAD_LIB_GLOBAL) | self.ui.ch_exp_load_lib_global.setChecked(CARLA_DEFAULT_EXPERIMENTAL_LOAD_LIB_GLOBAL) | ||||
| @@ -797,8 +862,18 @@ class CarlaSettingsW(QDialog): | |||||
| def slot_enableExperimental(self, toggled): | def slot_enableExperimental(self, toggled): | ||||
| if toggled: | if toggled: | ||||
| self.ui.lw_page.showRow(self.TAB_INDEX_EXPERIMENTAL) | self.ui.lw_page.showRow(self.TAB_INDEX_EXPERIMENTAL) | ||||
| if self.ui.ch_exp_wine_bridges.isChecked(): | |||||
| self.ui.lw_page.showRow(self.TAB_INDEX_WINE) | |||||
| else: | else: | ||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_EXPERIMENTAL) | self.ui.lw_page.hideRow(self.TAB_INDEX_EXPERIMENTAL) | ||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) | |||||
| @pyqtSlot(bool) | |||||
| def slot_enableWineBridges(self, toggled): | |||||
| if toggled: | |||||
| self.ui.lw_page.showRow(self.TAB_INDEX_WINE) | |||||
| else: | |||||
| self.ui.lw_page.hideRow(self.TAB_INDEX_WINE) | |||||
| @pyqtSlot(bool) | @pyqtSlot(bool) | ||||
| def slot_canvasEyeCandyToggled(self, toggled): | def slot_canvasEyeCandyToggled(self, toggled): | ||||
| @@ -227,7 +227,15 @@ CARLA_KEY_PATHS_GIG = "Paths/GIG" | |||||
| CARLA_KEY_PATHS_SF2 = "Paths/SF2" | CARLA_KEY_PATHS_SF2 = "Paths/SF2" | ||||
| CARLA_KEY_PATHS_SFZ = "Paths/SFZ" | CARLA_KEY_PATHS_SFZ = "Paths/SFZ" | ||||
| CARLA_KEY_WINE_EXECUTABLE = "Wine/Executable" # str | |||||
| CARLA_KEY_WINE_AUTO_PREFIX = "Wine/AutoPrefix" # bool | |||||
| CARLA_KEY_WINE_FALLBACK_PREFIX = "Wine/FallbackPrefix" # str | |||||
| CARLA_KEY_WINE_RT_PRIO_ENABLED = "Wine/RtPrioEnabled" # bool | |||||
| CARLA_KEY_WINE_BASE_RT_PRIO = "Wine/BaseRtPrio" # int | |||||
| CARLA_KEY_WINE_SERVER_RT_PRIO = "Wine/ServerRtPrio" # int | |||||
| CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES = "Experimental/PluginBridges" # bool | CARLA_KEY_EXPERIMENTAL_PLUGIN_BRIDGES = "Experimental/PluginBridges" # bool | ||||
| CARLA_KEY_EXPERIMENTAL_WINE_BRIDGES = "Experimental/WineBridges" # bool | |||||
| CARLA_KEY_EXPERIMENTAL_JACK_APPS = "Experimental/JackApplications" # bool | CARLA_KEY_EXPERIMENTAL_JACK_APPS = "Experimental/JackApplications" # bool | ||||
| CARLA_KEY_EXPERIMENTAL_EXPORT_LV2 = "Experimental/ExportLV2" # bool | CARLA_KEY_EXPERIMENTAL_EXPORT_LV2 = "Experimental/ExportLV2" # bool | ||||
| CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR = "Experimental/PreventBadBehaviour" # bool | CARLA_KEY_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR = "Experimental/PreventBadBehaviour" # bool | ||||
| @@ -289,7 +297,17 @@ else: | |||||
| CARLA_DEFAULT_PROCESS_MODE = ENGINE_PROCESS_MODE_PATCHBAY | CARLA_DEFAULT_PROCESS_MODE = ENGINE_PROCESS_MODE_PATCHBAY | ||||
| CARLA_DEFAULT_TRANSPORT_MODE = ENGINE_TRANSPORT_MODE_INTERNAL | CARLA_DEFAULT_TRANSPORT_MODE = ENGINE_TRANSPORT_MODE_INTERNAL | ||||
| # Wine | |||||
| CARLA_DEFAULT_WINE_EXECUTABLE = "wine" | |||||
| CARLA_DEFAULT_WINE_AUTO_PREFIX = True | |||||
| CARLA_DEFAULT_WINE_FALLBACK_PREFIX = os.path.expanduser("~/.wine") | |||||
| CARLA_DEFAULT_WINE_RT_PRIO_ENABLED = True | |||||
| CARLA_DEFAULT_WINE_BASE_RT_PRIO = 15 | |||||
| CARLA_DEFAULT_WINE_SERVER_RT_PRIO = 10 | |||||
| # Experimental | |||||
| CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES = False | CARLA_DEFAULT_EXPERIMENTAL_PLUGIN_BRIDGES = False | ||||
| CARLA_DEFAULT_EXPERIMENTAL_WINE_BRIDGES = False | |||||
| CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS = False | CARLA_DEFAULT_EXPERIMENTAL_JACK_APPS = False | ||||
| CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT = False | CARLA_DEFAULT_EXPERIMENTAL_LV2_EXPORT = False | ||||
| CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR = False | CARLA_DEFAULT_EXPERIMENTAL_PREVENT_BAD_BEHAVIOUR = False | ||||