Bedre tag sync
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user