Merge lp:~nico-inattendu/luciole/bp_cinelerra_export into lp:luciole/0.8
- bp_cinelerra_export
- Merge into 0.8
Proposed by
NicoInattendu
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~nico-inattendu/luciole/bp_cinelerra_export |
Merge into: | lp:luciole/0.8 |
Prerequisite: | lp:~nico-inattendu/luciole/bp-libglade-to-gtkbuilder |
Diff against target: |
1159 lines (+967/-21) 12 files modified
Makefile (+20/-3) RELEASE (+19/-0) _version.py (+5/-10) lucioLib/gui/gui_controller.py (+12/-1) lucioLib/gui/luciole_export_tool_window.py (+183/-0) lucioLib/lucioExport/__init__.py (+1/-0) lucioLib/lucioExport/luciole_export_tool.py (+281/-0) lucioLib/luciole_controller.py (+12/-4) lucioLib/luciole_et.py (+60/-0) templates/cinelerra_template.xml (+104/-0) ui/export_file.glade (+254/-0) ui/luciole.glade (+16/-3) |
To merge this branch: | bzr merge lp:~nico-inattendu/luciole/bp_cinelerra_export |
Related bugs: | |
Related blueprints: |
Add export to cinelerra file format
(Medium)
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
NicoInattendu | Approve | ||
Review via email: mp+15734@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'Makefile' | |||
2 | --- Makefile 2009-12-07 07:25:24 +0000 | |||
3 | +++ Makefile 2009-12-07 07:25:24 +0000 | |||
4 | @@ -44,6 +44,8 @@ | |||
5 | 44 | SOURCE_DIR=./ | 44 | SOURCE_DIR=./ |
6 | 45 | PREFIX ?= /usr | 45 | PREFIX ?= /usr |
7 | 46 | LIBDIR ?= /lib | 46 | LIBDIR ?= /lib |
8 | 47 | BASEDIR= `basename $(PWD)` | ||
9 | 48 | |||
10 | 47 | all: compile | 49 | all: compile |
11 | 48 | @echo "Done" | 50 | @echo "Done" |
12 | 49 | @echo "Type: 'make install' now" | 51 | @echo "Type: 'make install' now" |
13 | @@ -91,7 +93,7 @@ | |||
14 | 91 | install: make-install-dirs | 93 | install: make-install-dirs |
15 | 92 | install -m 644 $(CURDIR)/$(SOURCE_DIR)luciole.py $(DESTDIR)$(PREFIX)$(LIBDIR)/luciole | 94 | install -m 644 $(CURDIR)/$(SOURCE_DIR)luciole.py $(DESTDIR)$(PREFIX)$(LIBDIR)/luciole |
16 | 93 | install -m 644 $(CURDIR)/$(SOURCE_DIR)_version.py $(DESTDIR)$(PREFIX)$(LIBDIR)/luciole | 95 | install -m 644 $(CURDIR)/$(SOURCE_DIR)_version.py $(DESTDIR)$(PREFIX)$(LIBDIR)/luciole |
18 | 94 | install -m 644 $(CURDIR)/$(SOURCE_DIR)ui/luciole.glade $(DESTDIR)$(PREFIX)/share/luciole/ui | 96 | install -m 644 $(CURDIR)/$(SOURCE_DIR)ui/*.glade $(DESTDIR)$(PREFIX)/share/luciole/ui |
19 | 95 | install -m 644 $(CURDIR)/$(SOURCE_DIR)images/*.png $(DESTDIR)$(PREFIX)/share/luciole/images | 97 | install -m 644 $(CURDIR)/$(SOURCE_DIR)images/*.png $(DESTDIR)$(PREFIX)/share/luciole/images |
20 | 96 | install -m 644 $(CURDIR)/$(SOURCE_DIR)sounds/*.ogg $(DESTDIR)$(PREFIX)/share/luciole/sounds | 98 | install -m 644 $(CURDIR)/$(SOURCE_DIR)sounds/*.ogg $(DESTDIR)$(PREFIX)/share/luciole/sounds |
21 | 97 | install -m 644 $(CURDIR)/$(SOURCE_DIR)lucioLib/*.py $(DESTDIR)$(PREFIX)$(LIBDIR)/luciole/lucioLib/ | 99 | install -m 644 $(CURDIR)/$(SOURCE_DIR)lucioLib/*.py $(DESTDIR)$(PREFIX)$(LIBDIR)/luciole/lucioLib/ |
22 | @@ -127,8 +129,12 @@ | |||
23 | 127 | `echo $$f | sed "s|^po|$(DESTDIR)$(PREFIX)/share/luciole/po|"` ; \ | 129 | `echo $$f | sed "s|^po|$(DESTDIR)$(PREFIX)/share/luciole/po|"` ; \ |
24 | 128 | done | 130 | done |
25 | 129 | tarball: clean | 131 | tarball: clean |
27 | 130 | tar --exclude .bzr -czvf ../luciole.tar.gz ../luciole | 132 | @echo "Creating debian $(BASEDIR).tar.gz archive in parent dir " |
28 | 133 | @cd .. && tar --exclude .bzr --exclude .bzrignore -czf $(BASEDIR).tar.gz $(BASEDIR) | ||
29 | 131 | 134 | ||
30 | 135 | debian-orig: clean cleanbzr | ||
31 | 136 | @echo "Creating debian $(BASEDIR).orig.tar.gz archive in parent dir" | ||
32 | 137 | @cd .. && tar --exclude .bzr --exclude .bzrignore --exclude debian -czf $(BASEDIR).orig.tar.gz $(BASEDIR) | ||
33 | 132 | 138 | ||
34 | 133 | uninstall: | 139 | uninstall: |
35 | 134 | rm -rf $(DESTDIR)$(PREFIX)/share/luciole | 140 | rm -rf $(DESTDIR)$(PREFIX)/share/luciole |
36 | @@ -136,5 +142,16 @@ | |||
37 | 136 | rm -rf $(DESTDIR)$(PREFIX)/bin/luciole | 142 | rm -rf $(DESTDIR)$(PREFIX)/bin/luciole |
38 | 137 | rm -f $(DESTDIR)$(PREFIX)/share/applications/luciole.desktop | 143 | rm -f $(DESTDIR)$(PREFIX)/share/applications/luciole.desktop |
39 | 138 | rm -f $(DESTDIR)$(PREFIX)/share/pixmaps/luciole.xpm | 144 | rm -f $(DESTDIR)$(PREFIX)/share/pixmaps/luciole.xpm |
40 | 145 | |||
41 | 139 | clean : | 146 | clean : |
43 | 140 | find . -name "*.py[co]" -exec rm -f {} \; | 147 | @echo "Removing temporary files" |
44 | 148 | @find . -name "*.py[co]" -exec rm -f {} \; | ||
45 | 149 | @find . -name "*~" -exec rm -f {} \; | ||
46 | 150 | @find . -name "*.swp" -exec rm -f {} \; | ||
47 | 151 | |||
48 | 152 | cleanbzr : | ||
49 | 153 | rm -rf .bzr | ||
50 | 154 | rm -f .bzrignore | ||
51 | 155 | |||
52 | 156 | |||
53 | 157 | |||
54 | 141 | 158 | ||
55 | === modified file 'RELEASE' | |||
56 | --- RELEASE 2009-11-26 05:39:02 +0000 | |||
57 | +++ RELEASE 2009-12-07 07:25:24 +0000 | |||
58 | @@ -1,3 +1,22 @@ | |||
59 | 1 | 0.8.1_alpha1 Release : Thu, 03 Dec 2009 | ||
60 | 2 | ------------------------------------------------------------------------------- | ||
61 | 3 | The Luciole team is proud to announce the release 0.8.1_alpha1 of luciole. | ||
62 | 4 | |||
63 | 5 | This Release Version is a testing issue. It can not be considered as a final issue | ||
64 | 6 | The goal of this version is to test the conversion from libglade to gtk builder and the export to cinelerra | ||
65 | 7 | |||
66 | 8 | Warning the translations are not uptodate | ||
67 | 9 | |||
68 | 10 | List of implemented blueprints : | ||
69 | 11 | ------------------------------ | ||
70 | 12 | libglade-to-gtkbuilder : Replace Libglade by gtk.builder | ||
71 | 13 | cinelerra-export : Add export to cinelerra file format | ||
72 | 14 | |||
73 | 15 | |||
74 | 16 | |||
75 | 17 | |||
76 | 18 | |||
77 | 19 | |||
78 | 1 | 0.7.4 Release : Thu, 26 Nov 2009 | 20 | 0.7.4 Release : Thu, 26 Nov 2009 |
79 | 2 | ------------------------------------------------------------------------------- | 21 | ------------------------------------------------------------------------------- |
80 | 3 | The Luciole team is proud to announce the release 0.7.4 of luciole. | 22 | The Luciole team is proud to announce the release 0.7.4 of luciole. |
81 | 4 | 23 | ||
82 | === modified file '_version.py' | |||
83 | --- _version.py 2009-12-07 07:25:24 +0000 | |||
84 | +++ _version.py 2009-12-07 07:25:24 +0000 | |||
85 | @@ -4,17 +4,12 @@ | |||
86 | 4 | So don't edit it. :) | 4 | So don't edit it. :) |
87 | 5 | """ | 5 | """ |
88 | 6 | 6 | ||
96 | 7 | <<<<<<< TREE | 7 | version_info = {'branch_nick': u'bp_cinelerra_export', |
97 | 8 | version_info = {'branch_nick': u'luciole-0.7.4', | 8 | 'build_date': '2009-12-03 21:33:50 +0400', |
91 | 9 | 'build_date': '2009-11-26 09:27:13 +0400', | ||
92 | 10 | ======= | ||
93 | 11 | version_info = {'branch_nick': u'bp-libglade-to-gtkbuilder', | ||
94 | 12 | 'build_date': '2009-12-02 11:56:49 +0400', | ||
95 | 13 | >>>>>>> MERGE-SOURCE | ||
98 | 14 | 'clean': None, | 9 | 'clean': None, |
102 | 15 | 'date': '2009-11-24 09:07:36 +0400', | 10 | 'date': '2009-12-03 12:11:32 +0400', |
103 | 16 | 'revision_id': 'nico@inattendu.org-20091124050736-eophoqby83atw8tq', | 11 | 'revision_id': 'nico@inattendu.org-20091203081132-bifpk3e9t4fn23zp', |
104 | 17 | 'revno': 34} | 12 | 'revno': 37} |
105 | 18 | 13 | ||
106 | 19 | revisions = {} | 14 | revisions = {} |
107 | 20 | 15 | ||
108 | 21 | 16 | ||
109 | === modified file 'lucioLib/gui/gui_controller.py' | |||
110 | --- lucioLib/gui/gui_controller.py 2009-12-07 07:25:24 +0000 | |||
111 | +++ lucioLib/gui/gui_controller.py 2009-12-07 07:25:24 +0000 | |||
112 | @@ -36,7 +36,6 @@ | |||
113 | 36 | import time | 36 | import time |
114 | 37 | import gc | 37 | import gc |
115 | 38 | 38 | ||
116 | 39 | from .. import luciole_exceptions as M_EXCEP | ||
117 | 40 | 39 | ||
118 | 41 | import luciole_drawaera as GLD | 40 | import luciole_drawaera as GLD |
119 | 42 | import montage_tree as GMT | 41 | import montage_tree as GMT |
120 | @@ -45,6 +44,8 @@ | |||
121 | 45 | import dialog as GDIALOG | 44 | import dialog as GDIALOG |
122 | 46 | import open_project as GOF | 45 | import open_project as GOF |
123 | 47 | import luciole_export_window as GEXPORT | 46 | import luciole_export_window as GEXPORT |
124 | 47 | import luciole_export_tool_window as GEXPORT_TOOL | ||
125 | 48 | |||
126 | 48 | import open_project_widget as GOPEN | 49 | import open_project_widget as GOPEN |
127 | 49 | import dialog_project_properties as GDIALOG_PROJ | 50 | import dialog_project_properties as GDIALOG_PROJ |
128 | 50 | import dialog_preferences as GPREF | 51 | import dialog_preferences as GPREF |
129 | @@ -245,6 +246,7 @@ | |||
130 | 245 | 'on_file_open_activate' : self.on_file_open_activate, | 246 | 'on_file_open_activate' : self.on_file_open_activate, |
131 | 246 | 'on_file_import_activate' : self.on_file_import_activate, | 247 | 'on_file_import_activate' : self.on_file_import_activate, |
132 | 247 | 'on_file_export_activate' : self.on_file_export_activate, | 248 | 'on_file_export_activate' : self.on_file_export_activate, |
133 | 249 | 'on_file_export_tool_activate' :self.on_file_export_tool_activate, | ||
134 | 248 | 'on_file_quit_activate' : self.on_file_quit_activate, | 250 | 'on_file_quit_activate' : self.on_file_quit_activate, |
135 | 249 | 'on_file_close_activate' : self.on_file_close_activate, | 251 | 'on_file_close_activate' : self.on_file_close_activate, |
136 | 250 | 'on_view_project_activate' : self.on_view_project_activate, | 252 | 'on_view_project_activate' : self.on_view_project_activate, |
137 | @@ -539,6 +541,11 @@ | |||
138 | 539 | """ Display export window """ | 541 | """ Display export window """ |
139 | 540 | self._exportObj.gui_export(project_data) | 542 | self._exportObj.gui_export(project_data) |
140 | 541 | 543 | ||
141 | 544 | def export_tool_dialog(self,project_data) : | ||
142 | 545 | """ Display export tool window """ | ||
143 | 546 | X = GEXPORT_TOOL.dialog_export_file(project=project_data) | ||
144 | 547 | X.run() | ||
145 | 548 | |||
146 | 542 | def update_play_button(self,is_active = False) : | 549 | def update_play_button(self,is_active = False) : |
147 | 543 | """ | 550 | """ |
148 | 544 | update pressed state and icon image for play pause | 551 | update pressed state and icon image for play pause |
149 | @@ -703,6 +710,10 @@ | |||
150 | 703 | """file export activate """ | 710 | """file export activate """ |
151 | 704 | self.ctrl_obj.export() | 711 | self.ctrl_obj.export() |
152 | 705 | 712 | ||
153 | 713 | def on_file_export_tool_activate(self,widget): | ||
154 | 714 | """file export activate """ | ||
155 | 715 | self.ctrl_obj.export_tool() | ||
156 | 716 | |||
157 | 706 | def on_file_quit_activate(self,widget): | 717 | def on_file_quit_activate(self,widget): |
158 | 707 | """ file quit actovated""" | 718 | """ file quit actovated""" |
159 | 708 | self.ctrl_obj.quit() | 719 | self.ctrl_obj.quit() |
160 | 709 | 720 | ||
161 | === added file 'lucioLib/gui/luciole_export_tool_window.py' | |||
162 | --- lucioLib/gui/luciole_export_tool_window.py 1970-01-01 00:00:00 +0000 | |||
163 | +++ lucioLib/gui/luciole_export_tool_window.py 2009-12-07 07:25:24 +0000 | |||
164 | @@ -0,0 +1,183 @@ | |||
165 | 1 | #!/usr/bin/env python | ||
166 | 2 | # -*- coding: utf-8 -*- | ||
167 | 3 | # -*- Mode: Python -*- | ||
168 | 4 | # vi:si:ai:et:sw=4:sts=4:ts=4 | ||
169 | 5 | # | ||
170 | 6 | # | ||
171 | 7 | # Copyright Nicolas Bertrand (nico@inattendu.org), 2009 | ||
172 | 8 | # | ||
173 | 9 | # This file is part of Luciole. | ||
174 | 10 | # | ||
175 | 11 | # Luciole is free software: you can redistribute it and/or modify | ||
176 | 12 | # it under the terms of the GNU General Public License as published by | ||
177 | 13 | # the Free Software Foundation, either version 3 of the License, or | ||
178 | 14 | # (at your option) any later version. | ||
179 | 15 | # | ||
180 | 16 | # Luciole is distributed in the hope that it will be useful, | ||
181 | 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
182 | 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
183 | 19 | # GNU General Public License for more details. | ||
184 | 20 | # | ||
185 | 21 | # You should have received a copy of the GNU General Public License | ||
186 | 22 | # along with Luciole. If not, see <http://www.gnu.org/licenses/>. | ||
187 | 23 | # | ||
188 | 24 | # | ||
189 | 25 | |||
190 | 26 | |||
191 | 27 | |||
192 | 28 | # for i18n | ||
193 | 29 | from gettext import gettext as _ | ||
194 | 30 | |||
195 | 31 | import gtk | ||
196 | 32 | import os.path | ||
197 | 33 | |||
198 | 34 | from .. import lucioExport as LEF | ||
199 | 35 | import dialog as G_DIALOG | ||
200 | 36 | |||
201 | 37 | BASE_DIR = './' | ||
202 | 38 | |||
203 | 39 | class SimpleBuilderApp(gtk.Builder): | ||
204 | 40 | def __init__(self): | ||
205 | 41 | self.GLADE_DIR = os.path.join(BASE_DIR,'ui') | ||
206 | 42 | gtk.Builder.__init__(self) | ||
207 | 43 | |||
208 | 44 | |||
209 | 45 | |||
210 | 46 | |||
211 | 47 | class dialog_export_file(SimpleBuilderApp): | ||
212 | 48 | |||
213 | 49 | |||
214 | 50 | def __init__(self, path="export_file.glade", root="dialog_export_file", domain="", form=None, project=None, **kwargs): | ||
215 | 51 | |||
216 | 52 | # set export template dir | ||
217 | 53 | self.TEMPLATE_DIR = os.path.join(BASE_DIR,'templates') | ||
218 | 54 | self.templates = dict() | ||
219 | 55 | self.project=project | ||
220 | 56 | self.templates = { | ||
221 | 57 | "cinelerra" : os.path.join(self.TEMPLATE_DIR, "cinelerra_template.xml") , | ||
222 | 58 | "pitivi" : os.path.join(self.TEMPLATE_DIR, "pitivi_template") , | ||
223 | 59 | "kdenlive" : os.path.join(self.TEMPLATE_DIR, "kdenlive_template") , | ||
224 | 60 | "openshot" : os.path.join(self.TEMPLATE_DIR, "openshot_template") } | ||
225 | 61 | |||
226 | 62 | SimpleBuilderApp.__init__(self) | ||
227 | 63 | self.add_from_file(os.path.join(self.GLADE_DIR,path)) | ||
228 | 64 | self.connect_signals(self) | ||
229 | 65 | |||
230 | 66 | self.window = self.get_object(root) | ||
231 | 67 | # Default Export type | ||
232 | 68 | self.export_type = "cinelerra" | ||
233 | 69 | self.extension=".xml" | ||
234 | 70 | print __file__ | ||
235 | 71 | self.BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||
236 | 72 | print self.BASE_DIR | ||
237 | 73 | # | ||
238 | 74 | # widgets configuration | ||
239 | 75 | # | ||
240 | 76 | self._fn_widget = self.get_object("entry_fn") | ||
241 | 77 | self._fn_widget.set_text("export.xml") | ||
242 | 78 | |||
243 | 79 | initial_folder = os.path.expandvars('$HOME') | ||
244 | 80 | self._filechooser = self.get_object("filechooserbutton1") | ||
245 | 81 | self._filechooser.set_current_folder(initial_folder) | ||
246 | 82 | |||
247 | 83 | self._status_bar_widget = self.get_object("statusbar1") | ||
248 | 84 | #self._status_bar_widget_cid = self._status_bar_widget.get_context_id() | ||
249 | 85 | self._status_bar_widget_cid = 1 | ||
250 | 86 | msg = _("Select an application and a file name name for export") | ||
251 | 87 | self._status_bar_widget.push(self._status_bar_widget_cid,msg) | ||
252 | 88 | |||
253 | 89 | self.window.show() | ||
254 | 90 | def on_dialog_export_file_destroy(self, widget, data=None): | ||
255 | 91 | self.window.destroy() | ||
256 | 92 | |||
257 | 93 | def on_dialog_export_file_close(self, widget, data=None): | ||
258 | 94 | self.window.destroy() | ||
259 | 95 | |||
260 | 96 | def on_dialog_export_file_response(self, widget, data=None): | ||
261 | 97 | pass | ||
262 | 98 | |||
263 | 99 | |||
264 | 100 | def on_filechooserbutton1_file_set(self, widget, data=None): | ||
265 | 101 | self.export_folder = widget.get_filename() | ||
266 | 102 | |||
267 | 103 | |||
268 | 104 | def on_radio_cine_toggled(self, widget, data=None): | ||
269 | 105 | self.export_type ="cinelerra" | ||
270 | 106 | self.extension=".xml" | ||
271 | 107 | |||
272 | 108 | |||
273 | 109 | def on_radio_kdenlive_toggled(self, widget, data=None): | ||
274 | 110 | self.export_type ="kdenlive" | ||
275 | 111 | |||
276 | 112 | def on_radio_pitivi_toggled(self, widget, data=None): | ||
277 | 113 | self.export_type ="pitivi" | ||
278 | 114 | |||
279 | 115 | def on_radio_openshot_toggled(self, widget, data=None): | ||
280 | 116 | self.export_type ="openshot" | ||
281 | 117 | |||
282 | 118 | def on_entry_fn_activate(self, widget, data=None): | ||
283 | 119 | print __file__,"DEBUG : on_entry_fn_activate",data | ||
284 | 120 | self.filename = "filename" | ||
285 | 121 | |||
286 | 122 | |||
287 | 123 | def make_export(self) : | ||
288 | 124 | self._status_bar_widget.pop(self._status_bar_widget_cid) | ||
289 | 125 | |||
290 | 126 | #get filename form entry object | ||
291 | 127 | (self.filename, self.extension)=os.path.splitext(self._fn_widget.get_text()) | ||
292 | 128 | |||
293 | 129 | # get folder | ||
294 | 130 | self.export_folder = self._filechooser.get_filename() | ||
295 | 131 | |||
296 | 132 | self.full_export_path = os.path.join(self.export_folder,self.filename+self.extension) | ||
297 | 133 | print __file__," DEBUG :", self.full_export_path | ||
298 | 134 | |||
299 | 135 | ForceExport = False # by default overide of export filename is not allowed | ||
300 | 136 | |||
301 | 137 | if os.path.exists(self.full_export_path): | ||
302 | 138 | # add message display | ||
303 | 139 | msg =_("File %s already exists. Replace file ?") % self.full_export_path | ||
304 | 140 | ForceExport = G_DIALOG.Dialog.QuestionMessage(self.window,msg) | ||
305 | 141 | |||
306 | 142 | if ForceExport == True : | ||
307 | 143 | if self.export_type == "cinelerra" : | ||
308 | 144 | if self.extension == ".xml" : | ||
309 | 145 | self.make_export_cinelerra() | ||
310 | 146 | else : | ||
311 | 147 | print "Not a valid extension" | ||
312 | 148 | else : | ||
313 | 149 | print "Nothing (yet !) to export" | ||
314 | 150 | |||
315 | 151 | def make_export_cinelerra(self): | ||
316 | 152 | |||
317 | 153 | X = LEF.luciole_export_tool_cinelerra( | ||
318 | 154 | lcl_project = self.project, | ||
319 | 155 | template= self.templates["cinelerra"], | ||
320 | 156 | export_file = self.full_export_path) | ||
321 | 157 | X.generate() | ||
322 | 158 | |||
323 | 159 | msg = _("Export Done") | ||
324 | 160 | self._status_bar_widget.push(self._status_bar_widget_cid,msg) | ||
325 | 161 | |||
326 | 162 | |||
327 | 163 | def run(self) : | ||
328 | 164 | exit_loop = False | ||
329 | 165 | while (exit_loop == False) : | ||
330 | 166 | response = self.window.run() #wait for a reponse | ||
331 | 167 | if response == 2 : | ||
332 | 168 | # export button | ||
333 | 169 | self.make_export() | ||
334 | 170 | else : | ||
335 | 171 | # exit | ||
336 | 172 | exit_loop = True | ||
337 | 173 | |||
338 | 174 | self.window.destroy() | ||
339 | 175 | |||
340 | 176 | def main(): | ||
341 | 177 | |||
342 | 178 | frmExportVideo1 = dialog_export_file() | ||
343 | 179 | |||
344 | 180 | frmExportVideo1.run() | ||
345 | 181 | |||
346 | 182 | if __name__ == "__main__": | ||
347 | 183 | main() | ||
348 | 0 | 184 | ||
349 | === modified file 'lucioLib/lucioExport/__init__.py' | |||
350 | --- lucioLib/lucioExport/__init__.py 2009-03-08 18:06:41 +0000 | |||
351 | +++ lucioLib/lucioExport/__init__.py 2009-12-07 07:25:24 +0000 | |||
352 | @@ -23,3 +23,4 @@ | |||
353 | 23 | # | 23 | # |
354 | 24 | # | 24 | # |
355 | 25 | from luciole_export import * | 25 | from luciole_export import * |
356 | 26 | from luciole_export_tool import * | ||
357 | 26 | 27 | ||
358 | === added file 'lucioLib/lucioExport/luciole_export_tool.py' | |||
359 | --- lucioLib/lucioExport/luciole_export_tool.py 1970-01-01 00:00:00 +0000 | |||
360 | +++ lucioLib/lucioExport/luciole_export_tool.py 2009-12-07 07:25:24 +0000 | |||
361 | @@ -0,0 +1,281 @@ | |||
362 | 1 | #!/usr/bin/env python | ||
363 | 2 | # -*- coding: utf-8 -*- | ||
364 | 3 | # -*- Mode: Python -*- | ||
365 | 4 | # vi:si:ai:et:sw=4:sts=4:ts=4 | ||
366 | 5 | # | ||
367 | 6 | # | ||
368 | 7 | # Copyright Nicolas Bertrand (nico@inattendu.org), 2009 | ||
369 | 8 | # | ||
370 | 9 | # This file is part of Luciole. | ||
371 | 10 | # | ||
372 | 11 | # Luciole is free software: you can redistribute it and/or modify | ||
373 | 12 | # it under the terms of the GNU General Public License as published by | ||
374 | 13 | # the Free Software Foundation, either version 3 of the License, or | ||
375 | 14 | # (at your option) any later version. | ||
376 | 15 | # | ||
377 | 16 | # Luciole is distributed in the hope that it will be useful, | ||
378 | 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
379 | 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
380 | 19 | # GNU General Public License for more details. | ||
381 | 20 | # | ||
382 | 21 | # You should have received a copy of the GNU General Public License | ||
383 | 22 | # along with Luciole. If not, see <http://www.gnu.org/licenses/>. | ||
384 | 23 | # | ||
385 | 24 | # | ||
386 | 25 | |||
387 | 26 | # for i18n | ||
388 | 27 | from gettext import gettext as _ | ||
389 | 28 | |||
390 | 29 | import os.path | ||
391 | 30 | from .. import luciole_et as LE | ||
392 | 31 | |||
393 | 32 | from .. import luciole_exceptions as LEXCEP | ||
394 | 33 | from .. import luciole_project as LPROJECT | ||
395 | 34 | class luciole_export_tool(object) : | ||
396 | 35 | """ | ||
397 | 36 | :version: | ||
398 | 37 | :author: | ||
399 | 38 | """ | ||
400 | 39 | |||
401 | 40 | |||
402 | 41 | """ | ||
403 | 42 | ATTRIBUTES | ||
404 | 43 | export_file : Path to file to export | ||
405 | 44 | template : Path to template | ||
406 | 45 | lcl_project : The luciole project a file or a dict | ||
407 | 46 | _lcl_project_data : | ||
408 | 47 | _export_template : File to update with export data | ||
409 | 48 | _template_xml : | ||
410 | 49 | """ | ||
411 | 50 | |||
412 | 51 | |||
413 | 52 | |||
414 | 53 | def __init__(self, lcl_project = "./luciole_project.xml", template="./template.xml", export_file = "./export.xml"): | ||
415 | 54 | """ | ||
416 | 55 | @param lcl_project : Type de projet | ||
417 | 56 | @param template : Path to template | ||
418 | 57 | @param export_file : Path to export_file | ||
419 | 58 | """ | ||
420 | 59 | # | ||
421 | 60 | # Atributes init | ||
422 | 61 | # | ||
423 | 62 | self.lcl_project = lcl_project | ||
424 | 63 | self.template = template | ||
425 | 64 | self.export_file = export_file | ||
426 | 65 | self._lcl_project_data = {} | ||
427 | 66 | self._lcl_project_data['resources_images'] = [] | ||
428 | 67 | self._lcl_project_data['timelines_images'] = [] | ||
429 | 68 | |||
430 | 69 | self._export_template = None | ||
431 | 70 | self._template_xml = None | ||
432 | 71 | |||
433 | 72 | if (type(lcl_project) == str) : | ||
434 | 73 | # test file type | ||
435 | 74 | if os.path.exists(lcl_project) : | ||
436 | 75 | #filetype exits load it | ||
437 | 76 | self.__load_lcl_file() | ||
438 | 77 | else : | ||
439 | 78 | #Raise Error | ||
440 | 79 | excep_message = "%s is ot a file",lcl_project | ||
441 | 80 | raise LEXCEP.LucioException,excep_message | ||
442 | 81 | elif (type(lcl_project) == LPROJECT.project_dico) : | ||
443 | 82 | # input is a dictionary | ||
444 | 83 | self.__load_lcl_dict() | ||
445 | 84 | else : | ||
446 | 85 | # template does not exists : raise an exception | ||
447 | 86 | excep_message = "Invalid projetc type nor file nor luciole_project" | ||
448 | 87 | raise LEXCEP.LucioException,excep_message | ||
449 | 88 | |||
450 | 89 | # | ||
451 | 90 | # Test template | ||
452 | 91 | # | ||
453 | 92 | if os.path.exists(self.template) : | ||
454 | 93 | self._load_template() | ||
455 | 94 | else : | ||
456 | 95 | # template does not exists : raise an exception | ||
457 | 96 | excep_message = " Template file %s does not exist"%self.template | ||
458 | 97 | raise LEXCEP.LucioException,excep_message | ||
459 | 98 | |||
460 | 99 | |||
461 | 100 | |||
462 | 101 | |||
463 | 102 | def generate(self): | ||
464 | 103 | """ | ||
465 | 104 | |||
466 | 105 | |||
467 | 106 | @return : | ||
468 | 107 | @author | ||
469 | 108 | """ | ||
470 | 109 | self._gen_ressources() | ||
471 | 110 | self._gen_timeline() | ||
472 | 111 | self.__write_export_file() | ||
473 | 112 | |||
474 | 113 | def _load_template(self): | ||
475 | 114 | """ | ||
476 | 115 | |||
477 | 116 | |||
478 | 117 | @return : | ||
479 | 118 | @author | ||
480 | 119 | """ | ||
481 | 120 | pass | ||
482 | 121 | |||
483 | 122 | def _gen_ressources(self): | ||
484 | 123 | """ | ||
485 | 124 | generate date for resources | ||
486 | 125 | |||
487 | 126 | @return : | ||
488 | 127 | @author | ||
489 | 128 | """ | ||
490 | 129 | pass | ||
491 | 130 | |||
492 | 131 | def _gen_timeline(self): | ||
493 | 132 | """ | ||
494 | 133 | Generate data for timeline | ||
495 | 134 | |||
496 | 135 | @return : | ||
497 | 136 | @author | ||
498 | 137 | """ | ||
499 | 138 | pass | ||
500 | 139 | |||
501 | 140 | def __load_lcl_file(self): | ||
502 | 141 | """ | ||
503 | 142 | Load a Luciole project from a file dictionary | ||
504 | 143 | |||
505 | 144 | @return : | ||
506 | 145 | @author | ||
507 | 146 | """ | ||
508 | 147 | try : | ||
509 | 148 | _lcl_project_xml = LE.lcl_et(self.lcl_project) | ||
510 | 149 | except : | ||
511 | 150 | pass | ||
512 | 151 | else : | ||
513 | 152 | self._lcl_project_data['image_path'] = os.path.join(_lcl_project_xml.findtext("metas/projectPath").strip() , | ||
514 | 153 | _lcl_project_xml.findtext("metas/rush_dir").strip() ) | ||
515 | 154 | self._lcl_project_data['fpi'] = int(_lcl_project_xml.findtext("metas/fpi").strip()) | ||
516 | 155 | |||
517 | 156 | # get resources images from project capture data | ||
518 | 157 | list_image = _lcl_project_xml.find("captureData").getiterator('image') | ||
519 | 158 | [ self._lcl_project_data['resources_images'].append(image.text.strip()) for image in list_image] | ||
520 | 159 | |||
521 | 160 | # get timelines images from project chrono data | ||
522 | 161 | list_image = _lcl_project_xml.find("chronoData").getiterator('image') | ||
523 | 162 | [self._lcl_project_data['timelines_images'].append(image.text.strip()) for image in list_image] | ||
524 | 163 | |||
525 | 164 | |||
526 | 165 | def __load_lcl_dict(self): | ||
527 | 166 | """ | ||
528 | 167 | Load a Luciole project from a dictionary | ||
529 | 168 | |||
530 | 169 | @return : | ||
531 | 170 | @author | ||
532 | 171 | """ | ||
533 | 172 | |||
534 | 173 | self._lcl_project_data['image_path'] = os.path.join(self.lcl_project['project_dir'], self.lcl_project['rush_dir']) | ||
535 | 174 | self._lcl_project_data['fpi'] = int(self.lcl_project['fpi']) | ||
536 | 175 | self._lcl_project_data['resources_images'] = self.lcl_project['capture_images'] | ||
537 | 176 | self._lcl_project_data['timelines_images'] = self.lcl_project['chrono_images'] | ||
538 | 177 | |||
539 | 178 | |||
540 | 179 | def __write_export_file(self): | ||
541 | 180 | """ | ||
542 | 181 | |||
543 | 182 | |||
544 | 183 | @return : | ||
545 | 184 | @author | ||
546 | 185 | """ | ||
547 | 186 | self._template_xml.write(self.export_file) | ||
548 | 187 | |||
549 | 188 | class luciole_export_tool_cinelerra (luciole_export_tool): | ||
550 | 189 | |||
551 | 190 | """ | ||
552 | 191 | |||
553 | 192 | |||
554 | 193 | :version: | ||
555 | 194 | :author: | ||
556 | 195 | """ | ||
557 | 196 | |||
558 | 197 | """ ATTRIBUTES | ||
559 | 198 | |||
560 | 199 | |||
561 | 200 | |||
562 | 201 | _export_template (private) | ||
563 | 202 | |||
564 | 203 | """ | ||
565 | 204 | |||
566 | 205 | def __init__(self, lcl_project = "./luciole_project.xml", template="./template.xml", export_file = "./export.xml"): | ||
567 | 206 | """ | ||
568 | 207 | |||
569 | 208 | |||
570 | 209 | @param luciole_export_tool lcl_project_type : type of luciole project : "file" or "project" | ||
571 | 210 | @param object lcl_project : Type de projet | ||
572 | 211 | @param string template : Path to template | ||
573 | 212 | @param string export_file : Path to export_file | ||
574 | 213 | @return : | ||
575 | 214 | @author | ||
576 | 215 | """ | ||
577 | 216 | super(luciole_export_tool_cinelerra, self).__init__(lcl_project,template,export_file ) | ||
578 | 217 | |||
579 | 218 | def _load_template(self): | ||
580 | 219 | """ | ||
581 | 220 | """ | ||
582 | 221 | self._template_xml = LE.lcl_et(self.template) | ||
583 | 222 | |||
584 | 223 | |||
585 | 224 | def _gen_ressources(self): | ||
586 | 225 | """ | ||
587 | 226 | ressource is called asset in cinelerra template | ||
588 | 227 | """ | ||
589 | 228 | resources_tag = self._template_xml.find("//ASSETS") | ||
590 | 229 | resource_elem_tpl = self._template_xml.find("//ASSET") | ||
591 | 230 | |||
592 | 231 | for image in self._lcl_project_data['resources_images'] : | ||
593 | 232 | # build image_path | ||
594 | 233 | image_p = os.path.join(self._lcl_project_data['image_path'], image) | ||
595 | 234 | # create a resouce element --> i.e an ASSET element | ||
596 | 235 | new_element = self._template_xml.SubElement(resources_tag,"ASSET",{"SRC":image_p}) | ||
597 | 236 | # copy subelement od ASSET template tag in new element | ||
598 | 237 | for elem_tpl in resource_elem_tpl.getchildren() : | ||
599 | 238 | new_element.append(elem_tpl) | ||
600 | 239 | |||
601 | 240 | #remove template tag | ||
602 | 241 | resources_tag.remove(resource_elem_tpl) | ||
603 | 242 | |||
604 | 243 | |||
605 | 244 | def __get_timeline_tags(self) : | ||
606 | 245 | """ | ||
607 | 246 | in cinelerra timeline tags is TRACK with type video, and EDITS/EDIT tag | ||
608 | 247 | """ | ||
609 | 248 | video_track = None | ||
610 | 249 | tracks = self._template_xml.findall("//TRACK") | ||
611 | 250 | for track in tracks : | ||
612 | 251 | if track.get("TYPE") == "VIDEO" : | ||
613 | 252 | # video tak is found | ||
614 | 253 | video_track = track | ||
615 | 254 | break | ||
616 | 255 | # get EDIT tag | ||
617 | 256 | return ( video_track.find("EDITS"), video_track.find("EDITS/EDIT")) | ||
618 | 257 | |||
619 | 258 | |||
620 | 259 | def _gen_timeline(self): | ||
621 | 260 | """ | ||
622 | 261 | generate timeline | ||
623 | 262 | """ | ||
624 | 263 | (timeline_tag, timeline_item_tpl) = self.__get_timeline_tags() | ||
625 | 264 | for image in self._lcl_project_data['timelines_images'] : | ||
626 | 265 | # build image_path | ||
627 | 266 | image_p = os.path.join(self._lcl_project_data['image_path'], image) | ||
628 | 267 | |||
629 | 268 | # create New EDIT element per image | ||
630 | 269 | for frame in range(self._lcl_project_data['fpi']): | ||
631 | 270 | framerate = str(self._lcl_project_data['fpi']) | ||
632 | 271 | new_element = self._template_xml.SubElement(timeline_tag,"EDIT",{"STARTSOURCE":"0","CHANNEL":"0", "LENGTH":"1"}) | ||
633 | 272 | # create FILE subElement of EDIT | ||
634 | 273 | self._template_xml.SubElement(new_element,"FILE",{"SRC":image_p}) | ||
635 | 274 | |||
636 | 275 | # remove EDIT template tag | ||
637 | 276 | timeline_tag.remove(timeline_item_tpl) | ||
638 | 277 | |||
639 | 278 | if __name__ == '__main__' : | ||
640 | 279 | X = luciole_export_tool_cinelerra( lcl_project = "/home/nico/temp/testLuciole/luciole_project_isight/luciole_project_isight.xml",template="./cinelerra_template.xml",export_file = "./cine_export.xml" ) | ||
641 | 280 | X.generate() | ||
642 | 281 | |||
643 | 0 | 282 | ||
644 | === modified file 'lucioLib/luciole_controller.py' | |||
645 | --- lucioLib/luciole_controller.py 2009-12-07 07:25:24 +0000 | |||
646 | +++ lucioLib/luciole_controller.py 2009-12-07 07:25:24 +0000 | |||
647 | @@ -145,6 +145,7 @@ | |||
648 | 145 | # 3. load project in application | 145 | # 3. load project in application |
649 | 146 | self.__load_project_in_app() | 146 | self.__load_project_in_app() |
650 | 147 | 147 | ||
651 | 148 | |||
652 | 148 | def save_project(self): | 149 | def save_project(self): |
653 | 149 | """ save the current project """ | 150 | """ save the current project """ |
654 | 150 | self.project_ctrller.save(self.project) | 151 | self.project_ctrller.save(self.project) |
655 | @@ -258,10 +259,17 @@ | |||
656 | 258 | if self.project != None : | 259 | if self.project != None : |
657 | 259 | self.gui.export_dialog(self.project) | 260 | self.gui.export_dialog(self.project) |
658 | 260 | else : | 261 | else : |
663 | 261 | # nbd@grape to transform as error message | 262 | msg = _("Nothing to export. No project loaded") |
664 | 262 | msg = _("Nothing to export. No project loaded") | 263 | LTK.Dialog.ErrorMessage(self.gui.window, msg) |
665 | 263 | LTK.Dialog.ErrorMessage(self.gui.window, msg) | 264 | |
666 | 264 | 265 | def export_tool(self) : | |
667 | 266 | """ Manage tool exports """ | ||
668 | 267 | if self.project != None : | ||
669 | 268 | self.gui.export_tool_dialog(self.project) | ||
670 | 269 | else : | ||
671 | 270 | msg = _("Nothing to export. No project loaded") | ||
672 | 271 | LTK.Dialog.ErrorMessage(self.gui.window, msg) | ||
673 | 272 | |||
674 | 265 | def play(self,index_chrono) : | 273 | def play(self,index_chrono) : |
675 | 266 | """ play video """ | 274 | """ play video """ |
676 | 267 | # Test if project exists | 275 | # Test if project exists |
677 | 268 | 276 | ||
678 | === added file 'lucioLib/luciole_et.py' | |||
679 | --- lucioLib/luciole_et.py 1970-01-01 00:00:00 +0000 | |||
680 | +++ lucioLib/luciole_et.py 2009-12-07 07:25:24 +0000 | |||
681 | @@ -0,0 +1,60 @@ | |||
682 | 1 | #!/usr/bin/env python | ||
683 | 2 | # -*- coding: utf-8 -*- | ||
684 | 3 | # -*- Mode: Python -*- | ||
685 | 4 | # vi:si:ai:et:sw=4:sts=4:ts=4 | ||
686 | 5 | # | ||
687 | 6 | # | ||
688 | 7 | # Copyright Nicolas Bertrand (nico@inattendu.org), 2009 | ||
689 | 8 | # | ||
690 | 9 | # This file is part of Luciole. | ||
691 | 10 | # | ||
692 | 11 | # Luciole is free software: you can redistribute it and/or modify | ||
693 | 12 | # it under the terms of the GNU General Public License as published by | ||
694 | 13 | # the Free Software Foundation, either version 3 of the License, or | ||
695 | 14 | # (at your option) any later version. | ||
696 | 15 | # | ||
697 | 16 | # Luciole is distributed in the hope that it will be useful, | ||
698 | 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
699 | 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
700 | 19 | # GNU General Public License for more details. | ||
701 | 20 | # | ||
702 | 21 | # You should have received a copy of the GNU General Public License | ||
703 | 22 | # along with Luciole. If not, see <http://www.gnu.org/licenses/>. | ||
704 | 23 | # | ||
705 | 24 | # | ||
706 | 25 | |||
707 | 26 | # for i18n | ||
708 | 27 | from gettext import gettext as _ | ||
709 | 28 | import xml.etree.ElementTree as ET #python 2.5 | ||
710 | 29 | from xml.parsers.expat import ParserCreate, ExpatError | ||
711 | 30 | |||
712 | 31 | |||
713 | 32 | class lcl_et(object) : | ||
714 | 33 | def __init__(self,xml_file) : | ||
715 | 34 | self.xml_file = xml_file | ||
716 | 35 | #parse XML tempalte file | ||
717 | 36 | try : | ||
718 | 37 | self.xml_obj = ET.parse(self.xml_file) | ||
719 | 38 | except ExpatError , err_value : | ||
720 | 39 | # Raise Error | ||
721 | 40 | print "XML parse error in ",self.xml_file, "\nerror :",err_value | ||
722 | 41 | self.xml_obj = None | ||
723 | 42 | |||
724 | 43 | def findtext(self,condition) : | ||
725 | 44 | return self.xml_obj.findtext(condition) | ||
726 | 45 | |||
727 | 46 | def find(self,match) : | ||
728 | 47 | return self.xml_obj.find(match) | ||
729 | 48 | |||
730 | 49 | def findall(self,match) : | ||
731 | 50 | return self.xml_obj.findall(match) | ||
732 | 51 | |||
733 | 52 | def SubElement(self,parent,tag,attrib) : | ||
734 | 53 | return ET.SubElement(parent,tag,attrib) | ||
735 | 54 | |||
736 | 55 | def tostring(self,element) : | ||
737 | 56 | return ET.tostring(element) | ||
738 | 57 | |||
739 | 58 | def write(self,file) : | ||
740 | 59 | return self.xml_obj.write(file,"UTF-8") | ||
741 | 60 | |||
742 | 0 | 61 | ||
743 | === added file 'templates/cinelerra_template.xml' | |||
744 | --- templates/cinelerra_template.xml 1970-01-01 00:00:00 +0000 | |||
745 | +++ templates/cinelerra_template.xml 2009-12-07 07:25:24 +0000 | |||
746 | @@ -0,0 +1,104 @@ | |||
747 | 1 | <?xml version="1.0"?> | ||
748 | 2 | <EDL VERSION="2.1CV" PROJECT_PATH="/home/nico/temp/testLuciole/luciole_project_isight/cinelerra_export.xml"> | ||
749 | 3 | <LOCALSESSION IN_POINT="-1" LOOP_PLAYBACK="0" LOOP_START="0" LOOP_END="0" OUT_POINT="-1" SELECTION_START="0" SELECTION_END="0" CLIP_TITLE="Program" CLIP_NOTES="Hello world" FOLDER="Clips" TRACK_START="0" VIEW_START="0" ZOOM_SAMPLE="128" ZOOMY="64" ZOOM_TRACK="64" PREVIEW_START="0" PREVIEW_END="1.6799999999999999e+00" RED="0" GREEN="0" BLUE="0" AUTOGROUPTYPE_AUDIO_FADE_MIN="-80" AUTOGROUPTYPE_AUDIO_FADE_MAX="6" AUTOGROUPTYPE_VIDEO_FADE_MIN="0" AUTOGROUPTYPE_VIDEO_FADE_MAX="100" AUTOGROUPTYPE_ZOOM_MIN="1.000000e-03" AUTOGROUPTYPE_ZOOM_MAX="4" AUTOGROUPTYPE_X_MIN="-100" AUTOGROUPTYPE_X_MAX="100" AUTOGROUPTYPE_Y_MIN="-100" AUTOGROUPTYPE_Y_MAX="100"></LOCALSESSION> | ||
750 | 4 | |||
751 | 5 | <SESSION ASSETLIST_FORMAT="1" ASSET_COLUMN0="100" ASSET_COLUMN1="100" SHOW_MUTE="0" SHOW_CAMERA_X="0" SHOW_CAMERA_Y="0" SHOW_CAMERA_Z="0" SHOW_PROJECTOR_X="0" SHOW_PROJECTOR_Y="0" SHOW_PROJECTOR_Z="0" SHOW_FADE="1" SHOW_PAN="0" SHOW_MODE="0" SHOW_MASK="0" SHOW_TRANSITIONS="1" SHOW_PLUGINS="1" AUTO_KEYFRAMES="0" AUTOS_FOLLOW_EDITS="1" BRENDER_START="0" CROP_X1="0" CROP_Y1="0" CROP_X2="320" CROP_Y2="240" CURRENT_FOLDER="Media" CURSOR_ON_FRAMES="1" CWINDOW_DEST="0" CWINDOW_MASK="0" CWINDOW_METER="1" CWINDOW_OPERATION="0" CWINDOW_SCROLLBARS="1" CWINDOW_XSCROLL="0" CWINDOW_YSCROLL="0" CWINDOW_ZOOM="1" DEFAULT_ATRANSITION="Crossfade" DEFAULT_VTRANSITION="Dissolve" DEFAULT_TRANSITION_LENGTH="1" EDITING_MODE="1" FOLDERLIST_FORMAT="1" HIGHLIGHTED_TRACK="0" LABELS_FOLLOW_EDITS="1" MPEG4_DEBLOCK="1" PLUGINS_FOLLOW_EDITS="1" PLAYBACK_PRELOAD="0" SAFE_REGIONS="1" SHOW_ASSETS="1" SHOW_TITLES="1" TEST_PLAYBACK_EDITS="1" TIME_FORMAT="0" TIMECODE_OFFSET_0="0" TIMECODE_OFFSET_1="0" TIMECODE_OFFSET_2="0" TIMECODE_OFFSET_3="0" NUDGE_SECONDS="1" TOOL_WINDOW="0" VWINDOW_METER="1" VWINDOW_FOLDER="" VWINDOW_SOURCE="4294967295" VWINDOW_ZOOM="1" DECODE_SUBTITLES="0" subtitle_number="0"></SESSION> | ||
752 | 6 | |||
753 | 7 | <VIDEO INTERPOLATION_TYPE="2" INTERPOLATE_RAW="1" WHITE_BALANCE_RAW="1" COLORMODEL="RGBA-8 Bit" INTERLACE_MODE="BOTTOM_FIELD_FIRST" CHANNELS="1" VCHANNEL_X_0="0" VCHANNEL_Y_0="0" FRAMERATE="25" FRAMES_PER_FOOT="16" OUTPUTW="720" OUTPUTH="576" ASPECTW="4" ASPECTH="3"></VIDEO> | ||
754 | 8 | |||
755 | 9 | <AUDIO SAMPLERATE="48000" CHANNELS="2" ACHANNEL_ANGLE_0="180" ACHANNEL_ANGLE_1="0"></AUDIO> | ||
756 | 10 | |||
757 | 11 | <FOLDER>Clips</FOLDER> | ||
758 | 12 | <FOLDER>Media</FOLDER> | ||
759 | 13 | <ASSETS> | ||
760 | 14 | <ASSET SRC="/home/nico/temp/testLuciole/luciole_project_isight/rush/rush_00000.jpeg"> | ||
761 | 15 | <FOLDER>Media</FOLDER> | ||
762 | 16 | <FORMAT TYPE="JPEG" USE_HEADER="1"></FORMAT> | ||
763 | 17 | <AUDIO_OMIT CHANNELS="0" RATE="0" BITS="0" BYTE_ORDER="0" SIGNED="0" HEADER="0" DITHER="0" ACODEC="twos" AUDIO_LENGTH="0"></AUDIO_OMIT> | ||
764 | 18 | <VIDEO HEIGHT="576" WIDTH="720" LAYERS="1" FRAMERATE="1" VCODEC="yuv2" VIDEO_LENGTH="-1" INTERLACE_AUTOFIX="1" INTERLACE_MODE="NOTINTERLACED" INTERLACE_FIXMETHOD="DO_NOTHING" REEL_NAME="cin0000" REEL_NUMBER="0" TCSTART="0" TCEND="0" TCFORMAT="0"></VIDEO> | ||
765 | 19 | </ASSET> | ||
766 | 20 | </ASSETS> | ||
767 | 21 | |||
768 | 22 | |||
769 | 23 | |||
770 | 24 | <LABELS> | ||
771 | 25 | </LABELS> | ||
772 | 26 | |||
773 | 27 | <TRACK RECORD="1" NUDGE="0" PLAY="1" GANG="1" DRAW="1" EXPAND="0" TRACK_W="720" TRACK_H="576" TYPE="VIDEO"> | ||
774 | 28 | <TITLE>Video 1</TITLE> | ||
775 | 29 | <EDITS> | ||
776 | 30 | <EDIT STARTSOURCE="0" CHANNEL="0" LENGTH="7"><FILE SRC="/home/nico/temp/testLuciole/luciole_project_isight/rush/rush_00000.jpeg"></FILE></EDIT> | ||
777 | 31 | </EDITS> | ||
778 | 32 | <MUTEAUTOS> | ||
779 | 33 | <AUTO POSITION="0" VALUE="0"></AUTO> | ||
780 | 34 | </MUTEAUTOS> | ||
781 | 35 | <CAMERA_X> | ||
782 | 36 | <AUTO POSITION="0" VALUE="0" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
783 | 37 | </CAMERA_X> | ||
784 | 38 | <CAMERA_Y> | ||
785 | 39 | <AUTO POSITION="0" VALUE="0" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
786 | 40 | </CAMERA_Y> | ||
787 | 41 | <CAMERA_Z> | ||
788 | 42 | <AUTO POSITION="0" VALUE="1" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
789 | 43 | </CAMERA_Z> | ||
790 | 44 | <PROJECTOR_X> | ||
791 | 45 | <AUTO POSITION="0" VALUE="0" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
792 | 46 | </PROJECTOR_X> | ||
793 | 47 | <PROJECTOR_Y> | ||
794 | 48 | <AUTO POSITION="0" VALUE="0" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
795 | 49 | </PROJECTOR_Y> | ||
796 | 50 | <PROJECTOR_Z> | ||
797 | 51 | <AUTO POSITION="0" VALUE="1" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
798 | 52 | </PROJECTOR_Z> | ||
799 | 53 | <FADEAUTOS> | ||
800 | 54 | <AUTO POSITION="0" VALUE="100" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
801 | 55 | </FADEAUTOS> | ||
802 | 56 | <MODEAUTOS> | ||
803 | 57 | <AUTO POSITION="0" VALUE="0"></AUTO> | ||
804 | 58 | </MODEAUTOS> | ||
805 | 59 | <MASKAUTOS> | ||
806 | 60 | <AUTO MODE="1" VALUE="100" FEATHER="0" APPLY_BEFORE_PLUGINS="0" POSITION="0"> | ||
807 | 61 | |||
808 | 62 | </AUTO> | ||
809 | 63 | </MASKAUTOS> | ||
810 | 64 | </TRACK> | ||
811 | 65 | |||
812 | 66 | |||
813 | 67 | |||
814 | 68 | <TRACK RECORD="1" NUDGE="0" PLAY="1" GANG="1" DRAW="1" EXPAND="0" TRACK_W="720" TRACK_H="576" TYPE="AUDIO"> | ||
815 | 69 | |||
816 | 70 | <TITLE>Audio 1</TITLE> | ||
817 | 71 | <EDITS> | ||
818 | 72 | <EDIT STARTSOURCE="0" CHANNEL="0" LENGTH="80640"></EDIT> | ||
819 | 73 | </EDITS> | ||
820 | 74 | <MUTEAUTOS> | ||
821 | 75 | <AUTO POSITION="0" VALUE="0"></AUTO> | ||
822 | 76 | </MUTEAUTOS> | ||
823 | 77 | <FADEAUTOS> | ||
824 | 78 | <AUTO POSITION="0" VALUE="0" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
825 | 79 | </FADEAUTOS> | ||
826 | 80 | <PANAUTOS> | ||
827 | 81 | <AUTO POSITION="0" HANDLE_X="1" HANDLE_Y="50" VALUE0="1" VALUE1="0"></AUTO></PANAUTOS> | ||
828 | 82 | </TRACK> | ||
829 | 83 | |||
830 | 84 | |||
831 | 85 | |||
832 | 86 | <TRACK RECORD="1" NUDGE="0" PLAY="1" GANG="1" DRAW="1" EXPAND="0" TRACK_W="720" TRACK_H="576" TYPE="AUDIO"> | ||
833 | 87 | |||
834 | 88 | <TITLE>Audio 2</TITLE> | ||
835 | 89 | <EDITS> | ||
836 | 90 | <EDIT STARTSOURCE="0" CHANNEL="0" LENGTH="80640"></EDIT> | ||
837 | 91 | </EDITS> | ||
838 | 92 | <MUTEAUTOS> | ||
839 | 93 | <AUTO POSITION="0" VALUE="0"></AUTO> | ||
840 | 94 | </MUTEAUTOS> | ||
841 | 95 | <FADEAUTOS> | ||
842 | 96 | <AUTO POSITION="0" VALUE="0" CONTROL_IN_VALUE="0" CONTROL_OUT_VALUE="0" CONTROL_IN_POSITION="0" CONTROL_OUT_POSITION="0"></AUTO> | ||
843 | 97 | </FADEAUTOS> | ||
844 | 98 | <PANAUTOS> | ||
845 | 99 | <AUTO POSITION="0" HANDLE_X="100" HANDLE_Y="50" VALUE0="0" VALUE1="1"></AUTO></PANAUTOS> | ||
846 | 100 | </TRACK> | ||
847 | 101 | |||
848 | 102 | |||
849 | 103 | |||
850 | 104 | </EDL> | ||
851 | 0 | 105 | ||
852 | === added file 'ui/export_file.glade' | |||
853 | --- ui/export_file.glade 1970-01-01 00:00:00 +0000 | |||
854 | +++ ui/export_file.glade 2009-12-07 07:25:24 +0000 | |||
855 | @@ -0,0 +1,254 @@ | |||
856 | 1 | <?xml version="1.0"?> | ||
857 | 2 | <interface> | ||
858 | 3 | <requires lib="gtk+" version="2.16"/> | ||
859 | 4 | <!-- interface-naming-policy project-wide --> | ||
860 | 5 | <object class="GtkDialog" id="dialog_export_file"> | ||
861 | 6 | <property name="border_width">5</property> | ||
862 | 7 | <property name="type_hint">normal</property> | ||
863 | 8 | <property name="has_separator">False</property> | ||
864 | 9 | <signal name="destroy" handler="on_dialog_export_file_destroy"/> | ||
865 | 10 | <signal name="close" handler="on_dialog_export_file_close"/> | ||
866 | 11 | <signal name="response" handler="on_dialog_export_file_response"/> | ||
867 | 12 | <child internal-child="vbox"> | ||
868 | 13 | <object class="GtkVBox" id="dialog-vbox1"> | ||
869 | 14 | <property name="visible">True</property> | ||
870 | 15 | <property name="orientation">vertical</property> | ||
871 | 16 | <property name="spacing">2</property> | ||
872 | 17 | <child> | ||
873 | 18 | <object class="GtkLabel" id="label1"> | ||
874 | 19 | <property name="visible">True</property> | ||
875 | 20 | <property name="yalign">0.25</property> | ||
876 | 21 | <property name="ypad">8</property> | ||
877 | 22 | <property name="label" translatable="yes">Export to another application</property> | ||
878 | 23 | <attributes> | ||
879 | 24 | <attribute name="style" value="normal"/> | ||
880 | 25 | <attribute name="weight" value="semibold"/> | ||
881 | 26 | <attribute name="underline" value="True"/> | ||
882 | 27 | </attributes> | ||
883 | 28 | </object> | ||
884 | 29 | <packing> | ||
885 | 30 | <property name="expand">False</property> | ||
886 | 31 | <property name="fill">False</property> | ||
887 | 32 | <property name="padding">5</property> | ||
888 | 33 | <property name="position">1</property> | ||
889 | 34 | </packing> | ||
890 | 35 | </child> | ||
891 | 36 | <child> | ||
892 | 37 | <object class="GtkVBox" id="vbox1"> | ||
893 | 38 | <property name="visible">True</property> | ||
894 | 39 | <property name="orientation">vertical</property> | ||
895 | 40 | <child> | ||
896 | 41 | <object class="GtkTable" id="table1"> | ||
897 | 42 | <property name="visible">True</property> | ||
898 | 43 | <property name="n_rows">2</property> | ||
899 | 44 | <property name="n_columns">2</property> | ||
900 | 45 | <child> | ||
901 | 46 | <object class="GtkRadioButton" id="radio_cine"> | ||
902 | 47 | <property name="label" translatable="yes">Cinelerra</property> | ||
903 | 48 | <property name="visible">True</property> | ||
904 | 49 | <property name="can_focus">True</property> | ||
905 | 50 | <property name="receives_default">False</property> | ||
906 | 51 | <property name="active">True</property> | ||
907 | 52 | <property name="draw_indicator">True</property> | ||
908 | 53 | <signal name="toggled" handler="on_radio_cine_toggled"/> | ||
909 | 54 | </object> | ||
910 | 55 | </child> | ||
911 | 56 | <child> | ||
912 | 57 | <object class="GtkRadioButton" id="radio_kdenlive"> | ||
913 | 58 | <property name="label" translatable="yes">Kdenlive</property> | ||
914 | 59 | <property name="visible">True</property> | ||
915 | 60 | <property name="can_focus">True</property> | ||
916 | 61 | <property name="receives_default">False</property> | ||
917 | 62 | <property name="draw_indicator">True</property> | ||
918 | 63 | <property name="group">radio_cine</property> | ||
919 | 64 | <signal name="toggled" handler="on_radio_kdenlive_toggled"/> | ||
920 | 65 | </object> | ||
921 | 66 | <packing> | ||
922 | 67 | <property name="top_attach">1</property> | ||
923 | 68 | <property name="bottom_attach">2</property> | ||
924 | 69 | </packing> | ||
925 | 70 | </child> | ||
926 | 71 | <child> | ||
927 | 72 | <object class="GtkRadioButton" id="radio_pitivi"> | ||
928 | 73 | <property name="label" translatable="yes">Pitivi</property> | ||
929 | 74 | <property name="visible">True</property> | ||
930 | 75 | <property name="can_focus">True</property> | ||
931 | 76 | <property name="receives_default">False</property> | ||
932 | 77 | <property name="draw_indicator">True</property> | ||
933 | 78 | <property name="group">radio_cine</property> | ||
934 | 79 | <signal name="toggled" handler="on_radio_pitivi_toggled"/> | ||
935 | 80 | </object> | ||
936 | 81 | <packing> | ||
937 | 82 | <property name="left_attach">1</property> | ||
938 | 83 | <property name="right_attach">2</property> | ||
939 | 84 | </packing> | ||
940 | 85 | </child> | ||
941 | 86 | <child> | ||
942 | 87 | <object class="GtkRadioButton" id="radio_openshot"> | ||
943 | 88 | <property name="label" translatable="yes">Openshot</property> | ||
944 | 89 | <property name="visible">True</property> | ||
945 | 90 | <property name="can_focus">True</property> | ||
946 | 91 | <property name="receives_default">False</property> | ||
947 | 92 | <property name="draw_indicator">True</property> | ||
948 | 93 | <property name="group">radio_cine</property> | ||
949 | 94 | <signal name="toggled" handler="on_radio_openshot_toggled"/> | ||
950 | 95 | </object> | ||
951 | 96 | <packing> | ||
952 | 97 | <property name="left_attach">1</property> | ||
953 | 98 | <property name="right_attach">2</property> | ||
954 | 99 | <property name="top_attach">1</property> | ||
955 | 100 | <property name="bottom_attach">2</property> | ||
956 | 101 | </packing> | ||
957 | 102 | </child> | ||
958 | 103 | </object> | ||
959 | 104 | <packing> | ||
960 | 105 | <property name="padding">10</property> | ||
961 | 106 | <property name="position">0</property> | ||
962 | 107 | </packing> | ||
963 | 108 | </child> | ||
964 | 109 | <child> | ||
965 | 110 | <object class="GtkHBox" id="hbox1"> | ||
966 | 111 | <property name="visible">True</property> | ||
967 | 112 | <child> | ||
968 | 113 | <object class="GtkLabel" id="label2"> | ||
969 | 114 | <property name="width_request">250</property> | ||
970 | 115 | <property name="visible">True</property> | ||
971 | 116 | <property name="label" translatable="yes">Select an export directory</property> | ||
972 | 117 | </object> | ||
973 | 118 | <packing> | ||
974 | 119 | <property name="expand">False</property> | ||
975 | 120 | <property name="fill">False</property> | ||
976 | 121 | <property name="position">0</property> | ||
977 | 122 | </packing> | ||
978 | 123 | </child> | ||
979 | 124 | <child> | ||
980 | 125 | <object class="GtkFileChooserButton" id="filechooserbutton1"> | ||
981 | 126 | <property name="visible">True</property> | ||
982 | 127 | <property name="action">select-folder</property> | ||
983 | 128 | <property name="title" translatable="yes">Select a folder</property> | ||
984 | 129 | <signal name="file_set" handler="on_filechooserbutton1_file_set"/> | ||
985 | 130 | </object> | ||
986 | 131 | <packing> | ||
987 | 132 | <property name="expand">False</property> | ||
988 | 133 | <property name="fill">False</property> | ||
989 | 134 | <property name="padding">1</property> | ||
990 | 135 | <property name="position">1</property> | ||
991 | 136 | </packing> | ||
992 | 137 | </child> | ||
993 | 138 | </object> | ||
994 | 139 | <packing> | ||
995 | 140 | <property name="padding">10</property> | ||
996 | 141 | <property name="position">1</property> | ||
997 | 142 | </packing> | ||
998 | 143 | </child> | ||
999 | 144 | <child> | ||
1000 | 145 | <object class="GtkHBox" id="hbox2"> | ||
1001 | 146 | <property name="visible">True</property> | ||
1002 | 147 | <child> | ||
1003 | 148 | <object class="GtkLabel" id="label3"> | ||
1004 | 149 | <property name="width_request">250</property> | ||
1005 | 150 | <property name="visible">True</property> | ||
1006 | 151 | <property name="label" translatable="yes">Select a filename</property> | ||
1007 | 152 | </object> | ||
1008 | 153 | <packing> | ||
1009 | 154 | <property name="expand">False</property> | ||
1010 | 155 | <property name="fill">False</property> | ||
1011 | 156 | <property name="position">0</property> | ||
1012 | 157 | </packing> | ||
1013 | 158 | </child> | ||
1014 | 159 | <child> | ||
1015 | 160 | <object class="GtkEntry" id="entry_fn"> | ||
1016 | 161 | <property name="visible">True</property> | ||
1017 | 162 | <property name="can_focus">True</property> | ||
1018 | 163 | <property name="invisible_char">●</property> | ||
1019 | 164 | </object> | ||
1020 | 165 | <packing> | ||
1021 | 166 | <property name="position">1</property> | ||
1022 | 167 | </packing> | ||
1023 | 168 | </child> | ||
1024 | 169 | </object> | ||
1025 | 170 | <packing> | ||
1026 | 171 | <property name="padding">10</property> | ||
1027 | 172 | <property name="position">2</property> | ||
1028 | 173 | </packing> | ||
1029 | 174 | </child> | ||
1030 | 175 | <child> | ||
1031 | 176 | <object class="GtkStatusbar" id="statusbar1"> | ||
1032 | 177 | <property name="visible">True</property> | ||
1033 | 178 | <property name="spacing">2</property> | ||
1034 | 179 | <property name="has_resize_grip">False</property> | ||
1035 | 180 | </object> | ||
1036 | 181 | <packing> | ||
1037 | 182 | <property name="expand">False</property> | ||
1038 | 183 | <property name="padding">3</property> | ||
1039 | 184 | <property name="position">3</property> | ||
1040 | 185 | </packing> | ||
1041 | 186 | </child> | ||
1042 | 187 | </object> | ||
1043 | 188 | <packing> | ||
1044 | 189 | <property name="position">2</property> | ||
1045 | 190 | </packing> | ||
1046 | 191 | </child> | ||
1047 | 192 | <child internal-child="action_area"> | ||
1048 | 193 | <object class="GtkHButtonBox" id="dialog-action_area1"> | ||
1049 | 194 | <property name="visible">True</property> | ||
1050 | 195 | <property name="layout_style">end</property> | ||
1051 | 196 | <child> | ||
1052 | 197 | <object class="GtkButton" id="button1"> | ||
1053 | 198 | <property name="label">gtk-cancel</property> | ||
1054 | 199 | <property name="visible">True</property> | ||
1055 | 200 | <property name="can_focus">True</property> | ||
1056 | 201 | <property name="receives_default">True</property> | ||
1057 | 202 | <property name="use_stock">True</property> | ||
1058 | 203 | </object> | ||
1059 | 204 | <packing> | ||
1060 | 205 | <property name="expand">False</property> | ||
1061 | 206 | <property name="fill">False</property> | ||
1062 | 207 | <property name="position">0</property> | ||
1063 | 208 | </packing> | ||
1064 | 209 | </child> | ||
1065 | 210 | <child> | ||
1066 | 211 | <object class="GtkButton" id="button2"> | ||
1067 | 212 | <property name="label">gtk-convert</property> | ||
1068 | 213 | <property name="visible">True</property> | ||
1069 | 214 | <property name="can_focus">True</property> | ||
1070 | 215 | <property name="receives_default">True</property> | ||
1071 | 216 | <property name="use_stock">True</property> | ||
1072 | 217 | </object> | ||
1073 | 218 | <packing> | ||
1074 | 219 | <property name="expand">False</property> | ||
1075 | 220 | <property name="fill">False</property> | ||
1076 | 221 | <property name="position">1</property> | ||
1077 | 222 | </packing> | ||
1078 | 223 | </child> | ||
1079 | 224 | <child> | ||
1080 | 225 | <object class="GtkButton" id="button3"> | ||
1081 | 226 | <property name="label">gtk-close</property> | ||
1082 | 227 | <property name="visible">True</property> | ||
1083 | 228 | <property name="can_focus">True</property> | ||
1084 | 229 | <property name="receives_default">True</property> | ||
1085 | 230 | <property name="use_stock">True</property> | ||
1086 | 231 | <signal name="activate" handler="on_dialog_export_file_close"/> | ||
1087 | 232 | </object> | ||
1088 | 233 | <packing> | ||
1089 | 234 | <property name="expand">False</property> | ||
1090 | 235 | <property name="fill">False</property> | ||
1091 | 236 | <property name="position">2</property> | ||
1092 | 237 | </packing> | ||
1093 | 238 | </child> | ||
1094 | 239 | </object> | ||
1095 | 240 | <packing> | ||
1096 | 241 | <property name="expand">False</property> | ||
1097 | 242 | <property name="pack_type">end</property> | ||
1098 | 243 | <property name="position">0</property> | ||
1099 | 244 | </packing> | ||
1100 | 245 | </child> | ||
1101 | 246 | </object> | ||
1102 | 247 | </child> | ||
1103 | 248 | <action-widgets> | ||
1104 | 249 | <action-widget response="1">button1</action-widget> | ||
1105 | 250 | <action-widget response="2">button2</action-widget> | ||
1106 | 251 | <action-widget response="3">button3</action-widget> | ||
1107 | 252 | </action-widgets> | ||
1108 | 253 | </object> | ||
1109 | 254 | </interface> | ||
1110 | 0 | 255 | ||
1111 | === modified file 'ui/luciole.glade' | |||
1112 | --- ui/luciole.glade 2009-12-07 07:25:24 +0000 | |||
1113 | +++ ui/luciole.glade 2009-12-07 07:25:24 +0000 | |||
1114 | @@ -172,6 +172,15 @@ | |||
1115 | 172 | </object> | 172 | </object> |
1116 | 173 | </child> | 173 | </child> |
1117 | 174 | <child> | 174 | <child> |
1118 | 175 | <object class="GtkImageMenuItem" id="file_export_tool"> | ||
1119 | 176 | <property name="label" translatable="yes">Tool Export</property> | ||
1120 | 177 | <property name="visible">True</property> | ||
1121 | 178 | <property name="image">image5</property> | ||
1122 | 179 | <property name="use_stock">False</property> | ||
1123 | 180 | <signal name="activate" handler="on_file_export_tool_activate"/> | ||
1124 | 181 | </object> | ||
1125 | 182 | </child> | ||
1126 | 183 | <child> | ||
1127 | 175 | <object class="GtkSeparatorMenuItem" id="separatormenuitem2"> | 184 | <object class="GtkSeparatorMenuItem" id="separatormenuitem2"> |
1128 | 176 | <property name="visible">True</property> | 185 | <property name="visible">True</property> |
1129 | 177 | </object> | 186 | </object> |
1130 | @@ -368,7 +377,7 @@ | |||
1131 | 368 | <accelerator key="c" signal="clicked"/> | 377 | <accelerator key="c" signal="clicked"/> |
1132 | 369 | <signal name="clicked" handler="on_button_capture_clicked"/> | 378 | <signal name="clicked" handler="on_button_capture_clicked"/> |
1133 | 370 | <child> | 379 | <child> |
1135 | 371 | <object class="GtkImage" id="image5"> | 380 | <object class="GtkImage" id="image_snapshot_button"> |
1136 | 372 | <property name="visible">True</property> | 381 | <property name="visible">True</property> |
1137 | 373 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> | 382 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
1138 | 374 | <property name="tooltip_text" translatable="yes">make a snapshot</property> | 383 | <property name="tooltip_text" translatable="yes">make a snapshot</property> |
1139 | @@ -1386,9 +1395,9 @@ | |||
1140 | 1386 | <object class="GtkFileChooserButton" id="filechooserbutton1"> | 1395 | <object class="GtkFileChooserButton" id="filechooserbutton1"> |
1141 | 1387 | <property name="visible">True</property> | 1396 | <property name="visible">True</property> |
1142 | 1388 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> | 1397 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
1143 | 1398 | <property name="do_overwrite_confirmation">True</property> | ||
1144 | 1399 | <property name="action">select-folder</property> | ||
1145 | 1389 | <property name="use_preview_label">False</property> | 1400 | <property name="use_preview_label">False</property> |
1146 | 1390 | <property name="action">select-folder</property> | ||
1147 | 1391 | <property name="do_overwrite_confirmation">True</property> | ||
1148 | 1392 | <property name="title" translatable="yes">Select a folder</property> | 1401 | <property name="title" translatable="yes">Select a folder</property> |
1149 | 1393 | </object> | 1402 | </object> |
1150 | 1394 | <packing> | 1403 | <packing> |
1151 | @@ -1772,4 +1781,8 @@ | |||
1152 | 1772 | <property name="visible">True</property> | 1781 | <property name="visible">True</property> |
1153 | 1773 | <property name="stock">gtk-preferences</property> | 1782 | <property name="stock">gtk-preferences</property> |
1154 | 1774 | </object> | 1783 | </object> |
1155 | 1784 | <object class="GtkImage" id="image5"> | ||
1156 | 1785 | <property name="visible">True</property> | ||
1157 | 1786 | <property name="stock">gtk-connect</property> | ||
1158 | 1787 | </object> | ||
1159 | 1775 | </interface> | 1788 | </interface> |
Approved .
Specification wiki shall be updated.
Translation needed