← Back to team overview

openshot.code team mailing list archive

[Branch ~openshot.code/openshot/main] Rev 654: Made a change to help avoid gaps on the timeline when removing clips. Now, holding down the 'Shif...

 

------------------------------------------------------------
revno: 654
committer: Andy Finch <we.rocked.in79@xxxxxxxxx>
branch nick: openshot
timestamp: Tue 2012-04-17 21:14:47 +0100
message:
  Made a change to help avoid gaps on the timeline when removing clips. Now, holding down the 'Shift' key while activating the 'Remove Clip' menu item will remove the clip and close the gap, i.e. any subsequent clips will be moved into the space left by the removed clip.
modified:
  openshot/windows/MainGTK.py
  openshot/windows/ui/Main.ui


--
lp:openshot
https://code.launchpad.net/~openshot.code/openshot/main

Your team OpenShot Code is subscribed to branch lp:openshot.
To unsubscribe from this branch go to https://code.launchpad.net/~openshot.code/openshot/main/+edit-subscription
=== modified file 'openshot/windows/MainGTK.py'
--- openshot/windows/MainGTK.py	2012-04-11 20:32:52 +0000
+++ openshot/windows/MainGTK.py	2012-04-17 20:14:47 +0000
@@ -2219,6 +2219,21 @@
 					#add a marker when the key is pressed
 					self.on_tlbAddMarker_clicked(widget)
 					return True
+				
+			elif event.keyval == gtk.keysyms.Shift_L or event.keyval == gtk.keysyms.Shift_R:
+				#set the shift mode to true
+				self._SHIFT = True
+				return True
+				
+	def on_frmMain_key_release_event(self, widget, event):
+		keyname = str.lower(gtk.gdk.keyval_name(event.keyval))
+		
+		if self.is_edit_mode == False:
+			
+			if event.keyval == gtk.keysyms.Shift_L or event.keyval == gtk.keysyms.Shift_R:
+				# Release shift mode
+				self._SHIFT = False
+				return True
 		
 					
 	def toggle_mode(self):
@@ -3714,17 +3729,54 @@
 	def on_mnuRemoveClip_activate(self, event, *args):
 		print "on_mnuRemoveClip_activate clicked"
 		
-		# find middle x coordinate
-		clip_length_pixels = self.selected_clip_item.get_bounds().x2  - self.selected_clip_item.get_bounds().x1
-		x_middle = self.selected_clip_item.get_bounds().x1 #+ (clip_length_pixels / 2.0)
-		
-		# find middle y coordinate
-		clip_height_pixels = self.selected_clip_item.get_bounds().y2  - self.selected_clip_item.get_bounds().y1
-		y_middle = self.selected_clip_item.get_bounds().y1 + (clip_height_pixels / 2.0)
-		
-		# animate the clip to turn invisible
-		self.selected_clip_item.connect("animation-finished", self.clip_removed)
-		self.selected_clip_item.animate(x_middle, y_middle, 0.0, 0.0, True, 200, 4, goocanvas.ANIMATE_FREEZE)
+		if self.form._SHIFT == True:
+			
+			# close the gap between removed clips
+			# (this only works on a single track)
+			length_of_clip = self.selected_clip.length()
+			
+			shift = 0.0
+			start_of_selected = float(self.selected_clip.position_on_track)
+			
+			# no need to animate the clip removal,
+			# as the other clips will be shifted to where it was.
+			self.clip_removed(self.selected_clip)
+			
+			try:
+				# amount to shift
+				shift = float(length_of_clip * -1)
+					
+					
+			except:
+				# invalid shift amount... default to 0
+				shift = 0.0
+					
+			if shift:
+				# loop through clips, and shift
+				for clip in self.selected_clip.parent.clips:
+					start = float(clip.position_on_track)
+					if start >= start_of_selected:
+						clip.position_on_track = start + shift
+						
+			self.project.set_project_modified(is_modified=True, refresh_xml=True, type = _("Shifted clips"))
+							
+			# render timeline
+			self.form.refresh()
+			
+		else:
+			
+			# find middle x coordinate
+			clip_length_pixels = self.selected_clip_item.get_bounds().x2  - self.selected_clip_item.get_bounds().x1
+			x_middle = self.selected_clip_item.get_bounds().x1 #+ (clip_length_pixels / 2.0)
+			
+			# find middle y coordinate
+			clip_height_pixels = self.selected_clip_item.get_bounds().y2  - self.selected_clip_item.get_bounds().y1
+			y_middle = self.selected_clip_item.get_bounds().y1 + (clip_height_pixels / 2.0)
+			
+			# animate the clip to turn invisible
+			self.selected_clip_item.connect("animation-finished", self.clip_removed)
+			self.selected_clip_item.animate(x_middle, y_middle, 0.0, 0.0, True, 200, 4, goocanvas.ANIMATE_FREEZE)
+
 				
 		
 	def clip_removed(self, item, *args):

=== modified file 'openshot/windows/ui/Main.ui'
--- openshot/windows/ui/Main.ui	2011-12-04 14:56:41 +0000
+++ openshot/windows/ui/Main.ui	2012-04-17 20:14:47 +0000
@@ -42,6 +42,7 @@
     <signal name="window-state-event" handler="on_frmMain_window_state_event" swapped="no"/>
     <signal name="configure-event" handler="on_frmMain_configure_event" swapped="no"/>
     <signal name="key-press-event" handler="on_frmMain_key_press_event" swapped="no"/>
+    <signal name="key-release-event" handler="on_frmMain_key_release_event" swapped="no"/>
     <signal name="delete-event" handler="on_frmMain_delete_event" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vboxMenu">