feat(main.py): add feedback message system for operations and update UI rendering

This commit is contained in:
2025-09-07 19:55:23 +02:00
parent b54131e4e7
commit 54b5c3b490

View File

@@ -125,6 +125,11 @@ class VideoEditor:
self.progress_bar_text = ""
self.progress_bar_fps = 0.0 # Current rendering FPS
# Feedback message state
self.feedback_message = ""
self.feedback_message_time = None
self.feedback_message_duration = 2.0 # seconds to show message
# Crop adjustment settings
self.crop_size_step = self.CROP_SIZE_STEP
@@ -208,12 +213,15 @@ class VideoEditor:
success = cv2.imwrite(str(screenshot_path), processed_frame)
if success:
print(f"Screenshot saved: {screenshot_name}")
self.show_feedback_message(f"Screenshot saved: {screenshot_name}")
return True
else:
print(f"Error: Could not save screenshot to {screenshot_path}")
self.show_feedback_message("Error: Could not save screenshot")
return False
else:
print("Error: Could not process frame for screenshot")
self.show_feedback_message("Error: Could not process frame")
return False
def _get_media_files_from_directory(self, directory: Path) -> List[Path]:
@@ -578,6 +586,52 @@ class VideoEditor:
self.progress_bar_complete_time = None
self.progress_bar_fps = 0.0
def show_feedback_message(self, message: str):
"""Show a feedback message on screen for a few seconds"""
self.feedback_message = message
self.feedback_message_time = time.time()
def draw_feedback_message(self, frame):
"""Draw feedback message on frame if visible"""
if not self.feedback_message or not self.feedback_message_time:
return
# Check if message should still be shown
elapsed = time.time() - self.feedback_message_time
if elapsed > self.feedback_message_duration:
self.feedback_message = ""
self.feedback_message_time = None
return
height, width = frame.shape[:2]
# Calculate message position (center of frame)
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.0
thickness = 2
# Get text size
text_size = cv2.getTextSize(self.feedback_message, font, font_scale, thickness)[0]
text_x = (width - text_size[0]) // 2
text_y = (height + text_size[1]) // 2
# Draw background rectangle
padding = 10
rect_x1 = text_x - padding
rect_y1 = text_y - text_size[1] - padding
rect_x2 = text_x + text_size[0] + padding
rect_y2 = text_y + padding
# Semi-transparent background
overlay = frame.copy()
cv2.rectangle(overlay, (rect_x1, rect_y1), (rect_x2, rect_y2), (0, 0, 0), -1)
alpha = 0.7
cv2.addWeighted(overlay, alpha, frame, 1 - alpha, 0, frame)
# Draw text with shadow
cv2.putText(frame, self.feedback_message, (text_x + 2, text_y + 2), font, font_scale, (0, 0, 0), thickness + 1)
cv2.putText(frame, self.feedback_message, (text_x, text_y), font, font_scale, (255, 255, 255), thickness)
def draw_progress_bar(self, frame):
"""Draw progress bar on frame if visible - positioned at top with full width"""
if not self.progress_bar_visible:
@@ -980,6 +1034,9 @@ class VideoEditor:
# Draw progress bar (if visible)
self.draw_progress_bar(canvas)
# Draw feedback message (if visible)
self.draw_feedback_message(canvas)
window_title = "Image Editor" if self.is_image_mode else "Video Editor"
cv2.imshow(window_title, canvas)