queue manager UI - a simple listwidget - #30

This commit is contained in:
Juraj Borza
2025-07-01 13:31:47 +02:00
parent d08ab54d2b
commit 17936a868e
2 changed files with 96 additions and 4 deletions
+27 -4
View File
@@ -4,6 +4,7 @@ import tempfile
import platform
import base64
import re
from abogen.queue_manager_gui import QueueManager
from abogen.queued_item import QueuedItem
import hf_tracker
import hashlib # Added for cache path generation
@@ -823,11 +824,13 @@ class abogen(QWidget):
# Manage queue button
self.btn_manage_queue = QPushButton("Manage Queue", self)
self.btn_manage_queue.setFixedHeight(40)
self.btn_manage_queue.setEnabled(False)
self.btn_manage_queue.clicked.connect(self.manage_queue)
queue_row.addWidget(self.btn_manage_queue)
# Start queue button
self.btn_start_queue = QPushButton("Start Queue", self)
self.btn_start_queue.setFixedHeight(40)
self.btn_start_queue.setEnabled(False)
self.btn_start_queue.clicked.connect(self.start_queue)
queue_row.addWidget(self.btn_start_queue)
controls_layout.addLayout(queue_row)
@@ -1263,6 +1266,20 @@ class abogen(QWidget):
self.progress_bar.repaint()
QApplication.processEvents()
def enable_disable_queue_buttons(self):
enabled = bool(self.queued_items)
self.btn_start_queue.setEnabled(enabled)
self.btn_manage_queue.setEnabled(enabled)
def enqueue(self, item : QueuedItem):
self.queued_items.append(item)
self.update_log((f"Enqueued: {item.file_name}", True))
# enable start queue button, manage queue button
self.enable_disable_queue_buttons()
def get_queue(self):
return self.queued_items
def add_to_queue(self):
if not self.selected_file:
self.input_box.set_error("Please add a file.")
@@ -1280,16 +1297,22 @@ class abogen(QWidget):
output_folder=self.selected_output_folder,
subtitle_mode=actual_subtitle_mode, # TODO copy from start_conversion
output_format=self.selected_format,
total_char_count=self.char_count
total_char_count=self.char_count,
use_gpu=self.gpu_ok
)
self.queued_items.append(item)
self.enqueue(item)
def manage_queue(self):
if not self.queued_items:
self.input_box.set_error("Queue is empty.")
return
# TODO show a dialog to manage the queue
pass
# show a dialog to manage the queue
dialog = QueueManager(self, self.queued_items)
if dialog.exec_() == QDialog.Accepted:
# TODO take the new queue
self.queued_items = dialog.get_queue()
# re-enable/disable buttons based on queue state
self.enable_disable_queue_buttons()
def start_queue(self):
if not self.queued_items:
+69
View File
@@ -0,0 +1,69 @@
# a simple window with a list of items in the queue, no checkboxes
# button to remove an item from the queue
# button to clear the queue
from PyQt5.QtWidgets import (
QWidget,
QDialog,
QVBoxLayout,
QDialogButtonBox,
QLabel,
QCheckBox,
QSlider,
QPushButton,
QHBoxLayout,
QMessageBox,
QListWidget,
)
class QueueManager(QDialog):
def __init__(self, parent, queue: list, title="Queue Manager", size=(400, 300)):
super().__init__()
self.queue = queue
self.parent = parent
layout = QVBoxLayout()
# list of queued items
self.listwidget = QListWidget()
self.listwidget.setSelectionMode(QListWidget.SingleSelection)
self.listwidget.setAlternatingRowColors(True)
# add queue items to the list
self.process_queue()
layout.addWidget(self.listwidget)
# add remove item button
remove_button = QPushButton("Remove")
remove_button.clicked.connect(self.remove_item)
layout.addWidget(remove_button)
# add clear queue button
clear_button = QPushButton("Clear Queue")
clear_button.clicked.connect(self.clear_queue)
layout.addWidget(clear_button)
buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
self.setLayout(layout)
self.setWindowTitle(title)
self.setMinimumSize(*size)
def process_queue(self):
"""Process the queue items."""
if not self.queue:
return
for item in self.queue:
self.listwidget.addItem(item.file_name)
# self.listwidget.clicked.connect(self.clicked)
def remove_item(self):
pass
def clear_queue(self):
self.queue.clear()
self.listwidget.clear()