"""Image picker widget for macro image selection.""" import tkinter as tk from tkinter import filedialog from utils.image_converter import copy_image_to_appdata, create_preview class ImagePicker(tk.Frame): """Widget for selecting and previewing a macro image.""" def __init__(self, parent, on_change=None): super().__init__(parent, bg="#2D2D3D") self.on_change = on_change self.image_path = None self._preview = None self._build_ui() def _build_ui(self): tk.Label(self, text="Routine Image:", bg="#2D2D3D", fg="white", font=("Segoe UI", 9, "bold")).pack(anchor="w", padx=8, pady=(8, 2)) self.preview_label = tk.Label(self, bg="#1E1E2E", width=128, height=128, relief="sunken", borderwidth=1) self.preview_label.pack(padx=8, pady=4) btn_frame = tk.Frame(self, bg="#2D2D3D") btn_frame.pack(fill="x", padx=8, pady=4) tk.Button(btn_frame, text="Choose Image", bg="#3D3D5C", fg="white", font=("Segoe UI", 8), relief="flat", command=self._choose_image).pack(side="left", fill="x", expand=True, padx=2) tk.Button(btn_frame, text="Clear", bg="#7F8C8D", fg="white", font=("Segoe UI", 8), relief="flat", command=self._clear_image).pack(side="left", padx=2) def set_image(self, path): self.image_path = path if path: try: self._preview = create_preview(path) self.preview_label.config(image=self._preview, text="") except Exception: self.preview_label.config(image="", text="Error loading image", fg="#FF4444") else: self._preview = None self.preview_label.config(image="", text="No image", fg="#666666") def _choose_image(self): path = filedialog.askopenfilename( title="Select Routine Image", filetypes=[("Images", "*.png *.jpg *.jpeg *.bmp *.gif"), ("All", "*.*")], ) if path: saved = copy_image_to_appdata(path) self.image_path = saved self.set_image(saved) if self.on_change: self.on_change(saved) def _clear_image(self): self.image_path = None self.set_image(None) if self.on_change: self.on_change(None)