custom question box with details

This commit is contained in:
tsi-billypom 2025-04-14 11:58:32 -04:00
parent 7ee1026421
commit 1970235224
3 changed files with 68 additions and 8 deletions

View File

@ -18,10 +18,12 @@ from PyQt5.QtWidgets import (
QAction, QAction,
QHeaderView, QHeaderView,
QMenu, QMenu,
QPlainTextEdit,
QTableView, QTableView,
QShortcut, QShortcut,
QMessageBox, QMessageBox,
QAbstractItemView, QAbstractItemView,
QVBoxLayout,
) )
from PyQt5.QtCore import ( from PyQt5.QtCore import (
QItemSelectionModel, QItemSelectionModel,
@ -37,6 +39,7 @@ from components.ErrorDialog import ErrorDialog
from components.LyricsWindow import LyricsWindow from components.LyricsWindow import LyricsWindow
from components.AddToPlaylistWindow import AddToPlaylistWindow from components.AddToPlaylistWindow import AddToPlaylistWindow
from components.MetadataWindow import MetadataWindow from components.MetadataWindow import MetadataWindow
from components.QuestionBoxDetails import QuestionBoxDetails
from main import Worker from main import Worker
from utils.batch_delete_filepaths_from_database import ( from utils.batch_delete_filepaths_from_database import (
@ -496,21 +499,20 @@ class MusicTable(QTableView):
# FIXME: need to get indexes based on the proxy model # FIXME: need to get indexes based on the proxy model
selected_filepaths = self.get_selected_songs_filepaths() selected_filepaths = self.get_selected_songs_filepaths()
formatted_selected_filepaths = "\n".join(selected_filepaths) formatted_selected_filepaths = "\n".join(selected_filepaths)
reply = QMessageBox.question( question_dialog = QuestionBoxDetails(
self, title="Delete songs",
"Confirmation", description="Remove these songs from the library?",
f"Remove these songs from the library? (Files stay on your computer)\n{formatted_selected_filepaths}", details=formatted_selected_filepaths,
QMessageBox.Yes | QMessageBox.No,
QMessageBox.Yes,
) )
if reply == QMessageBox.Yes: reply = question_dialog.execute()
pprint(selected_filepaths) if reply:
worker = Worker(batch_delete_filepaths_from_database, selected_filepaths) worker = Worker(batch_delete_filepaths_from_database, selected_filepaths)
worker.signals.signal_progress.connect(self.qapp.handle_progress) worker.signals.signal_progress.connect(self.qapp.handle_progress)
worker.signals.signal_finished.connect(self.delete_selected_row_indices) worker.signals.signal_finished.connect(self.delete_selected_row_indices)
if self.qapp: if self.qapp:
threadpool = self.qapp.threadpool threadpool = self.qapp.threadpool
threadpool.start(worker) threadpool.start(worker)
return
def delete_selected_row_indices(self): def delete_selected_row_indices(self):
""" """

View File

@ -0,0 +1,57 @@
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import (
QDialog,
QHBoxLayout,
QPlainTextEdit,
QVBoxLayout,
QLabel,
QPushButton,
)
from PyQt5.QtGui import QFont
from components.ErrorDialog import ErrorDialog
from utils import set_id3_tag
from logging import debug
class QuestionBoxDetails(QDialog):
def __init__(self, title: str, description: str, details):
super(QuestionBoxDetails, self).__init__()
self.title: str = title
self.description: str = description
self.details: str = details
self.reply: bool = False
self.setWindowTitle(title)
self.setMinimumSize(400, 400)
layout = QVBoxLayout()
h_layout = QHBoxLayout()
# Labels & input fields
label = QLabel(description)
layout.addWidget(label)
self.text_field = QPlainTextEdit(self.details)
layout.addWidget(self.text_field)
# cancel
cancel_button = QPushButton("cancel")
cancel_button.clicked.connect(self.cancel)
h_layout.addWidget(cancel_button)
# ok
ok_button = QPushButton("ok")
ok_button.clicked.connect(self.ok)
h_layout.addWidget(ok_button)
layout.addLayout(h_layout)
self.setLayout(layout)
ok_button.setFocus()
def execute(self):
self.exec_()
return self.reply
def cancel(self):
self.reply = False
self.close()
def ok(self):
self.reply = True
self.close()

View File

@ -9,3 +9,4 @@ from .AddToPlaylistWindow import AddToPlaylistWindow
from .CreatePlaylistWindow import CreatePlaylistWindow from .CreatePlaylistWindow import CreatePlaylistWindow
from .PlaylistsPane import PlaylistsPane from .PlaylistsPane import PlaylistsPane
from .ExportPlaylistWindow import ExportPlaylistWindow from .ExportPlaylistWindow import ExportPlaylistWindow
from .QuestionBoxDetails import QuestionBoxDetails