141 lines
4.9 KiB
Python
141 lines
4.9 KiB
Python
# radar_data_reader/gui/rec_config_window.py
|
|
|
|
"""
|
|
GUI Window for editing the configuration for the g_reconvert.exe runner.
|
|
This version is now a lightweight wrapper around the GReconverterOptionsFrame.
|
|
"""
|
|
|
|
import tkinter as tk
|
|
from tkinter import ttk, filedialog
|
|
from typing import Dict, Any, Callable
|
|
import os
|
|
|
|
from .gui_utils import center_window
|
|
from .config_frames import GReconverterOptionsFrame
|
|
|
|
|
|
class RecConfigWindow(tk.Toplevel):
|
|
"""A Toplevel window for managing g_reconvert.exe parameters."""
|
|
|
|
def __init__(
|
|
self,
|
|
master,
|
|
controller,
|
|
current_config: Dict[str, Any],
|
|
title: str,
|
|
save_command: Callable[[Dict[str, Any]], None],
|
|
):
|
|
super().__init__(master)
|
|
self.controller = controller
|
|
self.config_data = current_config.copy()
|
|
self.window_title = title
|
|
self.save_callback = save_command
|
|
|
|
self.withdraw()
|
|
self._init_window()
|
|
self._init_vars()
|
|
self._populate_vars_from_config()
|
|
self._create_widgets()
|
|
|
|
center_window(self, self.master)
|
|
self.protocol("WM_DELETE_WINDOW", self._on_cancel)
|
|
|
|
def _init_window(self):
|
|
self.title(self.window_title)
|
|
self.geometry("800x650")
|
|
self.transient(self.master)
|
|
|
|
def _init_vars(self):
|
|
"""Initializes all Tkinter variables for the parameters."""
|
|
self.vars = {
|
|
"cpp_executable_path": tk.StringVar(),
|
|
"analyze_only": tk.BooleanVar(),
|
|
"no_sign": tk.BooleanVar(),
|
|
"use_fw_header": tk.BooleanVar(),
|
|
"fix_dsp_bug": tk.BooleanVar(),
|
|
"sync_signal_flows": tk.BooleanVar(),
|
|
"extract_sw_only": tk.BooleanVar(),
|
|
"extract_dsp_only": tk.BooleanVar(),
|
|
"stop_on_discontinuity": tk.BooleanVar(),
|
|
"dry_run": tk.BooleanVar(),
|
|
"start_from_stby": tk.BooleanVar(),
|
|
"fix_sata_date": tk.BooleanVar(),
|
|
"examine_data": tk.BooleanVar(),
|
|
"post_process": tk.BooleanVar(),
|
|
"post_process_level": tk.StringVar(),
|
|
"output_format": tk.StringVar(),
|
|
"json_config_file": tk.StringVar(),
|
|
"max_batches": tk.StringVar(),
|
|
"pri_number": tk.StringVar(),
|
|
"rbin_number": tk.StringVar(),
|
|
"video_out_to_rec": tk.BooleanVar(),
|
|
"video_show": tk.BooleanVar(),
|
|
"video_save": tk.BooleanVar(),
|
|
"video_fix_framerate": tk.BooleanVar(),
|
|
"gps_save_track": tk.BooleanVar(),
|
|
"fix_hr_debug": tk.BooleanVar(),
|
|
"sar_save_only": tk.BooleanVar(),
|
|
"video_add_subtitles": tk.BooleanVar(),
|
|
"verbose": tk.BooleanVar(),
|
|
"debug_messages": tk.BooleanVar(),
|
|
"quiet": tk.BooleanVar(),
|
|
"mask_warnings": tk.BooleanVar(),
|
|
"mask_errors": tk.BooleanVar(),
|
|
"silent_overwrite": tk.BooleanVar(),
|
|
"enable_python_worker_profiling": tk.BooleanVar(),
|
|
}
|
|
|
|
def _populate_vars_from_config(self):
|
|
for key, var in self.vars.items():
|
|
if key in self.config_data:
|
|
var.set(self.config_data.get(key, "")) # Usa un default per sicurezza
|
|
|
|
def _create_widgets(self):
|
|
main_frame = ttk.Frame(self, padding="10")
|
|
main_frame.pack(fill=tk.BOTH, expand=True)
|
|
|
|
exe_frame = ttk.LabelFrame(main_frame, text="Executable Path")
|
|
exe_frame.pack(fill=tk.X, pady=(0, 10))
|
|
exe_frame.columnconfigure(0, weight=1)
|
|
|
|
exe_entry = ttk.Entry(exe_frame, textvariable=self.vars["cpp_executable_path"])
|
|
exe_entry.grid(row=0, column=0, sticky="ew", padx=5, pady=5)
|
|
|
|
browse_button = ttk.Button(
|
|
exe_frame, text="Browse...", command=self._select_executable_path
|
|
)
|
|
browse_button.grid(row=0, column=1, padx=5, pady=5)
|
|
|
|
options_frame = GReconverterOptionsFrame(main_frame, self.vars)
|
|
options_frame.pack(fill=tk.BOTH, expand=True)
|
|
|
|
button_frame = ttk.Frame(main_frame)
|
|
button_frame.pack(fill=tk.X, pady=(10, 0))
|
|
|
|
ttk.Button(button_frame, text="Save & Close", command=self._on_save).pack(
|
|
side=tk.RIGHT, padx=5
|
|
)
|
|
ttk.Button(button_frame, text="Cancel", command=self._on_cancel).pack(
|
|
side=tk.RIGHT
|
|
)
|
|
|
|
def _select_executable_path(self):
|
|
filetypes = (
|
|
[("Executable", "*.exe"), ("All files", "*.*")]
|
|
if os.name == "nt"
|
|
else [("All files", "*")]
|
|
)
|
|
filepath = filedialog.askopenfilename(
|
|
title="Select g_reconvert Executable", filetypes=filetypes
|
|
)
|
|
if filepath:
|
|
self.vars["cpp_executable_path"].set(filepath)
|
|
|
|
def _on_save(self):
|
|
new_config = {key: var.get() for key, var in self.vars.items()}
|
|
self.save_callback(new_config)
|
|
self.destroy()
|
|
|
|
def _on_cancel(self):
|
|
self.destroy()
|