| @@ -0,0 +1,168 @@ | |||
| /* | |||
| * Carla Plugin Host | |||
| * Copyright (C) 2011-2014 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| * published by the Free Software Foundation; either version 2 of | |||
| * the License, or any later version. | |||
| * | |||
| * This program is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| * GNU General Public License for more details. | |||
| * | |||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
| */ | |||
| #include "CarlaHost.h" | |||
| #include "CarlaString.hpp" | |||
| #include "juce_audio_formats.h" | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| const char* carla_get_complete_license_text() | |||
| { | |||
| carla_debug("carla_get_complete_license_text()"); | |||
| static CarlaString retText; | |||
| if (retText.isEmpty()) | |||
| { | |||
| retText = | |||
| "<p>This current Carla build is using the following features and 3rd-party code:</p>" | |||
| "<ul>" | |||
| // Plugin formats | |||
| "<li>LADSPA plugin support</li>" | |||
| "<li>DSSI plugin support</li>" | |||
| "<li>LV2 plugin support</li>" | |||
| #ifdef VESTIGE_HEADER | |||
| "<li>VST plugin support using VeSTige header by Javier Serrano Polo</li>" | |||
| #else | |||
| "<li>VST plugin support using official VST SDK 2.4 [1]</li>" | |||
| #endif | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| "<li>VST3 plugin support using official VST SDK 3.6 [1]</li>" | |||
| #endif | |||
| #ifdef CARLA_OS_MAC | |||
| "<li>AU plugin support</li>" | |||
| #endif | |||
| // Sample kit libraries | |||
| #ifdef HAVE_FLUIDSYNTH | |||
| "<li>FluidSynth library for SF2 support</li>" | |||
| #endif | |||
| #ifdef HAVE_LINUXSAMPLER | |||
| "<li>LinuxSampler library for GIG and SFZ support [2]</li>" | |||
| #endif | |||
| // Internal plugins | |||
| "<li>NekoFilter plugin code based on lv2fil by Nedko Arnaudov and Fons Adriaensen</li>" | |||
| #ifdef WANT_ZYNADDSUBFX | |||
| "<li>ZynAddSubFX plugin code</li>" | |||
| #endif | |||
| // misc libs | |||
| "<li>base64 utilities based on code by Ren\u00E9 Nyffenegger</li>" | |||
| #ifdef CARLA_OS_MAC | |||
| "<li>sem_timedwait for Mac OS by Keith Shortridge</li>" | |||
| #endif | |||
| "<li>liblo library for OSC support</li>" | |||
| "<li>rtmempool library by Nedko Arnaudov" | |||
| "<li>serd, sord, sratom and lilv libraries for LV2 discovery</li>" | |||
| #if ! (defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) | |||
| "<li>RtAudio and RtMidi libraries for extra Audio and MIDI support</li>" | |||
| #endif | |||
| // end | |||
| "</ul>" | |||
| "<p>" | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) || ! defined(VESTIGE_HEADER) | |||
| // Required by VST SDK | |||
| " [1] Trademark of Steinberg Media Technologies GmbH.<br/>" | |||
| #endif | |||
| #ifdef HAVE_LINUXSAMPLER | |||
| // LinuxSampler GPL exception | |||
| " [2] Using LinuxSampler code in commercial hardware or software products is not allowed without prior written authorization by the authors." | |||
| #endif | |||
| "</p>" | |||
| ; | |||
| } | |||
| return retText; | |||
| } | |||
| const char* carla_get_juce_version() | |||
| { | |||
| carla_debug("carla_get_juce_version()"); | |||
| static CarlaString retVersion; | |||
| if (retVersion.isEmpty()) | |||
| { | |||
| if (const char* const version = juce::SystemStats::getJUCEVersion().toRawUTF8()) | |||
| retVersion = version+6; | |||
| else | |||
| retVersion = "3.0"; | |||
| } | |||
| return retVersion; | |||
| } | |||
| const char* carla_get_supported_file_extensions() | |||
| { | |||
| carla_debug("carla_get_supported_file_extensions()"); | |||
| static CarlaString retText; | |||
| if (retText.isEmpty()) | |||
| { | |||
| retText = | |||
| // Base types | |||
| "*.carxp;*.carxs" | |||
| // MIDI files | |||
| ";*.mid;*.midi" | |||
| #ifdef HAVE_FLUIDSYNTH | |||
| // fluidsynth (sf2) | |||
| ";*.sf2" | |||
| #endif | |||
| #ifdef HAVE_LINUXSAMPLER | |||
| // linuxsampler (gig and sfz) | |||
| ";*.gig;*.sfz" | |||
| #endif | |||
| #ifdef WANT_ZYNADDSUBFX | |||
| // zynaddsubfx presets | |||
| ";*.xmz;*.xiz" | |||
| #endif | |||
| ; | |||
| #ifndef BUILD_BRIDGE | |||
| // Audio files | |||
| { | |||
| using namespace juce; | |||
| AudioFormatManager afm; | |||
| afm.registerBasicFormats(); | |||
| String juceFormats; | |||
| for (AudioFormat **it=afm.begin(), **end=afm.end(); it != end; ++it) | |||
| { | |||
| const StringArray& exts((*it)->getFileExtensions()); | |||
| for (String *eit=exts.begin(), *eend=exts.end(); eit != eend; ++eit) | |||
| juceFormats += String(";*" + (*eit)).toRawUTF8(); | |||
| } | |||
| retText += juceFormats.toRawUTF8(); | |||
| } | |||
| #endif | |||
| } | |||
| return retText; | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| @@ -445,151 +445,6 @@ _CarlaTransportInfo::_CarlaTransportInfo() noexcept | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| // API | |||
| const char* carla_get_complete_license_text() | |||
| { | |||
| carla_debug("carla_get_complete_license_text()"); | |||
| static CarlaString retText; | |||
| if (retText.isEmpty()) | |||
| { | |||
| retText = | |||
| "<p>This current Carla build is using the following features and 3rd-party code:</p>" | |||
| "<ul>" | |||
| // Plugin formats | |||
| "<li>LADSPA plugin support</li>" | |||
| "<li>DSSI plugin support</li>" | |||
| "<li>LV2 plugin support</li>" | |||
| #ifdef VESTIGE_HEADER | |||
| "<li>VST plugin support using VeSTige header by Javier Serrano Polo</li>" | |||
| #else | |||
| "<li>VST plugin support using official VST SDK 2.4 [1]</li>" | |||
| #endif | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||
| "<li>VST3 plugin support using official VST SDK 3.6 [1]</li>" | |||
| #endif | |||
| #ifdef CARLA_OS_MAC | |||
| "<li>AU plugin support</li>" | |||
| #endif | |||
| // Sample kit libraries | |||
| #ifdef HAVE_FLUIDSYNTH | |||
| "<li>FluidSynth library for SF2 support</li>" | |||
| #endif | |||
| #ifdef HAVE_LINUXSAMPLER | |||
| "<li>LinuxSampler library for GIG and SFZ support [2]</li>" | |||
| #endif | |||
| // Internal plugins | |||
| "<li>NekoFilter plugin code based on lv2fil by Nedko Arnaudov and Fons Adriaensen</li>" | |||
| #ifdef WANT_ZYNADDSUBFX | |||
| "<li>ZynAddSubFX plugin code</li>" | |||
| #endif | |||
| // misc libs | |||
| "<li>base64 utilities based on code by Ren\u00E9 Nyffenegger</li>" | |||
| #ifdef CARLA_OS_MAC | |||
| "<li>sem_timedwait for Mac OS by Keith Shortridge</li>" | |||
| #endif | |||
| "<li>liblo library for OSC support</li>" | |||
| "<li>rtmempool library by Nedko Arnaudov" | |||
| "<li>serd, sord, sratom and lilv libraries for LV2 discovery</li>" | |||
| #if ! (defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) | |||
| "<li>RtAudio and RtMidi libraries for extra Audio and MIDI support</li>" | |||
| #endif | |||
| // end | |||
| "</ul>" | |||
| "<p>" | |||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) || ! defined(VESTIGE_HEADER) | |||
| // Required by VST SDK | |||
| " [1] Trademark of Steinberg Media Technologies GmbH.<br/>" | |||
| #endif | |||
| #ifdef HAVE_LINUXSAMPLER | |||
| // LinuxSampler GPL exception | |||
| " [2] Using LinuxSampler code in commercial hardware or software products is not allowed without prior written authorization by the authors." | |||
| #endif | |||
| "</p>" | |||
| ; | |||
| } | |||
| return retText; | |||
| } | |||
| const char* carla_get_juce_version() | |||
| { | |||
| carla_debug("carla_get_juce_version()"); | |||
| static CarlaString retVersion; | |||
| if (retVersion.isEmpty()) | |||
| { | |||
| if (const char* const version = juce::SystemStats::getJUCEVersion().toRawUTF8()) | |||
| retVersion = version+6; | |||
| else | |||
| retVersion = "3.0"; | |||
| } | |||
| return retVersion; | |||
| } | |||
| const char* carla_get_supported_file_extensions() | |||
| { | |||
| carla_debug("carla_get_supported_file_extensions()"); | |||
| static CarlaString retText; | |||
| if (retText.isEmpty()) | |||
| { | |||
| retText = | |||
| // Base types | |||
| "*.carxp;*.carxs" | |||
| // MIDI files | |||
| ";*.mid;*.midi" | |||
| #ifdef HAVE_FLUIDSYNTH | |||
| // fluidsynth (sf2) | |||
| ";*.sf2" | |||
| #endif | |||
| #ifdef HAVE_LINUXSAMPLER | |||
| // linuxsampler (gig and sfz) | |||
| ";*.gig;*.sfz" | |||
| #endif | |||
| #ifdef WANT_ZYNADDSUBFX | |||
| // zynaddsubfx presets | |||
| ";*.xmz;*.xiz" | |||
| #endif | |||
| ; | |||
| #ifndef BUILD_BRIDGE | |||
| // Audio files | |||
| { | |||
| using namespace juce; | |||
| AudioFormatManager afm; | |||
| afm.registerBasicFormats(); | |||
| String juceFormats; | |||
| for (AudioFormat **it=afm.begin(), **end=afm.end(); it != end; ++it) | |||
| { | |||
| const StringArray& exts((*it)->getFileExtensions()); | |||
| for (String *eit=exts.begin(), *eend=exts.end(); eit != eend; ++eit) | |||
| juceFormats += String(";*" + (*eit)).toRawUTF8(); | |||
| } | |||
| retText += juceFormats.toRawUTF8(); | |||
| } | |||
| #endif | |||
| } | |||
| return retText; | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| uint carla_get_engine_driver_count() | |||
| { | |||
| carla_debug("carla_get_engine_driver_count()"); | |||
| @@ -2478,6 +2333,7 @@ const char* carla_get_library_folder() | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| #include "CarlaHostCommon.cpp" | |||
| #include "CarlaPluginUI.cpp" | |||
| #include "CarlaDssiUtils.cpp" | |||
| #include "CarlaStateUtils.cpp" | |||
| @@ -946,6 +946,23 @@ protected: | |||
| fUiServer.writeAndFixMsg(valueStr); | |||
| } | |||
| void uiServerInfo() | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fIsRunning,); | |||
| CARLA_SAFE_ASSERT_RETURN(fUiServer.isOk(),); | |||
| const CarlaMutexLocker cml(fUiServer.getWriteLock()); | |||
| fUiServer.writeAndFixMsg("carla-complete-license"); | |||
| fUiServer.writeAndFixMsg(carla_get_complete_license_text()); | |||
| fUiServer.writeAndFixMsg("carla-juce-version"); | |||
| fUiServer.writeAndFixMsg(carla_get_juce_version()); | |||
| fUiServer.writeAndFixMsg("carla-file-exts"); | |||
| fUiServer.writeAndFixMsg(carla_get_supported_file_extensions()); | |||
| } | |||
| void uiServerOptions() | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fIsRunning,); | |||
| @@ -1366,6 +1383,7 @@ protected: | |||
| fUiServer.setData(path, pData->sampleRate, pHost->uiName); | |||
| fUiServer.start(false); | |||
| uiServerInfo(); | |||
| uiServerOptions(); | |||
| fUiServer.show(); | |||
| @@ -1760,6 +1778,7 @@ const EngineDriverDeviceInfo* CarlaEngine::getRtAudioDeviceInfo(const uint, cons | |||
| CARLA_BACKEND_END_NAMESPACE | |||
| #include "CarlaHostCommon.cpp" | |||
| #include "CarlaPluginUI.cpp" | |||
| #include "CarlaDssiUtils.cpp" | |||
| #include "CarlaStateUtils.cpp" | |||
| @@ -2891,12 +2891,12 @@ class CarlaHostPlugin(CarlaHostMeta): | |||
| self.processModeForced = True | |||
| # text data to return when requested | |||
| self.fCompleteLicentText = "" | |||
| self.fJuceVersion = "" | |||
| self.fSupportedFileExts = "" | |||
| self.fLastError = "" | |||
| self.fOscUrlTCP = "" | |||
| self.fOscUrlUDP = "" | |||
| self.fCompleteLicenseText = "" | |||
| self.fJuceVersion = "" | |||
| self.fSupportedFileExts = "" | |||
| self.fLastError = "" | |||
| self.fOscUrlTCP = "" | |||
| self.fOscUrlUDP = "" | |||
| # plugin info | |||
| self.fPluginsInfo = [] | |||
| @@ -2934,7 +2934,7 @@ class CarlaHostPlugin(CarlaHostMeta): | |||
| # -------------------------------------------------------------------------------------------------------- | |||
| def get_complete_license_text(self): | |||
| return self.fCompleteLicentText | |||
| return self.fCompleteLicenseText | |||
| def get_juce_version(self): | |||
| return self.fJuceVersion | |||
| @@ -3200,6 +3200,11 @@ class CarlaHostPlugin(CarlaHostMeta): | |||
| # -------------------------------------------------------------------------------------------------------- | |||
| def _set_info(self, license, juceversion, fileexts): | |||
| self.fCompleteLicenseText = license; | |||
| self.fJuceVersion = juceversion | |||
| self.fSupportedFileExts = fileexts | |||
| def _add(self, pluginId): | |||
| if len(self.fPluginsInfo) != pluginId: | |||
| return | |||
| @@ -79,79 +79,86 @@ class CarlaAboutW(QDialog): | |||
| "<br>Copyright (C) 2011-2014 falkTX<br>" | |||
| "" % (VERSION, extraInfo))) | |||
| if host.isControl or host.isPlugin: | |||
| if host.isControl: | |||
| self.ui.l_extended.hide() | |||
| self.ui.tabWidget.removeTab(2) | |||
| self.ui.tabWidget.removeTab(1) | |||
| else: | |||
| self.ui.l_extended.setText(host.get_complete_license_text()) | |||
| elif host.isPlugin: | |||
| self.ui.tabWidget.removeTab(2) | |||
| if host.is_engine_running(): | |||
| self.ui.le_osc_url_tcp.setText(host.get_host_osc_url_tcp()) | |||
| self.ui.le_osc_url_udp.setText(host.get_host_osc_url_udp()) | |||
| else: | |||
| self.ui.le_osc_url_tcp.setText(self.tr("(Engine not running)")) | |||
| self.ui.le_osc_url_udp.setText(self.tr("(Engine not running)")) | |||
| self.ui.l_osc_cmds.setText("" | |||
| " /set_active <i-value>\n" | |||
| " /set_drywet <f-value>\n" | |||
| " /set_volume <f-value>\n" | |||
| " /set_balance_left <f-value>\n" | |||
| " /set_balance_right <f-value>\n" | |||
| " /set_panning <f-value>\n" | |||
| " /set_parameter_value <i-index> <f-value>\n" | |||
| " /set_parameter_midi_cc <i-index> <i-cc>\n" | |||
| " /set_parameter_midi_channel <i-index> <i-channel>\n" | |||
| " /set_program <i-index>\n" | |||
| " /set_midi_program <i-index>\n" | |||
| " /note_on <i-note> <i-velo>\n" | |||
| " /note_off <i-note>\n" | |||
| ) | |||
| self.ui.l_example.setText("/Carla/2/set_parameter_value 5 1.0") | |||
| self.ui.l_example_help.setText("<i>(as in this example, \"2\" is the plugin number and \"5\" the parameter)</i>") | |||
| self.ui.l_ladspa.setText(self.tr("Everything! (Including LRDF)")) | |||
| self.ui.l_dssi.setText(self.tr("Everything! (Including CustomData/Chunks)")) | |||
| self.ui.l_lv2.setText(self.tr("About 95% complete (using custom extensions)<br/>" | |||
| "Implemented Feature/Extensions:" | |||
| "<ul>" | |||
| "<li>http://lv2plug.in/ns/ext/atom</li>" | |||
| "<li>http://lv2plug.in/ns/ext/buf-size</li>" | |||
| "<li>http://lv2plug.in/ns/ext/data-access</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/dynmanifest</li>" | |||
| "<li>http://lv2plug.in/ns/ext/event</li>" | |||
| "<li>http://lv2plug.in/ns/ext/instance-access</li>" | |||
| "<li>http://lv2plug.in/ns/ext/log</li>" | |||
| "<li>http://lv2plug.in/ns/ext/midi</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/morph</li>" | |||
| "<li>http://lv2plug.in/ns/ext/options</li>" | |||
| "<li>http://lv2plug.in/ns/ext/parameters</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/patch</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/port-groups</li>" | |||
| "<li>http://lv2plug.in/ns/ext/port-props</li>" | |||
| "<li>http://lv2plug.in/ns/ext/presets</li>" | |||
| "<li>http://lv2plug.in/ns/ext/resize-port</li>" | |||
| "<li>http://lv2plug.in/ns/ext/state</li>" | |||
| "<li>http://lv2plug.in/ns/ext/time</li>" | |||
| "<li>http://lv2plug.in/ns/ext/uri-map</li>" | |||
| "<li>http://lv2plug.in/ns/ext/urid</li>" | |||
| "<li>http://lv2plug.in/ns/ext/worker</li>" | |||
| "<li>http://lv2plug.in/ns/extensions/ui</li>" | |||
| "<li>http://lv2plug.in/ns/extensions/units</li>" | |||
| "<li>http://home.gna.org/lv2dynparam/rtmempool/v1</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/external-ui</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/programs</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/props</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/rtmempool</li>" | |||
| "<li>http://ll-plugins.nongnu.org/lv2/ext/midimap</li>" | |||
| "<li>http://ll-plugins.nongnu.org/lv2/ext/miditype</li>" | |||
| "</ul>")) | |||
| self.ui.l_vst.setText(self.tr("<p>About 85% complete (missing vst bank/presets and some minor stuff)</p>")) | |||
| self.ui.l_extended.setText(host.get_complete_license_text()) | |||
| if host.is_engine_running() and not (host.isControl or host.isPlugin): | |||
| self.ui.le_osc_url_tcp.setText(host.get_host_osc_url_tcp()) | |||
| self.ui.le_osc_url_udp.setText(host.get_host_osc_url_udp()) | |||
| else: | |||
| self.ui.le_osc_url_tcp.setText(self.tr("(Engine not running)")) | |||
| self.ui.le_osc_url_udp.setText(self.tr("(Engine not running)")) | |||
| self.ui.l_osc_cmds.setText("" | |||
| " /set_active <i-value>\n" | |||
| " /set_drywet <f-value>\n" | |||
| " /set_volume <f-value>\n" | |||
| " /set_balance_left <f-value>\n" | |||
| " /set_balance_right <f-value>\n" | |||
| " /set_panning <f-value>\n" | |||
| " /set_parameter_value <i-index> <f-value>\n" | |||
| " /set_parameter_midi_cc <i-index> <i-cc>\n" | |||
| " /set_parameter_midi_channel <i-index> <i-channel>\n" | |||
| " /set_program <i-index>\n" | |||
| " /set_midi_program <i-index>\n" | |||
| " /note_on <i-note> <i-velo>\n" | |||
| " /note_off <i-note>\n" | |||
| ) | |||
| self.ui.l_example.setText("/Carla/2/set_parameter_value 5 1.0") | |||
| self.ui.l_example_help.setText("<i>(as in this example, \"2\" is the plugin number and \"5\" the parameter)</i>") | |||
| self.ui.l_ladspa.setText(self.tr("Everything! (Including LRDF)")) | |||
| self.ui.l_dssi.setText(self.tr("Everything! (Including CustomData/Chunks)")) | |||
| self.ui.l_lv2.setText(self.tr("About 95% complete (using custom extensions)<br/>" | |||
| "Implemented Feature/Extensions:" | |||
| "<ul>" | |||
| "<li>http://lv2plug.in/ns/ext/atom</li>" | |||
| "<li>http://lv2plug.in/ns/ext/buf-size</li>" | |||
| "<li>http://lv2plug.in/ns/ext/data-access</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/dynmanifest</li>" | |||
| "<li>http://lv2plug.in/ns/ext/event</li>" | |||
| "<li>http://lv2plug.in/ns/ext/instance-access</li>" | |||
| "<li>http://lv2plug.in/ns/ext/log</li>" | |||
| "<li>http://lv2plug.in/ns/ext/midi</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/morph</li>" | |||
| "<li>http://lv2plug.in/ns/ext/options</li>" | |||
| "<li>http://lv2plug.in/ns/ext/parameters</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/patch</li>" | |||
| #"<li>http://lv2plug.in/ns/ext/port-groups</li>" | |||
| "<li>http://lv2plug.in/ns/ext/port-props</li>" | |||
| "<li>http://lv2plug.in/ns/ext/presets</li>" | |||
| "<li>http://lv2plug.in/ns/ext/resize-port</li>" | |||
| "<li>http://lv2plug.in/ns/ext/state</li>" | |||
| "<li>http://lv2plug.in/ns/ext/time</li>" | |||
| "<li>http://lv2plug.in/ns/ext/uri-map</li>" | |||
| "<li>http://lv2plug.in/ns/ext/urid</li>" | |||
| "<li>http://lv2plug.in/ns/ext/worker</li>" | |||
| "<li>http://lv2plug.in/ns/extensions/ui</li>" | |||
| "<li>http://lv2plug.in/ns/extensions/units</li>" | |||
| "<li>http://home.gna.org/lv2dynparam/rtmempool/v1</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/external-ui</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/programs</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/props</li>" | |||
| "<li>http://kxstudio.sf.net/ns/lv2ext/rtmempool</li>" | |||
| "<li>http://ll-plugins.nongnu.org/lv2/ext/midimap</li>" | |||
| "<li>http://ll-plugins.nongnu.org/lv2/ext/miditype</li>" | |||
| "</ul>")) | |||
| self.ui.l_vst.setText(self.tr("<p>About 85% complete (missing vst bank/presets and some minor stuff)</p>")) | |||
| # 2nd tab is usually longer than the 1st | |||
| # adjust appropriately | |||
| self.ui.tabWidget.setCurrentIndex(1) | |||
| self.adjustSize() | |||
| self.ui.tabWidget.setCurrentIndex(0) | |||
| self.setFixedSize(self.size()) | |||
| if WINDOWS: | |||
| @@ -308,6 +308,18 @@ class CarlaMiniW(ExternalUI, HostWindow): | |||
| name = self.readlineblock().replace("\r", "\n") | |||
| self.host._set_midiProgramData(pluginId, midiProgId, {'bank': bank, 'program': program, 'name': name}) | |||
| elif msg == "carla-complete-license": | |||
| license = self.readlineblock().replace("\r", "\n") | |||
| self.host.fCompleteLicenseText = license | |||
| elif msg == "carla-juce-version": | |||
| version = self.readlineblock().replace("\r", "\n") | |||
| self.host.fJuceVersion = version | |||
| elif msg == "carla-file-exts": | |||
| exts = self.readlineblock().replace("\r", "\n") | |||
| self.host.fSupportedFileExts = exts | |||
| elif msg == "error": | |||
| error = self.readlineblock().replace("\r", "\n") | |||
| engineCallback(self.host, ENGINE_CALLBACK_ERROR, 0, 0, 0, 0.0, error) | |||