コード例 #1
0
ファイル: editor.py プロジェクト: EdwardBetts/kunquat
class Editor(QWidget):

    def __init__(self):
        super().__init__()
        self._au_id = None
        self._proc_id = None
        self._ui_model = None
        self._updater = None
        self._control_manager = None
        self._proc_editor = None

        self._signals = Signals()
        self._info_editor = InfoEditor()

        self._keyboard_mapper = KeyboardMapper()

        v = QVBoxLayout()
        v.setContentsMargins(4, 4, 4, 4)
        v.setSpacing(5)
        self.setLayout(v)

    def set_au_id(self, au_id):
        self._au_id = au_id
        self._signals.set_au_id(au_id)
        self._info_editor.set_au_id(au_id)

    def set_proc_id(self, proc_id):
        self._proc_id = proc_id
        self._signals.set_proc_id(proc_id)
        self._info_editor.set_proc_id(proc_id)

    def set_ui_model(self, ui_model):
        assert self._au_id != None
        assert self._proc_id != None
        self._ui_model = ui_model
        self._updater = ui_model.get_updater()
        self._control_manager = ui_model.get_control_manager()
        self._signals.set_ui_model(ui_model)
        self._info_editor.set_ui_model(ui_model)
        self._keyboard_mapper.set_ui_model(ui_model)
        self._updater.register_updater(self._perform_updates)

        # Get the processor type
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        proc = au.get_processor(self._proc_id)
        proctype = proc.get_type()

        # Create the type-specific editor
        cons = proctypeinfo.get_class(proctype)
        self._proc_editor = cons()
        self._proc_editor.set_au_id(self._au_id)
        self._proc_editor.set_proc_id(self._proc_id)
        self._proc_editor.set_ui_model(self._ui_model)

        # Set up tab view
        tabs = QTabWidget()
        tabs.addTab(self._proc_editor, self._proc_editor.get_name())
        tabs.addTab(self._signals, 'Signal Types')
        tabs.addTab(self._info_editor, 'Info')
        self.layout().addWidget(tabs)

    def unregister_updaters(self):
        self._updater.unregister_updater(self._perform_updates)
        self._keyboard_mapper.unregister_updaters()
        self._proc_editor.unregister_updaters()
        self._info_editor.unregister_updaters()
        self._signals.unregister_updaters()

    def _perform_updates(self, signals):
        pass

    def keyPressEvent(self, event):
        # TODO: This plays the complete audio unit,
        #       change after adding processor jamming support
        module = self._ui_model.get_module()
        control_id = module.get_control_id_by_au_id(self._au_id)
        if not control_id:
            return

        self._control_manager.set_control_id_override(control_id)
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
        self._control_manager.set_control_id_override(None)

    def keyReleaseEvent(self, event):
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
コード例 #2
0
ファイル: editor.py プロジェクト: EdwardBetts/kunquat
class Editor(QWidget):
    def __init__(self):
        super().__init__()
        self._au_id = None
        self._proc_id = None
        self._ui_model = None
        self._updater = None
        self._control_manager = None
        self._proc_editor = None

        self._signals = Signals()
        self._info_editor = InfoEditor()

        self._keyboard_mapper = KeyboardMapper()

        v = QVBoxLayout()
        v.setContentsMargins(4, 4, 4, 4)
        v.setSpacing(5)
        self.setLayout(v)

    def set_au_id(self, au_id):
        self._au_id = au_id
        self._signals.set_au_id(au_id)
        self._info_editor.set_au_id(au_id)

    def set_proc_id(self, proc_id):
        self._proc_id = proc_id
        self._signals.set_proc_id(proc_id)
        self._info_editor.set_proc_id(proc_id)

    def set_ui_model(self, ui_model):
        assert self._au_id != None
        assert self._proc_id != None
        self._ui_model = ui_model
        self._updater = ui_model.get_updater()
        self._control_manager = ui_model.get_control_manager()
        self._signals.set_ui_model(ui_model)
        self._info_editor.set_ui_model(ui_model)
        self._keyboard_mapper.set_ui_model(ui_model)
        self._updater.register_updater(self._perform_updates)

        # Get the processor type
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        proc = au.get_processor(self._proc_id)
        proctype = proc.get_type()

        # Create the type-specific editor
        cons = proctypeinfo.get_class(proctype)
        self._proc_editor = cons()
        self._proc_editor.set_au_id(self._au_id)
        self._proc_editor.set_proc_id(self._proc_id)
        self._proc_editor.set_ui_model(self._ui_model)

        # Set up tab view
        tabs = QTabWidget()
        tabs.addTab(self._proc_editor, self._proc_editor.get_name())
        tabs.addTab(self._signals, 'Signal Types')
        tabs.addTab(self._info_editor, 'Info')
        self.layout().addWidget(tabs)

    def unregister_updaters(self):
        self._updater.unregister_updater(self._perform_updates)
        self._keyboard_mapper.unregister_updaters()
        self._proc_editor.unregister_updaters()
        self._info_editor.unregister_updaters()
        self._signals.unregister_updaters()

    def _perform_updates(self, signals):
        pass

    def keyPressEvent(self, event):
        # TODO: This plays the complete audio unit,
        #       change after adding processor jamming support
        module = self._ui_model.get_module()
        control_id = module.get_control_id_by_au_id(self._au_id)
        if not control_id:
            return

        self._control_manager.set_control_id_override(control_id)
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
        self._control_manager.set_control_id_override(None)

    def keyReleaseEvent(self, event):
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
コード例 #3
0
class Editor(QWidget):

    def __init__(self):
        super().__init__()
        self._au_id = None
        self._proc_id = None
        self._ui_model = None
        self._updater = None
        self._control_manager = None
        self._proc_editor = None

        self._signals = Signals()
        self._info_editor = InfoEditor()

        self._keyboard_mapper = KeyboardMapper()

        self._test_output = QCheckBox('Test output')

        v = QVBoxLayout()
        v.setContentsMargins(4, 4, 4, 4)
        v.setSpacing(5)
        v.addWidget(self._test_output)
        self.setLayout(v)

    def set_au_id(self, au_id):
        self._au_id = au_id
        self._signals.set_au_id(au_id)
        self._info_editor.set_au_id(au_id)

    def set_proc_id(self, proc_id):
        self._proc_id = proc_id
        self._signals.set_proc_id(proc_id)
        self._info_editor.set_proc_id(proc_id)

    def set_ui_model(self, ui_model):
        assert self._au_id != None
        assert self._proc_id != None
        self._ui_model = ui_model
        self._updater = ui_model.get_updater()
        self._control_manager = ui_model.get_control_manager()
        self._signals.set_ui_model(ui_model)
        self._info_editor.set_ui_model(ui_model)
        self._keyboard_mapper.set_ui_model(ui_model)
        self._updater.register_updater(self._perform_updates)

        # Get the processor type
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        proc = au.get_processor(self._proc_id)
        proctype = proc.get_type()

        # Create the type-specific editor
        cons = proctypeinfo.get_class(proctype)
        self._proc_editor = cons()
        self._proc_editor.set_au_id(self._au_id)
        self._proc_editor.set_proc_id(self._proc_id)
        self._proc_editor.set_ui_model(self._ui_model)

        # Set up tab view
        tabs = QTabWidget()
        tabs.addTab(self._proc_editor, self._proc_editor.get_name())
        tabs.addTab(self._signals, 'Signal Types')
        tabs.addTab(self._info_editor, 'Info')
        self.layout().addWidget(tabs)

        # Test output toggle
        QObject.connect(
                self._test_output,
                SIGNAL('stateChanged(int)'),
                self._change_test_output_state)
        self._update_test_toggle()

    def unregister_updaters(self):
        self._updater.unregister_updater(self._perform_updates)
        self._keyboard_mapper.unregister_updaters()
        self._proc_editor.unregister_updaters()
        self._info_editor.unregister_updaters()
        self._signals.unregister_updaters()

    def _perform_updates(self, signals):
        update_signals = set([
            'signal_proc_test_output_{}'.format(self._proc_id),
            'signal_proc_signals_{}'.format(self._proc_id),
            ])
        if not signals.isdisjoint(update_signals):
            self._update_test_toggle()

    def _is_processor_testable(self):
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        proc = au.get_processor(self._proc_id)

        return proc.get_existence() and (proc.get_signal_type() == 'voice')

    def _update_test_toggle(self):
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        proc = au.get_processor(self._proc_id)

        if not proc.get_existence():
            return

        old_block = self._test_output.blockSignals(True)
        if self._is_processor_testable():
            self._test_output.setEnabled(True)
            enabled = self._control_manager.is_processor_testing_enabled(self._proc_id)
            self._test_output.setCheckState(Qt.Checked if enabled else Qt.Unchecked)
        else:
            self._test_output.setCheckState(Qt.Unchecked)
            self._test_output.setEnabled(False)
        self._test_output.blockSignals(old_block)

    def _change_test_output_state(self, state):
        enabled = (state == Qt.Checked)
        self._control_manager.set_processor_testing_enabled(self._proc_id, enabled)
        self._updater.signal_update(
                set(['signal_proc_test_output{}'.format(self._proc_id)]))

    def keyPressEvent(self, event):
        module = self._ui_model.get_module()
        control_id = module.get_control_id_by_au_id(self._au_id)
        if not control_id:
            return

        use_test_output = (self._is_processor_testable() and
            self._control_manager.is_processor_testing_enabled(self._proc_id))

        self._control_manager.set_control_id_override(control_id)
        if use_test_output:
            self._control_manager.set_test_processor(control_id, self._proc_id)
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
        self._control_manager.set_test_processor(control_id, None)
        self._control_manager.set_control_id_override(None)

    def keyReleaseEvent(self, event):
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
コード例 #4
0
class Editor(QWidget):

    def __init__(self):
        super().__init__()
        self._ui_model = None
        self._au_id = None
        self._control_manager = None

        self._test_panel = TestPanel()
        self._tabs = QTabWidget()

        self._components = Components()
        self._hits = Hits()
        self._expressions = Expressions()
        self._ports = Ports()
        self._info_editor = InfoEditor()

        self._keyboard_mapper = KeyboardMapper()

    def set_au_id(self, au_id):
        self._au_id = au_id
        self._test_panel.set_au_id(au_id)
        self._components.set_au_id(au_id)
        self._hits.set_au_id(au_id)
        self._expressions.set_au_id(au_id)
        self._ports.set_au_id(au_id)
        self._info_editor.set_au_id(au_id)

    def set_ui_model(self, ui_model):
        self._ui_model = ui_model
        self._control_manager = ui_model.get_control_manager()
        self._test_panel.set_ui_model(ui_model)
        self._components.set_ui_model(ui_model)
        self._hits.set_ui_model(ui_model)
        self._expressions.set_ui_model(ui_model)
        self._ports.set_ui_model(ui_model)
        self._info_editor.set_ui_model(ui_model)
        self._keyboard_mapper.set_ui_model(ui_model)

        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)

        self._tabs.addTab(self._components, 'Components')
        if au.is_instrument():
            self._tabs.addTab(self._hits, 'Hits')
            self._tabs.addTab(self._expressions, 'Expressions')
        self._tabs.addTab(self._ports, 'Ports')
        self._tabs.addTab(self._info_editor, 'Info')

        v = QVBoxLayout()
        v.setContentsMargins(4, 4, 4, 4)
        v.setSpacing(4)
        if au.is_instrument():
            v.addWidget(self._test_panel)
        v.addWidget(self._tabs)
        self.setLayout(v)

    def unregister_updaters(self):
        self._keyboard_mapper.unregister_updaters()
        self._info_editor.unregister_updaters()
        self._ports.unregister_updaters()
        self._expressions.unregister_updaters()
        self._hits.unregister_updaters()
        self._components.unregister_updaters()
        self._test_panel.unregister_updaters()

    def keyPressEvent(self, event):
        module = self._ui_model.get_module()
        control_id = module.get_control_id_by_au_id(self._au_id)
        if not control_id:
            return

        au = module.get_audio_unit(self._au_id)

        self._control_manager.set_control_id_override(control_id)
        au.set_test_params_enabled(True)
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
        self._control_manager.set_control_id_override(None)
        au.set_test_params_enabled(False)

    def keyReleaseEvent(self, event):
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
コード例 #5
0
class Editor(QWidget):

    def __init__(self):
        super().__init__()
        self._ui_model = None
        self._au_id = None
        self._control_manager = None

        self._test_panel = TestPanel()
        self._tabs = QTabWidget()

        self._components = Components()
        self._hits = Hits()
        self._expressions = Expressions()
        self._ports = Ports()
        self._info_editor = InfoEditor()

        self._keyboard_mapper = KeyboardMapper()

    def set_au_id(self, au_id):
        self._au_id = au_id
        self._test_panel.set_au_id(au_id)
        self._components.set_au_id(au_id)
        self._hits.set_au_id(au_id)
        self._expressions.set_au_id(au_id)
        self._ports.set_au_id(au_id)
        self._info_editor.set_au_id(au_id)

    def set_ui_model(self, ui_model):
        self._ui_model = ui_model
        self._control_manager = ui_model.get_control_manager()
        self._test_panel.set_ui_model(ui_model)
        self._components.set_ui_model(ui_model)
        self._hits.set_ui_model(ui_model)
        self._expressions.set_ui_model(ui_model)
        self._ports.set_ui_model(ui_model)
        self._info_editor.set_ui_model(ui_model)
        self._keyboard_mapper.set_ui_model(ui_model)

        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)

        self._tabs.addTab(self._components, 'Components')
        if au.is_instrument():
            self._tabs.addTab(self._hits, 'Hits')
            self._tabs.addTab(self._expressions, 'Expressions')
        self._tabs.addTab(self._ports, 'Ports')
        self._tabs.addTab(self._info_editor, 'Info')

        v = QVBoxLayout()
        v.setContentsMargins(4, 4, 4, 4)
        v.setSpacing(4)
        if au.is_instrument():
            v.addWidget(self._test_panel)
        v.addWidget(self._tabs)
        self.setLayout(v)

    def unregister_updaters(self):
        self._keyboard_mapper.unregister_updaters()
        self._info_editor.unregister_updaters()
        self._ports.unregister_updaters()
        self._expressions.unregister_updaters()
        self._hits.unregister_updaters()
        self._components.unregister_updaters()
        self._test_panel.unregister_updaters()

    def keyPressEvent(self, event):
        module = self._ui_model.get_module()
        control_id = module.get_control_id_by_au_id(self._au_id)
        if not control_id:
            return

        au = module.get_audio_unit(self._au_id)

        self._control_manager.set_control_id_override(control_id)
        au.set_test_expressions_enabled(True)
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()
        self._control_manager.set_control_id_override(None)
        au.set_test_expressions_enabled(False)

    def keyReleaseEvent(self, event):
        if not self._keyboard_mapper.process_typewriter_button_event(event):
            event.ignore()