fix segments analyze

This commit is contained in:
VALLONGOL 2025-07-14 13:33:35 +02:00
parent b049d80bd3
commit 11800c4c92
2 changed files with 53 additions and 31 deletions

View File

@ -405,6 +405,16 @@ class MainWindow(tk.Frame):
progress = (self.segments_done_count / total_segs) * 100 progress = (self.segments_done_count / total_segs) * 100
self.analyzer_progress_var.set(progress) self.analyzer_progress_var.set(progress)
self.analyzer_progress_text_var.set(f"Exported {self.segments_done_count} / {total_segs}") self.analyzer_progress_text_var.set(f"Exported {self.segments_done_count} / {total_segs}")
# --- NUOVO GESTORE MESSAGGIO ---
elif msg_type == "batch_progress":
current = msg.get("current", 0)
total = msg.get("total", 0)
if total > 0:
progress = (current / total) * 100
self.segment_processor_tab.progress_var.set(progress)
self.segment_processor_tab.progress_text_var.set(
f"Processing segment {current} of {total}: {msg.get('segment_name', '')}"
)
elif msg_type == "cpp_complete": elif msg_type == "cpp_complete":
self.controller.handle_final_analysis_steps() self.controller.handle_final_analysis_steps()
elif msg_type == "data_batch": elif msg_type == "data_batch":
@ -414,6 +424,8 @@ class MainWindow(tk.Frame):
elif msg_type in ("success", "complete", "error"): elif msg_type in ("success", "complete", "error"):
self.analyzer_progress_var.set(100) self.analyzer_progress_var.set(100)
self.analyzer_progress_text_var.set("Done") self.analyzer_progress_text_var.set("Done")
self.segment_processor_tab.progress_var.set(100)
self.segment_processor_tab.progress_text_var.set("Finished.")
self.controller.handle_worker_completion(msg) self.controller.handle_worker_completion(msg)
except queue.Empty: except queue.Empty:

View File

@ -56,23 +56,27 @@ class SegmentProcessorTab(ttk.Frame):
segments_frame.columnconfigure(0, weight=1) segments_frame.columnconfigure(0, weight=1)
segments_frame.rowconfigure(0, weight=1) segments_frame.rowconfigure(0, weight=1)
# --- MODIFICA: Nuova struttura della Treeview ---
self.segments_tree = ttk.Treeview( self.segments_tree = ttk.Treeview(
segments_frame, segments_frame,
columns=("status", "name", "start_time", "end_time", "duration"), columns=("status", "name", "start_batch", "end_batch", "duration", "start_file", "end_file"),
show="headings", show="headings",
selectmode="extended" selectmode="extended"
) )
self.segments_tree.heading("status", text="Status") self.segments_tree.heading("status", text="Status")
self.segments_tree.heading("name", text="Segment Name") self.segments_tree.heading("name", text="Segment Name")
self.segments_tree.heading("start_time", text="Start Time") self.segments_tree.heading("start_batch", text="Start Batch")
self.segments_tree.heading("end_time", text="End Time") self.segments_tree.heading("end_batch", text="End Batch")
self.segments_tree.heading("duration", text="Duration (s)") self.segments_tree.heading("duration", text="Duration (s)")
self.segments_tree.heading("start_file", text="Start File")
self.segments_tree.heading("end_file", text="End File")
self.segments_tree.column("status", width=100, anchor="center", stretch=False) self.segments_tree.column("status", width=100, anchor="center", stretch=False)
self.segments_tree.column("name", width=300, stretch=True) self.segments_tree.column("name", width=250, stretch=True)
self.segments_tree.column("start_time", width=100, anchor="center", stretch=False) self.segments_tree.column("start_batch", width=100, anchor="center")
self.segments_tree.column("end_time", width=100, anchor="center", stretch=False) self.segments_tree.column("end_batch", width=100, anchor="center")
self.segments_tree.column("duration", width=100, anchor="center", stretch=False) self.segments_tree.column("duration", width=100, anchor="center")
self.segments_tree.column("start_file", width=200, stretch=True)
self.segments_tree.column("end_file", width=200, stretch=True)
self.segments_tree.grid(row=0, column=0, sticky="nsew") self.segments_tree.grid(row=0, column=0, sticky="nsew")
@ -105,10 +109,17 @@ class SegmentProcessorTab(ttk.Frame):
ttk.Label(output_config_frame, text="Output Directory:").grid(row=0, column=0, padx=5, pady=5, sticky="w") ttk.Label(output_config_frame, text="Output Directory:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
dir_entry = ttk.Entry(output_config_frame, textvariable=self.output_dir_var) dir_entry = ttk.Entry(output_config_frame, textvariable=self.output_dir_var)
dir_entry.grid(row=0, column=1, sticky="ew", padx=5) dir_entry.grid(row=0, column=1, sticky="ew", padx=5)
dir_buttons_frame = ttk.Frame(output_config_frame)
dir_buttons_frame.grid(row=0, column=2, padx=5)
ttk.Button( ttk.Button(
output_config_frame, text="Browse...", dir_buttons_frame, text="Browse...",
command=lambda: self.controller.select_output_dir(self.output_dir_var) command=lambda: self.controller.select_output_dir(self.output_dir_var)
).grid(row=0, column=2, padx=5) ).pack(side=tk.LEFT)
ttk.Button(
dir_buttons_frame, text="Open...",
command=lambda: self.controller.open_folder_from_path(self.output_dir_var.get())
).pack(side=tk.LEFT, padx=(5,0))
formats_frame = ttk.Frame(output_config_frame) formats_frame = ttk.Frame(output_config_frame)
formats_frame.grid(row=1, column=0, columnspan=3, sticky="ew", padx=10, pady=5) formats_frame.grid(row=1, column=0, columnspan=3, sticky="ew", padx=10, pady=5)
@ -117,13 +128,13 @@ class SegmentProcessorTab(ttk.Frame):
self.csv_check = ttk.Checkbutton(formats_frame, text="Generate .csv file", variable=self.generate_csv_var, command=self._on_format_toggle) self.csv_check = ttk.Checkbutton(formats_frame, text="Generate .csv file", variable=self.generate_csv_var, command=self._on_format_toggle)
self.csv_check.grid(row=0, column=0, sticky="w") self.csv_check.grid(row=0, column=0, sticky="w")
ttk.Label(formats_frame, text="CSV Profile:").grid(row=0, column=1, sticky="e", padx=(10, 2)) ttk.Label(formats_frame, text="CSV Profile:").grid(row=0, column=1, sticky="e", padx=(10, 2))
self.csv_profile_combobox = ttk.Combobox(formats_frame, textvariable=self.csv_profile_var, state="readonly", width=30) self.csv_profile_combobox = ttk.Combobox(formats_frame, textvariable=self.csv_profile_var, state="readonly", width=25)
self.csv_profile_combobox.grid(row=0, column=2, sticky="ew") self.csv_profile_combobox.grid(row=0, column=2, sticky="ew")
self.json_check = ttk.Checkbutton(formats_frame, text="Generate .json file", variable=self.generate_json_var, command=self._on_format_toggle) self.json_check = ttk.Checkbutton(formats_frame, text="Generate .json file", variable=self.generate_json_var, command=self._on_format_toggle)
self.json_check.grid(row=1, column=0, sticky="w") self.json_check.grid(row=1, column=0, sticky="w")
ttk.Label(formats_frame, text="JSON Profile:").grid(row=1, column=1, sticky="e", padx=(10, 2)) ttk.Label(formats_frame, text="JSON Profile:").grid(row=1, column=1, sticky="e", padx=(10, 2))
self.json_profile_combobox = ttk.Combobox(formats_frame, textvariable=self.json_profile_var, state="readonly", width=30) self.json_profile_combobox = ttk.Combobox(formats_frame, textvariable=self.json_profile_var, state="readonly", width=25)
self.json_profile_combobox.grid(row=1, column=2, sticky="ew") self.json_profile_combobox.grid(row=1, column=2, sticky="ew")
self._on_format_toggle() self._on_format_toggle()
@ -142,16 +153,15 @@ class SegmentProcessorTab(ttk.Frame):
variable=self.use_full_path_var variable=self.use_full_path_var
).pack(side=tk.LEFT, anchor="w", padx=(20, 0)) ).pack(side=tk.LEFT, anchor="w", padx=(20, 0))
# --- NUOVO: Progress Frame ---
progress_frame = ttk.LabelFrame(self, text="Processing Progress") progress_frame = ttk.LabelFrame(self, text="Processing Progress")
progress_frame.grid(row=4, column=0, sticky="ew", pady=(10,0)) progress_frame.grid(row=4, column=0, sticky="ew", pady=(10,0))
progress_frame.columnconfigure(0, weight=1) progress_frame.columnconfigure(1, weight=1)
self.progress_bar = ttk.Progressbar(progress_frame, variable=self.progress_var) self.progress_bar = ttk.Progressbar(progress_frame, variable=self.progress_var)
self.progress_bar.grid(row=0, column=0, sticky="ew", padx=5, pady=5) self.progress_bar.grid(row=0, column=0, columnspan=2, sticky="ew", padx=10, pady=5)
self.progress_label = ttk.Label(progress_frame, textvariable=self.progress_text_var) self.progress_label = ttk.Label(progress_frame, textvariable=self.progress_text_var)
self.progress_label.grid(row=1, column=0, sticky="w", padx=5, pady=(0, 5)) self.progress_label.grid(row=1, column=0, sticky="w", padx=10, pady=(0, 5))
self.process_button = ttk.Button( self.process_button = ttk.Button(
progress_frame, progress_frame,
@ -159,12 +169,11 @@ class SegmentProcessorTab(ttk.Frame):
command=self.controller.start_segment_batch_processing, command=self.controller.start_segment_batch_processing,
state=tk.DISABLED state=tk.DISABLED
) )
self.process_button.grid(row=0, column=1, rowspan=2, padx=10) self.process_button.grid(row=1, column=1, sticky="e", padx=10, pady=(0, 5))
def _on_format_toggle(self): def _on_format_toggle(self):
"""Enable/disable profile comboboxes based on checkbox state.""" self.csv_profile_combobox.config(state="readonly" if self.generate_csv_var.get() else tk.DISABLED)
self.csv_profile_combobox.config(state=tk.NORMAL if self.generate_csv_var.get() else tk.DISABLED) self.json_profile_combobox.config(state="readonly" if self.generate_json_var.get() else tk.DISABLED)
self.json_profile_combobox.config(state=tk.NORMAL if self.generate_json_var.get() else tk.DISABLED)
def _select_all_ready(self): def _select_all_ready(self):
self.segments_tree.selection_remove(self.segments_tree.selection()) self.segments_tree.selection_remove(self.segments_tree.selection())
@ -182,18 +191,19 @@ class SegmentProcessorTab(ttk.Frame):
has_selectable_items = False has_selectable_items = False
for i, segment in enumerate(self.segments_data_store): for i, segment in enumerate(self.segments_data_store):
name = segment.get('Segment (Mode | Scale | WF)', 'Unknown Segment') values_tuple = (
start_time = segment.get('start_time_str', 'N/A') "Ready" if segment.get('is_exported_and_valid') else "Not Exported",
end_time = segment.get('end_time_str', 'N/A') segment.get('Segment (Mode | Scale | WF)', 'N/A'),
duration = segment.get('Duration (s)', 0) segment.get('Start Batch', 'N/A'),
segment.get('End Batch', 'N/A'),
if segment.get('is_exported_and_valid'): f"{segment.get('Duration (s)', 0):.2f}",
status_text, tag = "Ready", "ready" segment.get('Start File', 'N/A'),
has_selectable_items = True segment.get('End File', 'N/A')
else: )
status_text, tag = "Not Exported", "not_exported" tag = "ready" if segment.get('is_exported_and_valid') else "not_exported"
if tag == "ready": has_selectable_items = True
self.segments_tree.insert("", "end", iid=str(i), values=(status_text, name, start_time, end_time, f"{duration:.2f}"), tags=(tag,)) self.segments_tree.insert("", "end", iid=str(i), values=values_tuple, tags=(tag,))
self.process_button.config(state=tk.NORMAL if has_selectable_items else tk.DISABLED) self.process_button.config(state=tk.NORMAL if has_selectable_items else tk.DISABLED)