diff --git a/gui/gui.py b/gui/gui.py
index dcb8e8c..9ce7ff3 100644
--- a/gui/gui.py
+++ b/gui/gui.py
@@ -202,6 +202,96 @@ class Ui_MainWindow(object):
self.content.addWidget(self.download_page)
self.settings_page = QtWidgets.QWidget()
self.settings_page.setObjectName("settings_page")
+ self.settings_page_lay = QtWidgets.QVBoxLayout(self.settings_page)
+ self.settings_page_lay.setContentsMargins(0, 0, 0, 0)
+ self.settings_page_lay.setObjectName("settings_page_lay")
+ self.settings_tabs_widget = QtWidgets.QTabWidget(self.settings_page)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.settings_tabs_widget.sizePolicy().hasHeightForWidth())
+ self.settings_tabs_widget.setSizePolicy(sizePolicy)
+ self.settings_tabs_widget.setObjectName("settings_tabs_widget")
+ self.audio_devices_settings_tab = QtWidgets.QWidget()
+ self.audio_devices_settings_tab.setObjectName("audio_devices_settings_tab")
+ self.audio_devices_settings_tab_lay = QtWidgets.QVBoxLayout(self.audio_devices_settings_tab)
+ self.audio_devices_settings_tab_lay.setContentsMargins(0, 0, 0, 0)
+ self.audio_devices_settings_tab_lay.setObjectName("audio_devices_settings_tab_lay")
+ self.play_options_group = QtWidgets.QGroupBox(self.audio_devices_settings_tab)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.play_options_group.sizePolicy().hasHeightForWidth())
+ self.play_options_group.setSizePolicy(sizePolicy)
+ self.play_options_group.setObjectName("play_options_group")
+ self.play_options_group_lay = QtWidgets.QVBoxLayout(self.play_options_group)
+ self.play_options_group_lay.setContentsMargins(-1, 5, -1, -1)
+ self.play_options_group_lay.setObjectName("play_options_group_lay")
+ self.output_device_play_label = QtWidgets.QLabel(self.play_options_group)
+ self.output_device_play_label.setObjectName("output_device_play_label")
+ self.play_options_group_lay.addWidget(self.output_device_play_label)
+ self.output_device_play_box = QtWidgets.QComboBox(self.play_options_group)
+ self.output_device_play_box.setMinimumSize(QtCore.QSize(0, 30))
+ self.output_device_play_box.setObjectName("output_device_play_box")
+ self.play_options_group_lay.addWidget(self.output_device_play_box)
+ self.preview_device_play_label = QtWidgets.QLabel(self.play_options_group)
+ self.preview_device_play_label.setObjectName("preview_device_play_label")
+ self.play_options_group_lay.addWidget(self.preview_device_play_label)
+ self.preview_device_play_box = QtWidgets.QComboBox(self.play_options_group)
+ self.preview_device_play_box.setMinimumSize(QtCore.QSize(0, 30))
+ self.preview_device_play_box.setObjectName("preview_device_play_box")
+ self.play_options_group_lay.addWidget(self.preview_device_play_box)
+ self.audio_devices_settings_tab_lay.addWidget(self.play_options_group, 0, QtCore.Qt.AlignTop)
+ self.restream_options_group = QtWidgets.QGroupBox(self.audio_devices_settings_tab)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.restream_options_group.sizePolicy().hasHeightForWidth())
+ self.restream_options_group.setSizePolicy(sizePolicy)
+ self.restream_options_group.setObjectName("restream_options_group")
+ self.verticalLayout = QtWidgets.QVBoxLayout(self.restream_options_group)
+ self.verticalLayout.setContentsMargins(-1, 5, -1, -1)
+ self.verticalLayout.setObjectName("verticalLayout")
+ self.restream_micro_checkbox = QtWidgets.QCheckBox(self.restream_options_group)
+ self.restream_micro_checkbox.setObjectName("restream_micro_checkbox")
+ self.verticalLayout.addWidget(self.restream_micro_checkbox)
+ self.input_device_restream_label = QtWidgets.QLabel(self.restream_options_group)
+ self.input_device_restream_label.setObjectName("input_device_restream_label")
+ self.verticalLayout.addWidget(self.input_device_restream_label)
+ self.input_device_restream_box = QtWidgets.QComboBox(self.restream_options_group)
+ self.input_device_restream_box.setMinimumSize(QtCore.QSize(0, 30))
+ self.input_device_restream_box.setObjectName("input_device_restream_box")
+ self.verticalLayout.addWidget(self.input_device_restream_box)
+ self.output_device_restream_label = QtWidgets.QLabel(self.restream_options_group)
+ self.output_device_restream_label.setObjectName("output_device_restream_label")
+ self.verticalLayout.addWidget(self.output_device_restream_label)
+ self.output_device_restream_box = QtWidgets.QComboBox(self.restream_options_group)
+ self.output_device_restream_box.setMinimumSize(QtCore.QSize(0, 30))
+ self.output_device_restream_box.setObjectName("output_device_restream_box")
+ self.verticalLayout.addWidget(self.output_device_restream_box)
+ self.audio_devices_settings_tab_lay.addWidget(self.restream_options_group, 0, QtCore.Qt.AlignTop)
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+ self.audio_devices_settings_tab_lay.addItem(spacerItem)
+ self.settings_tabs_widget.addTab(self.audio_devices_settings_tab, "")
+ self.general_settings_tab = QtWidgets.QWidget()
+ self.general_settings_tab.setObjectName("general_settings_tab")
+ self.general_settings_tab_lay = QtWidgets.QVBoxLayout(self.general_settings_tab)
+ self.general_settings_tab_lay.setContentsMargins(3, 3, 3, 3)
+ self.general_settings_tab_lay.setObjectName("general_settings_tab_lay")
+ self.theme_label = QtWidgets.QLabel(self.general_settings_tab)
+ self.theme_label.setObjectName("theme_label")
+ self.general_settings_tab_lay.addWidget(self.theme_label)
+ self.theme_box = QtWidgets.QComboBox(self.general_settings_tab)
+ self.theme_box.setMinimumSize(QtCore.QSize(0, 30))
+ self.theme_box.setObjectName("theme_box")
+ self.theme_box.addItem("")
+ self.theme_box.addItem("")
+ self.theme_box.addItem("")
+ self.general_settings_tab_lay.addWidget(self.theme_box)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+ self.general_settings_tab_lay.addItem(spacerItem1)
+ self.settings_tabs_widget.addTab(self.general_settings_tab, "")
+ self.settings_page_lay.addWidget(self.settings_tabs_widget)
self.content.addWidget(self.settings_page)
self.main_content_to_player_box_lay.addWidget(self.content)
self.player_box = QtWidgets.QWidget(self.main_content_to_player_box)
@@ -259,6 +349,7 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.menu.setCurrentRow(-1)
self.pads_content.setCurrentIndex(0)
+ self.settings_tabs_widget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
@@ -289,6 +380,19 @@ class Ui_MainWindow(object):
self.edit_first_pads_collection_label.setText(_translate("MainWindow", "Pads collection 1"))
self.edit_second_pads_collection_label.setText(_translate("MainWindow", "Pads collection 2"))
self.pads_content.setTabText(self.pads_content.indexOf(self.edit_pads_tab), _translate("MainWindow", "Edit pads"))
+ self.play_options_group.setTitle(_translate("MainWindow", "Play options"))
+ self.output_device_play_label.setText(_translate("MainWindow", "Output device (or virtual mic input)"))
+ self.preview_device_play_label.setText(_translate("MainWindow", "Preview device (your headphones)"))
+ self.restream_options_group.setTitle(_translate("MainWindow", "Microphone restream options"))
+ self.restream_micro_checkbox.setText(_translate("MainWindow", "Restream microphone"))
+ self.input_device_restream_label.setText(_translate("MainWindow", "Input microphone"))
+ self.output_device_restream_label.setText(_translate("MainWindow", "Output device (virtual mic input)"))
+ self.settings_tabs_widget.setTabText(self.settings_tabs_widget.indexOf(self.audio_devices_settings_tab), _translate("MainWindow", "Audio"))
+ self.theme_label.setText(_translate("MainWindow", " App theme (restart needed)"))
+ self.theme_box.setItemText(0, _translate("MainWindow", "Dark gray"))
+ self.theme_box.setItemText(1, _translate("MainWindow", "Black"))
+ self.theme_box.setItemText(2, _translate("MainWindow", "Black acrylic"))
+ self.settings_tabs_widget.setTabText(self.settings_tabs_widget.indexOf(self.general_settings_tab), _translate("MainWindow", "General"))
import gui.images_rc
diff --git a/gui/gui.ui b/gui/gui.ui
index ac5ec18..92aaa96 100644
--- a/gui/gui.ui
+++ b/gui/gui.ui
@@ -697,7 +697,242 @@ QListWidget:item:selected {
-
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+
+ Audio
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Play options
+
+
+
+ 5
+
+
-
+
+
+ Output device (or virtual mic input)
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+
+ -
+
+
+ Preview device (your headphones)
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Microphone restream options
+
+
+
+ 5
+
+
-
+
+
+ Restream microphone
+
+
+
+ -
+
+
+ Input microphone
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+
+ -
+
+
+ Output device (virtual mic input)
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+ General
+
+
+
+ 3
+
+
+ 3
+
+
+ 3
+
+
+ 3
+
+ -
+
+
+ App theme (restart needed)
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
-
+
+ Dark gray
+
+
+ -
+
+ Black
+
+
+ -
+
+ Black acrylic
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
-
@@ -806,13 +1041,6 @@ QListWidget:item:selected {
- -
-
-
-
-
-
-
diff --git a/gui/modules/handlers/register.py b/gui/modules/handlers/register.py
index aff8dce..52d50d7 100644
--- a/gui/modules/handlers/register.py
+++ b/gui/modules/handlers/register.py
@@ -3,6 +3,7 @@ from PyQt5.QtWidgets import QMainWindow
from gui.modules import menu
from gui.modules import pads
from gui.modules import player
+from gui.modules import settings
from modules.player.player import Player
@@ -17,3 +18,4 @@ def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
menu.register_handlers(ui)
pads.register_handlers(ui, MainWindow, p)
player.register_handlers(ui, MainWindow, p)
+ settings.register_handlers(ui)
diff --git a/gui/modules/initialize/setup_ui.py b/gui/modules/initialize/setup_ui.py
index 5f546cf..dae1209 100644
--- a/gui/modules/initialize/setup_ui.py
+++ b/gui/modules/initialize/setup_ui.py
@@ -16,6 +16,7 @@ def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
:return:
"""
ui.content.setCurrentIndex(0)
+ ui.volume_box.setValue(Config.get().volume)
MainWindow.setStyleSheet(styles.centralwidget())
ui.menu.setStyleSheet(styles.menupage())
diff --git a/gui/modules/pads/fill_pads_from_settings.py b/gui/modules/pads/fill_pads_from_settings.py
index 582c879..5b42e57 100644
--- a/gui/modules/pads/fill_pads_from_settings.py
+++ b/gui/modules/pads/fill_pads_from_settings.py
@@ -24,13 +24,13 @@ def fill_pads(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
button = QtWidgets.QPushButton()
button.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Expanding))
- button.setText(os.path.split(item)[-1][:24:] if os.path.exists(item) else "File doesn't exist")
+ button.setText(os.path.split(item)[-1][:24:])
button.clicked.connect(
(
lambda: (
p.set_media(ui.first_pads_dict[MainWindow.sender().text()]),
p.play(ui)
- ) if MainWindow.sender().text() != "File doesn't exist" else None
+ )
)
)
Pads.update("first_pads", ui.first_pads_dict)
@@ -50,13 +50,13 @@ def fill_pads(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
button = QtWidgets.QPushButton()
button.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Expanding))
- button.setText(os.path.split(item)[-1][:24:] if os.path.exists(item) else "File doesn't exist")
+ button.setText(os.path.split(item)[-1][:24:])
button.clicked.connect(
(
lambda: (
p.set_media(ui.second_pads_dict[MainWindow.sender().text()]),
p.play(ui)
- ) if MainWindow.sender().text() != "File doesn't exist" else None
+ )
)
)
Pads.update("second_pads", ui.second_pads_dict)
diff --git a/gui/modules/player/handlers.py b/gui/modules/player/handlers.py
index 84707de..af0e9af 100644
--- a/gui/modules/player/handlers.py
+++ b/gui/modules/player/handlers.py
@@ -2,6 +2,7 @@ from gui.gui import Ui_MainWindow
from PyQt5 import QtGui
from PyQt5.QtWidgets import QMainWindow
from modules.player.player import Player
+from modules.config import Config
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
@@ -19,7 +20,8 @@ def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
pause_icon = QtGui.QIcon()
pause_icon.addPixmap(QtGui.QPixmap(":/img/img/pause.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
- ui.volume_box.valueChanged.connect(lambda: p.set_volume(ui.volume_box.value()))
+ ui.volume_box.valueChanged.connect(lambda: (p.set_volume(ui.volume_box.value()),
+ Config.update('volume', ui.volume_box.value())))
ui.play_pause_button.clicked.connect(lambda: p.playpause(ui))
ui.timer.timeout.connect(lambda: (ui.player_time_slider.setValue(p.get_position()),
ui.play_pause_button.setIcon(play_icon) if not p.mediaplayer_out.is_playing()
diff --git a/gui/modules/restreammic/__init__.py b/gui/modules/restreammic/__init__.py
new file mode 100644
index 0000000..d7ed779
--- /dev/null
+++ b/gui/modules/restreammic/__init__.py
@@ -0,0 +1 @@
+from .handlers import *
diff --git a/gui/modules/restreammic/handlers.py b/gui/modules/restreammic/handlers.py
new file mode 100644
index 0000000..e69de29
diff --git a/gui/modules/settings/__init__.py b/gui/modules/settings/__init__.py
new file mode 100644
index 0000000..d7ed779
--- /dev/null
+++ b/gui/modules/settings/__init__.py
@@ -0,0 +1 @@
+from .handlers import *
diff --git a/gui/modules/settings/handlers.py b/gui/modules/settings/handlers.py
new file mode 100644
index 0000000..204ad53
--- /dev/null
+++ b/gui/modules/settings/handlers.py
@@ -0,0 +1,14 @@
+from gui.gui import Ui_MainWindow
+from modules.config import Config
+
+
+def register_handlers(ui: Ui_MainWindow):
+ """
+ Register this module handlers
+ :param ui:
+ :return:
+ """
+
+ ui.theme_box.setCurrentText(Config.get().theme)
+
+ ui.theme_box.currentTextChanged.connect(lambda: Config.update("theme", ui.theme_box.currentText()))
diff --git a/modules/config/model.py b/modules/config/model.py
index 9337379..8d3f9d0 100644
--- a/modules/config/model.py
+++ b/modules/config/model.py
@@ -6,3 +6,4 @@ from dataclasses_json import dataclass_json
@dataclass(frozen=True)
class ConfigModel:
theme: str
+ volume: int
diff --git a/modules/config/settings.py b/modules/config/settings.py
index ecfab38..9b897df 100644
--- a/modules/config/settings.py
+++ b/modules/config/settings.py
@@ -7,7 +7,8 @@ class Config:
@staticmethod
def default():
return {
- "theme": "Dark gray"
+ "theme": "Dark gray",
+ "volume": 100
}
@staticmethod
diff --git a/modules/player/player.py b/modules/player/player.py
index f3c1cb8..4205ebf 100644
--- a/modules/player/player.py
+++ b/modules/player/player.py
@@ -68,3 +68,6 @@ class Player(object):
def set_position(self, pos: float):
self.mediaplayer_preview.set_position(pos)
self.mediaplayer_out.set_position(pos)
+
+ def update_devices(self):
+ pass
diff --git a/requirements.txt b/requirements.txt
index 7b1f91d..093ce34 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,4 +6,5 @@ dataclasses-json
requests
python-vlc
sounddevice
-numpy
\ No newline at end of file
+numpy
+validators
\ No newline at end of file