@@ -34,17 +34,88 @@ try: | |||||
except: | except: | ||||
haveDBus = False | haveDBus = False | ||||
havePulseAudio = os.path.exists("/usr/bin/pulseaudio") | |||||
# --------------------------------------------------------------------- | # --------------------------------------------------------------------- | ||||
def get_architecture(): | |||||
# FIXME - more checks | |||||
if sys.int_info[1] == 4: | |||||
return "64-bit" | |||||
return "32-bit" | |||||
DEFAULT_LADSPA_PATH = [ | |||||
os.path.join(HOME, ".ladspa"), | |||||
os.path.join("/", "usr", "lib", "ladspa"), | |||||
os.path.join("/", "usr", "local", "lib", "ladspa") | |||||
] | |||||
DEFAULT_DSSI_PATH = [ | |||||
os.path.join(HOME, ".dssi"), | |||||
os.path.join("/", "usr", "lib", "dssi"), | |||||
os.path.join("/", "usr", "local", "lib", "dssi") | |||||
] | |||||
DEFAULT_LV2_PATH = [ | |||||
os.path.join(HOME, ".lv2"), | |||||
os.path.join("/", "usr", "lib", "lv2"), | |||||
os.path.join("/", "usr", "local", "lib", "lv2") | |||||
] | |||||
DEFAULT_VST_PATH = [ | |||||
os.path.join(HOME, ".vst"), | |||||
os.path.join("/", "usr", "lib", "vst"), | |||||
os.path.join("/", "usr", "local", "lib", "vst") | |||||
] | |||||
DESKTOP_X_IMAGE = [ | |||||
"eog.desktop", | |||||
"kde4/digikam.desktop", | |||||
"kde4/gwenview.desktop" | |||||
] | |||||
DESKTOP_X_MUSIC = [ | |||||
"audacious.desktop", | |||||
"clementine.desktop", | |||||
"smplayer.desktop", | |||||
"vlc.desktop", | |||||
"kde4/amarok.desktop" | |||||
] | |||||
DESKTOP_X_VIDEO = [ | |||||
"smplayer.desktop", | |||||
"vlc.desktop" | |||||
] | |||||
DESKTOP_X_TEXT = [ | |||||
"gedit.desktop", | |||||
"kde4/kate.desktop", | |||||
"kde4/kwrite.desktop" | |||||
] | |||||
DESKTOP_X_BROWSER = [ | |||||
"chrome.desktop", | |||||
"firefox.desktop", | |||||
"kde4/konqbrowser.desktop" | |||||
] | |||||
XDG_APPLICATIONS_PATH = [ | |||||
"/usr/share/applications", | |||||
"/usr/local/share/applications" | |||||
] | |||||
WINEASIO_PREFIX = "HKEY_CURRENT_USER\Software\Wine\WineASIO" | |||||
# Global Settings | |||||
GlobalSettings = QSettings("Cadence", "GlobalSettings") | |||||
def get_linux_distro(): | |||||
distro = "" | |||||
# --------------------------------------------------------------------- | |||||
def get_architecture(): | |||||
if LINUX: | |||||
return os.uname()[4] | |||||
elif WINDOWS: | |||||
if sys.platform == "win32": | |||||
return "32-bit" | |||||
if sys.platform == "win64": | |||||
return "64-bit" | |||||
return "Unknown" | |||||
def get_linux_information(): | |||||
if os.path.exists("/etc/lsb-release"): | if os.path.exists("/etc/lsb-release"): | ||||
distro = getoutput(". /etc/lsb-release && echo $DISTRIB_DESCRIPTION") | distro = getoutput(". /etc/lsb-release && echo $DISTRIB_DESCRIPTION") | ||||
elif os.path.exists("/etc/arch-release"): | elif os.path.exists("/etc/arch-release"): | ||||
@@ -52,10 +123,13 @@ def get_linux_distro(): | |||||
else: | else: | ||||
distro = os.uname()[0] | distro = os.uname()[0] | ||||
return distro | |||||
kernel = os.uname()[2] | |||||
def get_linux_kernel(): | |||||
return os.uname()[2] | |||||
return (distro, kernel) | |||||
def get_mac_information(): | |||||
# TODO | |||||
return ("Mac OS", "Unknown") | |||||
def get_windows_information(): | def get_windows_information(): | ||||
major = sys.getwindowsversion()[0] | major = sys.getwindowsversion()[0] | ||||
@@ -100,25 +174,6 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): | |||||
# TODO | # TODO | ||||
self.b_jack_restart.setEnabled(False) | self.b_jack_restart.setEnabled(False) | ||||
# ------------------------------------------------------------- | |||||
# System Information | |||||
if WINDOWS: | |||||
info = get_windows_information() | |||||
self.label_info_os.setText(info[0]) | |||||
self.label_info_version.setText(info[1]) | |||||
elif MACOS: | |||||
self.label_info_os.setText("Mac OS") | |||||
self.label_info_version.setText("Unknown") | |||||
elif LINUX: | |||||
self.label_info_os.setText(get_linux_distro()) | |||||
self.label_info_version.setText(get_linux_kernel()) | |||||
else: | |||||
self.label_info_os.setText("Unknown") | |||||
self.label_info_version.setText("Unknown") | |||||
self.label_info_arch.setText(get_architecture()) | |||||
# ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
# Set-up icons | # Set-up icons | ||||
@@ -132,6 +187,85 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): | |||||
#self.act_pulse_start.setIcon(getIcon("media-playback-start")) | #self.act_pulse_start.setIcon(getIcon("media-playback-start")) | ||||
#self.act_pulse_stop.setIcon(getIcon("media-playback-stop")) | #self.act_pulse_stop.setIcon(getIcon("media-playback-stop")) | ||||
# ------------------------------------------------------------- | |||||
# Set-up GUI (System Information) | |||||
if LINUX: | |||||
info = get_linux_information() | |||||
elif MACOS: | |||||
info = get_mac_information() | |||||
elif WINDOWS: | |||||
info = get_windows_information() | |||||
else: | |||||
info = ("Unknown", "Unknown") | |||||
self.label_info_os.setText(info[0]) | |||||
self.label_info_version.setText(info[1]) | |||||
self.label_info_arch.setText(get_architecture()) | |||||
# ------------------------------------------------------------- | |||||
# Set-up GUI (Tweaks) | |||||
self.settings_changed_types = [] | |||||
self.frame_tweaks_settings.setVisible(False) | |||||
for i in range(self.tw_tweaks.rowCount()): | |||||
self.tw_tweaks.item(0, i).setTextAlignment(Qt.AlignCenter) | |||||
self.tw_tweaks.setCurrentCell(0, 0) | |||||
# Audio Plugins PATH | |||||
self.b_tweak_plugins_change.setEnabled(False) | |||||
self.b_tweak_plugins_remove.setEnabled(False) | |||||
for iPath in DEFAULT_LADSPA_PATH: | |||||
self.list_LADSPA.addItem(iPath) | |||||
for iPath in DEFAULT_DSSI_PATH: | |||||
self.list_DSSI.addItem(iPath) | |||||
for iPath in DEFAULT_LV2_PATH: | |||||
self.list_LV2.addItem(iPath) | |||||
for iPath in DEFAULT_VST_PATH: | |||||
self.list_VST.addItem(iPath) | |||||
EXTRA_LADSPA_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LADSPA_PATH", "", type=str) | |||||
EXTRA_DSSI_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_DSSI_PATH", "", type=str) | |||||
EXTRA_LV2_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_LV2_PATH", "", type=str) | |||||
EXTRA_VST_DIRS = GlobalSettings.value("AudioPlugins/EXTRA_VST_PATH", "", type=str) | |||||
for iPath in EXTRA_LADSPA_DIRS.split(":"): | |||||
if os.path.exists(iPath): | |||||
self.list_LADSPA.addItem(iPath) | |||||
for iPath in EXTRA_DSSI_DIRS.split(":"): | |||||
if os.path.exists(iPath): | |||||
self.list_DSSI.addItem(iPath) | |||||
for iPath in EXTRA_LV2_DIRS.split(":"): | |||||
if os.path.exists(iPath): | |||||
self.list_LV2.addItem(iPath) | |||||
for iPath in EXTRA_VST_DIRS.split(":"): | |||||
if os.path.exists(iPath): | |||||
self.list_VST.addItem(iPath) | |||||
self.list_LADSPA.sortItems(Qt.AscendingOrder) | |||||
self.list_DSSI.sortItems(Qt.AscendingOrder) | |||||
self.list_LV2.sortItems(Qt.AscendingOrder) | |||||
self.list_VST.sortItems(Qt.AscendingOrder) | |||||
self.list_LADSPA.setCurrentRow(0) | |||||
self.list_DSSI.setCurrentRow(0) | |||||
self.list_LV2.setCurrentRow(0) | |||||
self.list_VST.setCurrentRow(0) | |||||
# Default Applications | |||||
# WineASIO | |||||
# ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
# Set-up systray | # Set-up systray | ||||
@@ -162,6 +296,20 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): | |||||
self.connect(self.pic_render, SIGNAL("clicked()"), lambda tool="cadence_render": self.func_start_tool(tool)) | self.connect(self.pic_render, SIGNAL("clicked()"), lambda tool="cadence_render": self.func_start_tool(tool)) | ||||
self.connect(self.pic_xycontroller, SIGNAL("clicked()"), lambda tool="cadence_xycontroller": self.func_start_tool(tool)) | self.connect(self.pic_xycontroller, SIGNAL("clicked()"), lambda tool="cadence_xycontroller": self.func_start_tool(tool)) | ||||
self.connect(self.b_tweaks_apply_now, SIGNAL("clicked()"), SLOT("slot_tweaksApply()")) | |||||
self.connect(self.b_tweak_plugins_add, SIGNAL("clicked()"), SLOT("slot_tweakPluginAdd()")) | |||||
self.connect(self.b_tweak_plugins_change, SIGNAL("clicked()"), SLOT("slot_tweakPluginChange()")) | |||||
self.connect(self.b_tweak_plugins_remove, SIGNAL("clicked()"), SLOT("slot_tweakPluginRemove()")) | |||||
self.connect(self.b_tweak_plugins_reset, SIGNAL("clicked()"), SLOT("slot_tweakPluginReset()")) | |||||
self.connect(self.tb_tweak_plugins, SIGNAL("currentChanged(int)"), SLOT("slot_tweakPluginTypeChanged(int)")) | |||||
self.connect(self.list_LADSPA, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsLadspaRowChanged(int)")) | |||||
self.connect(self.list_DSSI, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsDssiRowChanged(int)")) | |||||
self.connect(self.list_LV2, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsLv2RowChanged(int)")) | |||||
self.connect(self.list_VST, SIGNAL("currentRowChanged(int)"), SLOT("slot_tweakPluginsVstRowChanged(int)")) | |||||
# ------------------------------------------------------------- | |||||
self.m_last_dsp_load = None | self.m_last_dsp_load = None | ||||
self.m_last_xruns = None | self.m_last_xruns = None | ||||
self.m_last_buffer_size = None | self.m_last_buffer_size = None | ||||
@@ -276,6 +424,11 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): | |||||
def func_start_tool(self, tool): | def func_start_tool(self, tool): | ||||
os.system("%s &" % tool) | os.system("%s &" % tool) | ||||
def func_settings_changed(self, stype): | |||||
if stype not in self.settings_changed_types: | |||||
self.settings_changed_types.append(stype) | |||||
self.frame_tweaks_settings.setVisible(True) | |||||
@pyqtSlot() | @pyqtSlot() | ||||
def slot_JackServerStart(self): | def slot_JackServerStart(self): | ||||
try: | try: | ||||
@@ -296,7 +449,9 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): | |||||
@pyqtSlot() | @pyqtSlot() | ||||
def slot_JackServerConfigure(self): | def slot_JackServerConfigure(self): | ||||
jacksettings.JackSettingsW(self).exec_() | |||||
jacksettingsW = jacksettings.JackSettingsW(self) | |||||
jacksettingsW.exec_() | |||||
del jacksettingsW | |||||
@pyqtSlot() | @pyqtSlot() | ||||
def slot_JackClearXruns(self): | def slot_JackClearXruns(self): | ||||
@@ -311,6 +466,169 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): | |||||
def slot_handleCrash_jack(self): | def slot_handleCrash_jack(self): | ||||
self.DBusReconnect() | self.DBusReconnect() | ||||
@pyqtSlot() | |||||
def slot_tweaksApply(self): | |||||
if "plugins" in self.settings_changed_types: | |||||
EXTRA_LADSPA_DIRS = [] | |||||
EXTRA_DSSI_DIRS = [] | |||||
EXTRA_LV2_DIRS = [] | |||||
EXTRA_VST_DIRS = [] | |||||
for i in range(self.list_LADSPA.count()): | |||||
iPath = self.list_LADSPA.item(i).text() | |||||
if iPath not in DEFAULT_LADSPA_PATH and iPath not in EXTRA_LADSPA_DIRS: | |||||
EXTRA_LADSPA_DIRS.append(iPath) | |||||
for i in range(self.list_DSSI.count()): | |||||
iPath = self.list_DSSI.item(i).text() | |||||
if iPath not in DEFAULT_DSSI_PATH and iPath not in EXTRA_DSSI_DIRS: | |||||
EXTRA_DSSI_DIRS.append(iPath) | |||||
for i in range(self.list_LV2.count()): | |||||
iPath = self.list_LV2.item(i).text() | |||||
if iPath not in DEFAULT_LV2_PATH and iPath not in EXTRA_LV2_DIRS: | |||||
EXTRA_LV2_DIRS.append(iPath) | |||||
for i in range(self.list_VST.count()): | |||||
iPath = self.list_VST.item(i).text() | |||||
if iPath not in DEFAULT_VST_PATH and iPath not in EXTRA_VST_DIRS: | |||||
EXTRA_VST_DIRS.append(iPath) | |||||
GlobalSettings.setValue("AudioPlugins/EXTRA_LADSPA_PATH", ":".join(EXTRA_LADSPA_DIRS)) | |||||
GlobalSettings.setValue("AudioPlugins/EXTRA_DSSI_PATH", ":".join(EXTRA_DSSI_DIRS)) | |||||
GlobalSettings.setValue("AudioPlugins/EXTRA_LV2_PATH", ":".join(EXTRA_LV2_DIRS)) | |||||
GlobalSettings.setValue("AudioPlugins/EXTRA_VST_PATH", ":".join(EXTRA_VST_DIRS)) | |||||
self.settings_changed_types = [] | |||||
self.frame_tweaks_settings.setVisible(False) | |||||
@pyqtSlot() | |||||
def slot_tweakPluginAdd(self): | |||||
newPath = QFileDialog.getExistingDirectory(self, self.tr("Add Path"), "", QFileDialog.ShowDirsOnly) | |||||
if not newPath: | |||||
return | |||||
if self.tb_tweak_plugins.currentIndex() == 0: | |||||
self.list_LADSPA.addItem(newPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 1: | |||||
self.list_DSSI.addItem(newPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 2: | |||||
self.list_LV2.addItem(newPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 3: | |||||
self.list_VST.addItem(newPath) | |||||
self.func_settings_changed("plugins") | |||||
@pyqtSlot() | |||||
def slot_tweakPluginChange(self): | |||||
if self.tb_tweak_plugins.currentIndex() == 0: | |||||
curPath = self.list_LADSPA.item(self.list_LADSPA.currentRow()).text() | |||||
elif self.tb_tweak_plugins.currentIndex() == 1: | |||||
curPath = self.list_DSSI.item(self.list_DSSI.currentRow()).text() | |||||
elif self.tb_tweak_plugins.currentIndex() == 2: | |||||
curPath = self.list_LV2.item(self.list_LV2.currentRow()).text() | |||||
elif self.tb_tweak_plugins.currentIndex() == 3: | |||||
curPath = self.list_VST.item(self.list_VST.currentRow()).text() | |||||
else: | |||||
curPath = "" | |||||
newPath = QFileDialog.getExistingDirectory(self, self.tr("Change Path"), curPath, QFileDialog.ShowDirsOnly) | |||||
if not newPath: | |||||
return | |||||
if self.tb_tweak_plugins.currentIndex() == 0: | |||||
self.list_LADSPA.item(self.list_LADSPA.currentRow()).setText(newPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 1: | |||||
self.list_DSSI.item(self.list_DSSI.currentRow()).setText(newPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 2: | |||||
self.list_LV2.item(self.list_LV2.currentRow()).setText(newPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 3: | |||||
self.list_VST.item(self.list_VST.currentRow()).setText(newPath) | |||||
self.func_settings_changed("plugins") | |||||
@pyqtSlot() | |||||
def slot_tweakPluginRemove(self): | |||||
if self.tb_tweak_plugins.currentIndex() == 0: | |||||
self.list_LADSPA.takeItem(self.list_LADSPA.currentRow()) | |||||
elif self.tb_tweak_plugins.currentIndex() == 1: | |||||
self.list_DSSI.takeItem(self.list_DSSI.currentRow()) | |||||
elif self.tb_tweak_plugins.currentIndex() == 2: | |||||
self.list_LV2.takeItem(self.list_LV2.currentRow()) | |||||
elif self.tb_tweak_plugins.currentIndex() == 3: | |||||
self.list_VST.takeItem(self.list_VST.currentRow()) | |||||
self.func_settings_changed("plugins") | |||||
@pyqtSlot() | |||||
def slot_tweakPluginReset(self): | |||||
if self.tb_tweak_plugins.currentIndex() == 0: | |||||
self.list_LADSPA.clear() | |||||
for iPath in DEFAULT_LADSPA_PATH: | |||||
self.list_LADSPA.addItem(iPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 1: | |||||
self.list_DSSI.clear() | |||||
for iPath in DEFAULT_DSSI_PATH: | |||||
self.list_DSSI.addItem(iPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 2: | |||||
self.list_LV2.clear() | |||||
for iPath in DEFAULT_LV2_PATH: | |||||
self.list_LV2.addItem(iPath) | |||||
elif self.tb_tweak_plugins.currentIndex() == 3: | |||||
self.list_VST.clear() | |||||
for iPath in DEFAULT_VST_PATH: | |||||
self.list_VST.addItem(iPath) | |||||
self.func_settings_changed("plugins") | |||||
@pyqtSlot(int) | |||||
def slot_tweakPluginTypeChanged(self, index): | |||||
if index == 0: | |||||
self.list_LADSPA.setCurrentRow(-1) | |||||
self.list_LADSPA.setCurrentRow(0) | |||||
elif index == 1: | |||||
self.list_DSSI.setCurrentRow(-1) | |||||
self.list_DSSI.setCurrentRow(0) | |||||
elif index == 2: | |||||
self.list_LV2.setCurrentRow(-1) | |||||
self.list_LV2.setCurrentRow(0) | |||||
elif index == 3: | |||||
self.list_VST.setCurrentRow(-1) | |||||
self.list_VST.setCurrentRow(0) | |||||
@pyqtSlot(int) | |||||
def slot_tweakPluginsLadspaRowChanged(self, index): | |||||
nonRemovable = (index >= 0 and self.list_LADSPA.item(index).text() not in DEFAULT_LADSPA_PATH) | |||||
self.b_tweak_plugins_change.setEnabled(nonRemovable) | |||||
self.b_tweak_plugins_remove.setEnabled(nonRemovable) | |||||
@pyqtSlot(int) | |||||
def slot_tweakPluginsDssiRowChanged(self, index): | |||||
nonRemovable = (index >= 0 and self.list_DSSI.item(index).text() not in DEFAULT_DSSI_PATH) | |||||
self.b_tweak_plugins_change.setEnabled(nonRemovable) | |||||
self.b_tweak_plugins_remove.setEnabled(nonRemovable) | |||||
@pyqtSlot(int) | |||||
def slot_tweakPluginsLv2RowChanged(self, index): | |||||
nonRemovable = (index >= 0 and self.list_LV2.item(index).text() not in DEFAULT_LV2_PATH) | |||||
self.b_tweak_plugins_change.setEnabled(nonRemovable) | |||||
self.b_tweak_plugins_remove.setEnabled(nonRemovable) | |||||
@pyqtSlot(int) | |||||
def slot_tweakPluginsVstRowChanged(self, index): | |||||
nonRemovable = (index >= 0 and self.list_VST.item(index).text() not in DEFAULT_VST_PATH) | |||||
self.b_tweak_plugins_change.setEnabled(nonRemovable) | |||||
self.b_tweak_plugins_remove.setEnabled(nonRemovable) | |||||
def saveSettings(self): | def saveSettings(self): | ||||
self.settings.setValue("Geometry", self.saveGeometry()) | self.settings.setValue("Geometry", self.saveGeometry()) | ||||
@@ -79,7 +79,7 @@ public: | |||||
m_type = PLUGIN_LADSPA; | m_type = PLUGIN_LADSPA; | ||||
handle = nullptr; | |||||
handle = h2 = nullptr; | |||||
descriptor = nullptr; | descriptor = nullptr; | ||||
rdf_descriptor = nullptr; | rdf_descriptor = nullptr; | ||||
@@ -90,11 +90,24 @@ public: | |||||
{ | { | ||||
qDebug("LadspaPlugin::~LadspaPlugin()"); | qDebug("LadspaPlugin::~LadspaPlugin()"); | ||||
if (handle && descriptor && descriptor->deactivate && m_activeBefore) | |||||
descriptor->deactivate(handle); | |||||
if (descriptor) | |||||
{ | |||||
if (descriptor->deactivate && m_activeBefore) | |||||
{ | |||||
if (handle) | |||||
descriptor->deactivate(handle); | |||||
if (h2) | |||||
descriptor->deactivate(h2); | |||||
} | |||||
if (handle && descriptor && descriptor->cleanup) | |||||
descriptor->cleanup(handle); | |||||
if (descriptor->cleanup) | |||||
{ | |||||
if (handle) | |||||
descriptor->cleanup(handle); | |||||
if (h2) | |||||
descriptor->cleanup(h2); | |||||
} | |||||
} | |||||
if (rdf_descriptor) | if (rdf_descriptor) | ||||
ladspa_rdf_free(rdf_descriptor); | ladspa_rdf_free(rdf_descriptor); | ||||
@@ -341,7 +354,7 @@ public: | |||||
const unsigned long PortCount = descriptor->PortCount; | const unsigned long PortCount = descriptor->PortCount; | ||||
for (unsigned long i=0; i<PortCount; i++) | |||||
for (unsigned long i=0; i < PortCount; i++) | |||||
{ | { | ||||
const LADSPA_PortDescriptor PortType = descriptor->PortDescriptors[i]; | const LADSPA_PortDescriptor PortType = descriptor->PortDescriptors[i]; | ||||
if (LADSPA_IS_PORT_AUDIO(PortType)) | if (LADSPA_IS_PORT_AUDIO(PortType)) | ||||
@@ -355,6 +368,9 @@ public: | |||||
params += 1; | params += 1; | ||||
} | } | ||||
if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK && (ains == 1 || aouts == 1) && ! h2) | |||||
h2 = descriptor->instantiate(descriptor, get_sample_rate()); | |||||
if (ains > 0) | if (ains > 0) | ||||
{ | { | ||||
ain.ports = new CarlaEngineAudioPort*[ains]; | ain.ports = new CarlaEngineAudioPort*[ains]; | ||||
@@ -599,12 +615,14 @@ public: | |||||
param_buffers[j] = def; | param_buffers[j] = def; | ||||
descriptor->connect_port(handle, i, ¶m_buffers[j]); | descriptor->connect_port(handle, i, ¶m_buffers[j]); | ||||
if (h2) descriptor->connect_port(h2, i, ¶m_buffers[j]); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
// Not Audio or Control | // Not Audio or Control | ||||
qCritical("ERROR - Got a broken Port (neither Audio or Control)"); | qCritical("ERROR - Got a broken Port (neither Audio or Control)"); | ||||
descriptor->connect_port(handle, i, nullptr); | descriptor->connect_port(handle, i, nullptr); | ||||
if (h2) descriptor->connect_port(h2, i, nullptr); | |||||
} | } | ||||
} | } | ||||
@@ -651,7 +669,7 @@ public: | |||||
if (aouts > 0) | if (aouts > 0) | ||||
m_hints |= PLUGIN_CAN_VOLUME; | m_hints |= PLUGIN_CAN_VOLUME; | ||||
if (aouts >= 2 && aouts%2 == 0) | |||||
if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK || (aouts >= 2 && aouts%2 == 0)) | |||||
m_hints |= PLUGIN_CAN_BALANCE; | m_hints |= PLUGIN_CAN_BALANCE; | ||||
x_client->activate(); | x_client->activate(); | ||||
@@ -676,7 +694,9 @@ public: | |||||
if (ain.count > 0) | if (ain.count > 0) | ||||
{ | { | ||||
if (ain.count == 1) | |||||
uint32_t count = h2 ? 2 : ain.count; | |||||
if (count == 1) | |||||
{ | { | ||||
for (k=0; k < frames; k++) | for (k=0; k < frames; k++) | ||||
{ | { | ||||
@@ -684,7 +704,7 @@ public: | |||||
ains_peak_tmp[0] = abs(inBuffer[0][k]); | ains_peak_tmp[0] = abs(inBuffer[0][k]); | ||||
} | } | ||||
} | } | ||||
else if (ain.count >= 1) | |||||
else if (count > 1) | |||||
{ | { | ||||
for (k=0; k < frames; k++) | for (k=0; k < frames; k++) | ||||
{ | { | ||||
@@ -810,10 +830,16 @@ public: | |||||
if (cinEvent->channel == cin_channel) | if (cinEvent->channel == cin_channel) | ||||
{ | { | ||||
if (descriptor->deactivate) | if (descriptor->deactivate) | ||||
{ | |||||
descriptor->deactivate(handle); | descriptor->deactivate(handle); | ||||
if (h2) descriptor->deactivate(h2); | |||||
} | |||||
if (descriptor->activate) | if (descriptor->activate) | ||||
{ | |||||
descriptor->activate(handle); | descriptor->activate(handle); | ||||
if (h2) descriptor->activate(h2); | |||||
} | |||||
} | } | ||||
break; | break; | ||||
@@ -848,24 +874,36 @@ public: | |||||
if (! m_activeBefore) | if (! m_activeBefore) | ||||
{ | { | ||||
if (descriptor->activate) | if (descriptor->activate) | ||||
{ | |||||
descriptor->activate(handle); | descriptor->activate(handle); | ||||
if (h2) descriptor->activate(h2); | |||||
} | |||||
} | } | ||||
for (i=0; i < ain.count; i++) | for (i=0; i < ain.count; i++) | ||||
{ | |||||
descriptor->connect_port(handle, ain.rindexes[i], inBuffer[i]); | descriptor->connect_port(handle, ain.rindexes[i], inBuffer[i]); | ||||
if (h2 && i == 0) descriptor->connect_port(h2, ain.rindexes[i], inBuffer[1]); | |||||
} | |||||
for (i=0; i < aout.count; i++) | for (i=0; i < aout.count; i++) | ||||
{ | |||||
descriptor->connect_port(handle, aout.rindexes[i], outBuffer[i]); | descriptor->connect_port(handle, aout.rindexes[i], outBuffer[i]); | ||||
if (h2 && i == 0) descriptor->connect_port(h2, aout.rindexes[i], outBuffer[1]); | |||||
} | |||||
if (descriptor->run) | |||||
descriptor->run(handle, frames); | |||||
descriptor->run(handle, frames); | |||||
if (h2) descriptor->run(h2, frames); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
if (m_activeBefore) | if (m_activeBefore) | ||||
{ | { | ||||
if (descriptor->deactivate) | if (descriptor->deactivate) | ||||
{ | |||||
descriptor->deactivate(handle); | descriptor->deactivate(handle); | ||||
if (h2) descriptor->deactivate(h2); | |||||
} | |||||
} | } | ||||
} | } | ||||
@@ -883,7 +921,9 @@ public: | |||||
double bal_rangeL, bal_rangeR; | double bal_rangeL, bal_rangeR; | ||||
float oldBufLeft[do_balance ? frames : 0]; | float oldBufLeft[do_balance ? frames : 0]; | ||||
for (i=0; i < aout.count; i++) | |||||
uint32_t count = h2 ? 2 : aout.count; | |||||
for (i=0; i < count; i++) | |||||
{ | { | ||||
// Dry/Wet and Volume | // Dry/Wet and Volume | ||||
if (do_drywet || do_volume) | if (do_drywet || do_volume) | ||||
@@ -892,7 +932,7 @@ public: | |||||
{ | { | ||||
if (do_drywet) | if (do_drywet) | ||||
{ | { | ||||
if (aout.count == 1) | |||||
if (aout.count == 1 && ! h2) | |||||
outBuffer[i][k] = (outBuffer[i][k]*x_drywet)+(inBuffer[0][k]*(1.0-x_drywet)); | outBuffer[i][k] = (outBuffer[i][k]*x_drywet)+(inBuffer[0][k]*(1.0-x_drywet)); | ||||
else | else | ||||
outBuffer[i][k] = (outBuffer[i][k]*x_drywet)+(inBuffer[i][k]*(1.0-x_drywet)); | outBuffer[i][k] = (outBuffer[i][k]*x_drywet)+(inBuffer[i][k]*(1.0-x_drywet)); | ||||
@@ -1081,7 +1121,7 @@ public: | |||||
} | } | ||||
private: | private: | ||||
LADSPA_Handle handle; | |||||
LADSPA_Handle handle, h2; | |||||
const LADSPA_Descriptor* descriptor; | const LADSPA_Descriptor* descriptor; | ||||
const LADSPA_RDF_Descriptor* rdf_descriptor; | const LADSPA_RDF_Descriptor* rdf_descriptor; | ||||
@@ -1113,13 +1153,16 @@ short add_plugin_ladspa(const char* const filename, const char* const name, cons | |||||
#ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK) | if (carla_options.process_mode == PROCESS_MODE_CONTINUOUS_RACK) | ||||
{ | { | ||||
if (/* inputs */ ((plugin->audioInCount() != 0 && plugin->audioInCount() != 2)) || /* outputs */ ((plugin->audioOutCount() != 0 && plugin->audioOutCount() != 2))) | |||||
uint32_t ins = plugin->audioInCount(); | |||||
uint32_t outs = plugin->audioOutCount(); | |||||
if (ins > 2 || outs > 2 || (ins != outs && ins != 0 && outs != 0)) | |||||
{ | { | ||||
set_last_error("Carla Rack Mode can only work with Stereo plugins, sorry!"); | |||||
set_last_error("Carla Rack Mode can only work with Mono or Stereo plugins, sorry!"); | |||||
qWarning("data: %i %i | %i %i %i", ins > 2, outs > 2, ins != outs, ins != 0, outs != 0); | |||||
delete plugin; | delete plugin; | ||||
return -1; | return -1; | ||||
} | } | ||||
} | } | ||||
#endif | #endif | ||||
@@ -67,6 +67,7 @@ void toolkit_loop() | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
// TODO - window->setCentralWidget(widget); or other simpler method | |||||
window = new QDialog(); | window = new QDialog(); | ||||
window->resize(10, 10); | window->resize(10, 10); | ||||
window->setLayout(new QVBoxLayout(window)); | window->setLayout(new QVBoxLayout(window)); | ||||
@@ -1230,7 +1230,7 @@ int main(int argc, char* argv[]) | |||||
} | } | ||||
} | } | ||||
bool doInit = QString(filename).endsWith("dssi-vst.so", Qt::CaseInsensitive); | |||||
bool doInit = ! QString(filename).endsWith("dssi-vst.so", Qt::CaseInsensitive); | |||||
switch (type) | switch (type) | ||||
{ | { | ||||
@@ -1169,8 +1169,8 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): | |||||
# About Carla Dialog | # About Carla Dialog | ||||
class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW): | class CarlaAboutW(QDialog, ui_carla_about.Ui_CarlaAboutW): | ||||
def __init__(self, parent=None): | |||||
super(CarlaAboutW, self).__init__(parent) | |||||
def __init__(self, parent): | |||||
QDialog.__init__(self, parent) | |||||
self.setupUi(self) | self.setupUi(self) | ||||
self.l_about.setText(self.tr("" | self.l_about.setText(self.tr("" | ||||
@@ -2031,10 +2031,10 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): | |||||
self.peaks_in = int(audio_count['ins']) | self.peaks_in = int(audio_count['ins']) | ||||
self.peaks_out = int(audio_count['outs']) | self.peaks_out = int(audio_count['outs']) | ||||
if self.peaks_in > 2: | |||||
if self.peaks_in > 2 or PROCESS_MODE == PROCESS_MODE_CONTINUOUS_RACK: | |||||
self.peaks_in = 2 | self.peaks_in = 2 | ||||
if self.peaks_out > 2: | |||||
if self.peaks_out > 2 or PROCESS_MODE == PROCESS_MODE_CONTINUOUS_RACK: | |||||
self.peaks_out = 2 | self.peaks_out = 2 | ||||
self.peak_in.setChannels(self.peaks_in) | self.peak_in.setChannels(self.peaks_in) | ||||
@@ -3048,7 +3048,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): | |||||
pwidget.peak_in.setRefreshRate(self.m_savedSettings["Main/RefreshInterval"]) | pwidget.peak_in.setRefreshRate(self.m_savedSettings["Main/RefreshInterval"]) | ||||
pwidget.peak_out.setRefreshRate(self.m_savedSettings["Main/RefreshInterval"]) | pwidget.peak_out.setRefreshRate(self.m_savedSettings["Main/RefreshInterval"]) | ||||
if (activate): | |||||
if activate: | |||||
pwidget.set_active(True, True, True) | pwidget.set_active(True, True, True) | ||||
return new_plugin_id | return new_plugin_id | ||||
@@ -3515,20 +3515,18 @@ if __name__ == '__main__': | |||||
gui = CarlaMainW() | gui = CarlaMainW() | ||||
# Init backend | # Init backend | ||||
process_mode = gui.settings.value("Engine/ProcessMode", PROCESS_MODE_MULTIPLE_CLIENTS, type=int) | |||||
PROCESS_MODE = gui.settings.value("Engine/ProcessMode", PROCESS_MODE_MULTIPLE_CLIENTS, type=int) | |||||
MAX_PARAMETERS = gui.settings.value("Engine/MaxParameters", MAX_PARAMETERS, type=int) | MAX_PARAMETERS = gui.settings.value("Engine/MaxParameters", MAX_PARAMETERS, type=int) | ||||
prefer_ui_bridges = gui.settings.value("Engine/PreferUIBridges", True, type=bool) | prefer_ui_bridges = gui.settings.value("Engine/PreferUIBridges", True, type=bool) | ||||
proccess_hq = gui.settings.value("Engine/ProcessHQ", False, type=bool) | proccess_hq = gui.settings.value("Engine/ProcessHQ", False, type=bool) | ||||
osc_gui_timeout = gui.settings.value("Engine/OscGuiTimeout", 40, type=int) | osc_gui_timeout = gui.settings.value("Engine/OscGuiTimeout", 40, type=int) | ||||
use_dssi_chunks = gui.settings.value("Engine/UseDSSIChunks", False, type=bool) | use_dssi_chunks = gui.settings.value("Engine/UseDSSIChunks", False, type=bool) | ||||
if os.getenv("LADISH_APP_NAME") and process_mode == PROCESS_MODE_MULTIPLE_CLIENTS: | |||||
if os.getenv("LADISH_APP_NAME") and PROCESS_MODE == PROCESS_MODE_MULTIPLE_CLIENTS: | |||||
print("LADISH detected but using multiple clients (not allowed), forcing single client now") | print("LADISH detected but using multiple clients (not allowed), forcing single client now") | ||||
process_mode = PROCESS_MODE_SINGLE_CLIENT | |||||
#process_mode = PROCESS_MODE_CONTINUOUS_RACK | |||||
PROCESS_MODE = PROCESS_MODE_SINGLE_CLIENT | |||||
CarlaHost.set_option(OPTION_PROCESS_MODE, process_mode, "") | |||||
CarlaHost.set_option(OPTION_PROCESS_MODE, PROCESS_MODE, "") | |||||
CarlaHost.set_option(OPTION_MAX_PARAMETERS, MAX_PARAMETERS, "") | CarlaHost.set_option(OPTION_MAX_PARAMETERS, MAX_PARAMETERS, "") | ||||
CarlaHost.set_option(OPTION_PROCESS_HQ, proccess_hq, "") | CarlaHost.set_option(OPTION_PROCESS_HQ, proccess_hq, "") | ||||
CarlaHost.set_option(OPTION_PREFER_UI_BRIDGES, prefer_ui_bridges, "") | CarlaHost.set_option(OPTION_PREFER_UI_BRIDGES, prefer_ui_bridges, "") | ||||
@@ -678,6 +678,8 @@ PROCESS_MODE_SINGLE_CLIENT = 0 | |||||
PROCESS_MODE_MULTIPLE_CLIENTS = 1 | PROCESS_MODE_MULTIPLE_CLIENTS = 1 | ||||
PROCESS_MODE_CONTINUOUS_RACK = 2 | PROCESS_MODE_CONTINUOUS_RACK = 2 | ||||
PROCESS_MODE = PROCESS_MODE_MULTIPLE_CLIENTS | |||||
class ParameterData(Structure): | class ParameterData(Structure): | ||||
_fields_ = [ | _fields_ = [ | ||||
("type", c_enum), | ("type", c_enum), | ||||
@@ -352,28 +352,27 @@ def setXruns(self_, xruns): | |||||
# ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
# External Dialogs | # External Dialogs | ||||
global jacksettingsW, logsW | |||||
jacksettingsW = logsW = None | |||||
global logsW | |||||
logsW = None | |||||
@pyqtSlot() | |||||
#@pyqtSlot() | |||||
def slot_showJackSettings(self_): | def slot_showJackSettings(self_): | ||||
global jacksettingsW | |||||
if not jacksettingsW: | |||||
jacksettingsW = jacksettings.JackSettingsW(self_) | |||||
jacksettingsW = jacksettings.JackSettingsW(self_) | |||||
jacksettingsW.exec_() | jacksettingsW.exec_() | ||||
del jacksettingsW | |||||
# Force update of gui widgets | # Force update of gui widgets | ||||
if not jack.client: | if not jack.client: | ||||
self_.jackStopped() | self_.jackStopped() | ||||
@pyqtSlot() | |||||
#@pyqtSlot() | |||||
def slot_showLogs(self_): | def slot_showLogs(self_): | ||||
global logsW | global logsW | ||||
if not logsW: | if not logsW: | ||||
logsW = logs.LogsW(self_) | logsW = logs.LogsW(self_) | ||||
logsW.show() | logsW.show() | ||||
@pyqtSlot() | |||||
#@pyqtSlot() | |||||
def slot_showRender(self_): | def slot_showRender(self_): | ||||
renderW = render.RenderW(self_) | renderW = render.RenderW(self_) | ||||
renderW.exec_() | renderW.exec_() | ||||
@@ -16,10 +16,6 @@ | |||||
# | # | ||||
# For a full copy of the GNU General Public License see the COPYING file | # For a full copy of the GNU General Public License see the COPYING file | ||||
# TESTING - remove if python3 | |||||
from sip import setapi | |||||
setapi("QString", 2) | |||||
# Imports (Global) | # Imports (Global) | ||||
from os import getenv | from os import getenv | ||||
from PyQt4.QtCore import SIGNAL | from PyQt4.QtCore import SIGNAL | ||||
@@ -6,7 +6,7 @@ | |||||
<rect> | <rect> | ||||
<x>0</x> | <x>0</x> | ||||
<y>0</y> | <y>0</y> | ||||
<width>778</width> | |||||
<width>732</width> | |||||
<height>527</height> | <height>527</height> | ||||
</rect> | </rect> | ||||
</property> | </property> | ||||
@@ -18,7 +18,7 @@ | |||||
<item> | <item> | ||||
<widget class="QTabWidget" name="tabWidget"> | <widget class="QTabWidget" name="tabWidget"> | ||||
<property name="currentIndex"> | <property name="currentIndex"> | ||||
<number>0</number> | |||||
<number>2</number> | |||||
</property> | </property> | ||||
<widget class="QWidget" name="tab_system"> | <widget class="QWidget" name="tab_system"> | ||||
<attribute name="title"> | <attribute name="title"> | ||||
@@ -795,7 +795,7 @@ | |||||
<attribute name="title"> | <attribute name="title"> | ||||
<string>Tweaks</string> | <string>Tweaks</string> | ||||
</attribute> | </attribute> | ||||
<layout class="QVBoxLayout" name="verticalLayout"> | |||||
<layout class="QVBoxLayout" name="verticalLayout_15"> | |||||
<item> | <item> | ||||
<widget class="QLabel" name="label_tweaks"> | <widget class="QLabel" name="label_tweaks"> | ||||
<property name="font"> | <property name="font"> | ||||
@@ -866,7 +866,7 @@ | |||||
</spacer> | </spacer> | ||||
</item> | </item> | ||||
<item> | <item> | ||||
<widget class="QPushButton" name="pushButton"> | |||||
<widget class="QPushButton" name="b_tweaks_apply_now"> | |||||
<property name="text"> | <property name="text"> | ||||
<string>Apply Now</string> | <string>Apply Now</string> | ||||
</property> | </property> | ||||
@@ -889,7 +889,7 @@ | |||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item> | <item> | ||||
<widget class="QSplitter" name="splitter_tweaks"> | |||||
<widget class="QSplitter" name="splitter"> | |||||
<property name="sizePolicy"> | <property name="sizePolicy"> | ||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding"> | <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> | ||||
<horstretch>0</horstretch> | <horstretch>0</horstretch> | ||||
@@ -906,6 +906,74 @@ | |||||
<verstretch>0</verstretch> | <verstretch>0</verstretch> | ||||
</sizepolicy> | </sizepolicy> | ||||
</property> | </property> | ||||
<property name="maximumSize"> | |||||
<size> | |||||
<width>200</width> | |||||
<height>16777215</height> | |||||
</size> | |||||
</property> | |||||
<attribute name="horizontalHeaderVisible"> | |||||
<bool>false</bool> | |||||
</attribute> | |||||
<attribute name="horizontalHeaderStretchLastSection"> | |||||
<bool>true</bool> | |||||
</attribute> | |||||
<attribute name="verticalHeaderVisible"> | |||||
<bool>false</bool> | |||||
</attribute> | |||||
<row> | |||||
<property name="text"> | |||||
<string>audio-plugins</string> | |||||
</property> | |||||
</row> | |||||
<row> | |||||
<property name="text"> | |||||
<string>default-apps</string> | |||||
</property> | |||||
</row> | |||||
<row> | |||||
<property name="text"> | |||||
<string>wineasio</string> | |||||
</property> | |||||
</row> | |||||
<column> | |||||
<property name="text"> | |||||
<string>name</string> | |||||
</property> | |||||
</column> | |||||
<item row="0" column="0"> | |||||
<property name="text"> | |||||
<string>Audio Plugins PATH</string> | |||||
</property> | |||||
<property name="textAlignment"> | |||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set> | |||||
</property> | |||||
<property name="flags"> | |||||
<set>ItemIsSelectable|ItemIsEnabled</set> | |||||
</property> | |||||
</item> | |||||
<item row="1" column="0"> | |||||
<property name="text"> | |||||
<string>Default Applications</string> | |||||
</property> | |||||
<property name="textAlignment"> | |||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set> | |||||
</property> | |||||
<property name="flags"> | |||||
<set>ItemIsSelectable|ItemIsEnabled</set> | |||||
</property> | |||||
</item> | |||||
<item row="2" column="0"> | |||||
<property name="text"> | |||||
<string>WineASIO</string> | |||||
</property> | |||||
<property name="textAlignment"> | |||||
<set>AlignHCenter|AlignVCenter|AlignCenter</set> | |||||
</property> | |||||
<property name="flags"> | |||||
<set>ItemIsSelectable|ItemIsEnabled</set> | |||||
</property> | |||||
</item> | |||||
</widget> | </widget> | ||||
<widget class="QStackedWidget" name="sw_tweaks"> | <widget class="QStackedWidget" name="sw_tweaks"> | ||||
<property name="sizePolicy"> | <property name="sizePolicy"> | ||||
@@ -915,12 +983,374 @@ | |||||
</sizepolicy> | </sizepolicy> | ||||
</property> | </property> | ||||
<property name="currentIndex"> | <property name="currentIndex"> | ||||
<number>-1</number> | |||||
<number>0</number> | |||||
</property> | </property> | ||||
<widget class="QWidget" name="page"> | |||||
<layout class="QGridLayout" name="gridLayout_6"> | |||||
<property name="margin"> | |||||
<number>0</number> | |||||
</property> | |||||
<item row="3" column="1"> | |||||
<widget class="QPushButton" name="b_tweak_plugins_remove"> | |||||
<property name="text"> | |||||
<string>Remove</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="4" column="1"> | |||||
<spacer name="verticalSpacer_5"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>0</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
<item row="7" column="1"> | |||||
<spacer name="verticalSpacer_6"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>220</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
<item row="1" column="1"> | |||||
<widget class="QPushButton" name="b_tweak_plugins_add"> | |||||
<property name="text"> | |||||
<string>Add...</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="0" column="0" rowspan="8"> | |||||
<widget class="QToolBox" name="tb_tweak_plugins"> | |||||
<property name="currentIndex"> | |||||
<number>0</number> | |||||
</property> | |||||
<widget class="QWidget" name="page_ladspa"> | |||||
<property name="geometry"> | |||||
<rect> | |||||
<x>0</x> | |||||
<y>0</y> | |||||
<width>412</width> | |||||
<height>276</height> | |||||
</rect> | |||||
</property> | |||||
<attribute name="label"> | |||||
<string>LADSPA</string> | |||||
</attribute> | |||||
<layout class="QVBoxLayout" name="verticalLayout"> | |||||
<item> | |||||
<widget class="QListWidget" name="list_LADSPA"/> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
<widget class="QWidget" name="page_dssi"> | |||||
<property name="geometry"> | |||||
<rect> | |||||
<x>0</x> | |||||
<y>0</y> | |||||
<width>94</width> | |||||
<height>76</height> | |||||
</rect> | |||||
</property> | |||||
<attribute name="label"> | |||||
<string>DSSI</string> | |||||
</attribute> | |||||
<layout class="QVBoxLayout" name="verticalLayout_11"> | |||||
<item> | |||||
<widget class="QListWidget" name="list_DSSI"/> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
<widget class="QWidget" name="page_lv2"> | |||||
<property name="geometry"> | |||||
<rect> | |||||
<x>0</x> | |||||
<y>0</y> | |||||
<width>94</width> | |||||
<height>76</height> | |||||
</rect> | |||||
</property> | |||||
<attribute name="label"> | |||||
<string>LV2</string> | |||||
</attribute> | |||||
<layout class="QVBoxLayout" name="verticalLayout_13"> | |||||
<item> | |||||
<widget class="QListWidget" name="list_LV2"/> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
<widget class="QWidget" name="page_vst"> | |||||
<property name="geometry"> | |||||
<rect> | |||||
<x>0</x> | |||||
<y>0</y> | |||||
<width>94</width> | |||||
<height>76</height> | |||||
</rect> | |||||
</property> | |||||
<attribute name="label"> | |||||
<string>VST</string> | |||||
</attribute> | |||||
<layout class="QVBoxLayout" name="verticalLayout_14"> | |||||
<item> | |||||
<widget class="QListWidget" name="list_VST"/> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
</widget> | |||||
</item> | |||||
<item row="0" column="1"> | |||||
<spacer name="verticalSpacer_7"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>20</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
<item row="6" column="1"> | |||||
<widget class="QPushButton" name="b_tweak_plugins_reset"> | |||||
<property name="text"> | |||||
<string>Reset</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="1"> | |||||
<widget class="QPushButton" name="b_tweak_plugins_change"> | |||||
<property name="text"> | |||||
<string>Change...</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
<widget class="QWidget" name="page_2"> | |||||
<layout class="QGridLayout" name="gridLayout_7"> | |||||
<property name="verticalSpacing"> | |||||
<number>20</number> | |||||
</property> | |||||
<property name="margin"> | |||||
<number>0</number> | |||||
</property> | |||||
<item row="1" column="0"> | |||||
<widget class="QCheckBox" name="checkBox_2"> | |||||
<property name="text"> | |||||
<string>Image Viewer</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="3" column="1"> | |||||
<widget class="QComboBox" name="comboBox_3"> | |||||
<property name="sizePolicy"> | |||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | |||||
<horstretch>0</horstretch> | |||||
<verstretch>0</verstretch> | |||||
</sizepolicy> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="4" column="0"> | |||||
<widget class="QCheckBox" name="checkBox_5"> | |||||
<property name="text"> | |||||
<string>Text Editor</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="4" column="1"> | |||||
<widget class="QComboBox" name="comboBox_4"> | |||||
<property name="sizePolicy"> | |||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | |||||
<horstretch>0</horstretch> | |||||
<verstretch>0</verstretch> | |||||
</sizepolicy> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="3" column="0"> | |||||
<widget class="QCheckBox" name="checkBox_4"> | |||||
<property name="text"> | |||||
<string>Video Player</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="5" column="1"> | |||||
<widget class="QComboBox" name="comboBox_5"> | |||||
<property name="sizePolicy"> | |||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | |||||
<horstretch>0</horstretch> | |||||
<verstretch>0</verstretch> | |||||
</sizepolicy> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="0"> | |||||
<widget class="QCheckBox" name="checkBox_3"> | |||||
<property name="text"> | |||||
<string>Music Player</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="2" column="1"> | |||||
<widget class="QComboBox" name="comboBox_2"> | |||||
<property name="sizePolicy"> | |||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | |||||
<horstretch>0</horstretch> | |||||
<verstretch>0</verstretch> | |||||
</sizepolicy> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="5" column="0"> | |||||
<widget class="QCheckBox" name="checkBox_6"> | |||||
<property name="text"> | |||||
<string>Web Browser</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="6" column="1"> | |||||
<spacer name="verticalSpacer_8"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>114</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
<item row="1" column="1"> | |||||
<widget class="QComboBox" name="comboBox"> | |||||
<property name="sizePolicy"> | |||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | |||||
<horstretch>0</horstretch> | |||||
<verstretch>0</verstretch> | |||||
</sizepolicy> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="0" column="1"> | |||||
<spacer name="verticalSpacer_9"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Fixed</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>20</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
<item row="0" column="2" rowspan="7"> | |||||
<widget class="QFrame" name="frame"> | |||||
<property name="minimumSize"> | |||||
<size> | |||||
<width>156</width> | |||||
<height>0</height> | |||||
</size> | |||||
</property> | |||||
<property name="maximumSize"> | |||||
<size> | |||||
<width>156</width> | |||||
<height>16777215</height> | |||||
</size> | |||||
</property> | |||||
<property name="frameShape"> | |||||
<enum>QFrame::StyledPanel</enum> | |||||
</property> | |||||
<property name="frameShadow"> | |||||
<enum>QFrame::Raised</enum> | |||||
</property> | |||||
<layout class="QVBoxLayout" name="verticalLayout_16"> | |||||
<item> | |||||
<widget class="QLabel" name="label"> | |||||
<property name="text"> | |||||
<string>ICO</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item> | |||||
<widget class="QLabel" name="label_3"> | |||||
<property name="text"> | |||||
<string>AppName</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item> | |||||
<widget class="Line" name="line_3"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Horizontal</enum> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item> | |||||
<widget class="QLabel" name="label_4"> | |||||
<property name="text"> | |||||
<string>Desc</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item> | |||||
<spacer name="verticalSpacer_10"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Vertical</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>20</width> | |||||
<height>287</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
<widget class="QWidget" name="page_3"/> | |||||
</widget> | </widget> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
</layout> | </layout> | ||||
<zorder>splitter</zorder> | |||||
<zorder>label_tweaks</zorder> | |||||
<zorder>line_tweaks</zorder> | |||||
<zorder>frame_tweaks_settings</zorder> | |||||
</widget> | </widget> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
@@ -931,7 +1361,7 @@ | |||||
<rect> | <rect> | ||||
<x>0</x> | <x>0</x> | ||||
<y>0</y> | <y>0</y> | ||||
<width>778</width> | |||||
<width>732</width> | |||||
<height>20</height> | <height>20</height> | ||||
</rect> | </rect> | ||||
</property> | </property> | ||||
@@ -1031,5 +1461,21 @@ | |||||
</hint> | </hint> | ||||
</hints> | </hints> | ||||
</connection> | </connection> | ||||
<connection> | |||||
<sender>tw_tweaks</sender> | |||||
<signal>currentCellChanged(int,int,int,int)</signal> | |||||
<receiver>sw_tweaks</receiver> | |||||
<slot>setCurrentIndex(int)</slot> | |||||
<hints> | |||||
<hint type="sourcelabel"> | |||||
<x>121</x> | |||||
<y>359</y> | |||||
</hint> | |||||
<hint type="destinationlabel"> | |||||
<x>707</x> | |||||
<y>136</y> | |||||
</hint> | |||||
</hints> | |||||
</connection> | |||||
</connections> | </connections> | ||||
</ui> | </ui> |