Preferences, singletons

Create a Preference dialog for fonts and audio output devices

Turn Preferences and SoundOff into singletons.  No matter how many times
you request a new one, the same instance is returned.

Stop using singals on the parent() to access other instances, such as
sound and Preferences.
This commit is contained in:
Christopher T. Johnson
2023-12-22 10:54:27 -05:00
parent c0482b519c
commit 0adf1d6e44
12 changed files with 325 additions and 31 deletions

View File

@@ -46,7 +46,7 @@ class Ui_MainWindow(object):
self.horizontalLayout.addWidget(self.widget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 32))
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 24))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(parent=self.menubar)
self.menuFile.setObjectName("menuFile")
@@ -72,6 +72,8 @@ class Ui_MainWindow(object):
self.actionEditPerson.setObjectName("actionEditPerson")
self.actionRead = QtGui.QAction(parent=MainWindow)
self.actionRead.setObjectName("actionRead")
self.actionPreferences = QtGui.QAction(parent=MainWindow)
self.actionPreferences.setObjectName("actionPreferences")
self.menuFile.addAction(self.actionQuit)
self.menuBooks_2.addAction(self.actionAddBook)
self.menuBooks_2.addAction(self.actionEditBook)
@@ -79,6 +81,7 @@ class Ui_MainWindow(object):
self.menuPeople.addAction(self.actionEditPerson)
self.menuBooks.addAction(self.menuBooks_2.menuAction())
self.menuBooks.addAction(self.menuPeople.menuAction())
self.menuBooks.addAction(self.actionPreferences)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuBooks.menuAction())
@@ -111,3 +114,4 @@ class Ui_MainWindow(object):
self.actionEditPerson.setToolTip(_translate("MainWindow", "Edit A Person"))
self.actionRead.setText(_translate("MainWindow", "Read"))
self.actionRead.setToolTip(_translate("MainWindow", "Read Book"))
self.actionPreferences.setText(_translate("MainWindow", "Preferences"))

View File

@@ -80,7 +80,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>32</height>
<height>24</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -109,6 +109,7 @@
</widget>
<addaction name="menuBooks_2"/>
<addaction name="menuPeople"/>
<addaction name="actionPreferences"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuBooks"/>
@@ -159,6 +160,11 @@
<string>Read Book</string>
</property>
</action>
<action name="actionPreferences">
<property name="text">
<string>Preferences</string>
</property>
</action>
</widget>
<resources/>
<connections>

62
ui/Preferences.py Normal file
View File

@@ -0,0 +1,62 @@
# Form implementation generated from reading ui file 'ui/Preferences.ui'
#
# Created by: PyQt6 UI code generator 6.6.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(601, 265)
self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")
self.formLayout = QtWidgets.QFormLayout()
self.formLayout.setObjectName("formLayout")
self.label = QtWidgets.QLabel(parent=Dialog)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)
self.readerCombo = QtWidgets.QFontComboBox(parent=Dialog)
self.readerCombo.setObjectName("readerCombo")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.readerCombo)
self.label_2 = QtWidgets.QLabel(parent=Dialog)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)
self.phoneticsCombo = QtWidgets.QFontComboBox(parent=Dialog)
self.phoneticsCombo.setObjectName("phoneticsCombo")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.phoneticsCombo)
self.label_3 = QtWidgets.QLabel(parent=Dialog)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_3)
self.alertList = QtWidgets.QListWidget(parent=Dialog)
self.alertList.setObjectName("alertList")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.alertList)
self.label_4 = QtWidgets.QLabel(parent=Dialog)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_4)
self.playerList = QtWidgets.QListWidget(parent=Dialog)
self.playerList.setObjectName("playerList")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.ItemRole.FieldRole, self.playerList)
self.verticalLayout.addLayout(self.formLayout)
self.buttonBox = QtWidgets.QDialogButtonBox(parent=Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout.addWidget(self.buttonBox)
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Reader"))
self.label_2.setText(_translate("Dialog", "Phonetics"))
self.label_3.setText(_translate("Dialog", "Alert Outputs"))
self.label_4.setText(_translate("Dialog", "Player Outputs"))

109
ui/Preferences.ui Normal file
View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>601</width>
<height>265</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Reader</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QFontComboBox" name="readerCombo"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Phonetics</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QFontComboBox" name="phoneticsCombo"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Alert Outputs</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QListWidget" name="alertList"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Player Outputs</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QListWidget" name="playerList">
</widget>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -1,5 +1,5 @@
body {
font-family: "opendyslexic", sans-serif;
font-family: "{readerFont}", sans-serif;
}
hr {
height: 2px;
@@ -18,6 +18,6 @@ p, li {
font-size: 24px;
}
p.phonetic {
font-family: "Gentium", sans-serif;
font-family: "{phoneticFont}", sans-serif;
font-size: 40px;
}

Binary file not shown.