diff --git a/src/carla.py b/src/carla.py index fbc6b92..dc604a1 100755 --- a/src/carla.py +++ b/src/carla.py @@ -19,11 +19,11 @@ # Imports (Global) import json, os, sys #from PyQt4.QtCore import QTimer -#from PyQt4.QtGui import QCursor, QFontMetrics, QInputDialog, QMenu, QPixmap, QVBoxLayout +#from PyQt4.QtGui import QCursor, QInputDialog, QMenu, QPixmap from time import sleep #from sip import unwrapinstance from PyQt4.QtCore import pyqtSlot, Qt, QSettings, QThread -from PyQt4.QtGui import QApplication, QColor, QDialog, QFrame, QMainWindow, QPainter, QTableWidgetItem, QWidget +from PyQt4.QtGui import QApplication, QColor, QDialog, QFontMetrics, QFrame, QMainWindow, QPainter, QTableWidgetItem, QVBoxLayout, QWidget from PyQt4.QtXml import QDomDocument # Imports (Custom Stuff) @@ -899,7 +899,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): bridge_text = self.tr("No") else: type_text = self.tr("Unknown") - if (LINUX or MAC): + if (LINUX or MACOS): if (plugin['build'] == BINARY_UNIX32): type_text = "32bit" elif (plugin['build'] == BINARY_UNIX64): @@ -959,7 +959,7 @@ class PluginDatabaseW(QDialog, ui_carla_database.Ui_PluginDatabaseW): PluginRefreshW(self).exec_() self.reAddPlugins() - #self.parent().loadRDFs() + self.parent().loadRDFs() @pyqtSlot() def slot_maybe_show_filters(self): @@ -1112,9 +1112,7 @@ class AboutW(QDialog, ui_carla_about.Ui_AboutW): "
VST is a trademark of Steinberg Media Technologies GmbH." "" % (VERSION))) - host_osc_url = NativeHost.get_host_osc_url() - if (not host_osc_url): host_osc_url = "" - + host_osc_url = toString(CarlaHost.get_host_osc_url()) self.le_osc_url.setText(host_osc_url) self.l_osc_cmds.setText("" @@ -1221,8 +1219,8 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter): self.connect(self.sb_channel, SIGNAL("valueChanged(int)"), self.handleMidiChannelChanged) self.connect(self.combo, SIGNAL("currentIndexChanged(int)"), self.handleMidiCcChanged) - if force_parameters_style: - self.widget.force_plastique_style() + #if force_parameters_style: + #self.widget.force_plastique_style() self.widget.updateAll() @@ -1252,7 +1250,7 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter): if (cc_index <= 0): midi_cc = -1 else: - midi_cc_text = QStringStr(MIDI_CC_LIST[cc_index-1]).split(" ")[0] + midi_cc_text = MIDI_CC_LIST[cc_index-1].split(" ")[0] midi_cc = int(midi_cc_text, 16) if (self.midi_cc != midi_cc): @@ -1265,7 +1263,7 @@ class PluginParameter(QWidget, ui_carla_parameter.Ui_PluginParameter): def set_MIDI_CC_in_ComboBox(self, midi_cc): for i in range(len(MIDI_CC_LIST)): - midi_cc_text = QStringStr(MIDI_CC_LIST[i]).split(" ")[0] + midi_cc_text = MIDI_CC_LIST[i].split(" ")[0] if (int(midi_cc_text, 16) == midi_cc): cc_index = i break @@ -1280,37 +1278,37 @@ class PluginGUI(QDialog): def __init__(self, parent, plugin_name, gui_data): super(PluginGUI, self).__init__(parent) - self.myLayout = QVBoxLayout(self) - self.myLayout.setContentsMargins(0, 0, 0, 0) - self.setLayout(self.myLayout) + #self.myLayout = QVBoxLayout(self) + #self.myLayout.setContentsMargins(0, 0, 0, 0) + #self.setLayout(self.myLayout) - self.resizable = gui_data['resizable'] - self.set_new_size(gui_data['width'], gui_data['height']) + #self.resizable = gui_data['resizable'] + #self.set_new_size(gui_data['width'], gui_data['height']) - if (not plugin_name): - plugin_name = "Plugin" + #if (not plugin_name): + #plugin_name = "Plugin" - self.setWindowTitle(plugin_name+" (GUI)") + #self.setWindowTitle(plugin_name+" (GUI)") - def set_new_size(self, width, height): - if (width < 30): - width = 30 - if (height < 30): - height = 30 + #def set_new_size(self, width, height): + #if (width < 30): + #width = 30 + #if (height < 30): + #height = 30 - if (self.resizable): - self.resize(width, height) - else: - self.setFixedSize(width, height) + #if (self.resizable): + #self.resize(width, height) + #else: + #self.setFixedSize(width, height) - def hideEvent(self, event): - event.accept() - self.close() + #def hideEvent(self, event): + #event.accept() + #self.close() # Plugin Editor (Built-in) class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): def __init__(self, parent, plugin_id): - super(PluginEdit, self).__init__(parent) + QDialog.__init__(self, parent) self.setupUi(self) self.pinfo = None @@ -1330,17 +1328,17 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.tab_icon_count = 0 self.tab_icon_timers = [] - self.connect(self.b_save_state, SIGNAL("clicked()"), self.save_state) - self.connect(self.b_load_state, SIGNAL("clicked()"), self.load_state) + #self.connect(self.b_save_state, SIGNAL("clicked()"), self.save_state) + #self.connect(self.b_load_state, SIGNAL("clicked()"), self.load_state) - self.connect(self.keyboard, SIGNAL("noteOn(int)"), self.handleNoteOn) - self.connect(self.keyboard, SIGNAL("noteOff(int)"), self.handleNoteOff) + #self.connect(self.keyboard, SIGNAL("noteOn(int)"), self.handleNoteOn) + #self.connect(self.keyboard, SIGNAL("noteOff(int)"), self.handleNoteOff) - self.connect(self.keyboard, SIGNAL("notesOn()"), self.handleNotesOn) - self.connect(self.keyboard, SIGNAL("notesOff()"), self.handleNotesOff) + #self.connect(self.keyboard, SIGNAL("notesOn()"), self.handleNotesOn) + #self.connect(self.keyboard, SIGNAL("notesOff()"), self.handleNotesOff) - self.connect(self.cb_programs, SIGNAL("currentIndexChanged(int)"), self.handleProgramIndexChanged) - self.connect(self.cb_midi_programs, SIGNAL("currentIndexChanged(int)"), self.handleMidiProgramIndexChanged) + #self.connect(self.cb_programs, SIGNAL("currentIndexChanged(int)"), self.handleProgramIndexChanged) + #self.connect(self.cb_midi_programs, SIGNAL("currentIndexChanged(int)"), self.handleMidiProgramIndexChanged) self.keyboard.setMode(self.keyboard.HORIZONTAL) self.keyboard.setOctaves(6) @@ -1353,33 +1351,39 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.do_reload_all() - self.TIMER_GUI_STUFF = self.startTimer(100) + #self.TIMER_GUI_STUFF = self.startTimer(100) - def do_update(self): - self.checkInputControlParameters() - self.checkOutputControlParameters() + #def do_update(self): + #self.checkInputControlParameters() + #self.checkOutputControlParameters() - # Update current program text - if (self.cb_programs.count() > 0): - pindex = self.cb_programs.currentIndex() - pname = NativeHost.get_program_name(self.plugin_id, pindex) - if (not pname): pname = "" - self.cb_programs.setItemText(pindex, pname) + ## Update current program text + #if (self.cb_programs.count() > 0): + #pindex = self.cb_programs.currentIndex() + #pname = CarlaHost.get_program_name(self.plugin_id, pindex) + #if (not pname): pname = "" + #self.cb_programs.setItemText(pindex, pname) - # Update current midi program text - if (self.cb_midi_programs.count() > 0): - mpindex = self.cb_midi_programs.currentIndex() - mpname = NativeHost.get_midi_program_name(self.plugin_id, pindex) - if (not mpname): mpname = "" - self.cb_midi_programs.setItemText(pindex, mpname) - # FIXME - leave 001:001 alone + ## Update current midi program text + #if (self.cb_midi_programs.count() > 0): + #mpindex = self.cb_midi_programs.currentIndex() + #mpname = CarlaHost.get_midi_program_name(self.plugin_id, pindex) + #if (not mpname): mpname = "" + #self.cb_midi_programs.setItemText(pindex, mpname) + ## FIXME - leave 001:001 alone def do_reload_all(self): - self.pinfo = NativeHost.get_plugin_info(self.plugin_id) - if (not self.pinfo['valid']): + self.pinfo = CarlaHost.get_plugin_info(self.plugin_id) + if (self.pinfo['valid']): + self.pinfo["binary"] = toString(self.pinfo["binary"]) + self.pinfo["name"] = toString(self.pinfo["name"]) + self.pinfo["label"] = toString(self.pinfo["label"]) + self.pinfo["maker"] = toString(self.pinfo["maker"]) + self.pinfo["copyright"] = toString(self.pinfo["copyright"]) + else: self.pinfo["type"] = PLUGIN_NONE self.pinfo["category"] = PLUGIN_CATEGORY_NONE - self.pinfo["hints"] = 0 + self.pinfo["hints"] = 0x0 self.pinfo["binary"] = "" self.pinfo["name"] = "(Unknown)" self.pinfo["label"] = "" @@ -1387,15 +1391,9 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.pinfo["copyright"] = "" self.pinfo["unique_id"] = 0 - # Save from null values - if not self.pinfo['name']: self.pinfo['name'] = "" - if not self.pinfo['label']: self.pinfo['label'] = "" - if not self.pinfo['maker']: self.pinfo['maker'] = "" - if not self.pinfo['copyright']: self.pinfo['copyright'] = "" - self.do_reload_info() self.do_reload_parameters() - self.do_reload_programs() + #self.do_reload_programs() def do_reload_info(self): if (self.ptype == PLUGIN_NONE and self.pinfo['type'] in (PLUGIN_DSSI, PLUGIN_SF2)): @@ -1403,8 +1401,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.ptype = self.pinfo['type'] - real_plugin_name = NativeHost.get_real_plugin_name(self.plugin_id) - if not real_plugin_name: real_plugin_name = "" + real_plugin_name = toString(CarlaHost.get_real_plugin_name(self.plugin_id)) self.le_name.setText(real_plugin_name) self.le_name.setToolTip(real_plugin_name) @@ -1428,26 +1425,24 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.le_type.setText("LV2") elif (self.ptype == PLUGIN_VST): self.le_type.setText("VST") - elif (self.ptype == PLUGIN_WINVST): - self.le_type.setText("Windows VST") elif (self.ptype == PLUGIN_SF2): self.le_type.setText("SoundFont") else: self.le_type.setText(self.tr("Unknown")) - audio_count = NativeHost.get_audio_port_count_info(self.plugin_id) + audio_count = CarlaHost.get_audio_port_count_info(self.plugin_id) if (not audio_count['valid']): audio_count['ins'] = 0 audio_count['outs'] = 0 audio_count['total'] = 0 - midi_count = NativeHost.get_midi_port_count_info(self.plugin_id) + midi_count = CarlaHost.get_midi_port_count_info(self.plugin_id) if (not midi_count['valid']): midi_count['ins'] = 0 midi_count['outs'] = 0 midi_count['total'] = 0 - param_count = NativeHost.get_parameter_count_info(self.plugin_id) + param_count = CarlaHost.get_parameter_count_info(self.plugin_id) if (not param_count['valid']): param_count['ins'] = 0 param_count['outs'] = 0 @@ -1464,7 +1459,7 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.parent().recheck_hints(self.pinfo['hints']) def do_reload_parameters(self): - parameters_count = NativeHost.get_parameter_count(self.plugin_id) + parameters_count = CarlaHost.get_parameter_count(self.plugin_id) self.parameter_list = [] self.parameter_list_to_update = [] @@ -1492,23 +1487,18 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): p_out_width = 0 for i in range(parameters_count): - param_info = NativeHost.get_parameter_info(self.plugin_id, i) - param_data = NativeHost.get_parameter_data(self.plugin_id, i) - param_ranges = NativeHost.get_parameter_ranges(self.plugin_id, i) + param_info = CarlaHost.get_parameter_info(self.plugin_id, i) + param_data = CarlaHost.get_parameter_data(self.plugin_id, i) + param_ranges = CarlaHost.get_parameter_ranges(self.plugin_id, i) if not param_info['valid']: continue - # Save from null values - if not param_info['name']: param_info['name'] = "" - if not param_info['symbol']: param_info['symbol'] = "" - if not param_info['label']: param_info['label'] = "" - parameter = { 'type': param_data['type'], 'hints': param_data['hints'], - 'name': param_info['name'], - 'label': param_info['label'], + 'name': toString(param_info['name']), + 'label': toString(param_info['label']), 'scalepoints': [], 'index': param_data['index'], @@ -1521,11 +1511,11 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): 'midi_channel': param_data['midi_channel'], 'midi_cc': param_data['midi_cc'], - 'current': NativeHost.get_current_parameter_value(self.plugin_id, i) + 'current': CarlaHost.get_current_parameter_value(self.plugin_id, i) } for j in range(param_info['scalepoint_count']): - scalepoint = NativeHost.get_scalepoint_info(self.plugin_id, i, j) + scalepoint = CarlaHost.get_scalepoint_info(self.plugin_id, i, j) parameter['scalepoints'].append(scalepoint) # ----------------------------------------------------------------- @@ -1610,202 +1600,202 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.createParameterWidgets(p_fake, self.tr("Information"), PARAMETER_UNKNOWN) - def do_reload_programs(self): - # Programs - old_current = self.cur_program_index - program_count = NativeHost.get_program_count(self.plugin_id) - - if (self.cb_programs.count() > 0): - self.cur_program_index = -1 - self.set_program(-1) - self.cb_programs.clear() - - if (program_count > 0): - self.cb_programs.setEnabled(True) - self.cur_program_index = 0 - - for i in range(program_count): - pname = NativeHost.get_program_name(self.plugin_id, i) - if (not pname): pname = "" - self.cb_programs.addItem(pname) - - if (old_current < 0): - old_current = 0 - - self.cur_program_index = old_current - self.set_program(old_current) - - else: - self.cb_programs.setEnabled(False) - - # MIDI Programs - old_midi_current = self.cur_midi_program_index - midi_program_count = NativeHost.get_midi_program_count(self.plugin_id) - - if (self.cb_midi_programs.count() > 0): - self.cur_midi_program_index = -1 - self.set_midi_program(-1) - self.cb_midi_programs.clear() - - if (midi_program_count > 0): - self.cb_midi_programs.setEnabled(True) - self.cur_midi_program_index = 0 - - for i in range(midi_program_count): - midip = NativeHost.get_midi_program_info(self.plugin_id, i) - if (not midip['label']): midip['label'] = "" - - bank = midip['bank'] - prog = midip['program'] - - if (bank < 10): - bank_str = "00%i" % (bank) - elif (bank < 100): - bank_str = "0%i" % (bank) - else: - bank_str = "%i" % (bank) - - if (prog < 10): - prog_str = "00%i" % (prog) - elif (prog < 100): - prog_str = "0%i" % (prog) - else: - prog_str = "%i" % (prog) - - self.cb_midi_programs.addItem("%s:%s - %s" % (bank_str, prog_str, midip['label'])) - - if (old_midi_current < 0): - old_midi_current = 0 - - self.cur_midi_program_index = old_midi_current - self.set_midi_program(old_midi_current) + #def do_reload_programs(self): + ## Programs + #old_current = self.cur_program_index + #program_count = CarlaHost.get_program_count(self.plugin_id) - else: - self.cb_midi_programs.setEnabled(False) + #if (self.cb_programs.count() > 0): + #self.cur_program_index = -1 + #self.set_program(-1) + #self.cb_programs.clear() - def set_parameter_value(self, parameter_id, value): - if (parameter_id not in self.parameter_list_to_update): - self.parameter_list_to_update.append(parameter_id) + #if (program_count > 0): + #self.cb_programs.setEnabled(True) + #self.cur_program_index = 0 - def set_parameter_midi_channel(self, parameter_id, channel): - for parameter in self.parameter_list: - ptype, pid, pwidget = parameter - if (parameter_id == pid): - pwidget.set_parameter_midi_channel(channel) - break + #for i in range(program_count): + #pname = CarlaHost.get_program_name(self.plugin_id, i) + #if (not pname): pname = "" + #self.cb_programs.addItem(pname) - def set_parameter_midi_cc(self, parameter_id, midi_cc): - for parameter in self.parameter_list: - ptype, pid, pwidget = parameter - if (parameter_id == pid): - pwidget.set_parameter_midi_cc(midi_cc) - break + #if (old_current < 0): + #old_current = 0 - def set_program(self, program_id): - self.cur_program_index = program_id - self.cb_programs.setCurrentIndex(program_id) - QTimer.singleShot(0, self.checkInputControlParameters) + #self.cur_program_index = old_current + #self.set_program(old_current) - def set_midi_program(self, midi_program_id): - self.cur_midi_program_index = midi_program_id - self.cb_midi_programs.setCurrentIndex(midi_program_id) - QTimer.singleShot(0, self.checkInputControlParameters) + #else: + #self.cb_programs.setEnabled(False) - def handleParameterValueChanged(self, parameter_id, value): - NativeHost.set_parameter_value(self.plugin_id, parameter_id, value) + ## MIDI Programs + #old_midi_current = self.cur_midi_program_index + #midi_program_count = CarlaHost.get_midi_program_count(self.plugin_id) - def handleParameterMidiChannelChanged(self, parameter_id, channel): - NativeHost.set_parameter_midi_channel(self.plugin_id, parameter_id, channel-1) + #if (self.cb_midi_programs.count() > 0): + #self.cur_midi_program_index = -1 + #self.set_midi_program(-1) + #self.cb_midi_programs.clear() - def handleParameterMidiCcChanged(self, parameter_id, cc_index): - NativeHost.set_parameter_midi_cc(self.plugin_id, parameter_id, cc_index) + #if (midi_program_count > 0): + #self.cb_midi_programs.setEnabled(True) + #self.cur_midi_program_index = 0 - def handleProgramIndexChanged(self, index): - if (self.cur_program_index != index): - NativeHost.set_program(self.plugin_id, index) - QTimer.singleShot(0, self.checkInputControlParameters) - self.cur_program_index = index + #for i in range(midi_program_count): + #midip = CarlaHost.get_midi_program_info(self.plugin_id, i) + #if (not midip['label']): midip['label'] = "" - def handleMidiProgramIndexChanged(self, index): - if (self.cur_midi_program_index != index): - NativeHost.set_midi_program(self.plugin_id, index) - QTimer.singleShot(0, self.checkInputControlParameters) - self.cur_midi_program_index = index + #bank = midip['bank'] + #prog = midip['program'] - def handleNoteOn(self, note): - NativeHost.send_midi_note(self.plugin_id, True, note, 100) + #if (bank < 10): + #bank_str = "00%i" % (bank) + #elif (bank < 100): + #bank_str = "0%i" % (bank) + #else: + #bank_str = "%i" % (bank) - def handleNoteOff(self, note): - NativeHost.send_midi_note(self.plugin_id, False, note, 100) + #if (prog < 10): + #prog_str = "00%i" % (prog) + #elif (prog < 100): + #prog_str = "0%i" % (prog) + #else: + #prog_str = "%i" % (prog) - def handleNotesOn(self): - self.parent().led_midi.setChecked(True) + #self.cb_midi_programs.addItem("%s:%s - %s" % (bank_str, prog_str, midip['label'])) - def handleNotesOff(self): - self.parent().led_midi.setChecked(False) + #if (old_midi_current < 0): + #old_midi_current = 0 - def save_state(self): - # TODO - LV2 and VST native formats - if (self.state_filename == None): - file_filter = self.tr("Carla State File (*.carxs)") - filename_try = QFileDialog.getSaveFileName(self, self.tr("Save Carla State File"), filter=file_filter) + #self.cur_midi_program_index = old_midi_current + #self.set_midi_program(old_midi_current) - if (not filename_try.isEmpty()): - self.state_filename = QStringStr(filename_try) - self.save_state_InternalFormat() - else: - self.state_filename = None + #else: + #self.cb_midi_programs.setEnabled(False) + + #def set_parameter_value(self, parameter_id, value): + #if (parameter_id not in self.parameter_list_to_update): + #self.parameter_list_to_update.append(parameter_id) + + #def set_parameter_midi_channel(self, parameter_id, channel): + #for parameter in self.parameter_list: + #ptype, pid, pwidget = parameter + #if (parameter_id == pid): + #pwidget.set_parameter_midi_channel(channel) + #break + + #def set_parameter_midi_cc(self, parameter_id, midi_cc): + #for parameter in self.parameter_list: + #ptype, pid, pwidget = parameter + #if (parameter_id == pid): + #pwidget.set_parameter_midi_cc(midi_cc) + #break + + #def set_program(self, program_id): + #self.cur_program_index = program_id + #self.cb_programs.setCurrentIndex(program_id) + #QTimer.singleShot(0, self.checkInputControlParameters) + + #def set_midi_program(self, midi_program_id): + #self.cur_midi_program_index = midi_program_id + #self.cb_midi_programs.setCurrentIndex(midi_program_id) + #QTimer.singleShot(0, self.checkInputControlParameters) + + #def handleParameterValueChanged(self, parameter_id, value): + #CarlaHost.set_parameter_value(self.plugin_id, parameter_id, value) + + #def handleParameterMidiChannelChanged(self, parameter_id, channel): + #CarlaHost.set_parameter_midi_channel(self.plugin_id, parameter_id, channel-1) + + #def handleParameterMidiCcChanged(self, parameter_id, cc_index): + #CarlaHost.set_parameter_midi_cc(self.plugin_id, parameter_id, cc_index) + + #def handleProgramIndexChanged(self, index): + #if (self.cur_program_index != index): + #CarlaHost.set_program(self.plugin_id, index) + #QTimer.singleShot(0, self.checkInputControlParameters) + #self.cur_program_index = index + + #def handleMidiProgramIndexChanged(self, index): + #if (self.cur_midi_program_index != index): + #CarlaHost.set_midi_program(self.plugin_id, index) + #QTimer.singleShot(0, self.checkInputControlParameters) + #self.cur_midi_program_index = index + + #def handleNoteOn(self, note): + #CarlaHost.send_midi_note(self.plugin_id, True, note, 100) + + #def handleNoteOff(self, note): + #CarlaHost.send_midi_note(self.plugin_id, False, note, 100) + + #def handleNotesOn(self): + #self.parent().led_midi.setChecked(True) + + #def handleNotesOff(self): + #self.parent().led_midi.setChecked(False) + + #def save_state(self): + ## TODO - LV2 and VST native formats + #if (self.state_filename == None): + #file_filter = self.tr("Carla State File (*.carxs)") + #filename_try = QFileDialog.getSaveFileName(self, self.tr("Save Carla State File"), filter=file_filter) + + #if (not filename_try.isEmpty()): + #self.state_filename = QStringStr(filename_try) + #self.save_state_InternalFormat() + #else: + #self.state_filename = None - else: - ask_try = QMessageBox.question(self, self.tr("Overwrite?"), self.tr("Overwrite previously created file?"), QMessageBox.Ok|QMessageBox.Cancel) + #else: + #ask_try = QMessageBox.question(self, self.tr("Overwrite?"), self.tr("Overwrite previously created file?"), QMessageBox.Ok|QMessageBox.Cancel) - if (ask_try == QMessageBox.Ok): - self.save_state_InternalFormat() - else: - self.state_filename = None - self.saveState() + #if (ask_try == QMessageBox.Ok): + #self.save_state_InternalFormat() + #else: + #self.state_filename = None + #self.saveState() - def load_state(self): - # TODO - LV2 and VST native formats - file_filter = self.tr("Carla State File (*.carxs)") - filename_try = QFileDialog.getOpenFileName(self, self.tr("Open Carla State File"), filter=file_filter) + #def load_state(self): + ## TODO - LV2 and VST native formats + #file_filter = self.tr("Carla State File (*.carxs)") + #filename_try = QFileDialog.getOpenFileName(self, self.tr("Open Carla State File"), filter=file_filter) - if (not filename_try.isEmpty()): - self.state_filename = QStringStr(filename_try) - self.load_state_InternalFormat() + #if (not filename_try.isEmpty()): + #self.state_filename = QStringStr(filename_try) + #self.load_state_InternalFormat() - def save_state_InternalFormat(self): - content = ("\n" - "\n" - "\n") % (VERSION) + #def save_state_InternalFormat(self): + #content = ("\n" + #"\n" + #"\n") % (VERSION) - content += self.parent().getSaveXMLContent() + #content += self.parent().getSaveXMLContent() - content += "\n" + #content += "\n" - if (open(self.state_filename, "w").write(content)): - QMessageBox.critical(self, self.tr("Error"), self.tr("Failed to save state file")) + #if (open(self.state_filename, "w").write(content)): + #QMessageBox.critical(self, self.tr("Error"), self.tr("Failed to save state file")) - def load_state_InternalFormat(self): - state_read = open(self.state_filename, "r").read() + #def load_state_InternalFormat(self): + #state_read = open(self.state_filename, "r").read() - if not state_read: - QMessageBox.critical(self, self.tr("Error"), self.tr("Failed to load state file")) - return + #if not state_read: + #QMessageBox.critical(self, self.tr("Error"), self.tr("Failed to load state file")) + #return - xml = QDomDocument() - xml.setContent(state_read) + #xml = QDomDocument() + #xml.setContent(state_read) - xml_node = xml.documentElement() - if (xml_node.tagName() != "CARLA-PRESET"): - QMessageBox.critical(self, self.tr("Error"), self.tr("Not a valid Carla state file")) - return + #xml_node = xml.documentElement() + #if (xml_node.tagName() != "CARLA-PRESET"): + #QMessageBox.critical(self, self.tr("Error"), self.tr("Not a valid Carla state file")) + #return - x_save_state_dict = getStateSaveDict(xml_node) + #x_save_state_dict = getStateSaveDict(xml_node) - # TODO - verify plugin + ## TODO - verify plugin - self.parent().load_save_state_dict(x_save_state_dict) + #self.parent().load_save_state_dict(x_save_state_dict) def createParameterWidgets(self, p_list_full, tab_name, ptype): for i in range(len(p_list_full)): @@ -1826,11 +1816,11 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): self.parameter_list.append((ptype, p_list[j]['index'], pwidget)) - if (ptype == PARAMETER_INPUT): - self.connect(pwidget, SIGNAL("valueChanged(int, float)"), self.handleParameterValueChanged) + #if (ptype == PARAMETER_INPUT): + #self.connect(pwidget, SIGNAL("valueChanged(int, float)"), self.handleParameterValueChanged) - self.connect(pwidget, SIGNAL("midiChannelChanged(int, int)"), self.handleParameterMidiChannelChanged) - self.connect(pwidget, SIGNAL("midiCcChanged(int, int)"), self.handleParameterMidiCcChanged) + #self.connect(pwidget, SIGNAL("midiChannelChanged(int, int)"), self.handleParameterMidiChannelChanged) + #self.connect(pwidget, SIGNAL("midiCcChanged(int, int)"), self.handleParameterMidiCcChanged) layout.addStretch() @@ -1842,64 +1832,64 @@ class PluginEdit(QDialog, ui_carla_edit.Ui_PluginEdit): else: self.tab_icon_timers.append(None) - def animateTab(self, index): - if (self.tab_icon_timers[index-1] == None): - self.tabWidget.setTabIcon(index, self.tab_icon_on) - self.tab_icon_timers[index-1] = ICON_STATE_ON - - def checkInputControlParameters(self): - for parameter in self.parameter_list: - parameter_type = parameter[0] - if (parameter_type == PARAMETER_INPUT): - parameter_id = parameter[1] - parameter_widget = parameter[2] - parameter_widget.set_default_value(NativeHost.get_default_parameter_value(self.plugin_id, parameter_id)) - parameter_widget.set_parameter_value(NativeHost.get_current_parameter_value(self.plugin_id, parameter_id), False) - - def checkOutputControlParameters(self): - for parameter in self.parameter_list: - parameter_type = parameter[0] - if (parameter_type == PARAMETER_OUTPUT): - parameter_id = parameter[1] - parameter_widget = parameter[2] - parameter_widget.set_parameter_value(NativeHost.get_current_parameter_value(self.plugin_id, parameter_id), False) - - def checkTabIcons(self): - for i in range(len(self.tab_icon_timers)): - if (self.tab_icon_timers[i] == ICON_STATE_ON): - self.tab_icon_timers[i] = ICON_STATE_WAIT - elif (self.tab_icon_timers[i] == ICON_STATE_WAIT): - self.tab_icon_timers[i] = ICON_STATE_OFF - elif (self.tab_icon_timers[i] == ICON_STATE_OFF): - self.tabWidget.setTabIcon(i+1, self.tab_icon_off) - self.tab_icon_timers[i] = None - - def checkUpdatedParameters(self): - for parameter_id in self.parameter_list_to_update: - value = NativeHost.get_current_parameter_value(self.plugin_id, parameter_id) - - for parameter in self.parameter_list: - x_parameter_type = parameter[0] - x_parameter_id = parameter[1] - x_parameter_widget = parameter[2] - - if (x_parameter_id == parameter_id): - x_parameter_widget.set_parameter_value(value, False) - - if (x_parameter_type == PARAMETER_INPUT): - self.animateTab(x_parameter_widget.tab_index) - - break - - for i in self.parameter_list_to_update: - self.parameter_list_to_update.pop(0) + #def animateTab(self, index): + #if (self.tab_icon_timers[index-1] == None): + #self.tabWidget.setTabIcon(index, self.tab_icon_on) + #self.tab_icon_timers[index-1] = ICON_STATE_ON + + #def checkInputControlParameters(self): + #for parameter in self.parameter_list: + #parameter_type = parameter[0] + #if (parameter_type == PARAMETER_INPUT): + #parameter_id = parameter[1] + #parameter_widget = parameter[2] + #parameter_widget.set_default_value(CarlaHost.get_default_parameter_value(self.plugin_id, parameter_id)) + #parameter_widget.set_parameter_value(CarlaHost.get_current_parameter_value(self.plugin_id, parameter_id), False) + + #def checkOutputControlParameters(self): + #for parameter in self.parameter_list: + #parameter_type = parameter[0] + #if (parameter_type == PARAMETER_OUTPUT): + #parameter_id = parameter[1] + #parameter_widget = parameter[2] + #parameter_widget.set_parameter_value(CarlaHost.get_current_parameter_value(self.plugin_id, parameter_id), False) + + #def checkTabIcons(self): + #for i in range(len(self.tab_icon_timers)): + #if (self.tab_icon_timers[i] == ICON_STATE_ON): + #self.tab_icon_timers[i] = ICON_STATE_WAIT + #elif (self.tab_icon_timers[i] == ICON_STATE_WAIT): + #self.tab_icon_timers[i] = ICON_STATE_OFF + #elif (self.tab_icon_timers[i] == ICON_STATE_OFF): + #self.tabWidget.setTabIcon(i+1, self.tab_icon_off) + #self.tab_icon_timers[i] = None + + #def checkUpdatedParameters(self): + #for parameter_id in self.parameter_list_to_update: + #value = CarlaHost.get_current_parameter_value(self.plugin_id, parameter_id) + + #for parameter in self.parameter_list: + #x_parameter_type = parameter[0] + #x_parameter_id = parameter[1] + #x_parameter_widget = parameter[2] + + #if (x_parameter_id == parameter_id): + #x_parameter_widget.set_parameter_value(value, False) + + #if (x_parameter_type == PARAMETER_INPUT): + #self.animateTab(x_parameter_widget.tab_index) - def timerEvent(self, event): - if (event.timerId() == self.TIMER_GUI_STUFF): - self.checkOutputControlParameters() - self.checkTabIcons() - self.checkUpdatedParameters() - return QDialog.timerEvent(self, event) + #break + + #for i in self.parameter_list_to_update: + #self.parameter_list_to_update.pop(0) + + #def timerEvent(self, event): + #if (event.timerId() == self.TIMER_GUI_STUFF): + #self.checkOutputControlParameters() + #self.checkTabIcons() + #self.checkUpdatedParameters() + #return QDialog.timerEvent(self, event) # (New) Plugin Widget class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): @@ -1968,7 +1958,13 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): self.peak_out.setChannels(self.peaks_out) self.pinfo = CarlaHost.get_plugin_info(self.plugin_id) - if (not self.pinfo['valid']): + if (self.pinfo['valid']): + self.pinfo["binary"] = toString(self.pinfo["binary"]) + self.pinfo["name"] = toString(self.pinfo["name"]) + self.pinfo["label"] = toString(self.pinfo["label"]) + self.pinfo["maker"] = toString(self.pinfo["maker"]) + self.pinfo["copyright"] = toString(self.pinfo["copyright"]) + else: self.pinfo["type"] = PLUGIN_NONE self.pinfo["category"] = PLUGIN_CATEGORY_NONE self.pinfo["hints"] = 0 @@ -1979,23 +1975,14 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): self.pinfo["copyright"] = "" self.pinfo["unique_id"] = 0 - # Save from null values - if not self.pinfo['name']: self.pinfo['name'] = "" - if not self.pinfo['label']: self.pinfo['label'] = "" - if not self.pinfo['maker']: self.pinfo['maker'] = "" - if not self.pinfo['copyright']: self.pinfo['copyright'] = "" - # Set widget page if (self.pinfo['type'] == PLUGIN_NONE or audio_count['total'] == 0): self.stackedWidget.setCurrentIndex(1) - self.label_name.setText(self.pinfo['name'].decode("utf-8")) + self.label_name.setText(self.pinfo['name']) - self.dial_drywet.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_DRYWET) - self.dial_vol.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_VOL) - self.dial_b_left.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_BALANCE) - self.dial_b_right.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_BALANCE) - self.b_gui.setEnabled(self.pinfo['hints'] & PLUGIN_HAS_GUI) + # Enable/disable features + self.recheck_hints(self.pinfo['hints']) # Colorify if (self.pinfo['category'] == PLUGIN_CATEGORY_SYNTH): @@ -2022,12 +2009,12 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): else: self.led_midi.setVisible(False) - #self.edit_dialog = PluginEdit(self, self.plugin_id) - #self.edit_dialog.hide() - #self.edit_dialog_geometry = QVariant(self.edit_dialog.saveGeometry()) + self.edit_dialog = PluginEdit(self, self.plugin_id) + self.edit_dialog.hide() + self.edit_dialog_geometry = self.edit_dialog.saveGeometry() #if (self.pinfo['hints'] & PLUGIN_HAS_GUI): - #gui_data = NativeHost.get_gui_data(self.plugin_id) + #gui_data = CarlaHost.get_gui_data(self.plugin_id) #self.gui_dialog_type = gui_data['type'] #if (self.gui_dialog_type in (GUI_INTERNAL_QT4, GUI_INTERNAL_X11)): @@ -2036,7 +2023,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #self.gui_dialog_geometry = QVariant(self.gui_dialog.saveGeometry()) #self.connect(self.gui_dialog, SIGNAL("finished(int)"), self.gui_dialog_closed) - #NativeHost.set_gui_data(self.plugin_id, Display, unwrapinstance(self.gui_dialog)) + #CarlaHost.set_gui_data(self.plugin_id, Display, unwrapinstance(self.gui_dialog)) #elif (self.gui_dialog_type in (GUI_EXTERNAL_OSC, GUI_EXTERNAL_LV2)): #self.gui_dialog = None @@ -2049,24 +2036,107 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): self.gui_dialog = None self.gui_dialog_type = GUI_NONE - #self.connect(self.led_enable, SIGNAL("clicked(bool)"), self.set_active) - #self.connect(self.dial_drywet, SIGNAL("sliderMoved(int)"), self.set_drywet) - #self.connect(self.dial_vol, SIGNAL("sliderMoved(int)"), self.set_vol) - #self.connect(self.dial_b_left, SIGNAL("sliderMoved(int)"), self.set_balance_left) - #self.connect(self.dial_b_right, SIGNAL("sliderMoved(int)"), self.set_balance_right) - #self.connect(self.b_gui, SIGNAL("clicked(bool)"), self.handleShowGUI) - #self.connect(self.b_edit, SIGNAL("clicked(bool)"), self.handleEdit) - #self.connect(self.b_remove, SIGNAL("clicked()"), self.handleRemove) + self.connect(self.led_enable, SIGNAL("clicked(bool)"), SLOT("slot_setActive(bool)")) + self.connect(self.dial_drywet, SIGNAL("sliderMoved(int)"), SLOT("slot_setDryWet(int)")) + self.connect(self.dial_vol, SIGNAL("sliderMoved(int)"), SLOT("slot_setVolume(int)")) + self.connect(self.dial_b_left, SIGNAL("sliderMoved(int)"), SLOT("slot_setBalanceLeft(int)")) + self.connect(self.dial_b_right, SIGNAL("sliderMoved(int)"), SLOT("slot_setBalanceRight(int)")) + #self.connect(self.b_gui, SIGNAL("clicked(bool)"), SLOT("slot_showGUIClicked(bool")) + self.connect(self.b_edit, SIGNAL("clicked(bool)"), SLOT("slot_editClicked(bool)")) + self.connect(self.b_remove, SIGNAL("clicked()"), SLOT("slot_removeClicked()")) + + #self.connect(self.dial_drywet, SIGNAL("customContextMenuRequested(QPoint)"), SLOT("slot_showCustomDialMenu()")) + #self.connect(self.dial_vol, SIGNAL("customContextMenuRequested(QPoint)"), SLOT("slot_showCustomDialMenu()")) + #self.connect(self.dial_b_left, SIGNAL("customContextMenuRequested(QPoint)"), SLOT("slot_showCustomDialMenu()")) + #self.connect(self.dial_b_right, SIGNAL("customContextMenuRequested(QPoint)"), SLOT("slot_showCustomDialMenu()")) + + self.connect(self.edit_dialog, SIGNAL("finished(int)"), SLOT("slot_editClosed()")) + + self.check_gui_stuff() + + @pyqtSlot(bool) + def slot_setActive(self, yesno): + self.set_active(yesno, False, True) + + @pyqtSlot(int) + def slot_setDryWet(self, value): + self.set_drywet(value, False, True) + + @pyqtSlot(int) + def slot_setVolume(self, value): + self.set_volume(value, False, True) + + @pyqtSlot(int) + def slot_setBalanceLeft(self, value): + self.set_balance_left(value, False, True) + + @pyqtSlot(int) + def slot_setBalanceRight(self, value): + self.set_balance_right(value, False, True) + + @pyqtSlot(bool) + def slot_editClicked(self, show): + if (show): + self.edit_dialog.restoreGeometry(self.edit_dialog_geometry) + else: + self.edit_dialog_geometry = self.edit_dialog.saveGeometry() + self.edit_dialog.setVisible(show) + + @pyqtSlot() + def slot_editClosed(self): + self.b_edit.setChecked(False) + + @pyqtSlot() + def slot_removeClicked(self): + gui.remove_plugin(self.plugin_id, True) + + def set_active(self, active, gui_send=False, callback_send=True): + if (gui_send): self.led_enable.setChecked(active) + if (callback_send): CarlaHost.set_active(self.plugin_id, active) + + def set_drywet(self, value, gui_send=False, callback_send=True): + if (gui_send): self.dial_drywet.setValue(value) + if (callback_send): CarlaHost.set_drywet(self.plugin_id, float(value)/1000) + + message = self.tr("Output dry/wet (%s%%)" % (value/10)) + self.dial_drywet.setStatusTip(message) + gui.statusBar().showMessage(message) + + def set_volume(self, value, gui_send=False, callback_send=True): + if (gui_send): self.dial_vol.setValue(value) + if (callback_send): CarlaHost.set_volume(self.plugin_id, float(value)/1000) - #self.connect(self.dial_drywet, SIGNAL("customContextMenuRequested(QPoint)"), self.showCustomDialMenu) - #self.connect(self.dial_vol, SIGNAL("customContextMenuRequested(QPoint)"), self.showCustomDialMenu) - #self.connect(self.dial_b_left, SIGNAL("customContextMenuRequested(QPoint)"), self.showCustomDialMenu) - #self.connect(self.dial_b_right, SIGNAL("customContextMenuRequested(QPoint)"), self.showCustomDialMenu) + message = self.tr("Output volume (%s%%)" % (value/10)) + self.dial_vol.setStatusTip(message) + gui.statusBar().showMessage(message) - #self.connect(self.edit_dialog, SIGNAL("finished(int)"), self.edit_dialog_closed) + def set_balance_left(self, value, gui_send=False, callback_send=True): + if (gui_send): self.dial_b_left.setValue(value) + if (callback_send): CarlaHost.set_balance_left(self.plugin_id, float(value)/1000) - #self.check_gui_stuff() - #self.TIMER_GUI_STUFF = self.startTimer(50) + if (value == 0): + message = self.tr("Left Panning (Center)") + elif (value < 0): + message = self.tr("Left Panning (%s%% Left)" % (-value/10)) + else: + message = self.tr("Left Panning (%s%% Right)" % (value/10)) + + self.dial_b_left.setStatusTip(message) + gui.statusBar().showMessage(message) + + def set_balance_right(self, value, gui_send=False, callback_send=True): + if (gui_send): self.dial_b_right.setValue(value) + if (callback_send): CarlaHost.set_balance_right(self.plugin_id, float(value)/1000) + + if (value == 0): + message = self.tr("Right Panning (Center)") + elif (value < 0): + message = self.tr("Right Panning (%s%% Left" % (-value/10)) + else: + message = self.tr("Right Panning (%s%% Right)" % (value/10)) + + self.dial_b_right.setStatusTip(message) + gui.statusBar().showMessage(message) def setWidgetColor(self, color): if (color == PALETTE_COLOR_WHITE): @@ -2144,106 +2214,55 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): } """ % (texture, r, g, b, r, g, b)) - #def recheck_hints(self, hints): - #self.pinfo['hints'] = hints - #self.dial_drywet.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_DRYWET) - #self.dial_vol.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_VOL) - #self.dial_b_left.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_BALANCE) - #self.dial_b_right.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_BALANCE) - #self.b_gui.setEnabled(self.pinfo['hints'] & PLUGIN_HAS_GUI) - - #def set_active(self, active, gui_send=False, callback_send=True): - #if (gui_send): self.led_enable.setChecked(active) - #if (callback_send): NativeHost.set_active(self.plugin_id, active) - - #def set_drywet(self, value, gui_send=False, callback_send=True): - #if (gui_send): self.dial_drywet.setValue(value) - #if (callback_send): NativeHost.set_drywet(self.plugin_id, float(value)/1000) - - #message = self.tr("Output dry/wet (%1%)").arg(value/10) - #self.dial_drywet.setStatusTip(message) - #gui.statusBar().showMessage(message) - - #def set_vol(self, value, gui_send=False, callback_send=True): - #if (gui_send): self.dial_vol.setValue(value) - #if (callback_send): NativeHost.set_vol(self.plugin_id, float(value)/1000) - - #message = self.tr("Output volume (%1%)").arg(value/10) - #self.dial_vol.setStatusTip(message) - #gui.statusBar().showMessage(message) - - #def set_balance_left(self, value, gui_send=False, callback_send=True): - #if (gui_send): self.dial_b_left.setValue(value) - #if (callback_send): NativeHost.set_balance_left(self.plugin_id, float(value)/1000) - - #if (value == 0): - #message = self.tr("Left Panning (Center)") - #elif (value < 0): - #message = self.tr("Left Panning (%1% Left)").arg(-value/10) - #else: - #message = self.tr("Left Panning (%1% Right)").arg(value/10) - - #self.dial_b_left.setStatusTip(message) - #gui.statusBar().showMessage(message) - - #def set_balance_right(self, value, gui_send=False, callback_send=True): - #if (gui_send): self.dial_b_right.setValue(value) - #if (callback_send): NativeHost.set_balance_right(self.plugin_id, float(value)/1000) - - #if (value == 0): - #message = self.tr("Right Panning (Center)") - #elif (value < 0): - #message = self.tr("Right Panning (%1%) Left").arg(-value/10) - #else: - #message = self.tr("Right Panning (%1% Right)").arg(value/10) - - #self.dial_b_right.setStatusTip(message) - #gui.statusBar().showMessage(message) + def recheck_hints(self, hints): + self.pinfo['hints'] = hints + self.dial_drywet.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_DRYWET) + self.dial_vol.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_VOL) + self.dial_b_left.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_BALANCE) + self.dial_b_right.setEnabled(self.pinfo['hints'] & PLUGIN_CAN_BALANCE) + self.b_gui.setEnabled(self.pinfo['hints'] & PLUGIN_HAS_GUI) #def gui_dialog_closed(self): #self.b_gui.setChecked(False) - #def edit_dialog_closed(self): - #self.b_edit.setChecked(False) - - #def check_gui_stuff(self): - ## Input peaks - #if (self.peaks_in > 0): - #if (self.peaks_in > 1): - #peak1 = NativeHost.get_input_peak_value(self.plugin_id, 1) - #peak2 = NativeHost.get_input_peak_value(self.plugin_id, 2) - #self.peak_in.displayMeter(1, peak1) - #self.peak_in.displayMeter(2, peak2) - #self.led_audio_in.setChecked((peak1 != 0.0 or peak2 != 0.0)) + def check_gui_stuff(self): + # Input peaks + if (self.peaks_in > 0): + if (self.peaks_in > 1): + peak1 = CarlaHost.get_input_peak_value(self.plugin_id, 1) + peak2 = CarlaHost.get_input_peak_value(self.plugin_id, 2) + self.peak_in.displayMeter(1, peak1) + self.peak_in.displayMeter(2, peak2) + self.led_audio_in.setChecked((peak1 != 0.0 or peak2 != 0.0)) - #else: - #peak = NativeHost.get_input_peak_value(self.plugin_id, 1) - #self.peak_in.displayMeter(1, peak) - #self.led_audio_in.setChecked((peak != 0.0)) - - ## Output peaks - #if (self.peaks_out > 0): - #if (self.peaks_out > 1): - #peak1 = NativeHost.get_output_peak_value(self.plugin_id, 1) - #peak2 = NativeHost.get_output_peak_value(self.plugin_id, 2) - #self.peak_out.displayMeter(1, peak1) - #self.peak_out.displayMeter(2, peak2) - #self.led_audio_out.setChecked((peak1 != 0.0 or peak2 != 0.0)) + else: + peak = CarlaHost.get_input_peak_value(self.plugin_id, 1) + self.peak_in.displayMeter(1, peak) + self.led_audio_in.setChecked((peak != 0.0)) + + # Output peaks + if (self.peaks_out > 0): + if (self.peaks_out > 1): + peak1 = CarlaHost.get_output_peak_value(self.plugin_id, 1) + peak2 = CarlaHost.get_output_peak_value(self.plugin_id, 2) + self.peak_out.displayMeter(1, peak1) + self.peak_out.displayMeter(2, peak2) + self.led_audio_out.setChecked((peak1 != 0.0 or peak2 != 0.0)) - #else: - #peak = NativeHost.get_output_peak_value(self.plugin_id, 1) - #self.peak_out.displayMeter(1, peak) - #self.led_audio_out.setChecked((peak != 0.0)) - - ## Parameter Activity LED - #if (self.parameter_activity_timer == ICON_STATE_ON): - #self.led_control.setChecked(True) - #self.parameter_activity_timer = ICON_STATE_WAIT - #elif (self.parameter_activity_timer == ICON_STATE_WAIT): - #self.parameter_activity_timer = ICON_STATE_OFF - #elif (self.parameter_activity_timer == ICON_STATE_OFF): - #self.led_control.setChecked(False) - #self.parameter_activity_timer = None + else: + peak = CarlaHost.get_output_peak_value(self.plugin_id, 1) + self.peak_out.displayMeter(1, peak) + self.led_audio_out.setChecked((peak != 0.0)) + + # Parameter Activity LED + if (self.parameter_activity_timer == ICON_STATE_ON): + self.led_control.setChecked(True) + self.parameter_activity_timer = ICON_STATE_WAIT + elif (self.parameter_activity_timer == ICON_STATE_WAIT): + self.parameter_activity_timer = ICON_STATE_OFF + elif (self.parameter_activity_timer == ICON_STATE_OFF): + self.led_control.setChecked(False) + self.parameter_activity_timer = None #def handleShowGUI(self, show): #if (self.gui_dialog_type in (GUI_INTERNAL_QT4, GUI_INTERNAL_X11)): @@ -2252,17 +2271,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #else: #self.gui_dialog_geometry = QVariant(self.gui_dialog.saveGeometry()) #self.gui_dialog.setVisible(show) - #NativeHost.show_gui(self.plugin_id, show) - - #def handleEdit(self, show): - #if (show): - #self.edit_dialog.restoreGeometry(self.edit_dialog_geometry.toByteArray()) - #else: - #self.edit_dialog_geometry = QVariant(self.edit_dialog.saveGeometry()) - #self.edit_dialog.setVisible(show) - - #def handleRemove(self): - #gui.func_remove_plugin(self.plugin_id, True) + #CarlaHost.show_gui(self.plugin_id, show) #def showCustomDialMenu(self, pos): #dial_name = QStringStr(self.sender().objectName()) @@ -2337,7 +2346,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #self.set_balance_right(value, True, True) #def getSaveXMLContent(self): - #NativeHost.prepare_for_save(self.plugin_id) + #CarlaHost.prepare_for_save(self.plugin_id) #if (self.pinfo['type'] == PLUGIN_LADSPA): #type_str = "LADSPA" @@ -2354,7 +2363,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #else: #type_str = "Unknown" - #real_plugin_name = NativeHost.get_real_plugin_name(self.plugin_id) + #real_plugin_name = CarlaHost.get_real_plugin_name(self.plugin_id) #if not real_plugin_name: real_plugin_name = "" #x_save_state_dict = deepcopy(save_state_dict) @@ -2388,18 +2397,18 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): ## MIDI Programs #if (self.edit_dialog.cb_midi_programs.currentIndex() >= 0): - #midi_program_info = NativeHost.get_midi_program_info(self.plugin_id, self.edit_dialog.cb_midi_programs.currentIndex()) + #midi_program_info = CarlaHost.get_midi_program_info(self.plugin_id, self.edit_dialog.cb_midi_programs.currentIndex()) #x_save_state_dict['MidiBank'] = midi_program_info['bank'] #x_save_state_dict['MidiProgram'] = midi_program_info['program'] ## ---------------------------- ## Parameters - #parameter_count = NativeHost.get_parameter_count(self.plugin_id) + #parameter_count = CarlaHost.get_parameter_count(self.plugin_id) #for i in range(parameter_count): - #parameter_info = NativeHost.get_parameter_info(self.plugin_id, i) - #parameter_data = NativeHost.get_parameter_data(self.plugin_id, i) + #parameter_info = CarlaHost.get_parameter_info(self.plugin_id, i) + #parameter_data = CarlaHost.get_parameter_data(self.plugin_id, i) #if (not parameter_info['valid'] or parameter_data['type'] != PARAMETER_INPUT): #continue @@ -2415,22 +2424,22 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #x_save_state_parameter['rindex'] = parameter_data['rindex'] #x_save_state_parameter['name'] = parameter_info['name'] #x_save_state_parameter['symbol'] = parameter_info['symbol'] - #x_save_state_parameter['value'] = NativeHost.get_current_parameter_value(self.plugin_id, parameter_data['index']) + #x_save_state_parameter['value'] = CarlaHost.get_current_parameter_value(self.plugin_id, parameter_data['index']) #x_save_state_parameter['midi_channel'] = parameter_data['midi_channel']+1 #x_save_state_parameter['midi_cc'] = parameter_data['midi_cc'] #if (parameter_data['hints'] & PARAMETER_USES_SAMPLERATE): - #x_save_state_parameter['value'] /= NativeHost.get_sample_rate() + #x_save_state_parameter['value'] /= CarlaHost.get_sample_rate() #x_save_state_dict['Parameters'].append(x_save_state_parameter) ## ---------------------------- ## Custom Data - #custom_data_count = NativeHost.get_custom_data_count(self.plugin_id) + #custom_data_count = CarlaHost.get_custom_data_count(self.plugin_id) #for i in range(custom_data_count): - #custom_data = NativeHost.get_custom_data(self.plugin_id, i) + #custom_data = CarlaHost.get_custom_data(self.plugin_id, i) #if (custom_data['type'] == CUSTOM_DATA_INVALID): #continue @@ -2451,7 +2460,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): ## Chunk #if (self.pinfo['hints'] & PLUGIN_USES_CHUNKS): - #chunk_data = NativeHost.get_chunk_data(self.plugin_id) + #chunk_data = CarlaHost.get_chunk_data(self.plugin_id) #if chunk_data: #x_save_state_dict['Chunk'] = chunk_data @@ -2526,20 +2535,20 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): ## Part 1 - set custom data #for custom_data in content['CustomData']: - #NativeHost.set_custom_data(self.plugin_id, custom_data['type'], custom_data['key'], custom_data['value']) + #CarlaHost.set_custom_data(self.plugin_id, custom_data['type'], custom_data['key'], custom_data['value']) ## Part 2 - set program (carefully) #program_id = -1 - #program_count = NativeHost.get_program_count(self.plugin_id) + #program_count = CarlaHost.get_program_count(self.plugin_id) #if (content['ProgramName']): - #test_pname = NativeHost.get_program_name(self.plugin_id, content['ProgramIndex']) + #test_pname = CarlaHost.get_program_name(self.plugin_id, content['ProgramIndex']) #if (content['ProgramName'] == test_pname): #program_id = content['ProgramIndex'] #else: #for i in range(program_count): - #new_test_pname = NativeHost.get_program_name(self.plugin_id, i) + #new_test_pname = CarlaHost.get_program_name(self.plugin_id, i) #if (content['ProgramName'] == new_test_pname): #program_id = i #break @@ -2551,17 +2560,17 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #program_id = content['ProgramIndex'] #if (program_id >= 0): - #NativeHost.set_program(self.plugin_id, program_id) + #CarlaHost.set_program(self.plugin_id, program_id) #self.edit_dialog.set_program(program_id) ## Part 3 - set midi program #if (content['MidiBank'] >= 0 and content['MidiProgram'] >= 0): - #midi_program_count = NativeHost.get_midi_program_count(self.plugin_id) + #midi_program_count = CarlaHost.get_midi_program_count(self.plugin_id) #for i in range(midi_program_count): - #program_info = NativeHost.get_midi_program_info(self.plugin_id, i) + #program_info = CarlaHost.get_midi_program_info(self.plugin_id, i) #if (program_info['bank'] == content['MidiBank'] and program_info['program'] == content['MidiProgram']): - #NativeHost.set_midi_program(self.plugin_id, i) + #CarlaHost.set_midi_program(self.plugin_id, i) #self.edit_dialog.set_midi_program(i) #break @@ -2570,7 +2579,7 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #for parameter in content['Parameters']: #if (parameter['symbol']): - #param_info = NativeHost.get_parameter_info(self.plugin_id, parameter['index']) + #param_info = CarlaHost.get_parameter_info(self.plugin_id, parameter['index']) #if (param_info['valid'] and param_info['symbol']): #param_symbols.append((parameter['index'], param_info['symbol'])) @@ -2608,19 +2617,19 @@ class PluginWidget(QFrame, ui_carla_plugin.Ui_PluginWidget): #index = parameter['index'] #if (index >= 0): - #param_data = NativeHost.get_parameter_data(self.plugin_id, parameter['index']) + #param_data = CarlaHost.get_parameter_data(self.plugin_id, parameter['index']) #if (param_data['hints'] & PARAMETER_USES_SAMPLERATE): - #parameter['value'] *= NativeHost.get_sample_rate() + #parameter['value'] *= CarlaHost.get_sample_rate() - #NativeHost.set_parameter_value(self.plugin_id, index, parameter['value']) - #NativeHost.set_parameter_midi_channel(self.plugin_id, index, parameter['midi_channel']-1) - #NativeHost.set_parameter_midi_cc(self.plugin_id, index, parameter['midi_cc']) + #CarlaHost.set_parameter_value(self.plugin_id, index, parameter['value']) + #CarlaHost.set_parameter_midi_channel(self.plugin_id, index, parameter['midi_channel']-1) + #CarlaHost.set_parameter_midi_cc(self.plugin_id, index, parameter['midi_cc']) #else: #print("Could not set parameter data for", parameter['index'], "->", parameter['name']) ## Part 5 - set chunk data #if (content['Chunk']): - #NativeHost.set_chunk_data(self.plugin_id, content['Chunk']) + #CarlaHost.set_chunk_data(self.plugin_id, content['Chunk']) ## Part 6 - set internal stuff #self.set_drywet(content['DryWet']*1000, True, True) @@ -2723,6 +2732,8 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): #self.connect(self, SIGNAL("ReloadAllCallback(int)"), self.handleReloadAllCallback) #self.connect(self, SIGNAL("QuitCallback()"), self.handleQuitCallback) + self.TIMER_GUI_STUFF = self.startTimer(50) + def callback_function(self, action, plugin_id, value1, value2, value3): if (plugin_id < 0 or plugin_id >= MAX_PLUGINS): return @@ -2758,7 +2769,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): def handleSIGUSR1(self): print("Got SIGUSR1 -> Saving project now") - QTimer.singleShot(0, self, SLOT("slot_file_save()")) + #QTimer.singleShot(0, self, SLOT("slot_file_save()")) #def handleDebugCallback(self, plugin_id, value1, value2, value3): #print "DEBUG ::", plugin_id, value1, value2, value3 @@ -2855,15 +2866,15 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): if (new_plugin_id < 0): CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), self.tr("Failed to load plugin"), - CarlaHost.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) + toString(CarlaHost.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) else: pwidget = PluginWidget(self, new_plugin_id) self.w_plugins.layout().addWidget(pwidget) self.m_plugin_list[new_plugin_id] = pwidget self.act_plugin_remove_all.setEnabled(True) - #if (activate): - #pwidget.set_active(True, True) + if (activate): + pwidget.set_active(True, True, True) return new_plugin_id @@ -2871,8 +2882,8 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): pwidget = self.m_plugin_list[plugin_id] #pwidget.edit_dialog.close() - #if (pwidget.gui_dialog): - #pwidget.gui_dialog.close() + if (pwidget.gui_dialog): + pwidget.gui_dialog.close() if (CarlaHost.remove_plugin(plugin_id)): pwidget.close() @@ -2883,7 +2894,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): else: if (showError): CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), self.tr("Failed to remove plugin"), - CarlaHost.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) + toString(CarlaHost.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) for i in range(MAX_PLUGINS): if (self.m_plugin_list[i] != None): @@ -3180,8 +3191,10 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): self.restoreGeometry(self.settings.value("Geometry", "")) def timerEvent(self, event): - #if (event.timerId() == self.TIMER_GUI_STUFF): - #self.check_gui_stuff() + if (event.timerId() == self.TIMER_GUI_STUFF): + for pwidget in self.m_plugin_list: + if (pwidget): + pwidget.check_gui_stuff() QMainWindow.timerEvent(self, event) def closeEvent(self, event): @@ -3203,11 +3216,11 @@ if __name__ == '__main__': #force_parameters_style = (style in ("Bespin::Style",)) CarlaHost = Host() - #CarlaHost.set_option(OPTION_GLOBAL_JACK_CLIENT, 1, "") + CarlaHost.set_option(OPTION_GLOBAL_JACK_CLIENT, 1, "") if (not CarlaHost.carla_init("Carla")): CustomMessageBox(None, QMessageBox.Critical, "Error", "Could not connect to JACK", - CarlaHost.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) + toString(CarlaHost.get_last_error()), QMessageBox.Ok, QMessageBox.Ok) sys.exit(1) # Show GUI @@ -3231,7 +3244,7 @@ if __name__ == '__main__': # Close Host if (CarlaHost.carla_is_engine_running()): if (not CarlaHost.carla_close()): - print(CarlaHost.get_last_error().decode("utf-8")) + print(toString(CarlaHost.get_last_error())) # Exit properly sys.exit(ret) diff --git a/src/carla/carla_backend.cpp b/src/carla/carla_backend.cpp index d705acd..32d091a 100644 --- a/src/carla/carla_backend.cpp +++ b/src/carla/carla_backend.cpp @@ -176,8 +176,8 @@ bool carla_close() get_plugin_info(0); get_parameter_info(0, 0); get_scalepoint_info(0, 0, 0); - //get_chunk_data(0); - //get_real_plugin_name(0); + get_chunk_data(0); + get_real_plugin_name(0); return closed; } @@ -461,15 +461,13 @@ MidiProgramInfo* get_midi_program_info(unsigned short plugin_id, uint32_t midi_p CarlaPlugin* plugin = CarlaPlugins[i]; if (plugin && plugin->id() == plugin_id) { -// if (midi_program_id < plugin->midiprog.count) -// { -// info.valid = true; -// info.bank = plugin->midiprog.data[midi_program_id].bank; -// info.program = plugin->midiprog.data[midi_program_id].program; -// info.label = plugin->midiprog.names[midi_program_id]; -// } -// else -// qCritical("get_midi_program_info(%i, %i) - midi_program_id out of bounds", plugin_id, midi_program_id); + if (midi_program_id < plugin->midiprog_count()) + { + info.valid = true; + plugin->get_midi_program_info(&info); + } + else + qCritical("get_midi_program_info(%i, %i) - midi_program_id out of bounds", plugin_id, midi_program_id); return &info; } @@ -490,10 +488,10 @@ ParameterData* get_parameter_data(unsigned short plugin_id, uint32_t parameter_i CarlaPlugin* plugin = CarlaPlugins[i]; if (plugin && plugin->id() == plugin_id) { -// if (parameter_id < plugin->param_count()) -// return &plugin->param.data[parameter_id]; -// else -// qCritical("get_parameter_data(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id); + if (parameter_id < plugin->param_count()) + return plugin->param_data(parameter_id); + else + qCritical("get_parameter_data(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id); return &data; } @@ -514,10 +512,10 @@ ParameterRanges* get_parameter_ranges(unsigned short plugin_id, uint32_t paramet CarlaPlugin* plugin = CarlaPlugins[i]; if (plugin && plugin->id() == plugin_id) { -// if (parameter_id < plugin->param.count) -// return &plugin->param.ranges[parameter_id]; -// else -// qCritical("get_parameter_ranges(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id); + if (parameter_id < plugin->param_count()) + return plugin->param_ranges(parameter_id); + else + qCritical("get_parameter_ranges(%i, %i) - parameter_id out of bounds", plugin_id, parameter_id); return &ranges; } @@ -616,9 +614,9 @@ uint32_t get_parameter_count(unsigned short plugin_id) for (unsigned short i=0; iid() == plugin_id) -// return plugin->param_count; + CarlaPlugin* plugin = CarlaPlugins[i]; + if (plugin && plugin->id() == plugin_id) + return plugin->param_count(); } qCritical("get_parameter_count(%i) - could not find plugin", plugin_id); @@ -730,12 +728,12 @@ const char* get_real_plugin_name(unsigned short plugin_id) CarlaPlugin* plugin = CarlaPlugins[i]; if (plugin && plugin->id() == plugin_id) { -// char buf_str[STR_MAX] = { 0 }; + char buf_str[STR_MAX] = { 0 }; -// plugin->get_real_name(buf_str); -// real_plugin_name = strdup(buf_str); + plugin->get_real_name(buf_str); + real_plugin_name = strdup(buf_str); -// return real_plugin_name; + return real_plugin_name; } } @@ -844,16 +842,16 @@ double get_output_peak_value(unsigned short plugin_id, unsigned short port_id) void set_active(unsigned short plugin_id, bool onoff) { -// qDebug("set_active(%i, %s)", plugin_id, bool2str(onoff)); + qDebug("set_active(%i, %s)", plugin_id, bool2str(onoff)); for (unsigned short i=0; iid() == plugin_id) -// return plugin->set_active(onoff, true, false); + CarlaPlugin* plugin = CarlaPlugins[i]; + if (plugin && plugin->id() == plugin_id) + return plugin->set_active(onoff, true, false); } -// qCritical("set_active(%i, %s) - could not find plugin", plugin_id, bool2str(onoff)); + qCritical("set_active(%i, %s) - could not find plugin", plugin_id, bool2str(onoff)); } void set_drywet(unsigned short plugin_id, double value) @@ -862,9 +860,9 @@ void set_drywet(unsigned short plugin_id, double value) for (unsigned short i=0; iid() == plugin_id) -// return plugin->set_drywet(value, true, false); + CarlaPlugin* plugin = CarlaPlugins[i]; + if (plugin && plugin->id() == plugin_id) + return plugin->set_drywet(value, true, false); } qCritical("set_drywet(%i, %f) - could not find plugin", plugin_id, value); @@ -876,9 +874,9 @@ void set_volume(unsigned short plugin_id, double value) for (unsigned short i=0; iid() == plugin_id) -// return plugin->set_vol(value, true, false); + CarlaPlugin* plugin = CarlaPlugins[i]; + if (plugin && plugin->id() == plugin_id) + return plugin->set_volume(value, true, false); } qCritical("set_vol(%i, %f) - could not find plugin", plugin_id, value); @@ -890,9 +888,9 @@ void set_balance_left(unsigned short plugin_id, double value) for (unsigned short i=0; iid() == plugin_id) -// return plugin->set_balance_left(value, true, false); + CarlaPlugin* plugin = CarlaPlugins[i]; + if (plugin && plugin->id() == plugin_id) + return plugin->set_balance_left(value, true, false); } qCritical("set_balance_left(%i, %f) - could not find plugin", plugin_id, value); @@ -904,9 +902,9 @@ void set_balance_right(unsigned short plugin_id, double value) for (unsigned short i=0; iid() == plugin_id) -// return plugin->set_balance_right(value, true, false); + CarlaPlugin* plugin = CarlaPlugins[i]; + if (plugin && plugin->id() == plugin_id) + return plugin->set_balance_right(value, true, false); } qCritical("set_balance_right(%i, %f) - could not find plugin", plugin_id, value); @@ -1101,7 +1099,7 @@ void set_gui_data(unsigned short plugin_id, int data, intptr_t gui_addr) void show_gui(unsigned short plugin_id, bool yesno) { -// qDebug("show_gui(%i, %s)", plugin_id, bool2str(yesno)); + qDebug("show_gui(%i, %s)", plugin_id, bool2str(yesno)); for (unsigned short i=0; ibank = 0; + info->program = 0; + info->label = nullptr; + //info.bank = plugin->midiprog.data[midi_program_id].bank; + //info.program = plugin->midiprog.data[midi_program_id].program; + //info.label = plugin->midiprog.names[midi_program_id]; + } + + void set_id(short id) + { + m_id = id; + } + + void set_active(bool active, bool osc_send, bool callback_send) + { + m_active = active; + double value = active ? 1.0 : 0.0; + + if (osc_send) + { + //osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_ACTIVE, value); + + //if (hints & PLUGIN_IS_BRIDGE) + // osc_send_control(&osc.data, PARAMETER_ACTIVE, value); + } + + if (callback_send) + callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_ACTIVE, 0, value); + } + + void set_drywet(double value, bool osc_send, bool callback_send) + { + if (value < 0.0) + value = 0.0; + else if (value > 1.0) + value = 1.0; + + x_drywet = value; + + if (osc_send) + { + //osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_DRYWET, value); + + //if (hints & PLUGIN_IS_BRIDGE) + // osc_send_control(&osc.data, PARAMETER_DRYWET, value); + } + + if (callback_send) + callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_DRYWET, 0, value); + } + + void set_volume(double value, bool osc_send, bool callback_send) + { + if (value < 0.0) + value = 0.0; + else if (value > 1.27) + value = 1.27; + + x_vol = value; + + if (osc_send) + { + //osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_VOLUME, value); + + //if (hints & PLUGIN_IS_BRIDGE) + // osc_send_control(&osc.data, PARAMETER_VOLUME, value); + } + + if (callback_send) + callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_VOLUME, 0, value); + } + + void set_balance_left(double value, bool osc_send, bool callback_send) + { + if (value < -1.0) + value = -1.0; + else if (value > 1.0) + value = 1.0; + + x_bal_left = value; + + if (osc_send) + { + //osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_BALANCE_LEFT, value); + + //if (hints & PLUGIN_IS_BRIDGE) + // osc_send_control(&osc.data, PARAMETER_BALANCE_LEFT, value); + } + + if (callback_send) + callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_BALANCE_LEFT, 0, value); + } + + void set_balance_right(double value, bool osc_send, bool callback_send) + { + if (value < -1.0) + value = -1.0; + else if (value > 1.0) + value = 1.0; + + x_bal_right = value; + + if (osc_send) + { + //osc_send_set_parameter_value(&global_osc_data, id, PARAMETER_BALANCE_RIGHT, value); + + //if (hints & PLUGIN_IS_BRIDGE) + // osc_send_control(&osc.data, PARAMETER_BALANCE_RIGHT, value); + } + + if (callback_send) + callback_action(CALLBACK_PARAMETER_CHANGED, m_id, PARAMETER_BALANCE_RIGHT, 0, value); + } + virtual PluginCategory category() = 0; virtual long unique_id() = 0; diff --git a/src/carla_backend.py b/src/carla_backend.py index 34fe60b..37f4a47 100644 --- a/src/carla_backend.py +++ b/src/carla_backend.py @@ -1056,7 +1056,7 @@ class Host(object): return self.lib.set_custom_data(plugin_id, dtype, key, value) def set_chunk_data(self, plugin_id, chunk_data): - self.lib.set_chunk_data(plugin_id, chunk_data) + self.lib.set_chunk_data(plugin_id, chunk_data.encode("utf-8")) def set_gui_data(self, plugin_id, data, gui_addr): self.lib.set_gui_data(plugin_id, data, gui_addr) @@ -1079,7 +1079,7 @@ class Host(object): self.lib.set_callback_function(Callback) def set_option(self, option, value, value_str): - self.lib.set_option(option, value, value_str) + self.lib.set_option(option, value, value_str.encode("utf-8")) def get_last_error(self): return self.lib.get_last_error() diff --git a/src/paramspinbox.py b/src/paramspinbox.py index 6823a06..58d5be4 100644 --- a/src/paramspinbox.py +++ b/src/paramspinbox.py @@ -123,7 +123,7 @@ class ParamProgressBar(QProgressBar): return QProgressBar.mouseReleaseEvent(self, event) def paintEvent(self, event): - self.setFormat(QString("%1 %2 %3").arg(self._pre_label).arg(self._rvalue).arg(self._label)) + self.setFormat("%s %f %s" % (self._pre_label, self._rvalue, self._label)) return QProgressBar.paintEvent(self, event) # Special SpinBox used for parameters diff --git a/src/shared.py b/src/shared.py index f52806e..cecb22b 100644 --- a/src/shared.py +++ b/src/shared.py @@ -179,11 +179,18 @@ def isNumber(string): # Convert a value to a list def toList(value): if value is None: - return [] + return [] elif not isinstance(value, list): - return [value] + return [value] else: - return value + return value + +# Convert a ctypes char_p to a string +def toString(value): + if (value): + return value.decode("utf-8") + else: + return "" # Remove/convert non-ascii chars from a string def unicode2ascii(string):