Merge lp:~nagos/openshot/nagos into lp:openshot/1.4

Proposed by Vladimir Yakovlev
Status: Needs review
Proposed branch: lp:~nagos/openshot/nagos
Merge into: lp:openshot/1.4
Diff against target: 218 lines (+89/-18)
5 files modified
openshot/classes/clip.py (+27/-0)
openshot/classes/track.py (+7/-8)
openshot/windows/MainGTK.py (+36/-0)
openshot/windows/glade/Main.glade (+14/-0)
openshot/windows/preferences.py (+5/-10)
To merge this branch: bzr merge lp:~nagos/openshot/nagos
Reviewer Review Type Date Requested Status
Jonathan Thomas Pending
Review via email: mp+20318@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Vladimir Yakovlev (nagos) wrote :

New feature to remove empty spaces in project. Space removed from all tracks without destroying transitions and relative position of clips.
Now it in project menu.

Plus proper clips compare thru __cmp__ without compare_clip. All sort/min/max work simply like sort([clip1,clip2])

Snap of razor. If you click in 10 pixels away from playhead, clip will be divided in playhead position. Snap button enable/disable this feature.

BUG:518504 Tabs in preferences can't be switched in localised version.

Enable/disable audio/video buttons now can be clicked only with arrow cursor. Without it clit divided in two with disabled audio.

Minor localisation strings.

lp:~nagos/openshot/nagos updated
209. By Vladimir Yakovlev

Bug with overlaying clips

210. By Vladimir Yakovlev

Last changes from main branch

Unmerged revisions

210. By Vladimir Yakovlev

Last changes from main branch

209. By Vladimir Yakovlev

Bug with overlaying clips

208. By Vladimir Yakovlev

New feature to remove empty spaces in project. Space removed from all tracks without destroying transitions and relative position of clips.
Now it in project menu.

Plus proper clips compare thry __cmp__ without compare_clip. All sort/min/max work simply like sort([clip1,clip2])

207. By Vladimir Yakovlev

Snap razor position only if Snap kep enabled

206. By Vladimir Yakovlev

Enable/Disable of video/audio now work only with arrow key. Now you can slice clip in position of audio button.

205. By Vladimir Yakovlev

openshot/openshot_render.py now executable

204. By Vladimir Yakovlev

Rounding splitting position.
Split track on video position if clicked in 10 pixels around.

203. By Vladimir Yakovlev

Some more av format translations

202. By Vladimir Yakovlev

No need to compare categories by name in on_icvCategories_selection_changed, left icon list is not sortable.

201. By Vladimir Yakovlev

AV Formats localization

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openshot/classes/clip.py'
--- openshot/classes/clip.py 2010-02-27 19:51:35 +0000
+++ openshot/classes/clip.py 2010-04-06 18:25:42 +0000
@@ -74,6 +74,17 @@
74 # end_time = 25.074 # end_time = 25.0
75 # position_on_track = 3.075 # position_on_track = 3.0
76 76
77 def __cmp__(self, other):
78 return cmp(self.position_on_track, other.position_on_track)
79
80 def __eq__(self, other):
81 if type(self)<>type(other): return False
82 if self.position_on_track == other.position_on_track: return True
83 else: return False
84
85 def __ne__(self,other):
86 if type(self)<>type(other): return False
87 return self.position_on_track <> other.position_on_track
7788
78 def length(self):89 def length(self):
79 # calculate the length of this clip (in decimal seconds)90 # calculate the length of this clip (in decimal seconds)
@@ -1640,6 +1651,14 @@
1640 seconds_for_x = x / pixels_per_second1651 seconds_for_x = x / pixels_per_second
1641 original_clip_length = self.length()1652 original_clip_length = self.length()
1642 original_end_time = self.end_time1653 original_end_time = self.end_time
1654
1655 #split in video position if clicked not far from it
1656 (isArrow, isRazor, isSnap, isResize) = self.parent.parent.project.form.get_toolbar_options()
1657 if isSnap:
1658 video_frame = self.parent.parent.project.form.MyVideo.p.position()
1659 video_position = video_frame / self.parent.parent.project.fps()
1660 video_pixel = video_position*pixels_per_second
1661 if abs(video_pixel - x) < 10: seconds_for_x = video_position
16431662
1644 # remove clip from goocanvas1663 # remove clip from goocanvas
1645 parent = canvas_item.get_parent()1664 parent = canvas_item.get_parent()
@@ -1884,6 +1903,10 @@
1884 1903
1885 1904
1886 def on_visible_click (self, item, target, event):1905 def on_visible_click (self, item, target, event):
1906 #work only with arrow cursor
1907 (isArrow, isRazor, isSnap, isResize) = self.parent.parent.project.form.get_toolbar_options()
1908 if not isArrow: return
1909
1887 # get a reference to the 2 main canvas objects & theme1910 # get a reference to the 2 main canvas objects & theme
1888 theme = self.parent.parent.project.theme1911 theme = self.parent.parent.project.theme
1889 1912
@@ -1915,6 +1938,10 @@
1915 1938
1916 1939
1917 def on_audio_click (self, item, target, event):1940 def on_audio_click (self, item, target, event):
1941 #work only with arrow cursor
1942 (isArrow, isRazor, isSnap, isResize) = self.parent.parent.project.form.get_toolbar_options()
1943 if not isArrow: return
1944
1918 # get a reference to the 2 main canvas objects & theme1945 # get a reference to the 2 main canvas objects & theme
1919 theme = self.parent.parent.project.theme1946 theme = self.parent.parent.project.theme
1920 1947
19211948
=== modified file 'openshot/classes/track.py'
--- openshot/classes/track.py 2010-01-31 22:50:27 +0000
+++ openshot/classes/track.py 2010-04-06 18:25:42 +0000
@@ -19,6 +19,7 @@
19import uuid19import uuid
20import gtk, goocanvas20import gtk, goocanvas
21from classes import clip, files, transition21from classes import clip, files, transition
22import warnings
2223
23# init the foreign language24# init the foreign language
24from language import Language_Init25from language import Language_Init
@@ -320,16 +321,14 @@
320 321
321 def reorder_clips(self):322 def reorder_clips(self):
322 # get a list of all clips on this track323 # get a list of all clips on this track
323 self.clips.sort(self.compare_clip)324 self.clips.sort()
324 325
325 326
326 def compare_clip(self, MyClip1, MyClip2):327 def compare_clip(self, MyClip1, MyClip2):
327 if MyClip1.position_on_track > MyClip2.position_on_track:328 warnings.warn('compare_clip not need more.'
328 return 1329 ' Just use clip1==clip2 or sorted([clip1,clip2])',
329 elif MyClip1.position_on_track == MyClip2.position_on_track:330 DeprecationWarning,2)
330 return 0331 return cmp(MyClip1,MyClip2)
331 else:
332 return -1
333332
334 333
335 def reorder_transitions(self):334 def reorder_transitions(self):
@@ -343,4 +342,4 @@
343 elif MyClip1.position_on_track == MyClip2.position_on_track:342 elif MyClip1.position_on_track == MyClip2.position_on_track:
344 return 0343 return 0
345 else:344 else:
346 return -1
347\ No newline at end of file345\ No newline at end of file
346 return -1
348347
=== modified file 'openshot/openshot_render.py' (properties changed: -x to +x)
=== modified file 'openshot/windows/MainGTK.py'
--- openshot/windows/MainGTK.py 2010-03-30 04:23:04 +0000
+++ openshot/windows/MainGTK.py 2010-04-06 18:25:42 +0000
@@ -1177,6 +1177,42 @@
1177 print "on_mnuNewTitle_activate called with self.%s" % widget.get_name()1177 print "on_mnuNewTitle_activate called with self.%s" % widget.get_name()
1178 Titles.frmNewTitle(form=self, project=self.project)1178 Titles.frmNewTitle(form=self, project=self.project)
11791179
1180 def on_mnuClearSpace_activate(self, widget, *args):
1181 print "on_mnuClearSpace_activate called with self.%s" % widget.get_name()
1182
1183 def moveClips(pos,length):
1184 for clip in all_clips:
1185 if clip.position_on_track>=pos:
1186 clip.position_on_track-=length
1187 ph = self.project.sequences[0].play_head_position
1188 if ph >= pos:
1189 self.project.sequences[0].move_play_head(ph-length)
1190 self.project.sequences[0].update_video()
1191 for trans in self.project.sequences[0].tracks[0].transitions:
1192 if trans.position_on_track>=pos:
1193 trans.position_on_track-=length
1194
1195 #create large clip pool
1196 all_clips=[]
1197 for track in self.project.sequences[0].tracks:
1198 for clip in track.clips: all_clips.append(clip)
1199
1200 all_clips = sorted(all_clips)
1201 for clip in all_clips:
1202 index = all_clips.index(clip)
1203 space = 0
1204 if index == 0 :
1205 space = clip.position_on_track
1206 elif index > 0:
1207 prevs=filter(lambda x: x.position_on_track < clip.position_on_track, all_clips)
1208 prev = max(prevs,key=lambda x: x.position_on_track+x.length())
1209 space = clip.position_on_track - \
1210 (prev.position_on_track+prev.length())
1211 if space > 0: moveClips(clip.position_on_track,space)
1212
1213 self.project.sequences[0].Render()
1214 self.project.sequences[0].RenderPlayHead()
1215 self.project.set_project_modified(is_modified=True, refresh_xml=True, type = _("Space Cleared"))
11801216
1181 def on_mnuNewSequence_activate(self, widget, *args):1217 def on_mnuNewSequence_activate(self, widget, *args):
1182 print "on_mnuNewSequence_activate called with self.%s" % widget.get_name()1218 print "on_mnuNewSequence_activate called with self.%s" % widget.get_name()
11831219
=== modified file 'openshot/windows/glade/Main.glade'
--- openshot/windows/glade/Main.glade 2010-03-11 07:13:31 +0000
+++ openshot/windows/glade/Main.glade 2010-04-06 18:25:42 +0000
@@ -244,6 +244,20 @@
244 </widget>244 </widget>
245 </child>245 </child>
246 <child>246 <child>
247 <widget class="GtkImageMenuItem" id="mnuClearSpace">
248 <property name="visible">True</property>
249 <property name="label" translatable="yes">Clear Space</property>
250 <property name="use_underline">True</property>
251 <signal name="activate" handler="on_mnuClearSpace_activate"/>
252 <child internal-child="image">
253 <widget class="GtkImage" id="menu-item-image30">
254 <property name="visible">True</property>
255 <property name="stock">gtk-new</property>
256 </widget>
257 </child>
258 </widget>
259 </child>
260 <child>
247 <widget class="GtkImageMenuItem" id="mnuNewSequence">261 <widget class="GtkImageMenuItem" id="mnuNewSequence">
248 <property name="label" translatable="yes">New Sequence...</property>262 <property name="label" translatable="yes">New Sequence...</property>
249 <property name="use_underline">True</property>263 <property name="use_underline">True</property>
250264
=== modified file 'openshot/windows/preferences.py'
--- openshot/windows/preferences.py 2010-02-19 06:26:14 +0000
+++ openshot/windows/preferences.py 2010-04-06 18:25:42 +0000
@@ -90,14 +90,17 @@
90 90
91 self.VCodecList = gtk.ListStore(str)91 self.VCodecList = gtk.ListStore(str)
92 self.tvVCodecs.set_model(self.VCodecList)92 self.tvVCodecs.set_model(self.VCodecList)
93
93 tree.treeviewAddGeneralTextColumn(self.tvVCodecs,_('Video Codecs'),0)94 tree.treeviewAddGeneralTextColumn(self.tvVCodecs,_('Video Codecs'),0)
94 95
95 self.ACodecList = gtk.ListStore(str)96 self.ACodecList = gtk.ListStore(str)
96 self.tvACodecs.set_model(self.ACodecList)97 self.tvACodecs.set_model(self.ACodecList)
98
97 tree.treeviewAddGeneralTextColumn(self.tvACodecs,_('Audio Codecs'),0)99 tree.treeviewAddGeneralTextColumn(self.tvACodecs,_('Audio Codecs'),0)
98 100
99 self.FormatsList = gtk.ListStore(str)101 self.FormatsList = gtk.ListStore(str)
100 self.tvFormats.set_model(self.FormatsList)102 self.tvFormats.set_model(self.FormatsList)
103
101 tree.treeviewAddGeneralTextColumn(self.tvFormats,_('Formats'),0) 104 tree.treeviewAddGeneralTextColumn(self.tvFormats,_('Formats'),0)
102 105
103 self.populate_codecs()106 self.populate_codecs()
@@ -200,15 +203,7 @@
200 selected = icon_view.get_selected_items()203 selected = icon_view.get_selected_items()
201 if len(selected) == 0: return204 if len(selected) == 0: return
202 i = selected[0][0]205 i = selected[0][0]
203 category = self.model[i][0]206 self.nbPrefPages.set_current_page(i)
204 if category == _("General"):
205 self.nbPrefPages.set_current_page(0)
206 #When adding extra categories,
207 #include them in this 'If' statement
208 elif category == _("AV Formats"):
209 self.nbPrefPages.set_current_page(1)
210 elif category == _("Profiles"):
211 self.nbPrefPages.set_current_page(2)
212 207
213 def on_btnManageProfiles_clicked(self, widget, *args):208 def on_btnManageProfiles_clicked(self, widget, *args):
214 print "on_btnManageProfiles_clicked"209 print "on_btnManageProfiles_clicked"
@@ -395,4 +390,4 @@
395 frm_titles.run()390 frm_titles.run()
396391
397if __name__ == "__main__":392if __name__ == "__main__":
398 main()
399\ No newline at end of file393\ No newline at end of file
394 main()

Subscribers

People subscribed via source and target branches

to status/vote changes: