diff --git a/source/carla.py b/source/carla.py index 0beb12343..8a1b01a64 100755 --- a/source/carla.py +++ b/source/carla.py @@ -773,6 +773,11 @@ class CarlaMainW(QMainWindow): self.scene.render(painter) self.fExportImage.save(newPath, imgFormat, 100) + def showLastError(self, isProject): + CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), + self.tr("Failed to load %s" % (self.tr("project") if isProject else self.tr("plugin"))), + cString(Carla.host.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) + @pyqtSlot(QModelIndex) def slot_fileTreeDoubleClicked(self, modelIndex): filename = self.fDirModel.filePath(modelIndex) @@ -787,16 +792,20 @@ class CarlaMainW(QMainWindow): extension = filename.rsplit(".", 1)[-1].lower() if extension == "carxp": - Carla.host.load_project(filename) + if not Carla.host.load_project(filename): + self.showLastError(True) elif extension == "gig": - Carla.host.add_plugin(BINARY_NATIVE, PLUGIN_GIG, filename, None, basename, None) + if not Carla.host.add_plugin(BINARY_NATIVE, PLUGIN_GIG, filename, None, basename, None): + self.showLastError(False) elif extension == "sf2": - Carla.host.add_plugin(BINARY_NATIVE, PLUGIN_SF2, filename, None, basename, None) + if not Carla.host.add_plugin(BINARY_NATIVE, PLUGIN_SF2, filename, None, basename, None): + self.showLastError(False) elif extension == "sfz": - Carla.host.add_plugin(BINARY_NATIVE, PLUGIN_SFZ, filename, None, basename, None) + if not Carla.host.add_plugin(BINARY_NATIVE, PLUGIN_SFZ, filename, None, basename, None): + self.showLastError(False) elif extension in ("aac", "flac", "oga", "ogg", "mp3", "wav"): self.fLastLoadedPluginId = -2 @@ -807,8 +816,7 @@ class CarlaMainW(QMainWindow): Carla.host.set_custom_data(idx, CUSTOM_DATA_STRING, "file00", filename) else: self.fLastLoadedPluginId = -1 - CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), self.tr("Failed to load plugin"), - cString(Carla.host.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) + self.showLastError(False) elif extension in ("mid", "midi"): self.fLastLoadedPluginId = -2 @@ -819,8 +827,7 @@ class CarlaMainW(QMainWindow): Carla.host.set_custom_data(idx, CUSTOM_DATA_STRING, "file", filename) else: self.fLastLoadedPluginId = -1 - CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), self.tr("Failed to load plugin"), - cString(Carla.host.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) + self.showLastError(False) @pyqtSlot(float) def slot_canvasScaleChanged(self, scale): diff --git a/source/utils/CarlaStateUtils.hpp b/source/utils/CarlaStateUtils.hpp index 31a15669f..b1d7949eb 100644 --- a/source/utils/CarlaStateUtils.hpp +++ b/source/utils/CarlaStateUtils.hpp @@ -51,6 +51,9 @@ struct StateParameter { if (symbol != nullptr) delete[] symbol; } + + StateParameter(StateParameter&) = delete; + StateParameter(const StateParameter&) = delete; }; struct StateCustomData { @@ -72,6 +75,9 @@ struct StateCustomData { if (value != nullptr) delete[] value; } + + StateCustomData(StateCustomData&) = delete; + StateCustomData(const StateCustomData&) = delete; }; typedef QVector StateParameterVector; @@ -190,6 +196,9 @@ struct SaveState { parameters.clear(); customData.clear(); } + + SaveState(SaveState&) = delete; + SaveState(const SaveState&) = delete; }; // ------------------------------------------------- @@ -307,7 +316,7 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode) { bool ok; short value = text.toShort(&ok); - if (ok && value < INT8_MAX) + if (ok && value >= 1 && value < INT8_MAX) saveState.ctrlChannel = static_cast(value-1); } @@ -318,7 +327,8 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode) { bool ok; int value = text.toInt(&ok); - if (ok) saveState.currentProgramIndex = value-1; + if (ok && value >= 1) + saveState.currentProgramIndex = value-1; } else if (tag.compare("CurrentProgramName", Qt::CaseInsensitive) == 0) { @@ -332,13 +342,15 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode) { bool ok; int value = text.toInt(&ok); - if (ok) saveState.currentMidiBank = value-1; + if (ok && value >= 1) + saveState.currentMidiBank = value-1; } else if (tag.compare("CurrentMidiProgram", Qt::CaseInsensitive) == 0) { bool ok; int value = text.toInt(&ok); - if (ok) saveState.currentMidiProgram = value-1; + if (ok && value >= 1) + saveState.currentMidiProgram = value-1; } // ---------------------------------------------- @@ -379,14 +391,14 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode) { bool ok; ushort channel = pText.toUShort(&ok); - if (ok && channel > 0 && channel < MAX_MIDI_CHANNELS) + if (ok && channel >= 1 && channel < MAX_MIDI_CHANNELS) stateParameter->midiChannel = static_cast(channel-1); } else if (pTag.compare("MidiCC", Qt::CaseInsensitive) == 0) { bool ok; int cc = pText.toInt(&ok); - if (ok && cc > 0 && cc < INT16_MAX) + if (ok && cc >= 1 && cc < INT16_MAX) stateParameter->midiCC = static_cast(cc); }