Browse Source

Rename some files, allow presets on plugin skins (needs rebuild)

tags/1.9.6
falkTX 10 years ago
parent
commit
4795b63f34
15 changed files with 996 additions and 973 deletions
  1. +6
    -9
      Makefile
  2. +0
    -476
      resources/ui/carla_plugin_basic_fx.ui
  3. +361
    -0
      resources/ui/carla_plugin_classic.ui
  4. +393
    -278
      resources/ui/carla_plugin_default.ui
  5. +0
    -0
      resources/ui/carla_plugin_presets.ui
  6. +6
    -0
      source/backend/CarlaBackend.h
  7. +2
    -0
      source/backend/CarlaUtils.cpp
  8. +13
    -9
      source/backend/plugin/CarlaPlugin.cpp
  9. +1
    -1
      source/backend/plugin/CarlaPluginFluidSynth.cpp
  10. +0
    -1
      source/backend/plugin/CarlaPluginInternal.hpp
  11. +3
    -3
      source/backend/plugin/CarlaPluginLinuxSampler.cpp
  12. +2
    -3
      source/backend/plugin/CarlaPluginNative.cpp
  13. +4
    -0
      source/carla_backend.py
  14. +204
    -192
      source/carla_skin.py
  15. +1
    -1
      source/includes/CarlaNative.h

+ 6
- 9
Makefile View File

@@ -280,12 +280,11 @@ RES = \
bin/resources/ui_carla_host.py \ bin/resources/ui_carla_host.py \
bin/resources/ui_carla_panel_time.py \ bin/resources/ui_carla_panel_time.py \
bin/resources/ui_carla_parameter.py \ bin/resources/ui_carla_parameter.py \
bin/resources/ui_carla_plugin_basic_fx.py \
bin/resources/ui_carla_plugin_calf.py \ bin/resources/ui_carla_plugin_calf.py \
bin/resources/ui_carla_plugin_classic.py \
bin/resources/ui_carla_plugin_compact.py \ bin/resources/ui_carla_plugin_compact.py \
bin/resources/ui_carla_plugin_default.py \ bin/resources/ui_carla_plugin_default.py \
bin/resources/ui_carla_plugin_sf2.py \
bin/resources/ui_carla_plugin_zynfx.py \
bin/resources/ui_carla_plugin_presets.py \
bin/resources/ui_carla_refresh.py \ bin/resources/ui_carla_refresh.py \
bin/resources/ui_carla_settings.py \ bin/resources/ui_carla_settings.py \
bin/resources/ui_carla_settings_driver.py \ bin/resources/ui_carla_settings_driver.py \
@@ -326,12 +325,11 @@ UIs = \
source/ui_carla_host.py \ source/ui_carla_host.py \
source/ui_carla_panel_time.py \ source/ui_carla_panel_time.py \
source/ui_carla_parameter.py \ source/ui_carla_parameter.py \
source/ui_carla_plugin_basic_fx.py \
source/ui_carla_plugin_calf.py \ source/ui_carla_plugin_calf.py \
source/ui_carla_plugin_classic.py \
source/ui_carla_plugin_compact.py \ source/ui_carla_plugin_compact.py \
source/ui_carla_plugin_default.py \ source/ui_carla_plugin_default.py \
source/ui_carla_plugin_sf2.py \
source/ui_carla_plugin_zynfx.py \
source/ui_carla_plugin_presets.py \
source/ui_carla_refresh.py \ source/ui_carla_refresh.py \
source/ui_carla_settings.py \ source/ui_carla_settings.py \
source/ui_carla_settings_driver.py \ source/ui_carla_settings_driver.py \
@@ -573,12 +571,11 @@ endif
$(LINK) $(PREFIX)/share/carla/ui_carla_host.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_host.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_panel_time.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_panel_time.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_parameter.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_parameter.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_basic_fx.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_calf.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_plugin_calf.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_classic.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_compact.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_plugin_compact.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_default.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_plugin_default.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_sf2.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_zynfx.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_plugin_presets.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_refresh.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_refresh.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_settings.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_settings.py $(DESTDIR)$(PREFIX)/share/carla/resources/
$(LINK) $(PREFIX)/share/carla/ui_carla_settings_driver.py $(DESTDIR)$(PREFIX)/share/carla/resources/ $(LINK) $(PREFIX)/share/carla/ui_carla_settings_driver.py $(DESTDIR)$(PREFIX)/share/carla/resources/


+ 0
- 476
resources/ui/carla_plugin_basic_fx.ui View File

@@ -1,476 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PluginWidget</class>
<widget class="QFrame" name="PluginWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>552</width>
<height>60</height>
</rect>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="windowTitle">
<string>Frame</string>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item>
<layout class="QHBoxLayout" name="layout_top">
<property name="spacing">
<number>1</number>
</property>
<item>
<widget class="QWidget" name="w_buttons" native="true">
<property name="minimumSize">
<size>
<width>72</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>72</width>
<height>24</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="PixmapButton" name="b_enable">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_off.png</normaloff>:/bitmaps/button_off.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_gui">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_gui.png</normaloff>:/bitmaps/button_gui.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_edit">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_edit.png</normaloff>:/bitmaps/button_edit.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="spacer_namesep1">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="Line" name="line_sep">
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>20</height>
</size>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="midLineWidth">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<spacer name="spacer_namesep2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>8</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_name">
<property name="text">
<string>PluginName</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="spacer_namesep3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="layout_peaks">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="DigitalPeakMeter" name="peak_in" native="true">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="DigitalPeakMeter" name="peak_out" native="true">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_leds">
<property name="spacing">
<number>1</number>
</property>
<item>
<widget class="LEDButton" name="led_control">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_midi">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_in">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_out">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="lineWidth">
<number>0</number>
</property>
<property name="midLineWidth">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="layout_bottom">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>12</number>
</property>
<item>
<widget class="QWidget" name="w_knobs_left" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3"/>
</widget>
</item>
<item>
<spacer name="spacer_knobs">
<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="QWidget" name="w_knobs_right" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2"/>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>DigitalPeakMeter</class>
<extends>QWidget</extends>
<header>digitalpeakmeter.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>LEDButton</class>
<extends>QPushButton</extends>
<header>ledbutton.h</header>
</customwidget>
<customwidget>
<class>PixmapButton</class>
<extends>QPushButton</extends>
<header>pixmapbutton.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../resources.qrc"/>
</resources>
<connections/>
</ui>

+ 361
- 0
resources/ui/carla_plugin_classic.ui View File

@@ -0,0 +1,361 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PluginWidget</class>
<widget class="QFrame" name="PluginWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>497</width>
<height>37</height>
</rect>
</property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="windowTitle">
<string>Frame</string>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>2</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QWidget" name="area_left" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>4</number>
</property>
<item>
<widget class="PixmapButton" name="b_enable">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_off.png</normaloff>:/bitmaps/button_off.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_gui">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_gui.png</normaloff>:/bitmaps/button_gui.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_edit">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_edit.png</normaloff>:/bitmaps/button_edit.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_name">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Plugin Name</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<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="QWidget" name="area_right" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="LEDButton" name="led_control">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_midi">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_in">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_out">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>6</number>
</property>
<item>
<widget class="DigitalPeakMeter" name="peak_in" native="true">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="DigitalPeakMeter" name="peak_out" native="true">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>DigitalPeakMeter</class>
<extends>QWidget</extends>
<header>digitalpeakmeter.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>LEDButton</class>
<extends>QPushButton</extends>
<header>ledbutton.h</header>
</customwidget>
<customwidget>
<class>PixmapButton</class>
<extends>QPushButton</extends>
<header>pixmapbutton.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../resources.qrc"/>
</resources>
<connections/>
</ui>

+ 393
- 278
resources/ui/carla_plugin_default.ui View File

@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>497</width>
<height>37</height>
<width>552</width>
<height>60</height>
</rect> </rect>
</property> </property>
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
@@ -19,321 +19,436 @@
<property name="lineWidth"> <property name="lineWidth">
<number>0</number> <number>0</number>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing"> <property name="spacing">
<number>2</number>
<number>0</number>
</property> </property>
<property name="leftMargin"> <property name="leftMargin">
<number>4</number> <number>4</number>
</property> </property>
<property name="topMargin"> <property name="topMargin">
<number>2</number>
<number>3</number>
</property> </property>
<property name="rightMargin"> <property name="rightMargin">
<number>4</number>
<number>6</number>
</property> </property>
<property name="bottomMargin"> <property name="bottomMargin">
<number>2</number>
<number>3</number>
</property> </property>
<item> <item>
<widget class="QWidget" name="area_left" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>4</number>
</property>
<item>
<widget class="PixmapButton" name="b_enable">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_off.png</normaloff>:/bitmaps/button_off.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_gui">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_gui.png</normaloff>:/bitmaps/button_gui.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_edit">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_edit.png</normaloff>:/bitmaps/button_edit.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_name">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Plugin Name</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
<layout class="QHBoxLayout" name="layout_top">
<property name="spacing">
<number>1</number>
</property> </property>
</spacer>
</item>
<item>
<widget class="QWidget" name="area_right" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="LEDButton" name="led_control">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_midi">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_in">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_out">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>6</number>
<item>
<widget class="QWidget" name="w_buttons" native="true">
<property name="minimumSize">
<size>
<width>72</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>72</width>
<height>24</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property> </property>
<item> <item>
<widget class="DigitalPeakMeter" name="peak_in" native="true">
<widget class="PixmapButton" name="b_enable">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>150</width>
<height>0</height>
<width>24</width>
<height>24</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>150</width>
<height>16777215</height>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_off.png</normaloff>:/bitmaps/button_off.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="PixmapButton" name="b_gui">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_gui.png</normaloff>:/bitmaps/button_gui.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size> </size>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="DigitalPeakMeter" name="peak_out" native="true">
<widget class="PixmapButton" name="b_edit">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>150</width>
<height>0</height>
<width>24</width>
<height>24</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>150</width>
<height>16777215</height>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/bitmaps/button_edit.png</normaloff>:/bitmaps/button_edit.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size> </size>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="spacer_namesep1">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>6</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="Line" name="line_sep">
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>20</height>
</size>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="midLineWidth">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<spacer name="spacer_namesep2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>8</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_name">
<property name="text">
<string>PluginName</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="spacer_namesep3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="layout_peaks">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="DigitalPeakMeter" name="peak_in" native="true">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="DigitalPeakMeter" name="peak_out" native="true">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="layout_leds">
<property name="spacing">
<number>1</number>
</property>
<item>
<widget class="LEDButton" name="led_control">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_midi">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_in">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="LEDButton" name="led_audio_out">
<property name="minimumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>14</width>
<height>14</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line">
<property name="lineWidth">
<number>0</number>
</property>
<property name="midLineWidth">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget> </widget>
</item> </item>
<item>
<layout class="QHBoxLayout" name="layout_bottom">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>12</number>
</property>
<item>
<widget class="QWidget" name="w_knobs_left" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3"/>
</widget>
</item>
<item>
<spacer name="spacer_knobs">
<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="QWidget" name="w_knobs_right" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2"/>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>


resources/ui/carla_plugin_zynfx.ui → resources/ui/carla_plugin_presets.ui View File


+ 6
- 0
source/backend/CarlaBackend.h View File

@@ -168,6 +168,12 @@ static const uint PLUGIN_NEEDS_FIXED_BUFFERS = 0x100;
*/ */
static const uint PLUGIN_NEEDS_UI_MAIN_THREAD = 0x200; static const uint PLUGIN_NEEDS_UI_MAIN_THREAD = 0x200;


/*!
* Plugin uses 1 program per MIDI channel.
* @note: Only used in some internal plugins and gig+sf2 files.
*/
static const uint PLUGIN_USES_MULTI_PROGS = 0x400;

/** @} */ /** @} */


/* ------------------------------------------------------------------------------------------------------------ /* ------------------------------------------------------------------------------------------------------------


+ 2
- 0
source/backend/CarlaUtils.cpp View File

@@ -286,6 +286,8 @@ const CarlaCachedPluginInfo* carla_get_cached_plugin_info(CB::PluginType ptype,
info.hints |= CB::PLUGIN_NEEDS_FIXED_BUFFERS; info.hints |= CB::PLUGIN_NEEDS_FIXED_BUFFERS;
if (desc.hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD) if (desc.hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD)
info.hints |= CB::PLUGIN_NEEDS_UI_MAIN_THREAD; info.hints |= CB::PLUGIN_NEEDS_UI_MAIN_THREAD;
if (desc.hints & NATIVE_PLUGIN_USES_MULTI_PROGS)
info.hints |= CB::PLUGIN_USES_MULTI_PROGS;


info.audioIns = desc.audioIns; info.audioIns = desc.audioIns;
info.audioOuts = desc.audioOuts; info.audioOuts = desc.audioOuts;


+ 13
- 9
source/backend/plugin/CarlaPlugin.cpp View File

@@ -621,7 +621,7 @@ const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave)
void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave) void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
{ {
char strBuf[STR_MAX+1]; char strBuf[STR_MAX+1];
const bool usesMultiProgs(pData->extraHints & PLUGIN_EXTRA_HINT_USES_MULTI_PROGS);
const bool usesMultiProgs(pData->hints & PLUGIN_USES_MULTI_PROGS);


const PluginType pluginType(getType()); const PluginType pluginType(getType());


@@ -634,15 +634,18 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData != nullptr); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData != nullptr);
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->isValid()); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->isValid());


const char* const type(stateCustomData->type);
const char* const key(stateCustomData->key); const char* const key(stateCustomData->key);


if (pluginType == PLUGIN_DSSI && (std::strcmp(key, "reloadprograms") == 0 || std::strcmp(key, "load") == 0 || std::strncmp(key, "patches", 7) == 0))
continue;
if (usesMultiProgs && std::strcmp(key, "midiPrograms") == 0)
/**/ if (pluginType == PLUGIN_DSSI && (std::strcmp (key, "reloadprograms") == 0 ||
std::strcmp (key, "load" ) == 0 ||
std::strncmp(key, "patches", 7) == 0 ))
pass();
else if (usesMultiProgs && std::strcmp(key, "midiPrograms") == 0)
pass();
else
continue; continue;


setCustomData(type, key, stateCustomData->value, true);
setCustomData(stateCustomData->type, key, stateCustomData->value, true);
} }


// --------------------------------------------------------------- // ---------------------------------------------------------------
@@ -810,15 +813,16 @@ void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave)
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData != nullptr); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData != nullptr);
CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->isValid()); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->isValid());


const char* const type(stateCustomData->type);
const char* const key(stateCustomData->key); const char* const key(stateCustomData->key);


if (pluginType == PLUGIN_DSSI && (std::strcmp(key, "reloadprograms") == 0 || std::strcmp(key, "load") == 0 || std::strncmp(key, "patches", 7) == 0))
if (pluginType == PLUGIN_DSSI && (std::strcmp (key, "reloadprograms") == 0 ||
std::strcmp (key, "load" ) == 0 ||
std::strncmp(key, "patches", 7) == 0 ))
continue; continue;
if (usesMultiProgs && std::strcmp(key, "midiPrograms") == 0) if (usesMultiProgs && std::strcmp(key, "midiPrograms") == 0)
continue; continue;


setCustomData(type, key, stateCustomData->value, true);
setCustomData(stateCustomData->type, key, stateCustomData->value, true);
} }


// --------------------------------------------------------------- // ---------------------------------------------------------------


+ 1
- 1
source/backend/plugin/CarlaPluginFluidSynth.cpp View File

@@ -865,6 +865,7 @@ public:
pData->hints = 0x0; pData->hints = 0x0;
pData->hints |= PLUGIN_IS_SYNTH; pData->hints |= PLUGIN_IS_SYNTH;
pData->hints |= PLUGIN_CAN_VOLUME; pData->hints |= PLUGIN_CAN_VOLUME;
pData->hints |= PLUGIN_USES_MULTI_PROGS;


if (! kUse16Outs) if (! kUse16Outs)
pData->hints |= PLUGIN_CAN_BALANCE; pData->hints |= PLUGIN_CAN_BALANCE;
@@ -872,7 +873,6 @@ public:
// extra plugin hints // extra plugin hints
pData->extraHints = 0x0; pData->extraHints = 0x0;
pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN;
pData->extraHints |= PLUGIN_EXTRA_HINT_USES_MULTI_PROGS;


if (kUse16Outs) if (kUse16Outs)
pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK; pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK;


+ 0
- 1
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -54,7 +54,6 @@ const ushort kPluginMaxMidiEvents = 512;
const uint PLUGIN_EXTRA_HINT_HAS_MIDI_IN = 0x01; const uint PLUGIN_EXTRA_HINT_HAS_MIDI_IN = 0x01;
const uint PLUGIN_EXTRA_HINT_HAS_MIDI_OUT = 0x02; const uint PLUGIN_EXTRA_HINT_HAS_MIDI_OUT = 0x02;
const uint PLUGIN_EXTRA_HINT_CAN_RUN_RACK = 0x04; const uint PLUGIN_EXTRA_HINT_CAN_RUN_RACK = 0x04;
const uint PLUGIN_EXTRA_HINT_USES_MULTI_PROGS = 0x08;


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// Special parameters // Special parameters


+ 3
- 3
source/backend/plugin/CarlaPluginLinuxSampler.cpp View File

@@ -684,12 +684,12 @@ public:
pData->extraHints = 0x0; pData->extraHints = 0x0;
pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN;


if (kMaxChannels > 1 && fInstrumentIds.size() > 1)
pData->hints |= PLUGIN_USES_MULTI_PROGS;

if (! kUses16Outs) if (! kUses16Outs)
pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK; pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK;


if (fInstrumentIds.size() > 1)
pData->extraHints |= PLUGIN_EXTRA_HINT_USES_MULTI_PROGS;

bufferSizeChanged(pData->engine->getBufferSize()); bufferSizeChanged(pData->engine->getBufferSize());
reloadPrograms(true); reloadPrograms(true);




+ 2
- 3
source/backend/plugin/CarlaPluginNative.cpp View File

@@ -1169,6 +1169,8 @@ public:
pData->hints |= PLUGIN_NEEDS_FIXED_BUFFERS; pData->hints |= PLUGIN_NEEDS_FIXED_BUFFERS;
if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD) if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD)
pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD;
if (fDescriptor->hints & NATIVE_PLUGIN_USES_MULTI_PROGS)
pData->hints |= PLUGIN_USES_MULTI_PROGS;


// extra plugin hints // extra plugin hints
pData->extraHints = 0x0; pData->extraHints = 0x0;
@@ -1176,9 +1178,6 @@ public:
if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0) && mIns <= 1 && mOuts <= 1) if (aIns <= 2 && aOuts <= 2 && (aIns == aOuts || aIns == 0 || aOuts == 0) && mIns <= 1 && mOuts <= 1)
pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK; pData->extraHints |= PLUGIN_EXTRA_HINT_CAN_RUN_RACK;


if (fDescriptor->hints & NATIVE_PLUGIN_USES_MULTI_PROGS)
pData->extraHints |= PLUGIN_EXTRA_HINT_USES_MULTI_PROGS;

bufferSizeChanged(pData->engine->getBufferSize()); bufferSizeChanged(pData->engine->getBufferSize());
reloadPrograms(true); reloadPrograms(true);




+ 4
- 0
source/carla_backend.py View File

@@ -211,6 +211,10 @@ PLUGIN_NEEDS_FIXED_BUFFERS = 0x100
# Plugin needs to receive all UI events in the main thread. # Plugin needs to receive all UI events in the main thread.
PLUGIN_NEEDS_UI_MAIN_THREAD = 0x200 PLUGIN_NEEDS_UI_MAIN_THREAD = 0x200


# Plugin uses 1 program per MIDI channel.
# @note: Only used in some internal plugins and gig+sf2 files.
PLUGIN_USES_MULTI_PROGS = 0x400

# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Plugin Options # Plugin Options
# Various plugin options. # Various plugin options.


+ 204
- 192
source/carla_skin.py View File

@@ -35,11 +35,11 @@ else:
# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Imports (Custom) # Imports (Custom)


import ui_carla_plugin_default
import ui_carla_plugin_basic_fx
import ui_carla_plugin_calf import ui_carla_plugin_calf
import ui_carla_plugin_classic
import ui_carla_plugin_compact import ui_carla_plugin_compact
import ui_carla_plugin_zynfx
import ui_carla_plugin_default
import ui_carla_plugin_presets


from carla_widgets import * from carla_widgets import *
from digitalpeakmeter import DigitalPeakMeter from digitalpeakmeter import DigitalPeakMeter
@@ -467,7 +467,7 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):
elif self.fSkinStyle in ("mod", "openav", "zynfx"): elif self.fSkinStyle in ("mod", "openav", "zynfx"):
self.peak_in.setMeterStyle(DigitalPeakMeter.STYLE_OPENAV) self.peak_in.setMeterStyle(DigitalPeakMeter.STYLE_OPENAV)


if self.fPeaksInputCount == 0 and not isinstance(self, PluginSlot_Default):
if self.fPeaksInputCount == 0 and not isinstance(self, PluginSlot_Classic):
self.peak_in.hide() self.peak_in.hide()


if self.peak_out is not None: if self.peak_out is not None:
@@ -482,7 +482,7 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):
elif self.fSkinStyle in ("mod", "openav", "zynfx"): elif self.fSkinStyle in ("mod", "openav", "zynfx"):
self.peak_out.setMeterStyle(DigitalPeakMeter.STYLE_OPENAV) self.peak_out.setMeterStyle(DigitalPeakMeter.STYLE_OPENAV)


if self.fPeaksOutputCount == 0 and not isinstance(self, PluginSlot_Default):
if self.fPeaksOutputCount == 0 and not isinstance(self, PluginSlot_Classic):
self.peak_out.hide() self.peak_out.hide()


# ------------------------------------------------------------- # -------------------------------------------------------------
@@ -556,6 +556,8 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):
continue continue
if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0: if (paramData['hints'] & PARAMETER_IS_ENABLED) == 0:
continue continue
if paramInfo['name'].startswith("unused"):
continue


paramName = getParameterShortName(paramInfo['name']) paramName = getParameterShortName(paramInfo['name'])


@@ -1194,10 +1196,112 @@ class AbstractPluginSlot(QFrame, PluginEditParentMeta):


# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------


class PluginSlot_Default(AbstractPluginSlot):
class PluginSlot_Calf(AbstractPluginSlot):
def __init__(self, parent, host, pluginId, skinStyle):
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle)
self.ui = ui_carla_plugin_calf.Ui_PluginWidget()
self.ui.setupUi(self)

audioCount = self.host.get_audio_port_count_info(self.fPluginId)
midiCount = self.host.get_midi_port_count_info(self.fPluginId)

# -------------------------------------------------------------
# Internal stuff

self.fButtonFont = self.ui.b_gui.font()
self.fButtonFont.setBold(False)
self.fButtonFont.setPointSize(8)

self.fButtonColorOn = QColor( 18, 41, 87)
self.fButtonColorOff = QColor(150, 150, 150)

# -------------------------------------------------------------
# Set-up GUI

self.ui.label_active.setFont(self.fButtonFont)

self.ui.b_remove.setPixmaps(":/bitmaps/button_calf1.png", ":/bitmaps/button_calf1_down.png", ":/bitmaps/button_calf1_hover.png")

self.ui.b_edit.setTopText(self.tr("Edit"), self.fButtonColorOn, self.fButtonFont)
self.ui.b_remove.setTopText(self.tr("Remove"), self.fButtonColorOn, self.fButtonFont)

if self.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOn, self.fButtonFont)
else:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOff, self.fButtonFont)

if audioCount['ins'] == 0:
self.ui.label_audio_in.hide()

if audioCount['outs'] == 0:
self.ui.label_audio_out.hide()

if midiCount['ins'] == 0:
self.ui.label_midi.hide()
self.ui.led_midi.hide()

if self.fIdleTimerId != 0:
self.ui.b_remove.setEnabled(False)
self.ui.b_remove.setVisible(False)

# -------------------------------------------------------------

self.b_enable = self.ui.b_enable
self.b_gui = self.ui.b_gui
self.b_edit = self.ui.b_edit
self.b_remove = self.ui.b_remove

self.label_name = self.ui.label_name
self.led_midi = self.ui.led_midi

self.peak_in = self.ui.peak_in
self.peak_out = self.ui.peak_out

self.w_knobs_left = self.ui.w_knobs

self.ready()

self.ui.led_midi.setColor(self.ui.led_midi.CALF)

self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu)

#------------------------------------------------------------------

def getFixedHeight(self):
return 94 if max(self.peak_in.channelCount(), self.peak_out.channelCount()) < 2 else 106

#------------------------------------------------------------------

def editDialogPluginHintsChanged(self, pluginId, hints):
if hints & PLUGIN_HAS_CUSTOM_UI:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOn, self.fButtonFont)
else:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOff, self.fButtonFont)

AbstractPluginSlot.editDialogPluginHintsChanged(self, pluginId, hints)

#------------------------------------------------------------------

def paintEvent(self, event):
isBlack = bool(self.fSkinStyle == "calf_black")

painter = QPainter(self)
painter.setBrush(Qt.transparent)

painter.setPen(QPen(QColor(20, 20, 20) if isBlack else QColor(75, 86, 99), 1))
painter.drawRect(0, 1, self.width()-1, self.height()-3)

painter.setPen(QPen(QColor(45, 45, 45) if isBlack else QColor(86, 99, 114), 1))
painter.drawLine(0, 0, self.width(), 0)

AbstractPluginSlot.paintEvent(self, event)

# ------------------------------------------------------------------------------------------------------------

class PluginSlot_Classic(AbstractPluginSlot):
def __init__(self, parent, host, pluginId): def __init__(self, parent, host, pluginId):
AbstractPluginSlot.__init__(self, parent, host, pluginId, "default")
self.ui = ui_carla_plugin_default.Ui_PluginWidget()
AbstractPluginSlot.__init__(self, parent, host, pluginId, "classic")
self.ui = ui_carla_plugin_classic.Ui_PluginWidget()
self.ui.setupUi(self) self.ui.setupUi(self)


# ------------------------------------------------------------- # -------------------------------------------------------------
@@ -1317,10 +1421,10 @@ class PluginSlot_Compact(AbstractPluginSlot):


# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------


class PluginSlot_BasicFX(AbstractPluginSlot):
class PluginSlot_Default(AbstractPluginSlot):
def __init__(self, parent, host, pluginId, skinStyle): def __init__(self, parent, host, pluginId, skinStyle):
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle) AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle)
self.ui = ui_carla_plugin_basic_fx.Ui_PluginWidget()
self.ui = ui_carla_plugin_default.Ui_PluginWidget()
self.ui.setupUi(self) self.ui.setupUi(self)


# ------------------------------------------------------------- # -------------------------------------------------------------
@@ -1370,163 +1474,91 @@ class PluginSlot_BasicFX(AbstractPluginSlot):


# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------


class PluginSlot_Calf(AbstractPluginSlot):
class PluginSlot_Presets(AbstractPluginSlot):
def __init__(self, parent, host, pluginId, skinStyle): def __init__(self, parent, host, pluginId, skinStyle):
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle) AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle)
self.ui = ui_carla_plugin_calf.Ui_PluginWidget()
self.ui = ui_carla_plugin_presets.Ui_PluginWidget()
self.ui.setupUi(self) self.ui.setupUi(self)


audioCount = self.host.get_audio_port_count_info(self.fPluginId)
midiCount = self.host.get_midi_port_count_info(self.fPluginId)
usingMidiPrograms = bool(skinStyle != "presets")


# ------------------------------------------------------------- # -------------------------------------------------------------
# Internal stuff
# Set-up programs


self.fButtonFont = self.ui.b_gui.font()
self.fButtonFont.setBold(False)
self.fButtonFont.setPointSize(8)
if usingMidiPrograms:
programCount = self.host.get_midi_program_count(self.fPluginId)
else:
programCount = self.host.get_program_count(self.fPluginId)


self.fButtonColorOn = QColor( 18, 41, 87)
self.fButtonColorOff = QColor(150, 150, 150)
if programCount > 0:
self.ui.cb_presets.setEnabled(True)
self.ui.label_presets.setEnabled(True)


# -------------------------------------------------------------
# Set-up GUI
for i in range(programCount):
if usingMidiPrograms:
progName = self.host.get_midi_program_data(self.fPluginId, i)['name']
else:
progName = self.host.get_program_name(self.fPluginId, i)


self.ui.label_active.setFont(self.fButtonFont)
self.ui.cb_presets.addItem(progName)


self.ui.b_remove.setPixmaps(":/bitmaps/button_calf1.png", ":/bitmaps/button_calf1_down.png", ":/bitmaps/button_calf1_hover.png")
if usingMidiPrograms:
curProg = self.host.get_current_midi_program_index(self.fPluginId)
else:
curProg = self.host.get_current_program_index(self.fPluginId)


self.ui.b_edit.setTopText(self.tr("Edit"), self.fButtonColorOn, self.fButtonFont)
self.ui.b_remove.setTopText(self.tr("Remove"), self.fButtonColorOn, self.fButtonFont)
self.ui.cb_presets.setCurrentIndex(curProg)


if self.fPluginInfo['hints'] & PLUGIN_HAS_CUSTOM_UI:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOn, self.fButtonFont)
else: else:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOff, self.fButtonFont)

if audioCount['ins'] == 0:
self.ui.label_audio_in.hide()

if audioCount['outs'] == 0:
self.ui.label_audio_out.hide()

if midiCount['ins'] == 0:
self.ui.label_midi.hide()
self.ui.led_midi.hide()

if self.fIdleTimerId != 0:
self.ui.b_remove.setEnabled(False)
self.ui.b_remove.setVisible(False)
self.ui.cb_presets.setEnabled(False)
self.ui.cb_presets.setVisible(False)
self.ui.label_presets.setEnabled(False)
self.ui.label_presets.setVisible(False)


# ------------------------------------------------------------- # -------------------------------------------------------------


self.b_enable = self.ui.b_enable self.b_enable = self.ui.b_enable
self.b_gui = self.ui.b_gui self.b_gui = self.ui.b_gui
self.b_edit = self.ui.b_edit self.b_edit = self.ui.b_edit
self.b_remove = self.ui.b_remove


self.label_name = self.ui.label_name
self.led_midi = self.ui.led_midi
self.cb_presets = self.ui.cb_presets

self.label_name = self.ui.label_name
self.label_presets = self.ui.label_presets

self.led_control = self.ui.led_control
self.led_midi = self.ui.led_midi
self.led_audio_in = self.ui.led_audio_in
self.led_audio_out = self.ui.led_audio_out


self.peak_in = self.ui.peak_in self.peak_in = self.ui.peak_in
self.peak_out = self.ui.peak_out self.peak_out = self.ui.peak_out


self.w_knobs_left = self.ui.w_knobs
if skinStyle == "zynfx":
self.setupZynFxParams()
else:
self.w_knobs_left = self.ui.w_knobs_left
self.w_knobs_right = self.ui.w_knobs_right


self.ready() self.ready()


self.ui.led_midi.setColor(self.ui.led_midi.CALF)

self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu) self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu)


#------------------------------------------------------------------

def getFixedHeight(self):
return 94 if max(self.peak_in.channelCount(), self.peak_out.channelCount()) < 2 else 106

#------------------------------------------------------------------

def editDialogPluginHintsChanged(self, pluginId, hints):
if hints & PLUGIN_HAS_CUSTOM_UI:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOn, self.fButtonFont)
if usingMidiPrograms:
self.ui.cb_presets.currentIndexChanged.connect(self.slot_midiProgramChanged)
else: else:
self.ui.b_gui.setTopText(self.tr("GUI"), self.fButtonColorOff, self.fButtonFont)

AbstractPluginSlot.editDialogPluginHintsChanged(self, pluginId, hints)

#------------------------------------------------------------------

def paintEvent(self, event):
isBlack = bool(self.fSkinStyle == "calf_black")

painter = QPainter(self)
painter.setBrush(Qt.transparent)

painter.setPen(QPen(QColor(20, 20, 20) if isBlack else QColor(75, 86, 99), 1))
painter.drawRect(0, 1, self.width()-1, self.height()-3)

painter.setPen(QPen(QColor(45, 45, 45) if isBlack else QColor(86, 99, 114), 1))
painter.drawLine(0, 0, self.width(), 0)

AbstractPluginSlot.paintEvent(self, event)

# ------------------------------------------------------------------------------------------------------------

class PluginSlot_Nekobi(AbstractPluginSlot):
def __init__(self, parent, host, pluginId, skinStyle):
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle)
#self.ui = ui_carla_plugin_basic_fx.Ui_PluginWidget()
#self.ui.setupUi(self)

# -------------------------------------------------------------
# Set-up GUI

self.fPixmapCenter = QPixmap(":/bitmaps/background_nekobi.png")

self.fPixmapLeft = QPixmap(":/bitmaps/background_nekobi_left.png")
self.fPixmapLeftRect = QRectF(0, 0, self.fPixmapLeft.width(), self.fPixmapLeft.height())

self.fPixmapRight = QPixmap(":/bitmaps/background_nekobi_right.png")
self.fPixmapRightRect = QRectF(0, 0, self.fPixmapRight.width(), self.fPixmapRight.height())

#------------------------------------------------------------------

def getFixedHeight(self):
return 108

#------------------------------------------------------------------

def paintEvent(self, event):
painter = QPainter(self)

# main bg (center)
painter.drawTiledPixmap(0, 0, self.width(), self.height(), self.fPixmapCenter)

# left side
painter.drawPixmap(self.fPixmapLeftRect, self.fPixmapLeft, self.fPixmapLeftRect)

# right side
rightTarget = QRectF(self.fPixmapRightRect)
rightTarget.moveLeft(self.width()-rightTarget.width())
painter.drawPixmap(rightTarget, self.fPixmapRight, self.fPixmapRightRect)

AbstractPluginSlot.paintEvent(self, event)

# ------------------------------------------------------------------------------------------------------------

class PluginSlot_ZynFX(AbstractPluginSlot):
def __init__(self, parent, host, pluginId, skinStyle):
AbstractPluginSlot.__init__(self, parent, host, pluginId, skinStyle)
self.ui = ui_carla_plugin_zynfx.Ui_PluginWidget()
self.ui.setupUi(self)
self.ui.cb_presets.currentIndexChanged.connect(self.slot_programChanged)


# ------------------------------------------------------------- # -------------------------------------------------------------
# Set-up parameters


def setupZynFxParams(self):
parameterCount = self.host.get_parameter_count(self.fPluginId) parameterCount = self.host.get_parameter_count(self.fPluginId)


index = 0 index = 0
for i in range(parameterCount): for i in range(parameterCount):
if index >= 8:
break

paramInfo = self.host.get_parameter_info(self.fPluginId, i) paramInfo = self.host.get_parameter_info(self.fPluginId, i)
paramData = self.host.get_parameter_data(self.fPluginId, i) paramData = self.host.get_parameter_data(self.fPluginId, i)
paramRanges = self.host.get_parameter_ranges(self.fPluginId, i) paramRanges = self.host.get_parameter_ranges(self.fPluginId, i)
@@ -1540,6 +1572,9 @@ class PluginSlot_ZynFX(AbstractPluginSlot):


paramName = paramInfo['name'] paramName = paramInfo['name']


if paramName.startswith("unused"):
continue

# real zyn fx plugins # real zyn fx plugins
if self.fPluginInfo['label'] == "zynalienwah": if self.fPluginInfo['label'] == "zynalienwah":
if i == 0: paramName = "Freq" if i == 0: paramName = "Freq"
@@ -1602,7 +1637,7 @@ class PluginSlot_ZynFX(AbstractPluginSlot):
elif i == 10: paramName = "I.del" elif i == 10: paramName = "I.del"


else: else:
paramName = getParameterShortName(paramInfo['name'])
paramName = getParameterShortName(paramName)


widget = PixmapDial(self, i) widget = PixmapDial(self, i)


@@ -1644,55 +1679,6 @@ class PluginSlot_ZynFX(AbstractPluginSlot):
self.fParameterList.append([PARAMETER_VOLUME, widget]) self.fParameterList.append([PARAMETER_VOLUME, widget])
self.ui.w_knobs_right.layout().addWidget(widget) self.ui.w_knobs_right.layout().addWidget(widget)


# -------------------------------------------------------------
# Set-up MIDI programs

midiProgramCount = self.host.get_midi_program_count(self.fPluginId)

if midiProgramCount > 0:
self.ui.cb_presets.setEnabled(True)
self.ui.label_presets.setEnabled(True)

for i in range(midiProgramCount):
mpData = self.host.get_midi_program_data(self.fPluginId, i)
mpName = mpData['name']

self.ui.cb_presets.addItem(mpName)

self.fCurrentMidiProgram = self.host.get_current_midi_program_index(self.fPluginId)
self.ui.cb_presets.setCurrentIndex(self.fCurrentMidiProgram)

else:
self.fCurrentMidiProgram = -1
self.ui.cb_presets.setEnabled(False)
self.ui.cb_presets.setVisible(False)
self.ui.label_presets.setEnabled(False)
self.ui.label_presets.setVisible(False)

# -------------------------------------------------------------

self.b_enable = self.ui.b_enable
self.b_gui = self.ui.b_gui
self.b_edit = self.ui.b_edit

self.cb_presets = self.ui.cb_presets

self.label_name = self.ui.label_name
self.label_presets = self.ui.label_presets

self.led_control = self.ui.led_control
self.led_midi = self.ui.led_midi
self.led_audio_in = self.ui.led_audio_in
self.led_audio_out = self.ui.led_audio_out

self.peak_in = self.ui.peak_in
self.peak_out = self.ui.peak_out

self.ready()

self.customContextMenuRequested.connect(self.slot_showDefaultCustomMenu)
self.ui.cb_presets.currentIndexChanged.connect(self.slot_midiProgramChanged)

#------------------------------------------------------------------ #------------------------------------------------------------------


def getFixedHeight(self): def getFixedHeight(self):
@@ -1715,12 +1701,24 @@ class PluginSlot_ZynFX(AbstractPluginSlot):
# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------


def getSkinStyle(host, pluginId): def getSkinStyle(host, pluginId):
if False:
# kdevelop likes this :)
host = CarlaHostNull()
progCount = 0
pluginInfo = PyCarlaPluginInfo
pluginName = ""

pluginInfo = host.get_plugin_info(pluginId) pluginInfo = host.get_plugin_info(pluginId)
pluginName = host.get_real_plugin_name(pluginId) pluginName = host.get_real_plugin_name(pluginId)
pluginLabel = pluginInfo['label'].lower() pluginLabel = pluginInfo['label'].lower()
pluginMaker = pluginInfo['maker'] pluginMaker = pluginInfo['maker']
uniqueId = pluginInfo['uniqueId'] uniqueId = pluginInfo['uniqueId']


if pluginInfo['type'] in (PLUGIN_VST2, PLUGIN_VST3, PLUGIN_AU):
progCount = host.get_program_count(pluginId)
else:
progCount = host.get_midi_program_count(pluginId)

# Samplers # Samplers
if pluginInfo['type'] == PLUGIN_GIG: if pluginInfo['type'] == PLUGIN_GIG:
return "gig" return "gig"
@@ -1729,6 +1727,18 @@ def getSkinStyle(host, pluginId):
if pluginInfo['type'] == PLUGIN_SFZ: if pluginInfo['type'] == PLUGIN_SFZ:
return "sfz" return "sfz"


# Calf
if pluginName.split(" ", 1)[0].lower() == "calf":
return "calf_black" if "mono" in pluginLabel else "calf_blue"

# MOD
if pluginLabel.startswith("http://portalmod.com/") or pluginLabel.startswith("http://plugin.org.uk/swh-plugins/"):
return "mod"

# OpenAV
if pluginMaker == "OpenAV Productions":
return "openav"

# ZynFX # ZynFX
if pluginInfo['type'] == PLUGIN_INTERNAL: if pluginInfo['type'] == PLUGIN_INTERNAL:
if pluginLabel.startswith("zyn") and pluginInfo['category'] != PLUGIN_CATEGORY_SYNTH: if pluginLabel.startswith("zyn") and pluginInfo['category'] != PLUGIN_CATEGORY_SYNTH:
@@ -1738,15 +1748,17 @@ def getSkinStyle(host, pluginId):
if pluginLabel.startswith("zyn") and pluginMaker.startswith("Josep Andreu"): if pluginLabel.startswith("zyn") and pluginMaker.startswith("Josep Andreu"):
return "zynfx" return "zynfx"


# Groups
if pluginName.split(" ", 1)[0].lower() == "calf":
return "calf_black" if "mono" in pluginLabel else "calf_blue"
if pluginLabel.startswith("http://portalmod.com/") or pluginLabel.startswith("http://plugin.org.uk/swh-plugins/"):
return "mod"
if pluginMaker == "OpenAV Productions":
return "openav"
if pluginInfo['type'] == PLUGIN_LV2:
if pluginLabel.startswith("http://kxstudio.sf.net/carla/plugins/zyn") and pluginName != "ZynAddSubFX":
return "zynfx"

# Presets
if progCount > 1 and (pluginInfo['hints'] & PLUGIN_USES_MULTI_PROGS) == 0:
if pluginInfo['type'] in (PLUGIN_VST2, PLUGIN_VST3, PLUGIN_AU):
return "presets"
return "mpresets"


# DISTRHO Plugins
# DISTRHO Plugins (needs to be last)
if pluginMaker.startswith("falkTX, ") or pluginMaker == "DISTRHO" or pluginLabel.startswith("http://distrho.sf.net/plugins/"): if pluginMaker.startswith("falkTX, ") or pluginMaker == "DISTRHO" or pluginLabel.startswith("http://distrho.sf.net/plugins/"):
return pluginLabel.replace("http://distrho.sf.net/plugins/","") return pluginLabel.replace("http://distrho.sf.net/plugins/","")


@@ -1754,20 +1766,20 @@ def getSkinStyle(host, pluginId):


def createPluginSlot(parent, host, pluginId, options): def createPluginSlot(parent, host, pluginId, options):
if not options['useSkins']: if not options['useSkins']:
return PluginSlot_Default(parent, host, pluginId)
return PluginSlot_Classic(parent, host, pluginId)


skinStyle = getSkinStyle(host, pluginId) skinStyle = getSkinStyle(host, pluginId)


if options['compact'] or "compact" in skinStyle:
if "compact" in skinStyle or options['compact']:
return PluginSlot_Compact(parent, host, pluginId, skinStyle) return PluginSlot_Compact(parent, host, pluginId, skinStyle)


if "calf" in skinStyle: if "calf" in skinStyle:
return PluginSlot_Calf(parent, host, pluginId, skinStyle) return PluginSlot_Calf(parent, host, pluginId, skinStyle)


if skinStyle == "zynfx":
return PluginSlot_ZynFX(parent, host, pluginId, skinStyle)
if skinStyle in ("mpresets", "presets", "zynfx"):
return PluginSlot_Presets(parent, host, pluginId, skinStyle)


return PluginSlot_BasicFX(parent, host, pluginId, skinStyle)
return PluginSlot_Default(parent, host, pluginId, skinStyle)


# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Main Testing # Main Testing


+ 1
- 1
source/includes/CarlaNative.h View File

@@ -59,7 +59,7 @@ typedef enum {
NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS = 1 << 3, NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS = 1 << 3,
NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD = 1 << 4, NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD = 1 << 4,
NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE = 1 << 6, NATIVE_PLUGIN_NEEDS_UI_OPEN_SAVE = 1 << 6,
NATIVE_PLUGIN_USES_MULTI_PROGS = 1 << 7, /** has 1 patch per midi channel */
NATIVE_PLUGIN_USES_MULTI_PROGS = 1 << 7, /** has 1 program per midi channel */
NATIVE_PLUGIN_USES_PANNING = 1 << 8, /** uses stereo balance if unset (default) */ NATIVE_PLUGIN_USES_PANNING = 1 << 8, /** uses stereo balance if unset (default) */
NATIVE_PLUGIN_USES_STATE = 1 << 9, NATIVE_PLUGIN_USES_STATE = 1 << 9,
NATIVE_PLUGIN_USES_TIME = 1 << 10, NATIVE_PLUGIN_USES_TIME = 1 << 10,


Loading…
Cancel
Save