Bedre tag sync

This commit is contained in:
2026-04-21 19:18:19 +02:00
parent ec3989e6a4
commit 545cdc6866
7 changed files with 94 additions and 37 deletions

View File

@@ -85,16 +85,41 @@ class DancePickerDialog(QDialog):
def _load_suggestions(self, prefix: str):
try:
from local.local_db import get_dance_suggestions
from PyQt6.QtGui import QColor
suggestions = get_dance_suggestions(prefix or "", limit=25)
self._list.clear()
# Vis eksisterende danse øverst hvis ingen prefix
if not prefix and self._existing_dances:
for name in self._existing_dances:
item = QListWidgetItem(f"{name}")
item.setData(Qt.ItemDataRole.UserRole, {"name": name})
item.setForeground(__import__('PyQt6.QtGui', fromlist=['QColor']).QColor("#e8a020"))
self._list.addItem(item)
# Allerøverst: mulighed for at fjerne dans
no_dance = QListWidgetItem("✕ Ingen dans")
no_dance.setForeground(QColor("#5a6070"))
no_dance.setData(Qt.ItemDataRole.UserRole, {"name": ""})
self._list.addItem(no_dance)
# Øverst: danse registreret på denne sang
if self._existing_dances:
# Filtrer på prefix hvis der skrives
matching = [d for d in self._existing_dances
if not prefix or prefix.lower() in d.lower()]
if matching:
# Separator-header
sep = QListWidgetItem("── Registreret på denne sang ──")
sep.setForeground(QColor("#5a6070"))
sep.setFlags(Qt.ItemFlag.ItemIsEnabled) # synlig men ikke valgbar
sep.setData(Qt.ItemDataRole.UserRole, None)
self._list.addItem(sep)
for name in matching:
item = QListWidgetItem(f"{name}")
item.setData(Qt.ItemDataRole.UserRole, {"name": name})
item.setForeground(QColor("#e8a020"))
self._list.addItem(item)
# Separator for alle danse
if suggestions:
sep2 = QListWidgetItem("── Alle danse ──")
sep2.setForeground(QColor("#5a6070"))
sep2.setFlags(Qt.ItemFlag.ItemIsEnabled) # synlig men ikke valgbar
sep2.setData(Qt.ItemDataRole.UserRole, None)
self._list.addItem(sep2)
for s in suggestions:
s = dict(s)
@@ -119,7 +144,9 @@ class DancePickerDialog(QDialog):
logging.getLogger(__name__).warning(f'Dans-forslag fejl: {e}', exc_info=True)
def _on_item_clicked(self, item: QListWidgetItem):
data = item.data(Qt.ItemDataRole.UserRole) or {}
data = item.data(Qt.ItemDataRole.UserRole)
if not data: # separator — ignorer
return
name = data.get("name", "")
level = data.get("level", "")
choreo = data.get("choreo", "")
@@ -133,13 +160,15 @@ class DancePickerDialog(QDialog):
self._info_lbl.setText(" · ".join(parts) if parts else "")
def _on_selected(self, item: QListWidgetItem):
data = item.data(Qt.ItemDataRole.UserRole)
if not data: # separator
return
self._on_item_clicked(item)
self._on_accept()
def _on_accept(self):
self._chosen_dance = self._edit.text().strip()
if self._chosen_dance:
self.accept()
self.accept() # tillad tom streng = ingen dans
def get_dance(self) -> str:
return self._chosen_dance