diff --git a/config/warning_images/generic/PERVIETÀ.png b/config/warning_images/generic/PERVIETÀ.png new file mode 100644 index 0000000..ebd61ce Binary files /dev/null and b/config/warning_images/generic/PERVIETÀ.png differ diff --git a/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.ui b/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.ui index 2b31c7a..68bbbc8 100644 --- a/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.ui +++ b/src/ui/recipe_spec_and_step_editor/recipe_spec_and_step_editor.ui @@ -436,7 +436,7 @@ Fasi di Test - Free Fall + Test Pervietà diff --git a/src/ui/test_leak/test_leak.py b/src/ui/test_leak/test_leak.py index 2abe0d0..8ccc961 100644 --- a/src/ui/test_leak/test_leak.py +++ b/src/ui/test_leak/test_leak.py @@ -158,28 +158,65 @@ class Test_Leak(Test_Test): super().visualize(None, img=self.status_imgs_full["calibrated-leak"]) else: if step.step_type == "test_freefall_leak": + # Flag Free Fall mode for special UI handling + self._free_fall_mode = True + self._free_fall_img_scale = 0.95 # scale image to almost full available space + + # Hide parameters not relevant during free-fall + for name in [ + "label_18", # Tempo di riempimento + "fill_time_l", + "label_19", # Tempo di assestamento + "settle_time_l", + "label_22", # Tempo di prova + "meas_time_l", + "template_label", # Etichetta selezionata (caption) + "template_print_l", # Etichetta selezionata (value) + "valore_PID", # Valore PID (caption) + "valore_PID_l", # Valore PID (value) + "label_17", # unit 's' for fill time + "label_20", # unit 's' for settling/measuring time + "label_21", # possibly another unit/aux label to hide in free fall + ]: + if hasattr(self, name): + getattr(self, name).setVisible(False) + self.display_text(text="COLLAUDARE USANDO IL SISTEMA DI FLUSSAGGIO ALLA FINE DELLA PROVA POSIZIONRE IL PEZZO PER LA PROVATENUTA") - # Try to load custom Free Fall image from instruction images - try: - instr_folder = (self.config.get("machine", {}) or {}).get("instruction_folder", getattr(self.config, "machine_id", "")).strip() or getattr(self.config, "machine_id", "") - except Exception: - instr_folder = getattr(self.config, "machine_id", "") - img_path = None - for ext in ("png", "jpg", "jpeg"): - candidate = f"config/instruction_images/{instr_folder}/free_fall.{ext}" - if os.path.exists(candidate): - img_path = candidate - break + + # Show placeholder image for free-fall: PERVIETÀ.png + pervieta_path_candidates = [ + "config/warning_images/generic/PERVIETÀ.png", + "config/warning_images/generic/PERVIETA.png", + "config/warning_images/generic/pervieta.png", + ] + img_path = next((p for p in pervieta_path_candidates if os.path.exists(p)), None) if img_path is not None: super().visualize(None, img=QPixmap(img_path)) else: - # Fallback to default image - super().visualize(None, img=self.status_imgs_full[None]) + # Fallbacks: try the older instruction image or default + try: + instr_folder = (self.config.get("machine", {}) or {}).get("instruction_folder", getattr(self.config, "machine_id", "")).strip() or getattr(self.config, "machine_id", "") + except Exception: + instr_folder = getattr(self.config, "machine_id", "") + ff_img = None + for ext in ("png", "jpg", "jpeg"): + candidate = f"config/instruction_images/{instr_folder}/free_fall.{ext}" + if os.path.exists(candidate): + ff_img = candidate + break + if ff_img is not None: + super().visualize(None, img=QPixmap(ff_img)) + else: + super().visualize(None, img=self.status_imgs_full[None]) else: + # Ensure Free Fall mode is disabled for other steps + self._free_fall_mode = False + self._free_fall_img_scale = None self.display_text(text="COLLEGARE GLI ATTACCHI PNEUMATICI E PREMERE START PER INIZIARE LA PROVA TENUTA") super().visualize(None, img=self.status_imgs_full[None]) - self.template_print_l.setVisible(True) - self.template_label.setVisible(True) + if step.step_type != "test_freefall_leak": + self.template_print_l.setVisible(True) + self.template_label.setVisible(True) if self.simulate: QApplication.processEvents() time.sleep(2) @@ -445,3 +482,26 @@ class Test_Leak(Test_Test): # Always disable start button and enable stop button during connection issues self.start_b.setEnabled(False) self.stop_b.setEnabled(True) + + + def resizeEvent(self, event=None): + # First, let the base class handle default behavior + try: + super().resizeEvent(event) + except Exception: + # Fallback: ignore if base cannot handle the event + pass + # Apply Free Fall specific image scaling (half space) + if getattr(self, "_free_fall_mode", False): + if hasattr(self, "img_l") and hasattr(self, "img") and self.img_l is not None and self.img is not None: + try: + scale = float(getattr(self, "_free_fall_img_scale", 0.5) or 0.5) + except Exception: + scale = 0.5 + w = max(1, int(self.img_l.width() * scale)) + h = max(1, int(self.img_l.height() * scale)) + try: + self.img_l.setPixmap(self.img.scaled(w, h, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + except Exception: + # If scaling fails, leave as base-class result + pass