diff --git a/croppa/main.py b/croppa/main.py index 4942402..dfa0127 100644 --- a/croppa/main.py +++ b/croppa/main.py @@ -148,8 +148,12 @@ class ProjectView: cv2.putText(canvas, text, (text_x, text_y), font, 1.0, self.TEXT_COLOR, 2) return canvas - # Calculate layout - items_per_row = min(self.items_per_row, len(self.video_files)) + # Calculate layout - dynamically determine items per row based on thumbnail size + # Calculate how many thumbnails can fit in the window width + available_width = self.window_width - self.THUMBNAIL_MARGIN # Account for left margin + items_per_row = max(1, (available_width + self.THUMBNAIL_MARGIN) // (self.THUMBNAIL_SIZE[0] + self.THUMBNAIL_MARGIN)) + items_per_row = min(items_per_row, len(self.video_files)) # Don't exceed number of videos + item_width = (self.window_width - (items_per_row + 1) * self.THUMBNAIL_MARGIN) // items_per_row thumbnail_width = min(item_width, self.THUMBNAIL_SIZE[0]) thumbnail_height = int(thumbnail_width * self.THUMBNAIL_SIZE[1] / self.THUMBNAIL_SIZE[0]) @@ -225,11 +229,16 @@ class ProjectView: cv2.putText(canvas, progress_text, (progress_text_x, text_y), cv2.FONT_HERSHEY_SIMPLEX, 0.4, self.TEXT_COLOR, 1) + # Calculate current items per row for display + available_width = self.window_width - self.THUMBNAIL_MARGIN + current_items_per_row = max(1, (available_width + self.THUMBNAIL_MARGIN) // (self.THUMBNAIL_SIZE[0] + self.THUMBNAIL_MARGIN)) + current_items_per_row = min(current_items_per_row, len(self.video_files)) + # Draw instructions instructions = [ "Project View - Videos in current directory", - "WASD: Navigate | E: Open video | ESC: Back to editor", - f"Showing {len(self.video_files)} videos" + "WASD: Navigate | E: Open video | Q: Larger thumbnails | Y: Smaller thumbnails | ESC: Back to editor", + f"Showing {len(self.video_files)} videos | {current_items_per_row} per row | Thumbnail: {self.THUMBNAIL_SIZE[0]}x{self.THUMBNAIL_SIZE[1]}" ] for i, instruction in enumerate(instructions): @@ -247,14 +256,24 @@ class ProjectView: if self.video_files and 0 <= self.selected_index < len(self.video_files): return f"open_video:{self.video_files[self.selected_index]}" elif key == ord('w') or key == ord('W'): # W - Up - if self.selected_index >= self.items_per_row: - self.selected_index -= self.items_per_row + # Calculate current items per row dynamically + available_width = self.window_width - self.THUMBNAIL_MARGIN + current_items_per_row = max(1, (available_width + self.THUMBNAIL_MARGIN) // (self.THUMBNAIL_SIZE[0] + self.THUMBNAIL_MARGIN)) + current_items_per_row = min(current_items_per_row, len(self.video_files)) + + if self.selected_index >= current_items_per_row: + self.selected_index -= current_items_per_row else: self.selected_index = 0 self._update_scroll() elif key == ord('s') or key == ord('S'): # S - Down - if self.selected_index + self.items_per_row < len(self.video_files): - self.selected_index += self.items_per_row + # Calculate current items per row dynamically + available_width = self.window_width - self.THUMBNAIL_MARGIN + current_items_per_row = max(1, (available_width + self.THUMBNAIL_MARGIN) // (self.THUMBNAIL_SIZE[0] + self.THUMBNAIL_MARGIN)) + current_items_per_row = min(current_items_per_row, len(self.video_files)) + + if self.selected_index + current_items_per_row < len(self.video_files): + self.selected_index += current_items_per_row else: self.selected_index = len(self.video_files) - 1 self._update_scroll() @@ -266,6 +285,20 @@ class ProjectView: if self.selected_index < len(self.video_files) - 1: self.selected_index += 1 self._update_scroll() + elif key == ord('q') or key == ord('Q'): # Q - Make thumbnails LARGER + # Increase thumbnail size (maximum 300x225) + new_width = min(300, self.THUMBNAIL_SIZE[0] + 20) + new_height = int(new_width * self.THUMBNAIL_SIZE[1] / self.THUMBNAIL_SIZE[0]) + self.THUMBNAIL_SIZE = (new_width, new_height) + self.ITEM_HEIGHT = self.THUMBNAIL_SIZE[1] + self.PROGRESS_BAR_HEIGHT + self.TEXT_HEIGHT + self.THUMBNAIL_MARGIN + print(f"Thumbnail size: {self.THUMBNAIL_SIZE}") + elif key == ord('y') or key == ord('Y'): # Y - Make thumbnails SMALLER + # Decrease thumbnail size (minimum 100x75) + new_width = max(100, self.THUMBNAIL_SIZE[0] - 20) + new_height = int(new_width * self.THUMBNAIL_SIZE[1] / self.THUMBNAIL_SIZE[0]) + self.THUMBNAIL_SIZE = (new_width, new_height) + self.ITEM_HEIGHT = self.THUMBNAIL_SIZE[1] + self.PROGRESS_BAR_HEIGHT + self.TEXT_HEIGHT + self.THUMBNAIL_MARGIN + print(f"Thumbnail size: {self.THUMBNAIL_SIZE}") return "none" @@ -273,8 +306,12 @@ class ProjectView: """Update scroll offset based on selected item""" if not self.video_files: return - - items_per_row = min(self.items_per_row, len(self.video_files)) + + # Calculate current items per row dynamically + available_width = self.window_width - self.THUMBNAIL_MARGIN + items_per_row = max(1, (available_width + self.THUMBNAIL_MARGIN) // (self.THUMBNAIL_SIZE[0] + self.THUMBNAIL_MARGIN)) + items_per_row = min(items_per_row, len(self.video_files)) + selected_row = self.selected_index // items_per_row visible_rows = max(1, self.window_height // self.ITEM_HEIGHT)