-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAudioOutputNotFoundDialog.py
More file actions
98 lines (73 loc) · 3.53 KB
/
AudioOutputNotFoundDialog.py
File metadata and controls
98 lines (73 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
AudioOutputNotFoundDialog.py
MIT License (c) Faure Systems <dev at faure dot systems>
Dialog to configure plugin parameters.
"""
import os
import codecs
import configparser
from PyQt5.QtCore import Qt, pyqtSlot
from PyQt5.QtMultimedia import QAudioDeviceInfo, QAudio
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QSizePolicy
from PyQt5.QtWidgets import QDialog, QComboBox, QPushButton, QGroupBox, QLabel
from PyQt5.QtGui import QIcon
class AudioOutputNotFoundDialog(QDialog):
# __________________________________________________________________
def __init__(self, settings, logger):
super(AudioOutputNotFoundDialog, self).__init__()
self._logger = logger
self._settings = settings
self._currentOutput = None
if 'output' in self._settings['parameters']:
self._currentOutput = self._settings['parameters']['output']
self.setAttribute(Qt.WA_AlwaysStackOnTop)
self.setAttribute(Qt.WA_DeleteOnClose)
self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint | Qt.WindowStaysOnTopHint)
self.setWindowTitle(self.tr("Settings"))
self.setWindowIcon(QIcon('./wave.svg'))
self.buildUi()
# __________________________________________________________________
def buildUi(self):
main_layout = QVBoxLayout()
main_layout.setSpacing(12)
warning_label = QLabel()
warning_label.setText(self.tr("<i>Hardware configuration has changed ") +
self.tr("or Windows Update has modified audio devices</i>"))
warning_label.setStyleSheet("color:slategray")
warning_label.setWordWrap(True)
main_layout.addWidget(QLabel(self.tr("<b>Audio output not found:</b>")))
main_layout.addWidget(warning_label)
main_layout.addSpacing(12)
main_layout.addWidget(QLabel(self.tr("<b>Please select new output:</b>")))
param_box = QGroupBox(self.tr("Audio output"))
param_box_layout = QVBoxLayout(param_box)
main_layout.addWidget(param_box)
self._audioOutputSelector = QComboBox()
self._audioOutputSelector.currentTextChanged.connect(self.onAudioOutputSelection)
param_box_layout.addWidget(self._audioOutputSelector)
info_default = QAudioDeviceInfo.defaultOutputDevice()
self._audioOutputSelector.addItem(info_default.deviceName())
output_devices = []
for info in QAudioDeviceInfo.availableDevices(QAudio.AudioOutput):
if info.deviceName() not in output_devices:
self._audioOutputSelector.addItem(info.deviceName())
output_devices.append(info.deviceName())
if self._currentOutput is not None:
current = self._audioOutputSelector.findText(self._currentOutput)
if current >= 0:
self._audioOutputSelector.setCurrentIndex(current)
apply_button = QPushButton(self.tr("Apply"))
apply_button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
button_layout = QHBoxLayout()
button_layout.addStretch()
button_layout.addWidget(apply_button)
main_layout.addLayout(button_layout)
self.setLayout(main_layout)
apply_button.pressed.connect(self.accept)
# __________________________________________________________________
@pyqtSlot(str)
def onAudioOutputSelection(self, s):
self._logger.info(self.tr("Settings : set output device to {}".format(s)))
self._settings['parameters']['output'] = s