@@ -1197,16 +1197,29 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, cons | |||
if (oldPlugin != nullptr) | |||
{ | |||
bool wasActive = (oldPlugin->getInternalParameterValue(PARAMETER_ACTIVE) >= 0.5f); | |||
float oldDryWet = oldPlugin->getInternalParameterValue(PARAMETER_DRYWET); | |||
float oldVolume = oldPlugin->getInternalParameterValue(PARAMETER_VOLUME); | |||
delete oldPlugin; | |||
callback(ENGINE_CALLBACK_RELOAD_ALL, id, 0, 0, 0.0f, plugin->getName()); | |||
if (wasActive) | |||
plugin->setActive(true, true, true); | |||
if (plugin->getHints() & PLUGIN_CAN_DRYWET) | |||
plugin->setDryWet(oldDryWet, true, true); | |||
if (plugin->getHints() & PLUGIN_CAN_VOLUME) | |||
plugin->setVolume(oldVolume, true, true); | |||
} | |||
else | |||
{ | |||
++pData->curPluginCount; | |||
callback(ENGINE_CALLBACK_PLUGIN_ADDED, id, 0, 0, 0.0f, plugin->getName()); | |||
if (pData->curPluginCount == 1 && pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) | |||
callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_DATA_CHANGED, 0, PATCHBAY_ICON_CARLA, 0, 0.0f, nullptr); | |||
//if (pData->curPluginCount == 1 && pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) | |||
// callback(ENGINE_CALLBACK_PATCHBAY_CLIENT_DATA_CHANGED, 0, PATCHBAY_ICON_CARLA, 0, 0.0f, nullptr); | |||
} | |||
return true; | |||
@@ -891,7 +891,7 @@ class HostWindow(QMainWindow): | |||
# ----------------------------------------------------------------- | |||
@pyqtSlot() | |||
def slot_pluginAdd(self): | |||
def slot_pluginAdd(self, pluginToReplace = -1): | |||
dialog = PluginDatabaseW(self) | |||
if not dialog.exec_(): | |||
@@ -908,9 +908,18 @@ class HostWindow(QMainWindow): | |||
uniqueId = dialog.fRetPlugin['uniqueId'] | |||
extraPtr = self.getExtraPtr(dialog.fRetPlugin) | |||
if not gCarla.host.add_plugin(btype, ptype, filename, None, label, uniqueId, extraPtr): | |||
if pluginToReplace >= 0: | |||
if not gCarla.host.replace_plugin(pluginToReplace): | |||
CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), self.tr("Failed to replace plugin"), gCarla.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) | |||
return | |||
ok = gCarla.host.add_plugin(btype, ptype, filename, None, label, uniqueId, extraPtr) | |||
if pluginToReplace >= 0: | |||
gCarla.host.replace_plugin(self.fContainer.getPluginCount()) | |||
if not ok: | |||
CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), self.tr("Failed to load plugin"), gCarla.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) | |||
return | |||
@pyqtSlot() | |||
def slot_pluginRemoveAll(self): | |||
@@ -176,7 +176,7 @@ class CarlaRackList(QListWidget): | |||
if tryItem is not None: | |||
gCarla.host.replace_plugin(self.parent().fPluginCount) | |||
tryItem.widget.setActive(True, True, True) | |||
#tryItem.widget.setActive(True, True, True) | |||
def mousePressEvent(self, event): | |||
if self.itemAt(event.pos()) is None: | |||
@@ -63,7 +63,7 @@ class AbstractPluginSlot(QFrame): | |||
# ------------------------------------------------------------- | |||
# Internal stuff | |||
self.fIsActive = False | |||
self.fIsActive = bool(gCarla.host.get_internal_parameter_value(self.fPluginId, PARAMETER_ACTIVE) >= 0.5) if gCarla.host is not None else True | |||
self.fIsSelected = False | |||
self.fLastGreenLedState = False | |||
@@ -117,6 +117,7 @@ class AbstractPluginSlot(QFrame): | |||
def ready(self): | |||
if self.b_enable is not None: | |||
self.b_enable.setChecked(self.fIsActive) | |||
self.b_enable.clicked.connect(self.slot_enableClicked) | |||
if self.b_gui is not None: | |||
@@ -481,9 +482,10 @@ class AbstractPluginSlot(QFrame): | |||
actGui = None | |||
menu.addSeparator() | |||
actClone = menu.addAction(self.tr("Clone")) | |||
actRename = menu.addAction(self.tr("Rename...")) | |||
actRemove = menu.addAction(self.tr("Remove")) | |||
actClone = menu.addAction(self.tr("Clone")) | |||
actReplace = menu.addAction(self.tr("Replace...")) | |||
actRename = menu.addAction(self.tr("Rename...")) | |||
actRemove = menu.addAction(self.tr("Remove")) | |||
actSel = menu.exec_(QCursor.pos()) | |||
@@ -527,6 +529,9 @@ class AbstractPluginSlot(QFrame): | |||
CustomMessageBox(self, QMessageBox.Warning, self.tr("Error"), self.tr("Operation failed"), | |||
gCarla.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) | |||
elif actSel == actReplace: | |||
gCarla.gui.slot_pluginAdd(self.fPluginId) | |||
elif actSel == actRemove: | |||
if gCarla.host is not None and not gCarla.host.remove_plugin(self.fPluginId): | |||
CustomMessageBox(self, QMessageBox.Warning, self.tr("Error"), self.tr("Operation failed"), | |||