コード例 #1
0
ファイル: expressions.py プロジェクト: datamail321/kunquat
class DefaultNoteExpr(QWidget, AudioUnitUpdater):
    def __init__(self):
        super().__init__()
        self._expr_names = KqtComboBox()

        h = QHBoxLayout()
        h.setContentsMargins(0, 0, 0, 0)
        h.setSpacing(4)
        h.addWidget(QLabel('Default note expression:'))
        h.addWidget(self._expr_names, 1)
        self.setLayout(h)

    def _on_setup(self):
        self.register_action(self._get_list_update_signal_type(),
                             self._update_contents)
        self.register_action(self._get_default_update_signal_type(),
                             self._update_contents)

        self._expr_names.currentIndexChanged.connect(self._change_expression)

        self._update_contents()

    def _get_list_update_signal_type(self):
        return 'signal_expr_list_{}'.format(self._au_id)

    def _get_default_update_signal_type(self):
        return 'signal_expr_default_{}'.format(self._au_id)

    def _get_audio_unit(self):
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        return au

    def _update_contents(self):
        au = self._get_audio_unit()
        names = sorted(au.get_expression_names())
        selection = au.get_default_note_expression()

        old_block = self._expr_names.blockSignals(True)
        self._expr_names.setEnabled(len(names) > 0)
        self._expr_names.set_items(chain(['(none)'], (name for name in names)))
        try:
            self._expr_names.setCurrentIndex(names.index(selection) + 1)
        except ValueError:
            self._expr_names.setCurrentIndex(0)
        self._expr_names.blockSignals(old_block)

    def _change_expression(self, item_index):
        au = self._get_audio_unit()
        if item_index == 0:
            au.set_default_note_expression('')
        else:
            expr_name = self._expr_names.itemText(item_index)
            au.set_default_note_expression(expr_name)
コード例 #2
0
class DefaultNoteExpr(QWidget):

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

        self._expr_names = KqtComboBox()

        h = QHBoxLayout()
        h.setContentsMargins(0, 0, 0, 0)
        h.setSpacing(4)
        h.addWidget(QLabel('Default note expression:'))
        h.addWidget(self._expr_names, 1)
        self.setLayout(h)

    def set_au_id(self, au_id):
        self._au_id = au_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)

        QObject.connect(
                self._expr_names,
                SIGNAL('currentIndexChanged(int)'),
                self._change_expression)

        self._update_contents()

    def unregister_updaters(self):
        self._updater.unregister_updater(self._perform_updates)

    def _get_list_update_signal_type(self):
        return 'signal_expr_list_{}'.format(self._au_id)

    def _get_default_update_signal_type(self):
        return 'signal_expr_default_{}'.format(self._au_id)

    def _perform_updates(self, signals):
        update_signals = set([
            self._get_list_update_signal_type(), self._get_default_update_signal_type()])
        if not signals.isdisjoint(update_signals):
            self._update_contents()

    def _get_audio_unit(self):
        module = self._ui_model.get_module()
        au = module.get_audio_unit(self._au_id)
        return au

    def _update_contents(self):
        au = self._get_audio_unit()
        names = sorted(au.get_expression_names())
        selection = au.get_default_note_expression()

        old_block = self._expr_names.blockSignals(True)
        self._expr_names.setEnabled(len(names) > 0)
        self._expr_names.set_items(chain(['(none)'], (name for name in names)))
        try:
            self._expr_names.setCurrentIndex(names.index(selection) + 1)
        except ValueError:
            self._expr_names.setCurrentIndex(0)
        self._expr_names.blockSignals(old_block)

    def _change_expression(self, item_index):
        au = self._get_audio_unit()
        if item_index == 0:
            au.set_default_note_expression('')
        else:
            expr_name = self._expr_names.itemText(item_index)
            au.set_default_note_expression(expr_name)