class WaveformEditor(QWidget, ProcessorUpdater): def __init__(self): super().__init__() self._prewarp_list = WarpList('pre', self._get_base_wave, self._get_update_signal_type) self._base_func_selector = KqtComboBox() self._postwarp_list = WarpList('post', self._get_base_wave, self._get_update_signal_type) self._waveform = Waveform() pw_layout = QVBoxLayout() pw_layout.setSpacing(0) pw_layout.addWidget(self._prewarp_list) pw_layout.addWidget(self._base_func_selector) pw_layout.addWidget(self._postwarp_list) ed_layout = QHBoxLayout() ed_layout.setSpacing(0) ed_layout.addLayout(pw_layout) ed_layout.addWidget(self._waveform) v = QVBoxLayout() v.setContentsMargins(0, 0, 0, 0) v.setSpacing(2) v.addWidget(HeaderLine('Waveshaping')) v.addLayout(ed_layout) self.setLayout(v) def _on_setup(self): self.add_to_updaters(self._prewarp_list, self._postwarp_list) self.register_action('signal_au', self._update_all) self.register_action(self._get_update_signal_type(), self._update_all) self.register_action('signal_style_changed', self._update_style) self._update_style() self._update_all() self._base_func_selector.currentIndexChanged.connect( self._base_func_selected) def _update_style(self): style_mgr = self._ui_model.get_style_manager() if not style_mgr.is_custom_style_enabled(): self._waveform.set_config({}) return def get_colour(name): return QColor(style_mgr.get_style_param(name)) disabled_colour = QColor(get_colour('bg_colour')) disabled_colour.setAlpha(0x7f) config = { 'bg_colour': get_colour('waveform_bg_colour'), 'centre_line_colour': get_colour('waveform_centre_line_colour'), 'waveform_colour': get_colour('waveform_zoomed_out_colour'), 'disabled_colour': disabled_colour, } self._waveform.set_config(config) def _update_all(self): base_wave = self._get_base_wave() selected_base_func = base_wave.get_waveform_func() enable_warps = (selected_base_func != None) self._prewarp_list.setEnabled(enable_warps) old_block = self._base_func_selector.blockSignals(True) func_names = list(base_wave.get_waveform_func_names()) if not selected_base_func: func_names.append('Custom') self._base_func_selector.set_items(func_names) self._base_func_selector.setCurrentIndex( self._base_func_selector.findText(selected_base_func or 'Custom')) self._base_func_selector.blockSignals(old_block) self._postwarp_list.setEnabled(enable_warps) self._waveform.set_waveform(base_wave.get_waveform()) def _base_func_selected(self, index): base_wave = self._get_base_wave() func_names = base_wave.get_waveform_func_names() base_wave.set_waveform_func(func_names[index]) self._updater.signal_update(self._get_update_signal_type()) # Protected interface def _get_base_wave(self): raise NotImplementedError def _get_update_signal_type(self): raise NotImplementedError
class WaveformEditor(QWidget): def __init__(self): super().__init__() self._au_id = None self._proc_id = None self._ui_model = None self._updater = None self._prewarp_list = WarpList( 'pre', self._get_base_wave, self._get_update_signal_type) self._base_func_selector = KqtComboBox() self._postwarp_list = WarpList( 'post', self._get_base_wave, self._get_update_signal_type) self._waveform = Waveform() pw_layout = QVBoxLayout() pw_layout.setSpacing(0) pw_layout.addWidget(self._prewarp_list) pw_layout.addWidget(self._base_func_selector) pw_layout.addWidget(self._postwarp_list) ed_layout = QHBoxLayout() ed_layout.setSpacing(0) ed_layout.addLayout(pw_layout) ed_layout.addWidget(self._waveform) v = QVBoxLayout() v.setContentsMargins(0, 0, 0, 0) v.setSpacing(2) v.addWidget(HeaderLine('Waveshaping')) v.addLayout(ed_layout) self.setLayout(v) def set_au_id(self, au_id): self._au_id = au_id self._prewarp_list.set_au_id(au_id) self._postwarp_list.set_au_id(au_id) def set_proc_id(self, proc_id): self._proc_id = proc_id self._prewarp_list.set_proc_id(proc_id) self._postwarp_list.set_proc_id(proc_id) def set_ui_model(self, ui_model): self._ui_model = ui_model self._prewarp_list.set_ui_model(ui_model) self._postwarp_list.set_ui_model(ui_model) self._updater = ui_model.get_updater() self._updater.register_updater(self._perform_updates) self._update_style() self._update_all() QObject.connect( self._base_func_selector, SIGNAL('currentIndexChanged(int)'), self._base_func_selected) def unregister_updaters(self): self._updater.unregister_updater(self._perform_updates) self._prewarp_list.unregister_updaters() self._postwarp_list.unregister_updaters() def _perform_updates(self, signals): update_signals = set(['signal_au', self._get_update_signal_type()]) if not signals.isdisjoint(update_signals): self._update_all() if 'signal_style_changed' in signals: self._update_style() def _update_style(self): style_manager = self._ui_model.get_style_manager() if not style_manager.is_custom_style_enabled(): self._waveform.set_config({}) return def get_colour(name): return QColor(style_manager.get_style_param(name)) disabled_colour = QColor(get_colour('bg_colour')) disabled_colour.setAlpha(0x7f) config = { 'bg_colour': get_colour('waveform_bg_colour'), 'centre_line_colour': get_colour('waveform_centre_line_colour'), 'waveform_colour': get_colour('waveform_zoomed_out_colour'), 'disabled_colour': disabled_colour, } self._waveform.set_config(config) def _update_all(self): base_wave = self._get_base_wave() selected_base_func = base_wave.get_waveform_func() enable_warps = (selected_base_func != None) self._prewarp_list.setEnabled(enable_warps) old_block = self._base_func_selector.blockSignals(True) func_names = list(base_wave.get_waveform_func_names()) if not selected_base_func: func_names.append('Custom') self._base_func_selector.set_items(func_names) self._base_func_selector.setCurrentIndex( self._base_func_selector.findText(selected_base_func or 'Custom')) self._base_func_selector.blockSignals(old_block) self._postwarp_list.setEnabled(enable_warps) self._waveform.set_waveform(base_wave.get_waveform()) def _base_func_selected(self, index): base_wave = self._get_base_wave() func_names = base_wave.get_waveform_func_names() base_wave.set_waveform_func(func_names[index]) self._updater.signal_update(set([self._get_update_signal_type()])) # Protected interface def _get_base_wave(self): raise NotImplementedError def _get_update_signal_type(self): raise NotImplementedError
class WaveformEditor(QWidget, ProcessorUpdater): def __init__(self): super().__init__() self._prewarp_list = WarpList( 'pre', self._get_base_wave, self._get_update_signal_type) self._base_func_selector = KqtComboBox() self._postwarp_list = WarpList( 'post', self._get_base_wave, self._get_update_signal_type) self._waveform = Waveform() pw_layout = QVBoxLayout() pw_layout.setSpacing(0) pw_layout.addWidget(self._prewarp_list) pw_layout.addWidget(self._base_func_selector) pw_layout.addWidget(self._postwarp_list) ed_layout = QHBoxLayout() ed_layout.setSpacing(0) ed_layout.addLayout(pw_layout) ed_layout.addWidget(self._waveform) self._header = HeaderLine('Waveshaping') v = QVBoxLayout() v.setContentsMargins(0, 0, 0, 0) v.setSpacing(2) v.addWidget(self._header) v.addLayout(ed_layout) self.setLayout(v) def _on_setup(self): self.add_to_updaters(self._prewarp_list, self._postwarp_list) self.register_action('signal_au', self._update_all) self.register_action(self._get_update_signal_type(), self._update_all) self.register_action('signal_style_changed', self._update_style) self._update_style() self._update_all() self._base_func_selector.currentIndexChanged.connect(self._base_func_selected) def _update_style(self): style_mgr = self._ui_model.get_style_manager() self._header.update_style(style_mgr) self.layout().setSpacing(style_mgr.get_scaled_size_param('small_padding')) def get_colour(name): return QColor(style_mgr.get_style_param(name)) disabled_colour = QColor(get_colour('bg_colour')) disabled_colour.setAlpha(0x7f) config = { 'bg_colour': get_colour('waveform_bg_colour'), 'centre_line_colour': get_colour('waveform_centre_line_colour'), 'waveform_colour': get_colour('waveform_zoomed_out_colour'), 'disabled_colour': disabled_colour, 'line_thickness' : style_mgr.get_scaled_size(0.1), } self._waveform.set_config(config) def _update_all(self): base_wave = self._get_base_wave() selected_base_func = base_wave.get_waveform_func() enable_warps = (selected_base_func != None) self._prewarp_list.setEnabled(enable_warps) old_block = self._base_func_selector.blockSignals(True) func_names = list(base_wave.get_waveform_func_names()) if not selected_base_func: func_names.append('Custom') self._base_func_selector.set_items(func_names) self._base_func_selector.setCurrentIndex( self._base_func_selector.findText(selected_base_func or 'Custom')) self._base_func_selector.blockSignals(old_block) self._postwarp_list.setEnabled(enable_warps) self._waveform.set_waveform(base_wave.get_waveform()) def _base_func_selected(self, index): base_wave = self._get_base_wave() func_names = base_wave.get_waveform_func_names() base_wave.set_waveform_func(func_names[index]) self._updater.signal_update(self._get_update_signal_type()) # Protected interface def _get_base_wave(self): raise NotImplementedError def _get_update_signal_type(self): raise NotImplementedError