Now plays files to default audio and CABLE!
TODO: Show urls in buttons
This commit is contained in:
53
gui/gui.py
53
gui/gui.py
@@ -204,6 +204,59 @@ class Ui_MainWindow(object):
|
||||
self.settings_page.setObjectName("settings_page")
|
||||
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)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.player_box.sizePolicy().hasHeightForWidth())
|
||||
self.player_box.setSizePolicy(sizePolicy)
|
||||
self.player_box.setObjectName("player_box")
|
||||
self.player_box_lay = QtWidgets.QVBoxLayout(self.player_box)
|
||||
self.player_box_lay.setContentsMargins(0, 0, 0, 0)
|
||||
self.player_box_lay.setObjectName("player_box_lay")
|
||||
self.player_slider_horizontal_box = QtWidgets.QWidget(self.player_box)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.player_slider_horizontal_box.sizePolicy().hasHeightForWidth())
|
||||
self.player_slider_horizontal_box.setSizePolicy(sizePolicy)
|
||||
self.player_slider_horizontal_box.setObjectName("player_slider_horizontal_box")
|
||||
self.player_slider_horizontal_lay = QtWidgets.QHBoxLayout(self.player_slider_horizontal_box)
|
||||
self.player_slider_horizontal_lay.setContentsMargins(0, 0, 0, 0)
|
||||
self.player_slider_horizontal_lay.setObjectName("player_slider_horizontal_lay")
|
||||
self.play_pause_button = QtWidgets.QPushButton(self.player_slider_horizontal_box)
|
||||
self.play_pause_button.setMinimumSize(QtCore.QSize(40, 40))
|
||||
self.play_pause_button.setStyleSheet("")
|
||||
self.play_pause_button.setText("")
|
||||
icon9 = QtGui.QIcon()
|
||||
icon9.addPixmap(QtGui.QPixmap(":/img/img/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.play_pause_button.setIcon(icon9)
|
||||
self.play_pause_button.setIconSize(QtCore.QSize(32, 32))
|
||||
self.play_pause_button.setObjectName("play_pause_button")
|
||||
self.player_slider_horizontal_lay.addWidget(self.play_pause_button)
|
||||
self.player_time_slider = QtWidgets.QSlider(self.player_slider_horizontal_box)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.player_time_slider.sizePolicy().hasHeightForWidth())
|
||||
self.player_time_slider.setSizePolicy(sizePolicy)
|
||||
self.player_time_slider.setPageStep(1)
|
||||
self.player_time_slider.setProperty("value", 0)
|
||||
self.player_time_slider.setTracking(True)
|
||||
self.player_time_slider.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.player_time_slider.setObjectName("player_time_slider")
|
||||
self.player_slider_horizontal_lay.addWidget(self.player_time_slider)
|
||||
self.volume_box = QtWidgets.QSpinBox(self.player_slider_horizontal_box)
|
||||
self.volume_box.setMaximum(100)
|
||||
self.volume_box.setProperty("value", 100)
|
||||
self.volume_box.setObjectName("volume_box")
|
||||
self.player_slider_horizontal_lay.addWidget(self.volume_box)
|
||||
self.player_box_lay.addWidget(self.player_slider_horizontal_box)
|
||||
self.main_content_to_player_box_lay.addWidget(self.player_box)
|
||||
self.player_track_label = QtWidgets.QLabel(self.main_content_to_player_box)
|
||||
self.player_track_label.setText("")
|
||||
self.player_track_label.setObjectName("player_track_label")
|
||||
self.main_content_to_player_box_lay.addWidget(self.player_track_label)
|
||||
self.centralwidget_lay.addWidget(self.main_content_to_player_box)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
|
||||
135
gui/gui.ui
135
gui/gui.ui
@@ -265,6 +265,28 @@ QToolBox::tab {
|
||||
border-radius: 5px;
|
||||
border-color: #303030;
|
||||
}
|
||||
|
||||
QSlider::groove:horizontal {
|
||||
border-radius: 1px;
|
||||
height: 10px;
|
||||
margin: 0px;
|
||||
background-color: #242424;
|
||||
}
|
||||
QSlider::groove:horizontal:hover {
|
||||
background-color: #303030;
|
||||
}
|
||||
QSlider::handle:horizontal {
|
||||
background-color: white;
|
||||
border: none;
|
||||
width: 5px;
|
||||
border-radius: 40px;
|
||||
}
|
||||
QSlider::handle:horizontal:hover {
|
||||
background-color: #bfbfbf;
|
||||
}
|
||||
QSlider::handle:horizontal:pressed {
|
||||
background-color: #bfbfbf;
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
@@ -678,6 +700,119 @@ QListWidget:item:selected {
|
||||
<widget class="QWidget" name="settings_page"/>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="player_box" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="player_box_lay">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QWidget" name="player_slider_horizontal_box" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="player_slider_horizontal_lay">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="play_pause_button">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="images.qrc">
|
||||
<normaloff>:/img/img/play.png</normaloff>:/img/img/play.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="player_time_slider">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="tracking">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="volume_box">
|
||||
<property name="maximum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="player_track_label">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<RCC>
|
||||
<qresource prefix="img">
|
||||
<file>img/pause.png</file>
|
||||
<file>img/play.png</file>
|
||||
<file>img/kotopad.ico</file>
|
||||
<file>img/download.png</file>
|
||||
<file>img/stream.png</file>
|
||||
|
||||
1071
gui/images_rc.py
1071
gui/images_rc.py
File diff suppressed because it is too large
Load Diff
BIN
gui/img/pause.png
Normal file
BIN
gui/img/pause.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1006 B |
BIN
gui/img/play.png
Normal file
BIN
gui/img/play.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -2,14 +2,18 @@ from gui.gui import Ui_MainWindow
|
||||
from PyQt5.QtWidgets import QMainWindow
|
||||
from gui.modules import menu
|
||||
from gui.modules import pads
|
||||
from gui.modules import player
|
||||
from modules.player.player import Player
|
||||
|
||||
|
||||
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow):
|
||||
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
|
||||
"""
|
||||
Register all handlers
|
||||
:param ui:
|
||||
:param MainWindow:
|
||||
:param p:
|
||||
:return:
|
||||
"""
|
||||
menu.register_handlers(ui)
|
||||
pads.register_handlers(ui, MainWindow)
|
||||
pads.register_handlers(ui, MainWindow, p)
|
||||
player.register_handlers(ui, MainWindow, p)
|
||||
|
||||
@@ -3,8 +3,9 @@ from gui.modules.core.blur import GlobalBlur
|
||||
from gui.modules.initialize import styles
|
||||
from gui.modules.handlers import register
|
||||
from PyQt5.QtWidgets import QMainWindow
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt5 import QtCore
|
||||
from modules.config import Config
|
||||
from modules.player.player import Player
|
||||
|
||||
|
||||
def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
|
||||
@@ -16,9 +17,15 @@ def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
|
||||
"""
|
||||
ui.content.setCurrentIndex(0)
|
||||
|
||||
ui.player_track_label.hide()
|
||||
|
||||
MainWindow.setStyleSheet(styles.centralwidget())
|
||||
ui.menu.setStyleSheet(styles.menupage())
|
||||
if 'acrylic' in Config.get().theme:
|
||||
GlobalBlur(MainWindow.winId(), acrylic=True)
|
||||
|
||||
register.register_handlers(ui, MainWindow)
|
||||
ui.timer = QtCore.QTimer(MainWindow)
|
||||
|
||||
p = Player()
|
||||
|
||||
register.register_handlers(ui, MainWindow, p)
|
||||
|
||||
@@ -287,6 +287,28 @@ QToolBox::tab {
|
||||
border-radius: 5px;
|
||||
border-color: rgba(48, 48, 48, 0);
|
||||
}
|
||||
|
||||
QSlider::groove:horizontal {
|
||||
border-radius: 1px;
|
||||
height: 10px;
|
||||
margin: 0px;
|
||||
background-color: rgba(36, 36, 36, 0);
|
||||
}
|
||||
QSlider::groove:horizontal:hover {
|
||||
background-color: rgba(48, 48, 48, 0);
|
||||
}
|
||||
QSlider::handle:horizontal {
|
||||
background-color: white;
|
||||
border: none;
|
||||
width: 5px;
|
||||
border-radius: 40px;
|
||||
}
|
||||
QSlider::handle:horizontal:hover {
|
||||
background-color: rgba(191, 191, 191, 0);
|
||||
}
|
||||
QSlider::handle:horizontal:pressed {
|
||||
background-color: rgba(191, 191, 191, 0);
|
||||
}
|
||||
"""
|
||||
|
||||
menupage_b = """
|
||||
@@ -559,6 +581,28 @@ QToolBox::tab {
|
||||
border-radius: 5px;
|
||||
border-color: #303030;
|
||||
}
|
||||
|
||||
QSlider::groove:horizontal {
|
||||
border-radius: 1px;
|
||||
height: 10px;
|
||||
margin: 0px;
|
||||
background-color: #242424;
|
||||
}
|
||||
QSlider::groove:horizontal:hover {
|
||||
background-color: #303030;
|
||||
}
|
||||
QSlider::handle:horizontal {
|
||||
background-color: white;
|
||||
border: none;
|
||||
width: 5px;
|
||||
border-radius: 40px;
|
||||
}
|
||||
QSlider::handle:horizontal:hover {
|
||||
background-color: #bfbfbf;
|
||||
}
|
||||
QSlider::handle:horizontal:pressed {
|
||||
background-color: #bfbfbf;
|
||||
}
|
||||
"""
|
||||
|
||||
menupage_g = """
|
||||
|
||||
@@ -3,44 +3,61 @@ from modules.padslist import Pads
|
||||
from gui.gui import Ui_MainWindow
|
||||
from PyQt5 import QtWidgets, QtCore
|
||||
from PyQt5.QtWidgets import QMainWindow
|
||||
from modules.player.player import Player
|
||||
|
||||
|
||||
def fill_pads(ui: Ui_MainWindow, MainWindow: QMainWindow):
|
||||
def fill_pads(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
|
||||
ui.first_pads_dict = dict()
|
||||
ui.second_pads_dict = dict()
|
||||
|
||||
first_pads_list = \
|
||||
[ui.edit_first_pads_collection_list.item(x).text() for x in range(ui.edit_first_pads_collection_list.count())]
|
||||
|
||||
for i in reversed(range(ui.pads_collection_1_lay.count())):
|
||||
ui.pads_collection_1_lay.itemAt(i).widget().setParent(None)
|
||||
|
||||
for i in range(len(first_pads_list)):
|
||||
item = first_pads_list[i]
|
||||
if item == '':
|
||||
continue
|
||||
ui.first_pads_dict[os.path.split(item)[-1]] = item
|
||||
ui.first_pads_dict[os.path.split(item)[-1][:24:]] = item
|
||||
button = QtWidgets.QPushButton()
|
||||
button.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
|
||||
QtWidgets.QSizePolicy.Expanding))
|
||||
button.setText(os.path.split(item)[-1] if os.path.exists(item) else "File doesn't exist")
|
||||
button.clicked.connect(lambda: print(ui.first_pads_dict[MainWindow.sender().text()]
|
||||
if MainWindow.sender().text() != "File doesn't exist" else None))
|
||||
print('First: ', ui.first_pads_dict)
|
||||
button.setText(os.path.split(item)[-1][:24:] if os.path.exists(item) else "File doesn't exist")
|
||||
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)
|
||||
ui.pads_collection_1_lay.addWidget(button, i // 4, i % 4)
|
||||
|
||||
second_pads_list = \
|
||||
[ui.edit_second_pads_collection_list.item(x).text() for x in range(ui.edit_second_pads_collection_list.count())]
|
||||
|
||||
for i in reversed(range(ui.pads_collection_2_lay.count())):
|
||||
ui.pads_collection_2_lay.itemAt(i).widget().setParent(None)
|
||||
|
||||
for i in range(len(second_pads_list)):
|
||||
item = second_pads_list[i]
|
||||
if item == '':
|
||||
continue
|
||||
ui.second_pads_dict[os.path.split(item)[-1]] = item
|
||||
ui.second_pads_dict[os.path.split(item)[-1][:24:]] = item
|
||||
button = QtWidgets.QPushButton()
|
||||
button.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
|
||||
QtWidgets.QSizePolicy.Expanding))
|
||||
button.setText(os.path.split(item)[-1] if os.path.exists(item) else "File doesn't exist")
|
||||
button.clicked.connect(lambda: print(ui.second_pads_dict[MainWindow.sender().text()]
|
||||
if MainWindow.sender().text() != "File doesn't exist" else None))
|
||||
print('Second', ui.second_pads_dict)
|
||||
button.setText(os.path.split(item)[-1][:24:] if os.path.exists(item) else "File doesn't exist")
|
||||
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("second_pads", ui.second_pads_dict)
|
||||
ui.pads_collection_2_lay.addWidget(button, i // 4, i % 4)
|
||||
|
||||
@@ -2,16 +2,11 @@ from gui.gui import Ui_MainWindow
|
||||
from PyQt5.QtWidgets import QMainWindow
|
||||
from .initialize_pads_settings import *
|
||||
from .fill_pads_from_settings import *
|
||||
from modules.player.player import Player
|
||||
|
||||
|
||||
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow):
|
||||
"""
|
||||
Register this module handlers
|
||||
:param ui:
|
||||
:param MainWindow:
|
||||
:return:
|
||||
"""
|
||||
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
|
||||
fill_settings(ui)
|
||||
fill_pads(ui, MainWindow)
|
||||
ui.edit_first_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow))
|
||||
ui.edit_second_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow))
|
||||
fill_pads(ui, MainWindow, p)
|
||||
ui.edit_first_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow, p))
|
||||
ui.edit_second_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow, p))
|
||||
|
||||
1
gui/modules/player/__init__.py
Normal file
1
gui/modules/player/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .handlers import *
|
||||
13
gui/modules/player/handlers.py
Normal file
13
gui/modules/player/handlers.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from gui.gui import Ui_MainWindow
|
||||
from PyQt5.QtWidgets import QMainWindow
|
||||
from modules.player.player import Player
|
||||
|
||||
|
||||
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
|
||||
"""
|
||||
Register this module handlers
|
||||
:param p:
|
||||
:param ui:
|
||||
:param MainWindow:
|
||||
:return:
|
||||
"""
|
||||
0
modules/player/__init__.py
Normal file
0
modules/player/__init__.py
Normal file
43
modules/player/player.py
Normal file
43
modules/player/player.py
Normal file
@@ -0,0 +1,43 @@
|
||||
import vlc
|
||||
from gui.gui import Ui_MainWindow
|
||||
|
||||
|
||||
def get_instance() -> vlc.Instance:
|
||||
return vlc.Instance()
|
||||
|
||||
|
||||
def get_player(instance: vlc.Instance) -> vlc.MediaPlayer:
|
||||
return instance.media_player_new()
|
||||
|
||||
|
||||
def get_devices(mediaplayer: vlc.MediaPlayer) -> dict:
|
||||
devices = dict()
|
||||
|
||||
device = mediaplayer.audio_output_device_enum()
|
||||
while device:
|
||||
devices[device.contents.description.decode("utf-8")] = device.contents.device
|
||||
device = device.contents.next
|
||||
|
||||
return devices
|
||||
|
||||
|
||||
class Player(object):
|
||||
def __init__(self):
|
||||
self.instance = get_instance()
|
||||
self.mediaplayer_preview = get_player(self.instance)
|
||||
self.mediaplayer_preview.audio_output_device_set(None, get_devices(self.mediaplayer_preview)['Default'])
|
||||
self.mediaplayer_out = get_player(self.instance)
|
||||
self.mediaplayer_out.audio_output_device_set(None, get_devices(
|
||||
self.mediaplayer_out)['CABLE Input (VB-Audio Virtual Cable)'])
|
||||
self.is_paused = False
|
||||
|
||||
def set_media(self, media: str) -> None:
|
||||
self.mediaplayer_preview.set_media(self.instance.media_new(media))
|
||||
self.mediaplayer_out.set_media(self.instance.media_new(media))
|
||||
|
||||
def play(self, ui: Ui_MainWindow):
|
||||
self.mediaplayer_preview.play()
|
||||
self.mediaplayer_out.play()
|
||||
|
||||
def get_length(self) -> int:
|
||||
return int(self.mediaplayer_preview.get_length() / 1000)
|
||||
Reference in New Issue
Block a user