First upload, 18 controller version
This commit is contained in:
75
app/ui/preset_browser.py
Normal file
75
app/ui/preset_browser.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.qt_compat import QHBoxLayout, QInputDialog, QListWidget, QListWidgetItem, QMessageBox, QPushButton, Qt, QVBoxLayout, QWidget
|
||||
from app.ui.section_panel import SectionPanel
|
||||
|
||||
|
||||
class PresetBrowser(QWidget):
|
||||
def __init__(self, controller, parent: QWidget | None = None) -> None:
|
||||
super().__init__(parent)
|
||||
self.controller = controller
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
group = SectionPanel("Presets")
|
||||
group_layout = QVBoxLayout(group.body)
|
||||
group_layout.setContentsMargins(12, 12, 12, 12)
|
||||
group_layout.setSpacing(8)
|
||||
|
||||
self.list_widget = QListWidget()
|
||||
self.list_widget.itemDoubleClicked.connect(self._load_selected)
|
||||
group_layout.addWidget(self.list_widget, 1)
|
||||
|
||||
button_row = QHBoxLayout()
|
||||
self.save_button = QPushButton("Save Current")
|
||||
self.load_button = QPushButton("Load")
|
||||
self.delete_button = QPushButton("Delete")
|
||||
button_row.addWidget(self.save_button)
|
||||
button_row.addWidget(self.load_button)
|
||||
button_row.addWidget(self.delete_button)
|
||||
group_layout.addLayout(button_row)
|
||||
|
||||
layout.addWidget(group)
|
||||
|
||||
self.save_button.clicked.connect(self._save_current)
|
||||
self.load_button.clicked.connect(self._load_selected)
|
||||
self.delete_button.clicked.connect(self._delete_selected)
|
||||
self.controller.presets_changed.connect(self.refresh)
|
||||
self.refresh()
|
||||
|
||||
def refresh(self) -> None:
|
||||
self.list_widget.clear()
|
||||
for preset in self.controller.available_presets():
|
||||
item = QListWidgetItem(preset.name)
|
||||
item.setToolTip(f"{preset.pattern_id}\nPalette: {preset.palette}")
|
||||
self.list_widget.addItem(item)
|
||||
|
||||
def _selected_name(self) -> str | None:
|
||||
item = self.list_widget.currentItem()
|
||||
return item.text() if item else None
|
||||
|
||||
def _save_current(self) -> None:
|
||||
name, ok = QInputDialog.getText(self, "Save Preset", "Preset name:")
|
||||
if ok and name.strip():
|
||||
self.controller.save_current_preset(name.strip())
|
||||
self.refresh()
|
||||
|
||||
def _load_selected(self, *_args) -> None:
|
||||
name = self._selected_name()
|
||||
if name:
|
||||
self.controller.apply_preset(name)
|
||||
|
||||
def _delete_selected(self) -> None:
|
||||
name = self._selected_name()
|
||||
if not name:
|
||||
return
|
||||
confirm = QMessageBox.question(
|
||||
self,
|
||||
"Delete Preset",
|
||||
f"Delete preset '{name}'?",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
)
|
||||
if confirm == QMessageBox.Yes:
|
||||
self.controller.delete_preset(name)
|
||||
self.refresh()
|
||||
Reference in New Issue
Block a user