Changeset a14c6b0 in flexograder for gui/attach_media_dialog.py


Ignore:
Timestamp:
12/15/25 14:10:35 (4 months ago)
Author:
Enrico Schwass <ennoausberlin@…>
Branches:
fake-data, main, master
Children:
9b1abd2
Parents:
34e976b
Message:

image preview added

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gui/attach_media_dialog.py

    r34e976b ra14c6b0  
    11import tkinter as tk
    22from tkinter import ttk, filedialog
     3from pathlib import Path
    34from builder.media_items import MediaItem
    4 from flexoentity import FlexOID  # if you use entity-based IDs
    55
    66class AttachMediaDialog(tk.Toplevel):
    7     def __init__(self, parent, question):
     7    def __init__(self, parent, question_dict):
    88        super().__init__(parent)
    99        self.title("Media attachments")
    10         self.question = question
     10        self.question_dict = question_dict
     11        self.result = []
     12        # Ensure media list exists
     13        self.media_list = question_dict.get("media", [])
    1114        self.resizable(False, False)
    1215
     
    1518        self.listbox.pack(padx=10, pady=5, fill="both")
    1619
    17         print(question.media)
    18         for m in question.media:
    19             self.listbox.insert(tk.END, f"{m.mtype.upper()}: {m.src}")
     20        for m in self.media_list:
     21            mtype = str(m.get("mtype", "unknown")).upper()
     22            src = m.get("src", "?")
     23            self.listbox.insert(tk.END, f"{mtype}: {src}")
    2024
    2125        btn_frame = ttk.Frame(self)
     
    2428        ttk.Button(btn_frame, text="Add...", command=self.add_media).pack(side=tk.LEFT, padx=5)
    2529        ttk.Button(btn_frame, text="Remove", command=self.remove_media).pack(side=tk.LEFT, padx=5)
    26         ttk.Button(btn_frame, text="Close", command=self.destroy).pack(side=tk.RIGHT, padx=5)
     30        ttk.Button(btn_frame, text="Close", command=self.on_ok).pack(side=tk.RIGHT, padx=5)
    2731
    2832    def add_media(self):
    29         print("add")
    3033        path = filedialog.askopenfilename(
    3134            title="Select media file",
     
    3437        if not path:
    3538            return
    36         media_item = MediaItem(src=path)
    37         self.question.media.append(media_item)
    38         self.listbox.insert(tk.END, f"{media_item.mtype.upper()}: {path}")
     39
     40        # Determine media type from extension
     41        ext = Path(path).suffix.lower()
     42        if ext in {".png", ".jpg", ".jpeg"}:
     43            mtype = "image"
     44        elif ext in {".mp4"}:
     45            mtype = "video"
     46        elif ext in {".wav"}:
     47            mtype = "audio"
     48        elif ext in {".pdf"}:
     49            mtype = "pdf"
     50        else:
     51            mtype = "unknown"
     52        media_entry = {"mtype": mtype, "src": path}
     53        self.media_list.append(media_entry)
     54        print("List:", self.media_list)
     55        self.listbox.insert(tk.END, f"{mtype.upper()}: {path}")
    3956
    4057    def remove_media(self):
     
    4461        idx = selection[0]
    4562        self.listbox.delete(idx)
    46         del self.question.media[idx]
     63        try:
     64            del self.media_list[idx]
     65        except IndexError:
     66            pass
     67
     68    def on_ok(self):
     69        """Return the final edited media list."""
     70        print("OK:", self.media_list)
     71        self.result = self.media_list
     72        self.destroy()
     73
     74    def on_close(self):
     75        """Return the final edited media list."""
     76        self.result = self.media_list
     77        self.destroy()
Note: See TracChangeset for help on using the changeset viewer.