class SampleConfigEditor(QWidget, ProcessorUpdater): def __init__(self): super().__init__() self._sample_size = KqtComboBox() self._sample_count = QSpinBox() self._sample_count.setRange(1, 128) self._range_min = SamplePitchRangeMinEditor() self._range_max = SamplePitchRangeMaxEditor() self._centre_pitch = SampleCentrePitchEditor() self.add_to_updaters(self._range_min, self._range_max, self._centre_pitch) h = QHBoxLayout() h.setContentsMargins(0, 0, 0, 0) h.setSpacing(2) h.addWidget(QLabel('Sample size:')) h.addWidget(self._sample_size) h.addWidget(QLabel('Sample count:')) h.addWidget(self._sample_count) h.addWidget(QLabel('Pitch range:')) h.addWidget(self._range_min) h.addWidget(self._range_max) h.addWidget(QLabel('Centre pitch:')) h.addWidget(self._centre_pitch) self.setLayout(h) def _on_setup(self): self.register_action('signal_au', self._update_sample_params) self.register_action(self._get_update_signal_type(), self._update_sample_params) self.register_action('signal_style_changed', self._update_style) for sample_length in self._get_params().get_allowed_sample_lengths(): self._sample_size.addItem(str(sample_length), userData=sample_length) self._sample_size.currentIndexChanged.connect(self._change_sample_size) self._sample_count.valueChanged.connect(self._change_sample_count) self._update_style() self._update_sample_params() def _get_update_signal_type(self): return 'signal_padsynth_{}'.format(self._proc_id) def _get_params(self): return utils.get_proc_params(self._ui_model, self._au_id, self._proc_id) def _update_style(self): style_mgr = self._ui_model.get_style_manager() self.layout().setSpacing( style_mgr.get_scaled_size_param('small_padding')) def _update_sample_params(self): params = self._get_params() old_block = self._sample_size.blockSignals(True) new_sample_size = params.get_sample_length() if (self._sample_size.itemData(self._sample_size.currentIndex()) != new_sample_size): self._sample_size.setCurrentIndex( self._sample_size.findData(new_sample_size)) self._sample_size.blockSignals(old_block) old_block = self._sample_count.blockSignals(True) new_sample_count = params.get_sample_count() if self._sample_count.value() != new_sample_count: self._sample_count.setValue(new_sample_count) self._sample_count.blockSignals(old_block) def _change_sample_size(self, index): sample_size = self._sample_size.itemData(index) self._get_params().set_sample_length(sample_size) self._updater.signal_update(self._get_update_signal_type()) def _change_sample_count(self, count): params = self._get_params() params.set_sample_count(count) self._updater.signal_update(self._get_update_signal_type())
class SampleConfigEditor(QWidget): def __init__(self): super().__init__() self._au_id = None self._proc_id = None self._ui_model = None self._updater = None self._sample_size = KqtComboBox() self._sample_count = QSpinBox() self._sample_count.setRange(1, 128) self._range_min = SamplePitchRangeMinEditor() self._range_max = SamplePitchRangeMaxEditor() self._centre_pitch = SampleCentrePitchEditor() h = QHBoxLayout() h.setContentsMargins(0, 0, 0, 0) h.setSpacing(2) h.addWidget(QLabel('Sample size:')) h.addWidget(self._sample_size) h.addWidget(QLabel('Sample count:')) h.addWidget(self._sample_count) h.addWidget(QLabel('Pitch range:')) h.addWidget(self._range_min) h.addWidget(self._range_max) h.addWidget(QLabel('Centre pitch:')) h.addWidget(self._centre_pitch) self.setLayout(h) def set_au_id(self, au_id): self._au_id = au_id self._range_min.set_au_id(au_id) self._range_max.set_au_id(au_id) self._centre_pitch.set_au_id(au_id) def set_proc_id(self, proc_id): self._proc_id = proc_id self._range_min.set_proc_id(proc_id) self._range_max.set_proc_id(proc_id) self._centre_pitch.set_proc_id(proc_id) def set_ui_model(self, ui_model): self._ui_model = ui_model self._updater = ui_model.get_updater() self._updater.register_updater(self._perform_updates) self._range_min.set_ui_model(ui_model) self._range_max.set_ui_model(ui_model) self._centre_pitch.set_ui_model(ui_model) for sample_length in self._get_params().get_allowed_sample_lengths(): self._sample_size.addItem(str(sample_length), userData=sample_length) QObject.connect( self._sample_size, SIGNAL('currentIndexChanged(int)'), self._change_sample_size) QObject.connect( self._sample_count, SIGNAL('valueChanged(int)'), self._change_sample_count) self._update_sample_params() def unregister_updaters(self): self._centre_pitch.unregister_updaters() self._range_max.unregister_updaters() self._range_min.unregister_updaters() self._updater.unregister_updater(self._perform_updates) def _get_update_signal_type(self): return 'signal_padsynth_{}'.format(self._proc_id) def _perform_updates(self, signals): update_signals = set(['signal_au', self._get_update_signal_type()]) if not signals.isdisjoint(update_signals): self._update_sample_params() def _get_params(self): return utils.get_proc_params(self._ui_model, self._au_id, self._proc_id) def _update_sample_params(self): params = self._get_params() old_block = self._sample_size.blockSignals(True) new_sample_size = params.get_sample_length() if (self._sample_size.itemData(self._sample_size.currentIndex()) != new_sample_size): self._sample_size.setCurrentIndex( self._sample_size.findData(new_sample_size)) self._sample_size.blockSignals(old_block) old_block = self._sample_count.blockSignals(True) new_sample_count = params.get_sample_count() if self._sample_count.value() != new_sample_count: self._sample_count.setValue(new_sample_count) self._sample_count.blockSignals(old_block) def _change_sample_size(self, index): sample_size = self._sample_size.itemData(index) self._get_params().set_sample_length(sample_size) self._updater.signal_update(set([self._get_update_signal_type()])) def _change_sample_count(self, count): params = self._get_params() params.set_sample_count(count) self._updater.signal_update(set([self._get_update_signal_type()]))