Refactor thumbnail layout and navigation in ProjectView: dynamically calculate items per row based on window width and thumbnail size, and add keyboard shortcuts for resizing thumbnails. Update instructions to reflect new functionality.
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -274,7 +307,11 @@ class ProjectView:
|
||||
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)
|
||||
|
||||
|
Reference in New Issue
Block a user