Example #1
0
    def data(self, index, role):
        source_index = self.mapToSource(index)
        source_model = self.sourceModel()
        if not source_index.isValid():
            return QVariant()
        source_data = source_model.data(source_index, role)

        if role == Qt.DisplayRole:
            if index.column() == NetworkTableModel.columns_types.index(
                    'is_member'):
                value = {
                    True: QT_TRANSLATE_NOOP("NetworkTableModel", 'yes'),
                    False: QT_TRANSLATE_NOOP("NetworkTableModel", 'no'),
                    None: QT_TRANSLATE_NOOP("NetworkTableModel", 'offline')
                }
                return value[source_data]

            if index.column() == NetworkTableModel.columns_types.index(
                    'pubkey'):
                return source_data[:5]

            if index.column() == NetworkTableModel.columns_types.index(
                    'current_block'):
                if source_data == -1:
                    return ""
                else:
                    return source_data

            if index.column() == NetworkTableModel.columns_types.index('address') \
                    or index.column() == NetworkTableModel.columns_types.index('port') \
                    or index.column() == NetworkTableModel.columns_types.index('api'):
                return "<p>" + source_data.replace('\n', "<br>") + "</p>"

            if index.column() == NetworkTableModel.columns_types.index(
                    'current_hash'):
                return source_data[:10]

        if role == Qt.TextAlignmentRole:
            if source_index.column() == NetworkTableModel.columns_types.index('address') \
                    or source_index.column() == self.sourceModel().columns_types.index('current_block'):
                return Qt.AlignRight | Qt.AlignVCenter
            if source_index.column() == NetworkTableModel.columns_types.index(
                    'is_member'):
                return Qt.AlignCenter

        if role == Qt.FontRole:
            is_root_col = NetworkTableModel.columns_types.index('is_root')
            index_root_col = source_model.index(source_index.row(),
                                                is_root_col)
            if source_model.data(index_root_col, Qt.DisplayRole):
                font = QFont()
                font.setBold(True)
                return font

        if role == Qt.BackgroundColorRole and self.app.parameters.dark_theme:
            return source_data.darker()

        return source_data
Example #2
0
 def __init__(self, parent=None):
     super().__init__(parent)
     self._data = np.random.randint(0, 100, size=(10, 4))  # type: np.ndarray
     self._columns = [
         QT_TRANSLATE_NOOP("Model", "First"),
         QT_TRANSLATE_NOOP("Model", "Second"),
         QT_TRANSLATE_NOOP("Model", "Third"),
         QT_TRANSLATE_NOOP("Model", "Fourth"),
     ]
Example #3
0
class MainWindow(QMainWindow):
    listEntries = [
        QT_TRANSLATE_NOOP("MainWindow", "First"),
        QT_TRANSLATE_NOOP("MainWindow", "Second"),
        QT_TRANSLATE_NOOP("MainWindow", "Third")
    ]

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.createGroupBox()

        listWidget = QListWidget()

        for le in MainWindow.listEntries:
            listWidget.addItem(self.tr(le))

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.groupBox)
        mainLayout.addWidget(listWidget)
        self.centralWidget.setLayout(mainLayout)

        exitAction = QAction(self.tr("E&xit"),
                             self,
                             triggered=QApplication.instance().quit)

        fileMenu = self.menuBar().addMenu(self.tr("&File"))
        fileMenu.setPalette(QPalette(Qt.red))
        fileMenu.addAction(exitAction)

        self.setWindowTitle(self.tr("Language: %s") % self.tr("English"))
        self.statusBar().showMessage(self.tr("Internationalization Example"))

        if self.tr("LTR") == "RTL":
            self.setLayoutDirection(Qt.RightToLeft)

    def createGroupBox(self):
        self.groupBox = QGroupBox(self.tr("View"))
        perspectiveRadioButton = QRadioButton(self.tr("Perspective"))
        isometricRadioButton = QRadioButton(self.tr("Isometric"))
        obliqueRadioButton = QRadioButton(self.tr("Oblique"))
        perspectiveRadioButton.setChecked(True)

        self.groupBoxLayout = QVBoxLayout()
        self.groupBoxLayout.addWidget(perspectiveRadioButton)
        self.groupBoxLayout.addWidget(isometricRadioButton)
        self.groupBoxLayout.addWidget(obliqueRadioButton)
        self.groupBox.setLayout(self.groupBoxLayout)
Example #4
0
    def data(self, index, role):
        source_index = self.mapToSource(index)
        source_model = self.sourceModel()
        if not source_index.isValid():
            return QVariant()
        source_data = source_model.data(source_index, role)

        if role == Qt.DisplayRole:
            if index.column() == NetworkTableModel.columns_types.index('is_member'):
                value = {True: QT_TRANSLATE_NOOP("NetworkTableModel", 'yes'), False: QT_TRANSLATE_NOOP("NetworkTableModel", 'no'), None: QT_TRANSLATE_NOOP("NetworkTableModel", 'offline')}
                return value[source_data]

            if index.column() == NetworkTableModel.columns_types.index('pubkey'):
                return source_data[:5]

            if index.column() == NetworkTableModel.columns_types.index('current_block'):
                if source_data == -1:
                    return ""
                else:
                    return source_data

            if index.column() == NetworkTableModel.columns_types.index('address') \
                    or index.column() == NetworkTableModel.columns_types.index('port'):
                return "<p>" + source_data.replace('\n', "<br>") + "</p>"

            if index.column() == NetworkTableModel.columns_types.index('current_hash') :
                return source_data[:10]

            if index.column() == NetworkTableModel.columns_types.index('current_time') and source_data:
                return QLocale.toString(
                            QLocale(),
                            QDateTime.fromTime_t(source_data),
                            QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat)
                        )

        if role == Qt.TextAlignmentRole:
            if source_index.column() == NetworkTableModel.columns_types.index('address') or source_index.column() == self.sourceModel().columns_types.index('current_block'):
                return Qt.AlignRight | Qt.AlignVCenter
            if source_index.column() == NetworkTableModel.columns_types.index('is_member'):
                return Qt.AlignCenter

        if role == Qt.FontRole:
            is_root_col = NetworkTableModel.columns_types.index('is_root')
            index_root_col = source_model.index(source_index.row(), is_root_col)
            if source_model.data(index_root_col, Qt.DisplayRole):
                font = QFont()
                font.setBold(True)
                return font

        return source_data
Example #5
0
class General(SettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'General')

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(Qt.AlignTop)

        # Startup layout
        self.layoutGroup = QGroupBox(self)
        self.layoutGroup.setTitle(
            translate('AppGeneralSettings', 'Startup layout'))
        self.layoutGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.layoutGroup)

        self.startupDialogCheck = QCheckBox(self.layoutGroup)
        self.startupDialogCheck.setText(
            translate('AppGeneralSettings', 'Use startup dialog'))
        self.layoutGroup.layout().addWidget(self.startupDialogCheck)

        self.layoutCombo = QComboBox(self.layoutGroup)
        self.layoutCombo.addItems([lay.NAME for lay in layouts.get_layouts()])
        self.layoutGroup.layout().addWidget(self.layoutCombo)

        self.startupDialogCheck.clicked.connect(
            lambda check: self.layoutCombo.setEnabled(not check))

        # Application style
        self.themeGroup = QGroupBox(self)
        self.themeGroup.setTitle(
            translate('AppGeneralSettings', 'Application theme'))
        self.themeGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.themeGroup)

        self.themeCombo = QComboBox(self.themeGroup)
        self.themeCombo.addItems(styles.styles())
        self.themeGroup.layout().addWidget(self.themeCombo)

    def get_settings(self):
        conf = {'Layout': {}, 'Theme': {}}

        if self.startupDialogCheck.isChecked():
            conf['Layout']['default'] = 'NoDefault'
        else:
            conf['Layout']['default'] = self.layoutCombo.currentText()

        conf['Theme']['theme'] = self.themeCombo.currentText()
        styles.apply_style(self.themeCombo.currentText())

        return conf

    def load_settings(self, settings):
        if 'default' in settings['Layout']:
            if settings['Layout']['default'].lower() == 'nodefault':
                self.startupDialogCheck.setChecked(True)
                self.layoutCombo.setEnabled(False)
            else:
                self.layoutCombo.setCurrentText(settings['Layout']['default'])
        if 'theme' in settings['Theme']:
            self.themeCombo.setCurrentText(settings['Theme']['theme'])
Example #6
0
class Equalizer10(GstMediaElement):
    ElementType = ElementType.Plugin
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', '10 Bands Equalizer')

    band0 = GstProperty('equalizer', default=0)
    band1 = GstProperty('equalizer', default=0)
    band2 = GstProperty('equalizer', default=0)
    band3 = GstProperty('equalizer', default=0)
    band4 = GstProperty('equalizer', default=0)
    band5 = GstProperty('equalizer', default=0)
    band6 = GstProperty('equalizer', default=0)
    band7 = GstProperty('equalizer', default=0)
    band8 = GstProperty('equalizer', default=0)
    band9 = GstProperty('equalizer', default=0)

    def __init__(self, pipe):
        super().__init__()

        self.equalizer = Gst.ElementFactory.make("equalizer-10bands", None)
        self.audio_converter = Gst.ElementFactory.make("audioconvert", None)

        pipe.add(self.equalizer)
        pipe.add(self.audio_converter)

        self.equalizer.link(self.audio_converter)

    def sink(self):
        return self.equalizer

    def src(self):
        return self.audio_converter
Example #7
0
class GstSettings(SettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'GStreamer settings')

    def __init__(self, **kwargs):
        super().__init__()
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(Qt.AlignTop)

        self.pipeGroup = QGroupBox(self)
        self.pipeGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.pipeGroup)

        self.pipeEdit = GstPipeEdit([], app_mode=True)
        self.pipeGroup.layout().addWidget(self.pipeEdit)

        self.retranslateUi()

    def retranslateUi(self):
        self.pipeGroup.setTitle(translate('GstSettings', 'Pipeline'))

    def get_settings(self):
        return {'Gst': {'pipeline': ', '.join(self.pipeEdit.get_pipe())}}

    def load_settings(self, settings):
        pipe = tuple(settings['Gst']['pipeline'].replace(' ', '').split(','))
        self.pipeEdit.set_pipe(pipe)
Example #8
0
def sentry_display(identity):
    sentry_text = ""
    sentry_symbol = ""
    if identity.sentry:
        sentry_symbol = "✴ "
        sentry_text = QT_TRANSLATE_NOOP("BaseGraph", "(sentry)") + " "
    return sentry_symbol, sentry_text
Example #9
0
class Speed(GstMediaElement):
    ElementType = ElementType.Plugin
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'Speed')

    speed = Property(default=1.0)

    def __init__(self, pipeline):
        super().__init__()

        self.pipeline = pipeline
        self.scale_tempo = Gst.ElementFactory.make("scaletempo", None)
        self.audio_convert = Gst.ElementFactory.make("audioconvert", None)

        self.pipeline.add(self.scale_tempo)
        self.pipeline.add(self.audio_convert)

        self.scale_tempo.link(self.audio_convert)

        bus = self.pipeline.get_bus()
        bus.add_signal_watch()
        self._handler = bus.connect("message", self.__on_message)

        self._old_speed = self.speed
        self.changed('speed').connect(self.__prepare_speed)

    def __prepare_speed(self, value):
        if self._old_speed != value:
            self._old_speed = value

            if self.pipeline.current_state == Gst.State.PLAYING:
                self.__change_speed()

    def sink(self):
        return self.scale_tempo

    def src(self):
        return self.audio_convert

    def dispose(self):
        bus = self.pipeline.get_bus()
        bus.remove_signal_watch()
        bus.disconnect(self._handler)

    def __on_message(self, bus, message):
        if (message.type == Gst.MessageType.STATE_CHANGED and
                    message.src == self.scale_tempo and
                    message.parse_state_changed()[1] == Gst.State.PLAYING):
            self.__change_speed()

    def __change_speed(self):
        current_position = self.scale_tempo.query_position(Gst.Format.TIME)[1]

        self.scale_tempo.seek(self.speed,
                              Gst.Format.TIME,
                              Gst.SeekFlags.FLUSH | Gst.SeekFlags.ACCURATE,
                              Gst.SeekType.SET,
                              current_position,
                              Gst.SeekType.NONE,
                              0)
Example #10
0
class StopAll(Cue):
    Name = QT_TRANSLATE_NOOP('CueName', 'Stop-All')

    action = Property(default=CueAction.Stop.value)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name = translate('CueName', self.Name)

    def __start__(self, fade=False):
        for cue in Application().cue_model:
            action = self.__adjust_action(cue, CueAction(self.action))
            if action:
                cue.execute(action=action)

        return False

    def __adjust_action(self, cue, action, fade=False):
        if action in cue.CueActions:
            return action
        elif action is CueAction.FadeOutPause:
            return self.__adjust_action(cue, CueAction.Pause, True)
        elif action is CueAction.Pause and fade:
            return self.__adjust_action(cue, CueAction.FadeOutStop)
        elif action is CueAction.FadeOutInterrupt:
            return self.__adjust_action(cue, CueAction.Interrupt)
        elif action is CueAction.FadeOutStop:
            return self.__adjust_action(cue, CueAction.Stop)

        return None
class CollectionCueSettings(SettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'Edit Collection')

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout(self))

        self.cue_dialog = CueSelectDialog(
            cues=Application().cue_model,
            selection_mode=QAbstractItemView.ExtendedSelection)

        self.collectionModel = CollectionModel()
        self.collectionView = CollectionView(self.cue_dialog, parent=self)
        self.collectionView.setModel(self.collectionModel)
        self.collectionView.setAlternatingRowColors(True)
        self.layout().addWidget(self.collectionView)

        # Buttons
        self.dialogButtons = QDialogButtonBox(self)
        self.dialogButtons.setSizePolicy(QSizePolicy.Minimum,
                                         QSizePolicy.Minimum)
        self.layout().addWidget(self.dialogButtons)

        self.addButton = self.dialogButtons.addButton(
            translate('CollectionCue', 'Add'), QDialogButtonBox.ActionRole)
        self.addButton.clicked.connect(self._add_dialog)

        self.delButton = self.dialogButtons.addButton(
            translate('CollectionCue', 'Remove'), QDialogButtonBox.ActionRole)
        self.delButton.clicked.connect(self._remove_selected)

    def load_settings(self, settings):
        for target_id, action in settings.get('targets', []):
            target = Application().cue_model.get(target_id)
            if target is not None:
                self._add_cue(target, CueAction(action))

    def get_settings(self):
        targets = []
        for target_id, action in self.collectionModel.rows:
            targets.append((target_id, action.value))

        return {'targets': targets}

    def _add_cue(self, cue, action):
        self.collectionModel.appendRow(cue.__class__, cue.id, action)
        self.cue_dialog.remove_cue(cue)

    def _add_dialog(self):
        if self.cue_dialog.exec_() == QDialog.Accepted:
            for target in self.cue_dialog.selected_cues():
                self._add_cue(target, target.CueActions[0])

    def _remove_selected(self):
        row = self.collectionView.currentIndex().row()
        cue_id = self.collectionModel.rows[row][0]

        self.collectionModel.removeRow(row)
        self.cue_dialog.add_cue(Application().cue_model.get(cue_id))
Example #12
0
class KeyboardSettings(CueSettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'Keyboard Shortcuts')

    def __init__(self, cue_class, **kwargs):
        super().__init__(cue_class, **kwargs)
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(Qt.AlignTop)

        self.keyGroup = QGroupBox(self)
        self.keyGroup.setLayout(QGridLayout())
        self.layout().addWidget(self.keyGroup)

        self.keyboardModel = SimpleTableModel([
            translate('ControllerKeySettings', 'Key'),
            translate('ControllerKeySettings', 'Action')])

        self.keyboardView = KeyboardView(cue_class, parent=self.keyGroup)
        self.keyboardView.setModel(self.keyboardModel)
        self.keyGroup.layout().addWidget(self.keyboardView, 0, 0, 1, 2)

        self.addButton = QPushButton(self.keyGroup)
        self.addButton.clicked.connect(self.__new_key)
        self.keyGroup.layout().addWidget(self.addButton, 1, 0)

        self.removeButton = QPushButton(self.keyGroup)
        self.removeButton.clicked.connect(self.__remove_key)
        self.keyGroup.layout().addWidget(self.removeButton, 1, 1)

        self.retranslateUi()

    def retranslateUi(self):
        self.keyGroup.setTitle(translate('ControllerKeySettings', 'Shortcuts'))
        self.addButton.setText(translate('ControllerSettings', 'Add'))
        self.removeButton.setText(translate('ControllerSettings', 'Remove'))

    def enable_check(self, enabled):
        self.keyGroup.setCheckable(enabled)
        self.keyGroup.setChecked(False)

    def get_settings(self):
        settings = {}

        if not (self.keyGroup.isCheckable() and not self.keyGroup.isChecked()):
            settings['keyboard'] = self.keyboardModel.rows

        return settings

    def load_settings(self, settings):
        for key, action in settings.get('keyboard', []):
            self.keyboardModel.appendRow(key, action)

    def __new_key(self):
        self.keyboardModel.appendRow('', self._cue_class.CueActions[0].name)

    def __remove_key(self):
        self.keyboardModel.removeRow(self.keyboardView.currentIndex().row())
Example #13
0
    def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
        """
        Right click on node to show node menu
        Except on wallet node

        :param event: scene context menu event
        """
        #  no menu on the wallet node
        if self.status_wallet:
            return None
        # create node context menus
        self.menu = QMenu()
        # action show member
        QT_TRANSLATE_NOOP('WoT.Node', 'Informations')
        self.action_show_member = QAction(
            QCoreApplication.translate('WoT.Node', 'Informations'),
            self.scene())
        self.menu.addAction(self.action_show_member)
        self.action_show_member.triggered.connect(self.member_action)
        # action add identity as contact
        QT_TRANSLATE_NOOP('WoT.Node', 'Add as contact')
        self.action_contact = QAction(
            QCoreApplication.translate('WoT.Node', 'Add as contact'),
            self.scene())
        self.menu.addAction(self.action_contact)
        self.action_contact.triggered.connect(self.contact_action)
        # action transaction toward identity
        QT_TRANSLATE_NOOP('WoT.Node', 'Send money')
        self.action_transaction = QAction(
            QCoreApplication.translate('WoT.Node', 'Send money'), self.scene())
        self.menu.addAction(self.action_transaction)
        self.action_transaction.triggered.connect(self.transaction_action)
        # action sign identity
        QT_TRANSLATE_NOOP('WoT.Node', 'Certify identity')
        self.action_sign = QAction(
            QCoreApplication.translate('WoT.Node', 'Certify identity'),
            self.scene())
        self.menu.addAction(self.action_sign)
        self.action_sign.triggered.connect(self.sign_action)
        # run menu
        self.menu.exec(event.screenPos())
Example #14
0
class AutoSrc(GstSrcElement):
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'System Input')

    def __init__(self, pipe):
        super().__init__()

        self.auto_src = Gst.ElementFactory.make("autoaudiosrc", "src")
        pipe.add(self.auto_src)

    def src(self):
        return self.auto_src
class CueAppSettings(SettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'Cue Settings')

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(Qt.AlignTop)

        # Interrupt
        self.interruptGroup = QGroupBox(self)
        self.interruptGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.interruptGroup)

        self.interruptFadeEdit = FadeEdit(self.interruptGroup)
        self.interruptGroup.layout().addWidget(self.interruptFadeEdit)

        # Action
        self.actionGroup = QGroupBox(self)
        self.actionGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.actionGroup)

        self.fadeActionEdit = FadeEdit(self.actionGroup)
        self.actionGroup.layout().addWidget(self.fadeActionEdit)

        self.retranslateUi()

    def retranslateUi(self):
        self.interruptGroup.setTitle(translate('CueSettings',
                                               'Interrupt Fade'))
        self.actionGroup.setTitle(translate('CueSettings', 'Fade Action'))

    def load_settings(self, settings):
        # Interrupt
        self.interruptFadeEdit.setDuration(
            float(settings['Cue'].get('interruptfade', 0)))
        self.interruptFadeEdit.setFadeType(settings['Cue'].get(
            'interruptfadetype', ''))

        # FadeAction
        self.fadeActionEdit.setDuration(
            float(settings['Cue'].get('fadeactionduration', 0)))
        self.fadeActionEdit.setFadeType(settings['Cue'].get(
            'fadeactiontype', ''))

    def get_settings(self):
        return {
            'Cue': {
                'interruptfade': str(self.interruptFadeEdit.duration()),
                'interruptfadetype': self.interruptFadeEdit.fadeType(),
                'fadeactionduration': str(self.fadeActionEdit.duration()),
                'fadeactiontype': self.fadeActionEdit.fadeType()
            }
        }
Example #16
0
class UriInput(GstSrcElement):
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'URI Input')

    uri = GstProperty('decoder', default='')
    download = GstProperty('decoder', default=False)
    buffer_size = GstProperty('decoder', default=-1, gst_name='buffer-size')
    use_buffering = GstProperty('decoder', default=False,
                                gst_name='use-buffering')
    _mtime = Property(default=-1)

    def __init__(self, pipe):
        super().__init__()

        self.decoder = Gst.ElementFactory.make("uridecodebin", None)
        self.audio_convert = Gst.ElementFactory.make("audioconvert", None)
        self._handler = self.decoder.connect("pad-added", self.__on_pad_added)

        pipe.add(self.decoder)
        pipe.add(self.audio_convert)

        self.changed('uri').connect(self.__uri_changed)

    def input_uri(self):
        return self.uri

    def dispose(self):
        self.decoder.disconnect(self._handler)

    def src(self):
        return self.audio_convert

    def __on_pad_added(self, *args):
        self.decoder.link(self.audio_convert)

    def __uri_changed(self, value):
        # Save the current mtime (file flag for last-change time)
        mtime = self._mtime
        # If the uri is a file, then update the current mtime
        if value.split('://')[0] == 'file':
            if path.exists(value.split('//')[1]):
                self._mtime = path.getmtime(value.split('//')[1])
        else:
            mtime = None

        # If something is changed or the duration is invalid
        if mtime != self._mtime or self.duration < 0:
            self.__duration()

    @async_in_pool(pool=ThreadPoolExecutor(1))
    def __duration(self):
        self.duration = gst_uri_duration(self.uri)
Example #17
0
class AutoSink(GstMediaElement):
    ElementType = ElementType.Output
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'System Out')

    def __init__(self, pipe):
        super().__init__()

        self.auto_sink = Gst.ElementFactory.make('autoaudiosink', 'sink')
        pipe.add(self.auto_sink)

    def sink(self):
        return self.auto_sink
Example #18
0
File: view.py Project: florck/sakia
class ToolbarView(QFrame, Ui_SakiaToolbar):
    """
    The model of Navigation component
    """
    _action_revoke_uid_text = QT_TRANSLATE_NOOP("ToolbarView", "Publish a revocation document")

    def __init__(self, parent):
        super().__init__(parent)
        self.setupUi(self)

        tool_menu = QMenu(self.tr("Tools"), self.toolbutton_menu)
        self.toolbutton_menu.setMenu(tool_menu)

        self.action_add_connection = QAction(self.tr("Add a connection"), tool_menu)
        tool_menu.addAction(self.action_add_connection)

        self.action_revoke_uid = QAction(self.tr(ToolbarView._action_revoke_uid_text), self)
        tool_menu.addAction(self.action_revoke_uid)

        self.action_parameters = QAction(self.tr("Settings"), tool_menu)
        tool_menu.addAction(self.action_parameters)

        self.action_plugins = QAction(self.tr("Plugins manager"), tool_menu)
        tool_menu.addAction(self.action_plugins)

        self.action_about = QAction(self.tr("About"), tool_menu)
        tool_menu.addAction(self.action_about)

        self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum)
        self.setMaximumHeight(60)

    async def ask_for_connection(self, connections):
        connections_titles = [c.title() for c in connections]
        input_dialog = QInputDialog()
        input_dialog.setComboBoxItems(connections_titles)
        input_dialog.setWindowTitle(self.tr("Membership"))
        input_dialog.setLabelText(self.tr("Select a connection"))
        await dialog_async_exec(input_dialog)
        result = input_dialog.textValue()

        if input_dialog.result() == QDialog.Accepted:
            for c in connections:
                if c.title() == result:
                    return c

    def show_about(self, text):
        dialog = QDialog(self)
        about_dialog = Ui_AboutPopup()
        about_dialog.setupUi(dialog)
        about_dialog.label.setText(text)
        dialog.exec()
Example #19
0
class MediaCueAppSettings(SettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'MediaCue Settings')

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(Qt.AlignTop)

        self.group = QGroupBox(self)
        self.group.setLayout(QGridLayout())
        self.layout().addWidget(self.group)

        # Fade Duration
        self.fadeDurationSpin = QDoubleSpinBox(self.group)
        self.fadeDurationSpin.setRange(0, 3600)
        self.group.layout().addWidget(self.fadeDurationSpin, 0, 0)

        self.fadeDurationLabel = QLabel(self.group)
        self.fadeDurationLabel.setAlignment(Qt.AlignCenter)
        self.group.layout().addWidget(self.fadeDurationLabel, 0, 1)

        # Fade Type
        self.fadeTypeCombo = FadeComboBox(self.group)
        self.group.layout().addWidget(self.fadeTypeCombo, 1, 0)

        self.fadeTypeLabel = QLabel(self.group)
        self.fadeTypeLabel.setAlignment(Qt.AlignCenter)
        self.group.layout().addWidget(self.fadeTypeLabel, 1, 1)

        self.retranslateUi()

    def retranslateUi(self):
        self.group.setTitle(
            translate('MediaCueSettings', 'Interrupt settings'))
        self.fadeDurationLabel.setText(
            translate('MediaCueSettings', 'Interrupt fade duration'))
        self.fadeTypeLabel.setText(
            translate('MediaCueSettings', 'Interrupt fade type'))

    def load_settings(self, settings):
        self.fadeDurationSpin.setValue(
            float(settings['MediaCue'].get('interruptfade', 0)))
        self.fadeTypeCombo.setCurrentType(
            settings['MediaCue'].get('interruptfadetype', ''))

    def get_settings(self):
        return {'MediaCue': {
            'interruptfade': str(self.fadeDurationSpin.value()),
            'interruptfadetype': self.fadeTypeCombo.currentType()
        }}
Example #20
0
class DbMeter(GstMediaElement):
    ElementType = ElementType.Plugin
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'dB Meter')

    interval = GstProperty('level', default=50 * Gst.MSECOND)
    peak_ttl = GstProperty('level', default=Gst.SECOND, gst_name='peak-ttl')
    peak_falloff = GstProperty('level', default=20, gst_name='peak-falloff')

    def __init__(self, pipeline):
        super().__init__()

        self.level_ready = Signal()

        self.pipeline = pipeline
        self.level = Gst.ElementFactory.make('level', None)
        self.level.set_property('post-messages', True)
        self.level.set_property('interval', 50 * Gst.MSECOND)
        self.level.set_property('peak-ttl', Gst.SECOND)
        self.level.set_property('peak-falloff', 20)
        self.audio_convert = Gst.ElementFactory.make('audioconvert', None)

        self.pipeline.add(self.level)
        self.pipeline.add(self.audio_convert)

        self.level.link(self.audio_convert)

        bus = self.pipeline.get_bus()
        bus.add_signal_watch()
        self._handler = bus.connect('message::element', self.__on_message)

    def dispose(self):
        bus = self.pipeline.get_bus()
        bus.remove_signal_watch()
        bus.disconnect(self._handler)

    def sink(self):
        return self.level

    def src(self):
        return self.audio_convert

    def __on_message(self, bus, message):
        if message.src == self.level:
            structure = message.get_structure()
            if structure is not None and structure.has_name('level'):
                self.level_ready.emit(structure.get_value('peak'),
                                      structure.get_value('rms'),
                                      structure.get_value('decay'))
Example #21
0
class PulseSink(GstMediaElement):
    ElementType = ElementType.Output
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'PulseAudio Out')

    def __init__(self, pipe):
        super().__init__()

        self.pulse_sink = Gst.ElementFactory.make('pulsesink', 'sink')
        self.pulse_sink.set_property('client-name', 'Linux Show Player')

        pipe.add(self.pulse_sink)

    def sink(self):
        return self.pulse_sink
Example #22
0
class AlsaSink(GstMediaElement):
    ElementType = ElementType.Output
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'ALSA Out')

    device = GstProperty('alsa_sink', default='')

    def __init__(self, pipe):
        super().__init__()

        self.alsa_sink = Gst.ElementFactory.make('alsasink', 'sink')
        pipe.add(self.alsa_sink)

    def sink(self):
        return self.alsa_sink
class Status(dict):
    Keys = ('demo', 'pass', 'owned', 'ordered', 'bidding', 'sold', 'sale',
            'wish', 'missing')
    Titles = (
        QT_TRANSLATE_NOOP("Status", "Demo"),
        QT_TRANSLATE_NOOP("Status", "Pass"),
        QT_TRANSLATE_NOOP("Status", "Owned"),
        QT_TRANSLATE_NOOP("Status", "Ordered"),
        QT_TRANSLATE_NOOP("Status", "Bidding"),
        QT_TRANSLATE_NOOP("Status", "Sold"),
        QT_TRANSLATE_NOOP("Status", "Sale"),
        QT_TRANSLATE_NOOP("Status", "Wish"),
        QT_TRANSLATE_NOOP("Status", "Missing"),
    )

    def __init__(self):
        for key, value in zip(self.Keys, self.Titles):
            dict.__setitem__(self, key, value)

    def keys(self):
        return self.Keys

    def items(self):
        result = []
        for key in self.Keys:
            result.append((key, self.__getitem__(key)))
        return result

    def values(self):
        result = []
        for key in self.Keys:
            result.append(self.__getitem__(key))
        return result

    def __getitem__(self, key):
        try:
            value = dict.__getitem__(self, key)
            return QApplication.translate("Status", value)
        except KeyError:
            return ''
class CollectionCue(Cue):
    Name = QT_TRANSLATE_NOOP('CueName', 'Collection Cue')

    targets = Property(default=[])

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name = translate('CueName', self.Name)

    def __start__(self, fade=False):
        for target_id, action in self.targets:
            cue = Application().cue_model.get(target_id)
            if cue is not self:
                cue.execute(action=CueAction[action])

        return False
Example #25
0
class SeekCue(Cue):
    Name = QT_TRANSLATE_NOOP('CueName', 'Seek Cue')

    target_id = Property()
    time = Property(default=-1)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name = translate('CueName', self.Name)

    def __start__(self, fade=False):
        cue = Application().cue_model.get(self.target_id)
        if isinstance(cue, MediaCue) and self.time >= 0:
            cue.media.seek(self.time)

        return False
Example #26
0
class MidiCue(Cue):
    Name = QT_TRANSLATE_NOOP('CueName', 'MIDI Cue')

    message = Property(default='')

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name = translate('CueName', self.Name)

        midi_out = MIDIOutput()
        if not midi_out.is_open():
            midi_out.open()

    def __start__(self, fade=False):
        if self.message:
            MIDIOutput().send_from_str(self.message)

        return False
Example #27
0
class StopAllSettings(SettingsPage):
    Name = QT_TRANSLATE_NOOP('SettingsPageName', 'Stop Settings')

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(Qt.AlignTop)

        self.group = QGroupBox(self)
        self.group.setLayout(QVBoxLayout(self.group))
        self.layout().addWidget(self.group)

        self.actionCombo = QComboBox(self.group)
        for action in [
                CueAction.Stop, CueAction.FadeOutStop, CueAction.Pause,
                CueAction.FadeOutPause, CueAction.Interrupt,
                CueAction.FadeOutInterrupt
        ]:
            self.actionCombo.addItem(translate('CueAction', action.name),
                                     action.value)
        self.group.layout().addWidget(self.actionCombo)

        self.retranslateUi()

    def retranslateUi(self):
        self.group.setTitle(translate('StopAll', 'Stop Action'))

    def enable_check(self, enabled):
        self.group.setCheckable(enabled)
        self.group.setChecked(False)

    def get_settings(self):
        conf = {}

        if not (self.group.isCheckable() and not self.group.isChecked()):
            conf['action'] = self.actionCombo.currentData()

        return conf

    def load_settings(self, settings):
        self.actionCombo.setCurrentText(
            translate('CueAction', settings.get('action', '')))
Example #28
0
class Volume(GstMediaElement):
    ElementType = ElementType.Plugin
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'Volume')

    mute = GstProperty('gst_volume', default=False)
    volume = GstProperty('gst_volume', default=1.0)
    normal_volume = GstProperty('gst_normal_volume',
                                default=1.0,
                                gst_name='volume')

    current_mute = GstRuntimeProperty('gst_volume', 'mute')
    current_volume = GstRuntimeProperty('gst_volume', 'volume')

    def __init__(self, pipe):
        super().__init__()

        self.gst_volume = Gst.ElementFactory.make("volume", None)
        self.gst_normal_volume = Gst.ElementFactory.make("volume", None)
        self.audio_convert = Gst.ElementFactory.make("audioconvert", None)

        pipe.add(self.gst_normal_volume)
        pipe.add(self.gst_volume)
        pipe.add(self.audio_convert)

        self.gst_volume.link(self.gst_normal_volume)
        self.gst_normal_volume.link(self.audio_convert)

    def sink(self):
        return self.gst_volume

    def src(self):
        return self.audio_convert

    def stop(self):
        self.current_mute = self.mute
        self.current_volume = self.volume

    def interrupt(self):
        self.stop()
Example #29
0
class AudioPan(GstMediaElement):
    ElementType = ElementType.Plugin
    MediaType = MediaType.Audio
    Name = QT_TRANSLATE_NOOP('MediaElementName', 'Audio Pan')

    pan = GstProperty('panorama', default=.0, gst_name='panorama')

    def __init__(self, pipe):
        super().__init__()

        self.panorama = Gst.ElementFactory.make("audiopanorama", None)
        self.audio_convert = Gst.ElementFactory.make("audioconvert", None)

        pipe.add(self.panorama)
        pipe.add(self.audio_convert)

        self.panorama.link(self.audio_convert)

    def sink(self):
        return self.panorama

    def src(self):
        return self.audio_convert
class IndexActionCue(Cue):
    Name = QT_TRANSLATE_NOOP('CueName', 'Index Action')

    target_index = Property(default=-1)
    relative = Property(default=True)
    action = Property(default=CueAction.Stop.value)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.name = translate('CueName', self.Name)

    def __start__(self, fade=False):
        if self.relative:
            index = self.index + self.target_index
        else:
            index = self.target_index

        try:
            cue = Application().layout.model_adapter.item(index)
            if cue is not self:
                cue.execute(CueAction(self.action))
        except IndexError:
            pass