88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
"""
|
|
MathLab Export configuration dialog.
|
|
|
|
Allows the user to enable/disable exporting trajectory CSVs for MathLab and
|
|
to select the output folder where the CSV will be written.
|
|
"""
|
|
import tkinter as tk
|
|
from tkinter import ttk, filedialog, messagebox
|
|
from typing import Any, Dict
|
|
|
|
from target_simulator.utils.config_manager import ConfigManager
|
|
|
|
|
|
class MathLabExportWindow(tk.Toplevel):
|
|
"""Modal dialog to configure MathLab CSV export settings."""
|
|
|
|
def __init__(self, master, config_manager: ConfigManager):
|
|
super().__init__(master)
|
|
self.master_view = master
|
|
self.config_manager = config_manager
|
|
|
|
self.title("MathLab Export Settings")
|
|
self.transient(master)
|
|
self.grab_set()
|
|
self.resizable(False, False)
|
|
|
|
# Load current settings
|
|
general = self.config_manager.get_general_settings() or {}
|
|
math_cfg = general.get("mathlab_export", {}) or {}
|
|
|
|
self.enabled_var = tk.BooleanVar(value=bool(math_cfg.get("enabled", False)))
|
|
self.folder_var = tk.StringVar(value=math_cfg.get("folder", ""))
|
|
|
|
frame = ttk.Frame(self, padding=10)
|
|
frame.pack(fill=tk.BOTH, expand=True)
|
|
|
|
ttk.Checkbutton(
|
|
frame,
|
|
text="Enable MathLab CSV export",
|
|
variable=self.enabled_var,
|
|
).grid(row=0, column=0, columnspan=3, sticky=tk.W, pady=(0, 8))
|
|
|
|
ttk.Label(frame, text="Output folder:").grid(
|
|
row=1, column=0, sticky=tk.W, pady=2
|
|
)
|
|
ttk.Entry(frame, textvariable=self.folder_var, width=50).grid(
|
|
row=1, column=1, sticky=tk.EW, padx=5
|
|
)
|
|
ttk.Button(frame, text="Browse...", command=self._on_browse).grid(
|
|
row=1, column=2, sticky=tk.E, padx=(5, 0)
|
|
)
|
|
|
|
btn_frame = ttk.Frame(frame)
|
|
btn_frame.grid(row=2, column=0, columnspan=3, sticky=tk.EW, pady=(12, 0))
|
|
ttk.Button(btn_frame, text="Cancel", command=self.destroy).pack(
|
|
side=tk.RIGHT, padx=(0, 6)
|
|
)
|
|
ttk.Button(btn_frame, text="Save", command=self._on_save).pack(side=tk.RIGHT)
|
|
|
|
self.protocol("WM_DELETE_WINDOW", self.destroy)
|
|
self.wait_window(self)
|
|
|
|
def _on_browse(self):
|
|
path = filedialog.askdirectory(parent=self, title="Select output folder")
|
|
if path:
|
|
self.folder_var.set(path)
|
|
|
|
def _on_save(self):
|
|
enabled = bool(self.enabled_var.get())
|
|
folder = str(self.folder_var.get()).strip()
|
|
|
|
if enabled and not folder:
|
|
messagebox.showerror(
|
|
"Validation", "Please select an output folder when enabling export.", parent=self
|
|
)
|
|
return
|
|
|
|
# Persist settings via ConfigManager (merge behavior preserved there)
|
|
try:
|
|
self.config_manager.save_general_settings(
|
|
{"mathlab_export": {"enabled": enabled, "folder": folder}}
|
|
)
|
|
messagebox.showinfo("Saved", "MathLab export settings saved.", parent=self)
|
|
except Exception as e:
|
|
messagebox.showerror("Error", f"Could not save settings: {e}", parent=self)
|
|
finally:
|
|
self.destroy()
|