fix segments analyze
This commit is contained in:
parent
b049d80bd3
commit
11800c4c92
@ -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:
|
||||||
|
|||||||
@ -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'),
|
||||||
|
f"{segment.get('Duration (s)', 0):.2f}",
|
||||||
|
segment.get('Start File', 'N/A'),
|
||||||
|
segment.get('End File', 'N/A')
|
||||||
|
)
|
||||||
|
tag = "ready" if segment.get('is_exported_and_valid') else "not_exported"
|
||||||
|
if tag == "ready": has_selectable_items = True
|
||||||
|
|
||||||
if segment.get('is_exported_and_valid'):
|
self.segments_tree.insert("", "end", iid=str(i), values=values_tuple, tags=(tag,))
|
||||||
status_text, tag = "Ready", "ready"
|
|
||||||
has_selectable_items = True
|
|
||||||
else:
|
|
||||||
status_text, tag = "Not Exported", "not_exported"
|
|
||||||
|
|
||||||
self.segments_tree.insert("", "end", iid=str(i), values=(status_text, name, start_time, end_time, f"{duration:.2f}"), 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)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user