Compare commits

...

2 Commits

2 changed files with 2188 additions and 20 deletions

2165
video_editor (3).py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -239,8 +239,8 @@ class ShortsEditorGUI:
# If parent exists, create as child window; otherwise create root window # If parent exists, create as child window; otherwise create root window
self.editor_window = tk.Toplevel(self.parent) if self.parent else tk.Tk() self.editor_window = tk.Toplevel(self.parent) if self.parent else tk.Tk()
self.editor_window.title("Professional Shorts Editor") self.editor_window.title("Professional Shorts Editor")
self.editor_window.geometry("1200x800") # Optimal size for video editing self.editor_window.geometry("1200x900") # Increased height for Audio 2 visibility
self.editor_window.minsize(900, 600) # Minimum usable size self.editor_window.minsize(900, 700) # Increased minimum size
self.editor_window.configure(bg=self.colors['bg_primary']) # Apply dark theme self.editor_window.configure(bg=self.colors['bg_primary']) # Apply dark theme
# Configure responsive layout for window resizing # Configure responsive layout for window resizing
@ -340,14 +340,14 @@ class ShortsEditorGUI:
# Professional Timeline Workspace - Multi-track editing environment # Professional Timeline Workspace - Multi-track editing environment
# Fixed height prevents timeline from shrinking when window is resized # Fixed height prevents timeline from shrinking when window is resized
# This is where users perform the majority of their editing work # This is where users perform the majority of their editing work
timeline_workspace = tk.Frame(player_frame, bg=self.colors['bg_secondary'], height=380) timeline_workspace = tk.Frame(player_frame, bg=self.colors['bg_secondary'], height=480)
timeline_workspace.grid(row=1, column=0, sticky="ew", padx=15, pady=(0, 15)) timeline_workspace.grid(row=1, column=0, sticky="ew", padx=15, pady=(0, 15))
timeline_workspace.pack_propagate(False) # Maintain fixed height for consistent layout timeline_workspace.pack_propagate(False) # Maintain fixed height for consistent layout
# Timeline header - contains editing mode controls and timeline options # Timeline header - contains editing mode controls and timeline options
# These controls affect how the user interacts with timeline elements # These controls affect how the user interacts with timeline elements
header_frame = tk.Frame(timeline_workspace, bg=self.colors['bg_secondary']) header_frame = tk.Frame(timeline_workspace, bg=self.colors['bg_secondary'])
header_frame.pack(fill="x", pady=(10, 5)) header_frame.pack(fill="x", pady=(5, 5))
# Left side timeline controls - editing modes and interaction options # Left side timeline controls - editing modes and interaction options
left_controls = tk.Frame(header_frame, bg=self.colors['bg_secondary']) left_controls = tk.Frame(header_frame, bg=self.colors['bg_secondary'])
@ -450,19 +450,24 @@ class ShortsEditorGUI:
canvas_frame = tk.Frame(timeline_container, bg=self.colors['bg_tertiary']) canvas_frame = tk.Frame(timeline_container, bg=self.colors['bg_tertiary'])
canvas_frame.pack(side="right", fill="both", expand=True) canvas_frame.pack(side="right", fill="both", expand=True)
# Create canvas with scrollbars # Create canvas without internal scrollbars
self.timeline_canvas = tk.Canvas(canvas_frame, bg='#1a1a1a', self.timeline_canvas = tk.Canvas(canvas_frame, bg='#1a1a1a',
highlightthickness=0, scrollregion=(0, 0, 2000, 400)) highlightthickness=0, scrollregion=(0, 0, 2000, 400))
# Scrollbars # Pack canvas to fill the frame completely
h_scrollbar = ttk.Scrollbar(canvas_frame, orient="horizontal", command=self.timeline_canvas.xview) self.timeline_canvas.pack(fill="both", expand=True)
v_scrollbar = ttk.Scrollbar(canvas_frame, orient="vertical", command=self.sync_vertical_scroll)
self.timeline_canvas.configure(xscrollcommand=h_scrollbar.set, yscrollcommand=v_scrollbar.set)
# Pack scrollbars and canvas # Create external horizontal scrollbar for timeline control
h_scrollbar.pack(side="bottom", fill="x") # Place it outside the timeline in the workspace area
v_scrollbar.pack(side="right", fill="y") external_scrollbar_frame = tk.Frame(timeline_workspace, bg=self.colors['bg_primary'], height=20)
self.timeline_canvas.pack(side="left", fill="both", expand=True) external_scrollbar_frame.pack(side="bottom", fill="x", padx=5, pady=2)
external_scrollbar_frame.pack_propagate(False)
# Horizontal scrollbar outside timeline but controlling it
self.external_h_scrollbar = ttk.Scrollbar(external_scrollbar_frame, orient="horizontal",
command=self.timeline_canvas.xview)
self.timeline_canvas.configure(xscrollcommand=self.external_h_scrollbar.set)
self.external_h_scrollbar.pack(fill="x", expand=True)
# Bind professional timeline events # Bind professional timeline events
self.timeline_canvas.bind("<Button-1>", self.timeline_click) self.timeline_canvas.bind("<Button-1>", self.timeline_click)
@ -609,13 +614,13 @@ class ShortsEditorGUI:
# Bottom line of track # Bottom line of track
self.track_road_canvas.create_line( self.track_road_canvas.create_line(
0, y_pos + track_height, canvas_width, y_pos + track_height, 0, y_pos + track_height, canvas_width, y_pos + track_height,
fill=self.colors['border'], width=1, tags="road_lines" fill=self.colors['border'], width=3, tags="road_lines"
) )
# Track type indicator line (left edge with track color) # Track type indicator line (left edge with track color)
self.track_road_canvas.create_line( self.track_road_canvas.create_line(
0, y_pos, 0, y_pos + track_height, 0, y_pos, 0, y_pos + track_height,
fill=track_info['color'], width=3, tags="road_lines" fill=track_info['color'], width=1, tags="road_lines"
) )
# Center dashed line for alignment reference # Center dashed line for alignment reference
@ -634,11 +639,9 @@ class ShortsEditorGUI:
self.editor_window.after(10, self.draw_track_road_lines) self.editor_window.after(10, self.draw_track_road_lines)
def sync_vertical_scroll(self, *args): def sync_vertical_scroll(self, *args):
"""Synchronize vertical scrolling between track panel and timeline canvas""" """Vertical scrolling disabled - no scrollbars for up/down movement"""
# Scroll both canvases together # Vertical scrolling removed for cleaner interface
self.timeline_canvas.yview(*args) pass
if hasattr(self, 'track_road_canvas'):
self.track_road_canvas.yview(*args)
def create_track_control(self, track_id, track_info): def create_track_control(self, track_id, track_info):
"""Create control panel for a single track positioned on road lines""" """Create control panel for a single track positioned on road lines"""