diff -Nru bombono-dvd-0.7.0/debian/changelog bombono-dvd-0.8.0/debian/changelog --- bombono-dvd-0.7.0/debian/changelog 2010-11-01 22:12:33.000000000 +0000 +++ bombono-dvd-0.8.0/debian/changelog 2010-11-01 22:12:34.000000000 +0000 @@ -1,8 +1,14 @@ -bombono-dvd (0.7.0-1ppa1~karmic1) karmic; urgency=low +bombono-dvd (0.8.0-1ppa1~karmic1) karmic; urgency=low * PPA update - -- Ilya Murav'jov Fri, 08 Oct 2010 02:44:48 +0400 + -- Ilya Murav'jov Tue, 02 Nov 2010 01:05:40 +0300 + +bombono-dvd (0.8.0-1) karmic; urgency=low + + * New upstream release. + + -- Ilya Murav'jov Tue, 02 Nov 2010 00:44:05 +0300 bombono-dvd (0.7.0-1) karmic; urgency=low diff -Nru bombono-dvd-0.7.0/debian/control bombono-dvd-0.8.0/debian/control --- bombono-dvd-0.7.0/debian/control 2010-11-01 22:12:33.000000000 +0000 +++ bombono-dvd-0.8.0/debian/control 2010-11-01 22:12:34.000000000 +0000 @@ -8,7 +8,7 @@ Package: bombono-dvd Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, dvdauthor, mjpegtools, dvd+rw-tools, scons, twolame +Depends: ${shlibs:Depends}, ${misc:Depends}, dvdauthor, mjpegtools, dvd+rw-tools, scons, twolame, ffmpeg Suggests: totem Description: DVD authoring program with nice and clean GUI Bombono DVD is easy to use program for making DVD-Video. diff -Nru bombono-dvd-0.7.0/docs/TechTasks/CuttingSplicing.txt bombono-dvd-0.8.0/docs/TechTasks/CuttingSplicing.txt --- bombono-dvd-0.7.0/docs/TechTasks/CuttingSplicing.txt 2010-10-07 22:20:07.000000000 +0000 +++ bombono-dvd-0.8.0/docs/TechTasks/CuttingSplicing.txt 2010-11-01 21:58:26.000000000 +0000 @@ -1,13 +1,11 @@ CuttingSplicing - резка/склейка видео. В идеале: для точной резки/склейки, т.е. с точностью до кадра, - необходимо уметь самому создавать видеопоток (и аудио, к примеру тоже), - а это нам недоступно, пока. Соответственно, единственно возможный - вариант пока - резка/склейка по I-кадрам. И для этого надо: + необходимо уметь самому создавать видеопоток (и аудио, к примеру тоже). + Соответственно, единственно возможный вариант пока - резка/склейка по I-кадрам. + И для этого надо: - уметь мультиплексировать в MPEG1/2 (по крайней мере потому, что первый AU должен быть с PTS); - правка временн'ой базы mpeg-контейнера, необходимая при соединении двух частей. - -Замечание: - - надо смотреть как работают миксеры MPEG PS: mjpegtools(mplex) и mplayer. + diff -Nru bombono-dvd-0.7.0/docs/TechTasks/MpegCodecsDemuxers.txt bombono-dvd-0.8.0/docs/TechTasks/MpegCodecsDemuxers.txt --- bombono-dvd-0.7.0/docs/TechTasks/MpegCodecsDemuxers.txt 2010-10-07 22:20:07.000000000 +0000 +++ bombono-dvd-0.8.0/docs/TechTasks/MpegCodecsDemuxers.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ - Кодеки и демиксеры - впервую очередь MPEG. - -Причина(ы): видеокодеков и тому подобных вещей сейчас очень много, - поэтому в первую очередь нас интересуют те, которые используются - при DVD-авторинге, т.е. создании видео на DVD(HD-DVD, Blueray): - а) видеодекодеры - MPEG1, MPEG2, AVC - б) демиксеры/контейнеры - MPEG1 PS, MPEG2 PS. - Менее приоритетны все остальное и звук в частности ("руки не доходят"), - включая видеокодек MPEG4 (кстати, его заменяет более современный AVC) - и контейнер AVI. - -Замечания: - - сейчас реализован и контейнер MPEG2, и декодер MPEG2-Video; соответственно, - наиболее просто будет реализовать тоже самое в MPEG1, так как они очень - похожи. - - c AVC будет сложнее, так как это самый современный кодек + надо будет - еще научиться использовать распаковщик видео от плейера VLC (h264). diff -Nru bombono-dvd-0.7.0/docs/TechTasks/MpegVideoUnpacker.txt bombono-dvd-0.8.0/docs/TechTasks/MpegVideoUnpacker.txt --- bombono-dvd-0.7.0/docs/TechTasks/MpegVideoUnpacker.txt 2010-10-07 22:20:07.000000000 +0000 +++ bombono-dvd-0.8.0/docs/TechTasks/MpegVideoUnpacker.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ - MpegVideoUnpacker - распаковка сжатых данных в MPEG1/2. - -Причина(ы): логически декодер (MPEG) можно разделить на парсер - (уже написан, Mpeg::Decoder) видеопотока на "сжатые картинки" и - собственно распаковщик - то, что и достает картинки; функционал - распаковщика присутствует в библиотеке libmpeg2 (стандартный декодер - MPEG1/2-видео под Linux) в виде mpeg2_decoder_s (структура), mpeg2_slice() - и mpeg2_init_fbuf() (все представлены в slice.c и др.); - распаковщик делает всю работу по получению изображений (в YCbCr) из - потока MPEG2-видео, происходит это каждый раз когда приходит - секция slice (срез), так что это часть декодера, причем наиболее - "расчетная" (всякие (I)DCT-преобразования). - -Интерфейс/Функционал: для получения полноценного декодера MPEG1/2 - достаточно прикрутить к Mpeg::Decoder (который умеет парсить поток и - выдавать данные для распаковщика) mpeg2_decoder_s. - -Замечания: - - для надежности стоит отследить все установки которые делает libmpeg2 - в mpeg2_decoder_s перед самой распаковкой; таким образом можно легко - находить, как правильно управлять распаковкой в mpeg2_slice(), и, - соответственно, иметь возможность делать регрессионное тестирование - Mpeg::Decoder и libmpeg2. diff -Nru bombono-dvd-0.7.0/docs/TechTasks/SuperStack.txt bombono-dvd-0.8.0/docs/TechTasks/SuperStack.txt --- bombono-dvd-0.7.0/docs/TechTasks/SuperStack.txt 2010-10-07 22:20:07.000000000 +0000 +++ bombono-dvd-0.8.0/docs/TechTasks/SuperStack.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ - SuperStack - передача параметров через контейнер (DataWare). - -Причина(ы): связи между различными GUI-компонентами (браузеры, монтажное окно, редактор) - приложения намеренно сделаны слабыми; соотвественно, чтобы обрабатывать события - медийных объектов (Project::MediaItem) используется централизованная "доска объявлений", - когда любой желающий (обработчик) может отловить нужное ему событие, при этом каждый - раз он получает один аргумент - Project::MediaItem; благодаря тому, что он порожден - от DataWare, можно в нем самом передавать (остальные) аргументы любого типа, что - сейчас и делается (см. вызовы InvokeOn*). Проблема в том, что сейчас для каждого - вызова приходится создавать новую структуру, хранящую параметры вызова, что неудобно. - -Интерфейс/Функционал: нужен функционал по типу стека на DataWare,- - template - void PushCallArgs(DataWare& dw, ArgTuple args); - template - void PopCallArgs(DataWare& dw, ArgTuple args); - template - ArgTuple PeekCallArgs(DataWare& dw); - При этом: - - ArgTuple это boost::tuple, очевидно :) - - вызовы PopCallArgs()/PeekCallArgs() должны быть "защищены",- можно выдавать только то, - что положили последним PushCallArgs(),- значит надо хранить с каждым аргументом его - стековую позицию (начиная от 0 - первый вызов, 1 - второй вложенный вызов, ...) - - некоторая сложность заключается в том, что типы аргументов вполне могут быть одинаковыми, - а значит при хранении их надо как-то различать (номер?!) - - для удобства нужна интерфейсная функция супер-вызова (вызов по "C"-соглашению),- - template - HandlerCall(MediaItem mi, const std::string& op, Arg1 arg1, Arg2 arg2, ...) - { - ArgTuple args(arg1, arg2, ...); - PushCallArgs(args); - InvokeOn(mi, op); - PopCallArgs(args); - } - -Замечания: - - помимо удобства вызова не нужно описывать в заголовках эти спец-структуры; - - также подобные структуры не нужно очищать,- это будет делаться автоматом. - - идея приставки "супер" возникла у меня благодаря некоторой ностальгии по тому - времени, когда я, будучи аспирантом, немного занимался наукой,- математикой - в области "Супералгебры Ли". :'( - diff -Nru bombono-dvd-0.7.0/libs/mpeg2dec/libmpeg2/convert/SConscript bombono-dvd-0.8.0/libs/mpeg2dec/libmpeg2/convert/SConscript --- bombono-dvd-0.7.0/libs/mpeg2dec/libmpeg2/convert/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/libs/mpeg2dec/libmpeg2/convert/SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -19,7 +19,7 @@ # # EXTRA_DIST = convert_internal.h -Import('libmpeg2_env') +Import('libmpeg2_env', 'user_options_dict') libmpeg2convert_env = libmpeg2_env.Clone() @@ -33,5 +33,5 @@ # libmpeg2convert.a # libmpeg2convert_src = ['rgb.c', 'uyvy.c'] -libmpeg2convert_env.Library(target = 'libmpeg2convert', source = libmpeg2convert_src+libmpeg2convertarch_objs) +libmpeg2convert_env.Library(target = user_options_dict['LIB_BUILD_DIR'] + '/libmpeg2convert', source = libmpeg2convert_src+libmpeg2convertarch_objs) diff -Nru bombono-dvd-0.7.0/libs/mpeg2dec/libmpeg2/SConscript bombono-dvd-0.8.0/libs/mpeg2dec/libmpeg2/SConscript --- bombono-dvd-0.7.0/libs/mpeg2dec/libmpeg2/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/libs/mpeg2dec/libmpeg2/SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -25,7 +25,7 @@ # # EXTRA_DIST = configure.incl vlc.h mpeg2_internal.h -Import('libmpeg2_env') +Import('libmpeg2_env', 'user_options_dict') libmpeg2_env_lib = libmpeg2_env.Clone() @@ -43,7 +43,7 @@ # libmpeg2.a # libmpeg2_src = ['alloc.c', 'header.c', 'decode.c', 'slice.c', 'motion_comp.c', 'idct.c'] -libmpeg2_env_lib.Library(target = 'libmpeg2', source = libmpeg2_src + libmpeg2arch_objs) +libmpeg2_env_lib.Library(target = user_options_dict['LIB_BUILD_DIR'] + '/libmpeg2', source = libmpeg2_src + libmpeg2arch_objs) SConscript('convert/SConscript') diff -Nru bombono-dvd-0.7.0/libs/mpeg2dec/SConscript bombono-dvd-0.8.0/libs/mpeg2dec/SConscript --- bombono-dvd-0.7.0/libs/mpeg2dec/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/libs/mpeg2dec/SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -107,6 +107,7 @@ Export('libmpeg2_env') libvo_env = libmpeg2_env.Clone() +libvo_env.Append(LIBS=['mpeg2', 'mpeg2convert']) # libvo_env.Append(CPPPATH = ['/usr/include/SDL'], DEFINES = ['_REENTRANT']) # libvo_env.Append(LIBPATH = ['/usr/X11R6/lib']) # libvo_env.Append(LIBS=['SM', 'ICE', 'X11', 'Xext', 'Xv', 'SDL','pthread']) diff -Nru bombono-dvd-0.7.0/libs/mpeg2dec/src/SConscript bombono-dvd-0.8.0/libs/mpeg2dec/src/SConscript --- bombono-dvd-0.7.0/libs/mpeg2dec/src/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/libs/mpeg2dec/src/SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -25,7 +25,7 @@ # # mpeg2dec # -mpeg2dec_ldadd = ['../libvo/libvo.a', '../libmpeg2/libmpeg2.a', '../libmpeg2/convert/libmpeg2convert.a'] +mpeg2dec_ldadd = ['../libvo/libvo.a'] mpeg2dec_src = ['mpeg2dec.c', 'dump_state.c', 'getopt.c', 'gettimeofday.c'] mpeg2dec_env.Program(target = 'mpeg2dec', source = mpeg2dec_src + mpeg2dec_ldadd) diff -Nru bombono-dvd-0.7.0/libs/SConscript bombono-dvd-0.8.0/libs/SConscript --- bombono-dvd-0.7.0/libs/SConscript 2010-10-07 22:20:07.000000000 +0000 +++ bombono-dvd-0.8.0/libs/SConscript 2010-11-01 21:58:26.000000000 +0000 @@ -45,9 +45,9 @@ mpeg2dec_src = 'mpeg2dec' # install libmpeg2 for use by the project -lib_mpeg_prefix = mpeg2dec_src + '/libmpeg2/' -env.Install(dir = '../lib', - source = [ lib_mpeg_prefix+'libmpeg2.a', lib_mpeg_prefix+'convert/libmpeg2convert.a' ] ) +#lib_mpeg_prefix = mpeg2dec_src + '/libmpeg2/' +#env.Install(dir = '../lib', +# source = [ lib_mpeg_prefix+'libmpeg2.a', lib_mpeg_prefix+'convert/libmpeg2convert.a' ] ) # # for config.h + = './include' # include_dir = Dir(mpeg2dec_src+'/include') diff -Nru bombono-dvd-0.7.0/po/bombono-dvd.pot bombono-dvd-0.8.0/po/bombono-dvd.pot --- bombono-dvd-0.7.0/po/bombono-dvd.pot 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/bombono-dvd.pot 2010-11-01 21:58:28.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"POT-Creation-Date: 2010-10-31 20:23+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:202 +#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:223 msgid "Chapter" msgstr "" @@ -25,7 +25,7 @@ msgid "Cant create folder %1% (check permissions)" msgstr "" -#: src/mbase/project/menu.cpp:276 +#: src/mbase/project/menu.cpp:331 msgid "Menu" msgstr "" @@ -49,7 +49,7 @@ msgid "Import is completed." msgstr "" -#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:527 +#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:540 msgid "MB" msgstr "" @@ -72,7 +72,7 @@ msgid "Cant write to folder %1% (check permissions)." msgstr "" -#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:322 +#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:327 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "" @@ -104,7 +104,7 @@ msgstr "" #. имя -#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:219 +#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:240 msgid "Name" msgstr "" @@ -118,142 +118,142 @@ #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:52 +#: src/mgui/execution.cpp:56 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "" -#: src/mgui/execution.cpp:411 +#: src/mgui/execution.cpp:479 #, boost-format msgid "exit code = %1%" msgstr "" -#: src/mgui/execution.cpp:413 +#: src/mgui/execution.cpp:481 #, boost-format msgid "broken by signal %1%" msgstr "" -#: src/mgui/mux.cpp:50 +#: src/mgui/mux.cpp:55 msgid "muxing" msgstr "" -#: src/mgui/mux.cpp:66 +#: src/mgui/mux.cpp:71 #, boost-format msgid "Muxing \"%1%\"" msgstr "" -#: src/mgui/mux.cpp:77 src/mgui/author/output.cpp:231 +#: src/mgui/mux.cpp:82 src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "" -#: src/mgui/mux.cpp:101 +#: src/mgui/mux.cpp:105 msgid "Muxing error" msgstr "" -#: src/mgui/mux.cpp:102 src/mgui/author/output.cpp:654 +#: src/mgui/mux.cpp:106 src/mgui/author/output.cpp:653 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "" -#: src/mgui/mux.cpp:118 +#: src/mgui/mux.cpp:122 msgid "Select a folder" msgstr "" -#: src/mgui/mux.cpp:130 +#: src/mgui/mux.cpp:134 msgid "in" msgstr "" -#: src/mgui/mux.cpp:164 +#: src/mgui/mux.cpp:168 msgid "Mux streams" msgstr "" -#: src/mgui/mux.cpp:166 +#: src/mgui/mux.cpp:170 msgid "Output" msgstr "" -#: src/mgui/mux.cpp:167 +#: src/mgui/mux.cpp:171 msgid "Select elementary video" msgstr "" -#: src/mgui/mux.cpp:168 +#: src/mgui/mux.cpp:172 msgid "Select audio" msgstr "" #. Названия типов для i18n -#: src/mgui/mux.cpp:172 src/mgui/project/media-browser.cpp:201 +#: src/mgui/mux.cpp:176 src/mgui/project/media-browser.cpp:222 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "" -#: src/mgui/mux.cpp:175 +#: src/mgui/mux.cpp:179 msgid "MPEG2 elementary video (m2v)" msgstr "" -#: src/mgui/mux.cpp:180 +#: src/mgui/mux.cpp:184 src/mgui/project/menu-browser.cpp:406 msgid "Audio" msgstr "" -#: src/mgui/mux.cpp:183 src/mgui/timeline/mviewer.cpp:281 +#: src/mgui/mux.cpp:187 src/mgui/timeline/mviewer.cpp:282 msgid "Audio for DVD" msgstr "" -#: src/mgui/mux.cpp:208 +#: src/mgui/mux.cpp:212 msgid "Elementary video file is not selected." msgstr "" -#: src/mgui/mux.cpp:210 +#: src/mgui/mux.cpp:214 msgid "Audio file is not selected." msgstr "" -#: src/mgui/mux.cpp:212 +#: src/mgui/mux.cpp:216 msgid "Output file name is empty." msgstr "" -#: src/mgui/prefs.cpp:143 +#: src/mgui/prefs.cpp:172 msgid "Bombono DVD Preferences" msgstr "" -#: src/mgui/prefs.cpp:157 +#: src/mgui/prefs.cpp:186 msgid "_Default project type" msgstr "" -#: src/mgui/prefs.cpp:160 +#: src/mgui/prefs.cpp:189 msgid "Default _folder for authoring" msgstr "" -#: src/mgui/prefs.cpp:165 +#: src/mgui/prefs.cpp:194 msgid "_Play authoring result in" msgstr "" -#: src/mgui/win_utils.cpp:325 +#: src/mgui/win_utils.cpp:330 msgid "Replacing the file overwrite its contents." msgstr "" -#: src/mgui/author/burn.cpp:199 +#: src/mgui/author/burn.cpp:192 msgid "Auto" msgstr "" -#: src/mgui/author/burn.cpp:211 +#: src/mgui/author/burn.cpp:204 msgid "Update speeds ..." msgstr "" -#: src/mgui/author/burn.cpp:332 +#: src/mgui/author/burn.cpp:325 msgid "Checking Disc ..." msgstr "" -#: src/mgui/author/burn.cpp:346 +#: src/mgui/author/burn.cpp:339 msgid "Selected burn drive is for CD discs only. Change to another burn drive." msgstr "" -#: src/mgui/author/burn.cpp:351 +#: src/mgui/author/burn.cpp:344 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." msgstr "" -#: src/mgui/author/burn.cpp:356 +#: src/mgui/author/burn.cpp:349 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "" -#: src/mgui/author/burn.cpp:361 +#: src/mgui/author/burn.cpp:354 #, boost-format msgid "" "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type " @@ -261,29 +261,29 @@ "right type and press OK." msgstr "" -#: src/mgui/author/burn.cpp:370 +#: src/mgui/author/burn.cpp:363 #, boost-format msgid "" "Disc with type \"%1%\" in the drive is not clear. Only clear recordable " "discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "" -#: src/mgui/author/burn.cpp:377 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "" "Disc with type \"%1%\" in the drive is not clear. We need to remove its " "contents before writing new one. Continue?" msgstr "" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:374 msgid "_Cancel" msgstr "" -#: src/mgui/author/burn.cpp:382 +#: src/mgui/author/burn.cpp:375 msgid "_Try again" msgstr "" -#: src/mgui/author/execute.cpp:62 +#: src/mgui/author/execute.cpp:64 msgid "Status: " msgstr "" @@ -353,40 +353,40 @@ msgid "_Rendering only" msgstr "" -#: src/mgui/author/output.cpp:277 +#: src/mgui/author/output.cpp:276 msgid "Rendering" msgstr "" -#: src/mgui/author/output.cpp:354 +#: src/mgui/author/output.cpp:353 msgid "DVD Burning" msgstr "" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:397 msgid "The result is here" msgstr "" -#: src/mgui/author/output.cpp:400 +#: src/mgui/author/output.cpp:399 msgid "" "You can run authoring manually by executing command \"scons\" at the " "specified folder. Also, see README file for other options over there." msgstr "" #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:424 +#: src/mgui/author/output.cpp:423 msgid "Authoring is cancelled." msgstr "" -#: src/mgui/author/output.cpp:435 +#: src/mgui/author/output.cpp:434 #, boost-format msgid "%1% is not a folder" msgstr "" -#: src/mgui/author/output.cpp:446 +#: src/mgui/author/output.cpp:445 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "" -#: src/mgui/author/output.cpp:454 +#: src/mgui/author/output.cpp:453 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before " @@ -394,147 +394,176 @@ "Continue?" msgstr "" -#: src/mgui/author/output.cpp:460 +#: src/mgui/author/output.cpp:459 #, boost-format msgid "Error during removing files: %1%" msgstr "" -#: src/mgui/author/output.cpp:651 +#: src/mgui/author/output.cpp:650 #, boost-format msgid "%1% cancelled." msgstr "" -#: src/mgui/author/output.cpp:653 +#: src/mgui/author/output.cpp:652 #, boost-format msgid "%1% broken." msgstr "" #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:660 +#: src/mgui/author/output.cpp:659 #, boost-format msgid "%1% successfully completed." msgstr "" -#: src/mgui/author/output.cpp:690 src/mgui/timeline/select.cpp:239 +#: src/mgui/author/output.cpp:699 src/mgui/timeline/select.cpp:236 #, boost-format msgid "_Play in %1%" msgstr "" -#: src/mgui/author/output.cpp:691 +#: src/mgui/author/output.cpp:700 msgid "_Burn to DVD" msgstr "" -#: src/mgui/author/script.cpp:391 +#: src/mgui/author/render.cpp:443 +#, boost-format +msgid "ffmpeg failure: %1%" +msgstr "" + +#: src/mgui/author/render.cpp:810 +msgid "command not found" +msgstr "" + +#: src/mgui/author/script.cpp:469 msgid "There is no media (video or menu)." msgstr "" -#: src/mgui/author/script.cpp:556 +#: src/mgui/author/script.cpp:780 #, boost-format msgid "external command failure: %1%" msgstr "" -#: src/mgui/editor/select.cpp:599 +#: src/mgui/editor/select.cpp:410 src/mgui/project/menu-browser.cpp:259 +msgid "Play All" +msgstr "" + +#: src/mgui/editor/select.cpp:662 msgid "Delete" msgstr "" -#: src/mgui/editor/select.cpp:613 +#. Link +#. bool is_background = !has_selected; +#. Project::Menu cur_mn = edt_area.CurMenu(); +#. Project::SetLinkMenu& slm = cur_mn->GetData(); +#. slm.isForBack = is_background; +#. slm.newLink = GetCurObjectLink(is_background); +#. +#. InvokeOn(cur_mn, "SetLinkMenu"); +#. if( slm.linkMenu ) +#. { +#. mn.items().push_back(MenuElem(_("Link"))); +#. mn.items().back().set_submenu(*slm.linkMenu.release()); +#. } +#. mn.items().push_back( +#. MenuElem(_("Remove Link"), bb::bind(&SetSelObjectsLinks, +#. Project::MediaItem(), is_background))); +#: src/mgui/editor/select.cpp:681 msgid "Link" msgstr "" -#: src/mgui/editor/select.cpp:617 +#: src/mgui/editor/select.cpp:684 msgid "Remove Link" msgstr "" #. Poster Link -#: src/mgui/editor/select.cpp:621 +#: src/mgui/editor/select.cpp:688 msgid "Set Poster" msgstr "" -#: src/mgui/editor/select.cpp:630 +#: src/mgui/editor/select.cpp:700 msgid "Align" msgstr "" -#: src/mgui/editor/select.cpp:638 +#: src/mgui/editor/select.cpp:706 msgid "Align Left" msgstr "" -#: src/mgui/editor/select.cpp:639 +#: src/mgui/editor/select.cpp:707 msgid "Align Right" msgstr "" -#: src/mgui/editor/select.cpp:640 +#: src/mgui/editor/select.cpp:708 msgid "Align Top" msgstr "" -#: src/mgui/editor/select.cpp:641 +#: src/mgui/editor/select.cpp:709 msgid "Align Bottom" msgstr "" -#: src/mgui/editor/select.cpp:644 +#: src/mgui/editor/select.cpp:712 msgid "Center Horizontally" msgstr "" -#: src/mgui/editor/select.cpp:645 +#: src/mgui/editor/select.cpp:713 msgid "Center Vertically" msgstr "" -#: src/mgui/editor/select.cpp:650 +#: src/mgui/editor/select.cpp:718 msgid "Distribute Horizontally" msgstr "" -#: src/mgui/editor/select.cpp:651 +#: src/mgui/editor/select.cpp:719 msgid "Distribute Vertically" msgstr "" #. Set Background Color -#: src/mgui/editor/select.cpp:656 src/mgui/editor/select.cpp:908 +#: src/mgui/editor/select.cpp:724 src/mgui/editor/select.cpp:976 msgid "Set Background Color..." msgstr "" #. Selection Tool -#: src/mgui/editor/toolbar.cpp:135 +#: src/mgui/editor/toolbar.cpp:136 msgid "Selection Tool" msgstr "" #. Text Tool -#: src/mgui/editor/toolbar.cpp:138 +#: src/mgui/editor/toolbar.cpp:139 msgid "Text Tool" msgstr "" -#: src/mgui/editor/toolbar.cpp:495 +#: src/mgui/editor/toolbar.cpp:500 msgid "Add Item" msgstr "" -#: src/mgui/editor/toolbar.cpp:517 +#: src/mgui/editor/toolbar.cpp:522 msgid "Font Name" msgstr "" -#: src/mgui/editor/toolbar.cpp:533 +#: src/mgui/editor/toolbar.cpp:538 msgid "Font Size" msgstr "" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:543 msgid "Bold" msgstr "" -#: src/mgui/editor/toolbar.cpp:539 +#: src/mgui/editor/toolbar.cpp:544 msgid "Italic" msgstr "" -#: src/mgui/editor/toolbar.cpp:540 +#: src/mgui/editor/toolbar.cpp:545 msgid "Underline" msgstr "" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:552 msgid "Pick a Color for Text" msgstr "" -#: src/mgui/editor/toolbar.cpp:551 +#: src/mgui/editor/toolbar.cpp:554 msgid "Text Color" msgstr "" -#: src/mgui/editor/toolbar.cpp:563 +#: src/mgui/editor/toolbar.cpp:566 msgid "Show Safe Area" msgstr "" @@ -684,106 +713,93 @@ msgid "First-Play media can be Video or Menu only." msgstr "" -#: src/mgui/project/mconstructor.cpp:335 +#: src/mgui/project/mconstructor.cpp:348 msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" msgstr "" #. dlg.set_authors(authors); #. dlg.set_documenters(documenters); #. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:340 +#: src/mgui/project/mconstructor.cpp:353 msgid "translator-credits" msgstr "" #. раньше Brasero использовал KiB, MiB и GiB, как более точные технически #. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero #. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:527 +#: src/mgui/project/mconstructor.cpp:540 msgid "KB" msgstr "" -#: src/mgui/project/mconstructor.cpp:527 +#: src/mgui/project/mconstructor.cpp:540 msgid "GB" msgstr "" #. Project -#: src/mgui/project/mconstructor.cpp:635 +#: src/mgui/project/mconstructor.cpp:648 msgid "_Project" msgstr "" -#: src/mgui/project/mconstructor.cpp:642 +#: src/mgui/project/mconstructor.cpp:655 msgid "_Quit" msgstr "" -#: src/mgui/project/mconstructor.cpp:644 +#: src/mgui/project/mconstructor.cpp:657 msgid "Add Videos from _DVD" msgstr "" -#: src/mgui/project/mconstructor.cpp:644 +#: src/mgui/project/mconstructor.cpp:657 msgid "DVD-Import Assistant" msgstr "" -#: src/mgui/project/mconstructor.cpp:646 +#: src/mgui/project/mconstructor.cpp:659 msgid "_Mux" msgstr "" -#: src/mgui/project/mconstructor.cpp:646 +#: src/mgui/project/mconstructor.cpp:659 msgid "Mux Elementary Streams into MPEG2" msgstr "" -#: src/mgui/project/mconstructor.cpp:648 +#: src/mgui/project/mconstructor.cpp:661 msgid "Pr_eferences" msgstr "" #. Go -#: src/mgui/project/mconstructor.cpp:687 +#: src/mgui/project/mconstructor.cpp:700 msgid "_Go" msgstr "" #. первый вставляем сразу #. Help -#: src/mgui/project/mconstructor.cpp:693 +#: src/mgui/project/mconstructor.cpp:706 msgid "_Help" msgstr "" -#: src/mgui/project/mconstructor.cpp:818 +#: src/mgui/project/mconstructor.cpp:860 msgctxt "MainTabs" msgid "_Source" msgstr "" -#: src/mgui/project/mconstructor.cpp:820 +#: src/mgui/project/mconstructor.cpp:862 msgctxt "MainTabs" msgid "_Menu" msgstr "" -#: src/mgui/project/mconstructor.cpp:822 +#: src/mgui/project/mconstructor.cpp:864 msgctxt "MainTabs" msgid "_Output" msgstr "" -#: src/mgui/project/media-browser.cpp:148 -msgid "Previous Menu" -msgstr "" - -#: src/mgui/project/media-browser.cpp:148 -#: src/mgui/project/media-browser.cpp:150 -msgid "Next Video" -msgstr "" - -#: src/mgui/project/media-browser.cpp:149 -#, boost-format -msgid "Auto (%1%)" -msgstr "" - -#: src/mgui/project/media-browser.cpp:179 +#: src/mgui/project/media-browser.cpp:198 +#: src/mgui/project/menu-browser.cpp:427 msgid "End Action" msgstr "" -#: src/mgui/project/media-browser.cpp:203 +#: src/mgui/project/media-browser.cpp:224 msgid "Still Picture" msgstr "" -#: src/mgui/project/media-browser.cpp:235 +#: src/mgui/project/media-browser.cpp:256 msgid "Type" msgstr "" @@ -793,121 +809,186 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:293 -#: src/mgui/project/menu-browser.cpp:374 +#: src/mgui/project/media-browser.cpp:312 +#: src/mgui/project/menu-browser.cpp:808 msgid "Media List" msgstr "" -#: src/mgui/project/media-browser.cpp:333 +#: src/mgui/project/media-browser.cpp:352 msgid "Add Media from File Browser" msgstr "" -#: src/mgui/project/media-browser.cpp:342 +#: src/mgui/project/media-browser.cpp:361 msgid "Remove Media" msgstr "" -#: src/mgui/project/media-browser.cpp:353 +#: src/mgui/project/media-browser.cpp:372 msgid "Make Chapters for Video" msgstr "" -#: src/mgui/project/menu-browser.cpp:191 +#: src/mgui/project/menu-browser.cpp:99 src/mgui/project/menu-browser.cpp:608 msgid "No Link" msgstr "" +#: src/mgui/project/menu-browser.cpp:248 +msgid "Previous Menu" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:248 src/mgui/project/menu-browser.cpp:256 +msgid "Next Video" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:249 +#, boost-format +msgid "Auto (%1%)" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:252 +msgid "Loop" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:351 src/mgui/project/menu-browser.cpp:482 +msgid "Menu Settings" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:363 +msgid "_Still picture" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:368 +msgid "Select external audio file" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:371 src/mgui/project/menu-browser.cpp:373 +msgid "_Motion menu" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:387 +msgid "_Duration (in seconds)" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:400 +msgid "Still menu with audio in the background" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:410 +msgid "_From the project" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:414 +msgid "_External audio" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:437 +msgid "_Subpicture Colors" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:439 +msgid "S_elected item color" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:440 +msgid "_Activated item color" +msgstr "" + +#: src/mgui/project/menu-browser.cpp:442 +msgid "_Restore default colors" +msgstr "" + #. * subj -#: src/mgui/project/menu-browser.cpp:338 +#: src/mgui/project/menu-browser.cpp:773 msgid "Menu List" msgstr "" -#: src/mgui/project/menu-browser.cpp:354 +#: src/mgui/project/menu-browser.cpp:788 msgid "Add Menu" msgstr "" -#: src/mgui/project/menu-browser.cpp:359 +#: src/mgui/project/menu-browser.cpp:793 msgid "Remove Menu" msgstr "" -#: src/mgui/project/menu-browser.cpp:364 +#: src/mgui/project/menu-browser.cpp:798 msgid "Edit Menu" msgstr "" -#: src/mgui/project/serialize.cpp:61 +#: src/mgui/project/serialize.cpp:62 msgid "Save Project As..." msgstr "" -#: src/mgui/project/serialize.cpp:93 +#: src/mgui/project/serialize.cpp:94 #, boost-format msgid "Cant open project file \"%1%\"" msgstr "" -#: src/mgui/project/serialize.cpp:166 +#: src/mgui/project/serialize.cpp:167 #, boost-format msgid "Save changes to \"%1%\"?" msgstr "" -#: src/mgui/project/serialize.cpp:168 +#: src/mgui/project/serialize.cpp:169 msgid "Close _without Saving" msgstr "" -#: src/mgui/project/serialize.cpp:206 +#: src/mgui/project/serialize.cpp:207 msgid "New Project" msgstr "" -#: src/mgui/project/serialize.cpp:215 +#: src/mgui/project/serialize.cpp:216 msgid "Please select a Television standard for your project:" msgstr "" -#: src/mgui/project/serialize.cpp:237 +#: src/mgui/project/serialize.cpp:238 msgid "Open Project" msgstr "" -#: src/mgui/project/serialize.cpp:241 +#: src/mgui/project/serialize.cpp:242 msgid "Project files (*.xml)" msgstr "" -#: src/mgui/project/serialize.cpp:246 src/mgui/timeline/mviewer.cpp:283 +#: src/mgui/project/serialize.cpp:247 src/mgui/timeline/mviewer.cpp:284 msgid "All Files (*.*)" msgstr "" -#: src/mgui/project/serialize.cpp:308 +#: src/mgui/project/serialize.cpp:309 msgid "_New Project" msgstr "" -#: src/mgui/project/serialize.cpp:310 +#: src/mgui/project/serialize.cpp:311 msgid "_Open..." msgstr "" -#: src/mgui/project/serialize.cpp:312 +#: src/mgui/project/serialize.cpp:313 msgid "_Save" msgstr "" -#: src/mgui/project/serialize.cpp:314 +#: src/mgui/project/serialize.cpp:315 msgid "Save _As..." msgstr "" #. Add -#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:216 +#: src/mgui/timeline/layout.cpp:525 src/mgui/timeline/select.cpp:213 msgid "Add Chapter Point" msgstr "" -#: src/mgui/timeline/mviewer.cpp:76 +#: src/mgui/timeline/mviewer.cpp:77 msgid "Error while opening file:" msgstr "" #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:249 +#: src/mgui/timeline/mviewer.cpp:250 msgid "File Browser" msgstr "" -#: src/mgui/timeline/mviewer.cpp:279 +#: src/mgui/timeline/mviewer.cpp:280 msgid "All formats" msgstr "" -#: src/mgui/timeline/mviewer.cpp:280 +#: src/mgui/timeline/mviewer.cpp:281 msgid "MPEG files" msgstr "" -#: src/mgui/timeline/mviewer.cpp:282 +#: src/mgui/timeline/mviewer.cpp:283 msgid "Still Images" msgstr "" @@ -920,32 +1001,33 @@ msgstr "" #. Add at Intervals -#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:228 +#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:225 msgid "Add Chapter Points at Intervals" msgstr "" -#: src/mgui/timeline/select.cpp:176 +#: src/mgui/timeline/select.cpp:177 msgid "Interval between Chapters:" msgstr "" -#: src/mgui/timeline/select.cpp:183 +#. 5 мин. по умолчанию +#: src/mgui/timeline/select.cpp:181 msgid "min." msgstr "" -#: src/mgui/timeline/select.cpp:186 +#: src/mgui/timeline/select.cpp:184 msgid "Remove Existing Chapters" msgstr "" #. Delete -#: src/mgui/timeline/select.cpp:219 +#: src/mgui/timeline/select.cpp:216 msgid "Delete Chapter Point" msgstr "" #. Delete All -#: src/mgui/timeline/select.cpp:223 +#: src/mgui/timeline/select.cpp:220 msgid "Delete All Chapter Points" msgstr "" -#: src/mgui/timeline/select.cpp:236 +#: src/mgui/timeline/select.cpp:233 msgid "Save Current Frame" msgstr "" diff -Nru bombono-dvd-0.7.0/po/cs.po bombono-dvd-0.8.0/po/cs.po --- bombono-dvd-0.7.0/po/cs.po 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/cs.po 2010-11-01 21:58:28.000000000 +0000 @@ -6,22 +6,23 @@ # msgid "" msgstr "" -"Project-Id-Version: bombono-dvd 0.5.9\n" +"Project-Id-Version: bombono-dvd 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-03 00:13+0400\n" -"PO-Revision-Date: 2010-08-11 13:46+0200\n" +"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"PO-Revision-Date: 2010-10-11 04:57+0200\n" "Last-Translator: Marek Černocký \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:200 +#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:202 msgid "Chapter" msgstr "Kapitola" -#: src/mbase/project/media.cpp:112 +#: src/mbase/project/media.cpp:114 #, boost-format msgid "Cant create folder %1% (check permissions)" msgstr "Nelze vytvořit složku %1% (zkontrolujte oprávnění)" @@ -30,264 +31,268 @@ msgid "Menu" msgstr "Menu" -#: src/mgui/dvdimport.cpp:82 +#: src/mgui/dvdimport.cpp:83 msgid "Choose Source DVD-Video" msgstr "Zvolte zdroj DVD-Video" -#: src/mgui/dvdimport.cpp:85 +#: src/mgui/dvdimport.cpp:86 msgid "Select Videos to Import" msgstr "Vyberte videa pro import" -#: src/mgui/dvdimport.cpp:88 +#: src/mgui/dvdimport.cpp:89 msgid "Select Folder to Save Videos" msgstr "Vyberte složku pro uložení videí" -#: src/mgui/dvdimport.cpp:91 +#: src/mgui/dvdimport.cpp:92 msgid "Importing..." msgstr "Importuje se…" -#: src/mgui/dvdimport.cpp:94 +#: src/mgui/dvdimport.cpp:95 msgid "Import is completed." msgstr "Import je dokončen." -#: src/mgui/dvdimport.cpp:207 src/mgui/project/mconstructor.cpp:824 +#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:527 msgid "MB" msgstr "MB" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Select All" msgstr "Vybrat vše" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Unselect All" msgstr "Zrušit výběr" #. мы не можем пустить исключение здесь, потому что оно пойдет #. и через C-шный код (Gtk) - отложим -#: src/mgui/dvdimport.cpp:410 +#: src/mgui/dvdimport.cpp:411 msgid "Are you sure to stop importing?" msgstr "Opravdu chcete zastavit import?" -#: src/mgui/dvdimport.cpp:443 +#: src/mgui/dvdimport.cpp:444 #, boost-format msgid "Cant write to folder %1% (check permissions)." msgstr "Nelze zapisovat do složky %1% (zkontrolujte oprávnění)." -#: src/mgui/dvdimport.cpp:471 src/mgui/win_utils.cpp:319 +#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:322 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "Soubor s názvem „%1%“ již existuje. Chcete jej přepsat?" -#: src/mgui/dvdimport.cpp:504 +#: src/mgui/dvdimport.cpp:505 msgid "Import error!" msgstr "Chyba importu!" -#: src/mgui/dvdimport.cpp:508 +#: src/mgui/dvdimport.cpp:509 msgid "Videos successfully imported." msgstr "Video úspěšně naimportováno." -#: src/mgui/dvdimport.cpp:509 +#: src/mgui/dvdimport.cpp:510 msgid "Import has been interrupted." msgstr "Import byl přerušen." -#: src/mgui/dvdimport.cpp:543 +#: src/mgui/dvdimport.cpp:544 msgid "DVD-Video Import" msgstr "Import DVD-Video" -#: src/mgui/dvdimport.cpp:566 +#: src/mgui/dvdimport.cpp:567 msgid "Choose DVD disc, DVD folder or iso image file." msgstr "Zvolte disk DVD, složku DVD nebo soubor s obrazem ISO." -#: src/mgui/dvdimport.cpp:584 +#: src/mgui/dvdimport.cpp:585 msgid "NTSC/PAL mismatch. Try another disc or import to project of corresponding type." msgstr "Směs NTSC/PAL. Zkuste jiný disk nebo naimportujte projekt odpovídajícího typu." #. имя -#: src/mgui/dvdimport.cpp:608 src/mgui/project/media-browser.cpp:217 +#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:219 msgid "Name" msgstr "Název" -#: src/mgui/dvdimport.cpp:621 +#: src/mgui/dvdimport.cpp:622 msgid "Details" msgstr "Podrobnosti" -#: src/mgui/dvdimport.cpp:667 +#: src/mgui/dvdimport.cpp:668 msgid "It is desirable the destination folder to be empty." msgstr "Je záhodno, aby cílová složka byla prázdná." #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:27 +#: src/mgui/execution.cpp:52 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "Chystáte se zrušit %1%. Opravdu to chcete?" -#: src/mgui/mux.cpp:29 +#: src/mgui/execution.cpp:411 +#, boost-format +msgid "exit code = %1%" +msgstr "návratový kód = %1%" + +#: src/mgui/execution.cpp:413 +#, boost-format +msgid "broken by signal %1%" +msgstr "přerušeno signálem %1%" + +#: src/mgui/mux.cpp:50 msgid "muxing" msgstr "multiplexuje se" -#: src/mgui/mux.cpp:45 +#: src/mgui/mux.cpp:66 #, boost-format msgid "Muxing \"%1%\"" msgstr "Multiplexuje se „%1%“" -#: src/mgui/mux.cpp:56 src/mgui/author/output.cpp:229 +#: src/mgui/mux.cpp:77 src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "Zo_brazit/skrýt podrobnosti" -#: src/mgui/mux.cpp:80 +#: src/mgui/mux.cpp:101 msgid "Muxing error" msgstr "Chyba multiplexování" -#: src/mgui/mux.cpp:81 src/mgui/author/output.cpp:632 +#: src/mgui/mux.cpp:102 src/mgui/author/output.cpp:654 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "Důvodem je „%1%“ (viz Podrobnosti)" -#: src/mgui/mux.cpp:97 +#: src/mgui/mux.cpp:118 msgid "Select a folder" msgstr "Výběr složky" -#: src/mgui/mux.cpp:109 +#: src/mgui/mux.cpp:130 msgid "in" msgstr "v" -#: src/mgui/mux.cpp:143 +#: src/mgui/mux.cpp:164 msgid "Mux streams" msgstr "Multiplexovaný proud" -#: src/mgui/mux.cpp:145 +#: src/mgui/mux.cpp:166 msgid "Output" msgstr "Výstup" -#: src/mgui/mux.cpp:146 +#: src/mgui/mux.cpp:167 msgid "Select elementary video" msgstr "Výběr prostého videa" -#: src/mgui/mux.cpp:147 +#: src/mgui/mux.cpp:168 msgid "Select audio" msgstr "Výběr zvuku" #. Названия типов для i18n -#: src/mgui/mux.cpp:151 src/mgui/project/media-browser.cpp:199 +#: src/mgui/mux.cpp:172 src/mgui/project/media-browser.cpp:201 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "Video" -#: src/mgui/mux.cpp:154 +#: src/mgui/mux.cpp:175 msgid "MPEG2 elementary video (m2v)" msgstr "Prosté video MPEG2 (m2v)" -#: src/mgui/mux.cpp:159 +#: src/mgui/mux.cpp:180 msgid "Audio" msgstr "Zvuk" -#: src/mgui/mux.cpp:162 src/mgui/timeline/mviewer.cpp:271 +#: src/mgui/mux.cpp:183 src/mgui/timeline/mviewer.cpp:281 msgid "Audio for DVD" msgstr "Zvuk pro DVD" -#: src/mgui/mux.cpp:187 +#: src/mgui/mux.cpp:208 msgid "Elementary video file is not selected." msgstr "Není vybrán soubor s prostým videem." -#: src/mgui/mux.cpp:189 +#: src/mgui/mux.cpp:210 msgid "Audio file is not selected." msgstr "Není vybrán zvukový soubor." -#: src/mgui/mux.cpp:191 +#: src/mgui/mux.cpp:212 msgid "Output file name is empty." msgstr "Název výstupního souboru je prázdný." -#: src/mgui/prefs.cpp:98 +#: src/mgui/prefs.cpp:143 msgid "Bombono DVD Preferences" msgstr "Předvolby Bombono DVD" -#: src/mgui/prefs.cpp:111 -msgid "_Default Project Type" +#: src/mgui/prefs.cpp:157 +msgid "_Default project type" msgstr "_Výchozí typ projektu" -#: src/mgui/prefs.cpp:116 -msgid "_Play Authoring Result in" +#: src/mgui/prefs.cpp:160 +msgid "Default _folder for authoring" +msgstr "Výchozí _složka pro tvorbu" + +#: src/mgui/prefs.cpp:165 +msgid "_Play authoring result in" msgstr "_Přehrát výsledky tvorby v" -#: src/mgui/win_utils.cpp:322 +#: src/mgui/win_utils.cpp:325 msgid "Replacing the file overwrite its contents." msgstr "Nahrazením souboru přepíšete jeho obsah." -#: src/mgui/author/burn.cpp:198 +#: src/mgui/author/burn.cpp:199 msgid "Auto" msgstr "Automaticky" -#: src/mgui/author/burn.cpp:210 +#: src/mgui/author/burn.cpp:211 msgid "Update speeds ..." msgstr "Aktualizovat rychlosti…" -#: src/mgui/author/burn.cpp:331 +#: src/mgui/author/burn.cpp:332 msgid "Checking Disc ..." msgstr "Kontroluje se disk…" -#: src/mgui/author/burn.cpp:345 +#: src/mgui/author/burn.cpp:346 msgid "Selected burn drive is for CD discs only. Change to another burn drive." msgstr "Vybraná vypalovací mechanika je pouze pro disky CD. Zvolte prosím jinou vypalovací mechaniku." -#: src/mgui/author/burn.cpp:350 +#: src/mgui/author/burn.cpp:351 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." msgstr "V mechanice byl nalezen disk CD a ne DVD. Vyměňte jej prosím za disk DVD." -#: src/mgui/author/burn.cpp:355 +#: src/mgui/author/burn.cpp:356 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "V mechanice není žádný disk DVD. Vložte prázdný disk a zmáčkněte OK." -#: src/mgui/author/burn.cpp:360 +#: src/mgui/author/burn.cpp:361 #, boost-format msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." msgstr "V mechanice je disk „%1%“, ale pro DVD-Video je zapotřebí jeden následujících typů: DVD-R, DVD+R, DVD-RW, DVD+RW. Vložte prázdný disk správného typu a zmáčkněte OK." -#: src/mgui/author/burn.cpp:369 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "Disk „%1%“, který je vložený v mechanice, není prázdný. Na vypálení DVD-Video lze použít jedině prázdný zapisovatelný disk. Vložte prázdný disk a zmáčkněte OK." -#: src/mgui/author/burn.cpp:376 +#: src/mgui/author/burn.cpp:377 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" msgstr "Disk „%1%“, který je vložený v mechanice, není prázdný. Před zápisem je zapotřebí vymazat jeho obsah. Pokračovat?" -#: src/mgui/author/burn.cpp:380 +#: src/mgui/author/burn.cpp:381 msgid "_Cancel" msgstr "_Zrušit" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:382 msgid "_Try again" msgstr "Zkusit z_novu" -#: src/mgui/author/execute.cpp:72 +#: src/mgui/author/execute.cpp:62 msgid "Status: " msgstr "Stav:" -#: src/mgui/author/execute.cpp:568 -#, boost-format -msgid "exit code = %1%" -msgstr "návratový kód = %1%" - -#: src/mgui/author/execute.cpp:570 -#, boost-format -msgid "broken by signal %1%" -msgstr "přerušeno signálem %1%" - -#: src/mgui/author/indicator.cpp:67 +#: src/mgui/author/indicator.cpp:66 msgid "Rendering Menus" msgstr "Vykreslují se menu" -#: src/mgui/author/indicator.cpp:68 +#: src/mgui/author/indicator.cpp:67 msgid "Generating DVD-Video" msgstr "Generuje se DVD-Video" -#: src/mgui/author/indicator.cpp:69 +#: src/mgui/author/indicator.cpp:68 msgid "Creating ISO Image" msgstr "Vytváří se obraz ISO" -#: src/mgui/author/indicator.cpp:70 +#: src/mgui/author/indicator.cpp:69 msgid "Burning DVD" msgstr "Vypaluje se DVD" @@ -308,450 +313,308 @@ msgid "Select Output _Folder:" msgstr "Vyberte výstupní _složku:" -#: src/mgui/author/output.cpp:175 +#: src/mgui/author/output.cpp:177 msgid " Choose Author Mode: " msgstr "Zvolte režim tvorby:" #. цель по умолчанию -#: src/mgui/author/output.cpp:181 +#: src/mgui/author/output.cpp:183 msgid "_Write DVD Folder" msgstr "Z_apsat složku DVD" -#: src/mgui/author/output.cpp:182 +#: src/mgui/author/output.cpp:184 msgid "Write Disk _Image" msgstr "Zapsat obraz d_isku" -#: src/mgui/author/output.cpp:191 +#: src/mgui/author/output.cpp:193 msgid "Disc Label: " msgstr "Popisek disku: " -#: src/mgui/author/output.cpp:196 +#: src/mgui/author/output.cpp:198 msgid "Burn to _DVD" msgstr "Vypálit na _DVD" -#: src/mgui/author/output.cpp:204 +#: src/mgui/author/output.cpp:206 msgid "DVD Drive: " msgstr "Mechanika DVD: " -#: src/mgui/author/output.cpp:210 +#: src/mgui/author/output.cpp:212 msgid "Writing Speed: " msgstr "Rychlost zápisu: " -#: src/mgui/author/output.cpp:221 +#: src/mgui/author/output.cpp:223 msgid "_Rendering only" msgstr "Pouze vyk_reslit" -#: src/mgui/author/output.cpp:275 +#: src/mgui/author/output.cpp:277 msgid "Rendering" msgstr "Vykreslování" -#: src/mgui/author/output.cpp:352 +#: src/mgui/author/output.cpp:354 msgid "DVD Burning" msgstr "Vypalování DVD" -#: src/mgui/author/output.cpp:396 +#: src/mgui/author/output.cpp:398 msgid "The result is here" msgstr "Výsledek je zde" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:400 msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." msgstr "Tvorbu můžete spustit ručně pomocí příkazu „scons“ v dané složce. Podívejte se také do souboru README na další možnosti.." #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:422 +#: src/mgui/author/output.cpp:424 msgid "Authoring is cancelled." msgstr "Tvorba byla přerušena." -#: src/mgui/author/output.cpp:433 +#: src/mgui/author/output.cpp:435 #, boost-format msgid "%1% is not a folder" msgstr "%1% není složka" -#: src/mgui/author/output.cpp:444 +#: src/mgui/author/output.cpp:446 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "Nelze získat plný přístup ke složce %1% (čtení, zápis)" -#: src/mgui/author/output.cpp:452 +#: src/mgui/author/output.cpp:454 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before authoring.\n" "Continue?" msgstr "Složka %1% není prázdná. Před započetím vytváření je nutné odstranit všechny soubory. Pokračovat?" -#: src/mgui/author/output.cpp:458 +#: src/mgui/author/output.cpp:460 #, boost-format msgid "Error during removing files: %1%" msgstr "Chyba během odstraňování souborů: %1%" -#: src/mgui/author/output.cpp:629 +#: src/mgui/author/output.cpp:651 #, boost-format msgid "%1% cancelled." msgstr "Operace „%1%“ zrušena." -#: src/mgui/author/output.cpp:631 +#: src/mgui/author/output.cpp:653 #, boost-format msgid "%1% broken." msgstr "Operace „%1%“ přerušena." #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:638 +#: src/mgui/author/output.cpp:660 #, boost-format msgid "%1% successfully completed." msgstr "Operace „%1%“ úspěšně dokončena." -#: src/mgui/author/output.cpp:668 src/mgui/timeline/select.cpp:216 +#: src/mgui/author/output.cpp:690 src/mgui/timeline/select.cpp:239 #, boost-format msgid "_Play in %1%" msgstr "_Přehrát v %1%" -#: src/mgui/author/output.cpp:669 +#: src/mgui/author/output.cpp:691 msgid "_Burn to DVD" msgstr "_Vypálit na DVD" -#: src/mgui/author/script.cpp:392 +#: src/mgui/author/script.cpp:391 msgid "There is no media (video or menu)." msgstr "Nejsou k dispozici žádná média (video nebo menu)." -#: src/mgui/author/script.cpp:557 +#: src/mgui/author/script.cpp:556 #, boost-format msgid "external command failure: %1%" msgstr "externí příkaz selhal: %1%" -#: src/mgui/editor/select.cpp:499 +#: src/mgui/editor/select.cpp:599 msgid "Delete" msgstr "Smazat" -#: src/mgui/editor/select.cpp:513 +#: src/mgui/editor/select.cpp:613 msgid "Link" msgstr "Odkaz" -#: src/mgui/editor/select.cpp:517 +#: src/mgui/editor/select.cpp:617 msgid "Remove Link" msgstr "Odstranit odkaz" #. Poster Link -#: src/mgui/editor/select.cpp:521 +#: src/mgui/editor/select.cpp:621 msgid "Set Poster" msgstr "Nastavit pozadí" -#: src/mgui/editor/select.cpp:530 +#: src/mgui/editor/select.cpp:630 msgid "Align" msgstr "Zarovnat" -#: src/mgui/editor/select.cpp:538 +#: src/mgui/editor/select.cpp:638 msgid "Align Left" msgstr "Zarovnat doleva" -#: src/mgui/editor/select.cpp:539 +#: src/mgui/editor/select.cpp:639 msgid "Align Right" msgstr "Zarovnat doprava" -#: src/mgui/editor/select.cpp:540 +#: src/mgui/editor/select.cpp:640 msgid "Align Top" msgstr "Zarovnat nahoru" -#: src/mgui/editor/select.cpp:541 +#: src/mgui/editor/select.cpp:641 msgid "Align Bottom" msgstr "Zarovnat dolů" -#: src/mgui/editor/select.cpp:544 +#: src/mgui/editor/select.cpp:644 msgid "Center Horizontally" -msgstr "Vycentrovat vodorovně" +msgstr "Vystředit vodorovně" -#: src/mgui/editor/select.cpp:545 +#: src/mgui/editor/select.cpp:645 msgid "Center Vertically" -msgstr "Vycentrovat svisle" +msgstr "Vystředit svisle" + +#: src/mgui/editor/select.cpp:650 +msgid "Distribute Horizontally" +msgstr "Rozložit vodorovně" + +#: src/mgui/editor/select.cpp:651 +msgid "Distribute Vertically" +msgstr "Rozložit svisle" #. Set Background Color -#: src/mgui/editor/select.cpp:550 src/mgui/editor/select.cpp:802 +#: src/mgui/editor/select.cpp:656 src/mgui/editor/select.cpp:908 msgid "Set Background Color..." msgstr "Nastavit barvu pozadí…" #. Selection Tool -#: src/mgui/editor/toolbar.cpp:129 +#: src/mgui/editor/toolbar.cpp:135 msgid "Selection Tool" msgstr "Nástroj pro výběr" #. Text Tool -#: src/mgui/editor/toolbar.cpp:132 +#: src/mgui/editor/toolbar.cpp:138 msgid "Text Tool" msgstr "Nástroj pro text" -#: src/mgui/editor/toolbar.cpp:493 +#: src/mgui/editor/toolbar.cpp:495 msgid "Add Item" msgstr "Přidat položku" -#: src/mgui/editor/toolbar.cpp:515 +#: src/mgui/editor/toolbar.cpp:517 msgid "Font Name" msgstr "Název písma" -#: src/mgui/editor/toolbar.cpp:531 +#: src/mgui/editor/toolbar.cpp:533 msgid "Font Size" msgstr "Velikost písma" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:536 +#: src/mgui/editor/toolbar.cpp:538 msgid "Bold" msgstr "Tučné" -#: src/mgui/editor/toolbar.cpp:537 +#: src/mgui/editor/toolbar.cpp:539 msgid "Italic" msgstr "Kurzíva" -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:540 msgid "Underline" msgstr "Podtržené" -#: src/mgui/editor/toolbar.cpp:547 +#: src/mgui/editor/toolbar.cpp:549 msgid "Pick a Color for Text" msgstr "Výběr barvy pro text" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:551 msgid "Text Color" msgstr "Barva textu" -#: src/mgui/editor/toolbar.cpp:561 +#: src/mgui/editor/toolbar.cpp:563 msgid "Show Safe Area" msgstr "Zobrazit bezrizikovou oblast" -#: src/mgui/project/browser.cpp:128 -#, boost-format -msgid "Do you really want to delete \"%1%\" from Media List?" -msgstr "Opravdu chcete „%1%“ smazat ze seznamu médií?" - -#: src/mgui/project/browser.cpp:129 -#, boost-format -msgid "Do you really want to delete chapter \"%1%\"?" -msgstr "Opravdu chcete smazat kapitolu „%1%“?" - -#: src/mgui/project/browser.cpp:130 -#, boost-format -msgid "Do you really want to delete menu \"%1%\"?" -msgstr "Opravdu chcete smazat menu „%1%“?" - -#: src/mgui/project/browser.cpp:242 -msgid "First-Play media can be Video or Menu only." -msgstr "První přehrávané médium může být jen video nebo menu." - -#: src/mgui/project/mconstructor.cpp:132 -msgid "Save Project As..." -msgstr "Uložení projektu jako…" - -#: src/mgui/project/mconstructor.cpp:169 -#, boost-format -msgid "Cant open project file \"%1%\"" -msgstr "Nelze otevřít soubor s projektem „%1%“" - -#: src/mgui/project/mconstructor.cpp:465 -msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" -msgstr "Bombono DVD je program s příjemným a přehledným uživatelským rozhraním pro tvorbu DVD" - -#. dlg.set_authors(authors); -#. dlg.set_documenters(documenters); -#. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:470 -msgid "translator-credits" -msgstr "Marek Černocký " - -#: src/mgui/project/mconstructor.cpp:611 -#, boost-format -msgid "Save changes to \"%1%\"?" -msgstr "Uložit změny do „%1%“?" - -#: src/mgui/project/mconstructor.cpp:613 -msgid "Close _without Saving" -msgstr "Zavřít _bez ukládání" - -#: src/mgui/project/mconstructor.cpp:653 -msgid "New Project" -msgstr "Nový projekt" - -#: src/mgui/project/mconstructor.cpp:662 -msgid "Please select a Television standard for your project:" -msgstr "Vyberte prosím televizní standard pro svůj projekt:" - -#: src/mgui/project/mconstructor.cpp:687 -msgid "Open Project" -msgstr "Otevření projektu" - -#: src/mgui/project/mconstructor.cpp:691 -msgid "Project files (*.xml)" -msgstr "Soubory s projekty (*.xml)" - -#: src/mgui/project/mconstructor.cpp:696 src/mgui/timeline/mviewer.cpp:273 -msgid "All Files (*.*)" -msgstr "Všechny soubory (*.*)" - -#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически -#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero -#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:824 -msgid "KB" -msgstr "kB" - -#: src/mgui/project/mconstructor.cpp:824 -msgid "GB" -msgstr "GB" - -#. Project -#: src/mgui/project/mconstructor.cpp:935 -msgid "_Project" -msgstr "_Projekt" - -#: src/mgui/project/mconstructor.cpp:940 -msgid "_New Project" -msgstr "_Nový projekt" - -#: src/mgui/project/mconstructor.cpp:942 -msgid "_Open..." -msgstr "_Otevřít…" - -#: src/mgui/project/mconstructor.cpp:944 -msgid "_Save" -msgstr "_Uložit" - -#: src/mgui/project/mconstructor.cpp:946 -msgid "Save _As..." -msgstr "Uložit j_ako…" - -#: src/mgui/project/mconstructor.cpp:948 -msgid "_Quit" -msgstr "U_končit" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "Add Videos from _DVD" -msgstr "Přidat videa z _DVD" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "DVD-Import Assistant" -msgstr "Průvodce importem DVD" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "_Mux" -msgstr "_Multiplexovat" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "Mux Elementary Streams into MPEG2" -msgstr "Multiplexovat prostý proud do MPEG2" - -#: src/mgui/project/mconstructor.cpp:954 -msgid "Pr_eferences" -msgstr "Př_edvolby" - -#. Go -#: src/mgui/project/mconstructor.cpp:993 -msgid "_Go" -msgstr "Pře_jít" - -#. первый вставляем сразу -#. Help -#: src/mgui/project/mconstructor.cpp:999 -msgid "_Help" -msgstr "_Nápověda" - -#: src/mgui/project/mconstructor.cpp:1100 -msgctxt "MainTabs" -msgid "_Source" -msgstr "_Zdroj" - -#: src/mgui/project/mconstructor.cpp:1102 -msgctxt "MainTabs" -msgid "_Menu" -msgstr "_Menu" - -#: src/mgui/project/mconstructor.cpp:1104 -msgctxt "MainTabs" -msgid "_Output" -msgstr "_Výstup" - -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "yes" msgstr "ano" -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "no" msgstr "ne" -#: src/mgui/project/mb-actions.cpp:191 +#: src/mgui/project/add.cpp:86 msgid "Video bitrate" msgstr "Datový tok videa" -#: src/mgui/project/mb-actions.cpp:192 +#: src/mgui/project/add.cpp:87 msgid "kbps" msgstr "kb/s" -#: src/mgui/project/mb-actions.cpp:193 +#: src/mgui/project/add.cpp:88 msgid "Maximum data rate for video (9800 kbps) is exceeded." msgstr "Byl překročen maximální datový tok pro video (9800 kb/s)." -#: src/mgui/project/mb-actions.cpp:196 +#: src/mgui/project/add.cpp:91 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with resolutions: %2% only." msgstr "DVD-Video %1% umí pojmou MPEG-2 s rozlišením pouze %2%." -#: src/mgui/project/mb-actions.cpp:197 +#: src/mgui/project/add.cpp:92 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with frame rate: %2% only." msgstr "DVD-Video %1% umí pojmou MPEG-2 se snímkovou rychlostí pouze %2%." -#: src/mgui/project/mb-actions.cpp:198 +#: src/mgui/project/add.cpp:93 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with aspects 4:3, 16:9 only." msgstr "DVD-Video %1% umí pojmou MPEG-2 s poměrem stran pouze 4:3 a 16:9." -#: src/mgui/project/mb-actions.cpp:218 +#: src/mgui/project/add.cpp:113 msgid "Video size" msgstr "Velikost videa" -#: src/mgui/project/mb-actions.cpp:238 +#: src/mgui/project/add.cpp:133 msgid "Frame rate" msgstr "Snímková rychlost" -#: src/mgui/project/mb-actions.cpp:239 +#: src/mgui/project/add.cpp:134 msgid "fps" msgstr "f/s" -#: src/mgui/project/mb-actions.cpp:247 +#: src/mgui/project/add.cpp:142 msgid "Aspect ratio" msgstr "Poměr stran" -#: src/mgui/project/mb-actions.cpp:322 +#: src/mgui/project/add.cpp:217 msgid "Bombono DVD can use \"DVD-ready\" video only now. Use muxing programs like \"mplex -f 8\" (from mjpegtools), mencoder (from mplayer) or transcode to make your video ready for Bombono DVD." msgstr "Bombono DVD umí v současné podobě použít pouze video „DVD-ready“ (připravené pro DVD). K přípravě videa vhodného pro Bombono DVD použijte multiplexovací program, jako např. „mplex -f 8“ (z mjpegtools), memcoder (z mplayer) nebo transcode." -#: src/mgui/project/mb-actions.cpp:326 +#: src/mgui/project/add.cpp:221 msgid "DVD packs" msgstr "Balíčky DVD" -#: src/mgui/project/mb-actions.cpp:328 +#: src/mgui/project/add.cpp:223 msgid "NAV packets" msgstr "Pakety NAV" -#: src/mgui/project/mb-actions.cpp:334 +#: src/mgui/project/add.cpp:229 msgid "This video may not be added due to (errors in red color):" msgstr "Toto video nemohlo být přidáno z důvodu (chyba je vyznačena červeně):" #. подскажем пользователю, что он ошибся форматом проекта -#: src/mgui/project/mb-actions.cpp:345 +#: src/mgui/project/add.cpp:240 #, boost-format msgid "This video has %1% type and can't be added to current project of %2% type. Create new project from menu \"Project->New Project\" with right type." msgstr "Toto video je typu %1% a nelze jej přidat do současného projektu typu %2%. Vytvořte z nabídky „Projekt->Nový projekt“ nový projekt se správným typem." -#: src/mgui/project/mb-actions.cpp:373 +#: src/mgui/project/add.cpp:269 msgid "File doesn't exist." msgstr "Soubor neexistuje." -#: src/mgui/project/mb-actions.cpp:378 +#: src/mgui/project/add.cpp:274 msgid "Folders can't be added." msgstr "Složky nelze přidat." #. по расширению выводим наиболее вероятную ошибку -#: src/mgui/project/mb-actions.cpp:413 +#: src/mgui/project/add.cpp:309 msgid "Unknown file type." msgstr "Neznámý typ souboru." -#: src/mgui/project/mb-actions.cpp:631 +#: src/mgui/project/add.cpp:379 #, boost-format msgid "" "The file \"%1%\" looks like VOB from DVD.\n" @@ -760,52 +623,148 @@ "Soubor „%1%“ vypadá jako VOB z DVD.\n" "Spustit import?" -#: src/mgui/project/mb-actions.cpp:648 +#: src/mgui/project/add.cpp:396 #, boost-format msgid "The file \"%1%\" looks like elementary stream and need to be muxed before using. Run muxing?" msgstr "Soubor „%1%“ vypadá jako prostý proud a před použitím je zapotřebí jej multiplexovat. Spustit multiplexování?" -#: src/mgui/project/mb-actions.cpp:710 +#: src/mgui/project/add.cpp:458 msgid "Also:" msgstr "Rovněž:" -#: src/mgui/project/mb-actions.cpp:719 +#: src/mgui/project/add.cpp:471 #, boost-format msgid "See more about preparing video for authoring in online help." msgstr "Více informací o přípravě videa pro tvorbu najdete v on-line nápovědě (anglicky)." -#: src/mgui/project/mb-actions.cpp:727 +#: src/mgui/project/add.cpp:482 #, boost-format msgid "Can't add file \"%1%\"." msgstr "Nelze přidat soubor „%1%“." -#: src/mgui/project/mb-actions.cpp:730 +#: src/mgui/project/add.cpp:484 msgid "Can't add files:" msgstr "Nelze přidat soubory:" -#: src/mgui/project/media-browser.cpp:146 +#: src/mgui/project/browser.cpp:128 +#, boost-format +msgid "Do you really want to delete \"%1%\" from Media List?" +msgstr "Opravdu chcete „%1%“ smazat ze seznamu médií?" + +#: src/mgui/project/browser.cpp:129 +#, boost-format +msgid "Do you really want to delete chapter \"%1%\"?" +msgstr "Opravdu chcete smazat kapitolu „%1%“?" + +#: src/mgui/project/browser.cpp:130 +#, boost-format +msgid "Do you really want to delete menu \"%1%\"?" +msgstr "Opravdu chcete smazat menu „%1%“?" + +#: src/mgui/project/browser.cpp:242 +msgid "First-Play media can be Video or Menu only." +msgstr "První přehrávané médium může být jen video nebo menu." + +#: src/mgui/project/mconstructor.cpp:335 +msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" +msgstr "Bombono DVD je program s příjemným a přehledným uživatelským rozhraním pro tvorbu DVD" + +#. dlg.set_authors(authors); +#. dlg.set_documenters(documenters); +#. dlg.set_decorated(false); +#: src/mgui/project/mconstructor.cpp:340 +msgid "translator-credits" +msgstr "Marek Černocký " + +#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически +#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero +#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) +#: src/mgui/project/mconstructor.cpp:527 +msgid "KB" +msgstr "kB" + +#: src/mgui/project/mconstructor.cpp:527 +msgid "GB" +msgstr "GB" + +#. Project +#: src/mgui/project/mconstructor.cpp:635 +msgid "_Project" +msgstr "_Projekt" + +#: src/mgui/project/mconstructor.cpp:642 +msgid "_Quit" +msgstr "U_končit" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "Add Videos from _DVD" +msgstr "Přidat videa z _DVD" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "DVD-Import Assistant" +msgstr "Průvodce importem DVD" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "_Mux" +msgstr "_Multiplexovat" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "Mux Elementary Streams into MPEG2" +msgstr "Multiplexovat prostý proud do MPEG2" + +#: src/mgui/project/mconstructor.cpp:648 +msgid "Pr_eferences" +msgstr "Př_edvolby" + +#. Go +#: src/mgui/project/mconstructor.cpp:687 +msgid "_Go" +msgstr "Pře_jít" + +#. первый вставляем сразу +#. Help +#: src/mgui/project/mconstructor.cpp:693 +msgid "_Help" +msgstr "_Nápověda" + +#: src/mgui/project/mconstructor.cpp:818 +msgctxt "MainTabs" +msgid "_Source" +msgstr "_Zdroj" + +#: src/mgui/project/mconstructor.cpp:820 +msgctxt "MainTabs" +msgid "_Menu" +msgstr "_Menu" + +#: src/mgui/project/mconstructor.cpp:822 +msgctxt "MainTabs" +msgid "_Output" +msgstr "_Výstup" + +#: src/mgui/project/media-browser.cpp:148 msgid "Previous Menu" msgstr "Předchozí menu" -#: src/mgui/project/media-browser.cpp:146 #: src/mgui/project/media-browser.cpp:148 +#: src/mgui/project/media-browser.cpp:150 msgid "Next Video" msgstr "Následující video" -#: src/mgui/project/media-browser.cpp:147 +#: src/mgui/project/media-browser.cpp:149 #, boost-format msgid "Auto (%1%)" msgstr "Automaticky (%1%)" -#: src/mgui/project/media-browser.cpp:177 +#: src/mgui/project/media-browser.cpp:179 msgid "End Action" msgstr "Akce na konci" -#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/project/media-browser.cpp:203 msgid "Still Picture" msgstr "Statický obrázek" -#: src/mgui/project/media-browser.cpp:233 +#: src/mgui/project/media-browser.cpp:235 msgid "Type" msgstr "Typ" @@ -815,103 +774,159 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:291 -#: src/mgui/project/menu-browser.cpp:373 +#: src/mgui/project/media-browser.cpp:293 +#: src/mgui/project/menu-browser.cpp:374 msgid "Media List" msgstr "Seznam médií" -#: src/mgui/project/media-browser.cpp:331 +#: src/mgui/project/media-browser.cpp:333 msgid "Add Media from File Browser" msgstr "Přidat médium z procházení souborů" -#: src/mgui/project/media-browser.cpp:340 +#: src/mgui/project/media-browser.cpp:342 msgid "Remove Media" msgstr "Odebrat médium" -#: src/mgui/project/media-browser.cpp:351 +#: src/mgui/project/media-browser.cpp:353 msgid "Make Chapters for Video" msgstr "Vytvořit kapitoly pro video" -#: src/mgui/project/menu-browser.cpp:190 +#: src/mgui/project/menu-browser.cpp:191 msgid "No Link" msgstr "Žádný odkaz" #. * subj -#: src/mgui/project/menu-browser.cpp:337 +#: src/mgui/project/menu-browser.cpp:338 msgid "Menu List" msgstr "Seznam menu" -#: src/mgui/project/menu-browser.cpp:353 +#: src/mgui/project/menu-browser.cpp:354 msgid "Add Menu" msgstr "Přidat menu" -#: src/mgui/project/menu-browser.cpp:358 +#: src/mgui/project/menu-browser.cpp:359 msgid "Remove Menu" msgstr "Odebrat menu" -#: src/mgui/project/menu-browser.cpp:363 +#: src/mgui/project/menu-browser.cpp:364 msgid "Edit Menu" msgstr "Upravit menu" +#: src/mgui/project/serialize.cpp:61 +msgid "Save Project As..." +msgstr "Uložení projektu jako…" + +#: src/mgui/project/serialize.cpp:93 +#, boost-format +msgid "Cant open project file \"%1%\"" +msgstr "Nelze otevřít soubor s projektem „%1%“" + +#: src/mgui/project/serialize.cpp:166 +#, boost-format +msgid "Save changes to \"%1%\"?" +msgstr "Uložit změny do „%1%“?" + +#: src/mgui/project/serialize.cpp:168 +msgid "Close _without Saving" +msgstr "Zavřít _bez ukládání" + +#: src/mgui/project/serialize.cpp:206 +msgid "New Project" +msgstr "Nový projekt" + +#: src/mgui/project/serialize.cpp:215 +msgid "Please select a Television standard for your project:" +msgstr "Vyberte prosím televizní standard pro svůj projekt:" + +#: src/mgui/project/serialize.cpp:237 +msgid "Open Project" +msgstr "Otevření projektu" + +#: src/mgui/project/serialize.cpp:241 +msgid "Project files (*.xml)" +msgstr "Soubory s projekty (*.xml)" + +#: src/mgui/project/serialize.cpp:246 src/mgui/timeline/mviewer.cpp:283 +msgid "All Files (*.*)" +msgstr "Všechny soubory (*.*)" + +#: src/mgui/project/serialize.cpp:308 +msgid "_New Project" +msgstr "_Nový projekt" + +#: src/mgui/project/serialize.cpp:310 +msgid "_Open..." +msgstr "_Otevřít…" + +#: src/mgui/project/serialize.cpp:312 +msgid "_Save" +msgstr "_Uložit" + +#: src/mgui/project/serialize.cpp:314 +msgid "Save _As..." +msgstr "Uložit j_ako…" + #. Add -#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:193 +#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:216 msgid "Add Chapter Point" msgstr "Přidat bod kapitoly" +#: src/mgui/timeline/mviewer.cpp:76 +msgid "Error while opening file:" +msgstr "Chyba během otevírání souboru:" + #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:239 +#: src/mgui/timeline/mviewer.cpp:249 msgid "File Browser" msgstr "Procházení souborů" -#: src/mgui/timeline/mviewer.cpp:269 +#: src/mgui/timeline/mviewer.cpp:279 msgid "All formats" msgstr "Všechny formáty" -#: src/mgui/timeline/mviewer.cpp:270 +#: src/mgui/timeline/mviewer.cpp:280 msgid "MPEG files" msgstr "Soubory MPEG" -#: src/mgui/timeline/mviewer.cpp:272 +#: src/mgui/timeline/mviewer.cpp:282 msgid "Still Images" msgstr "Statické obrázky" -#: src/mgui/timeline/select.cpp:127 +#: src/mgui/timeline/select.cpp:143 +msgid "A_dd to project" +msgstr "Při_dat do projektu" + +#: src/mgui/timeline/select.cpp:146 msgid "Save Frame..." msgstr "Uložit snímek…" #. Add at Intervals -#: src/mgui/timeline/select.cpp:147 src/mgui/timeline/select.cpp:205 +#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:228 msgid "Add Chapter Points at Intervals" msgstr "Přidat kapitoly v intervalech" -#: src/mgui/timeline/select.cpp:153 +#: src/mgui/timeline/select.cpp:176 msgid "Interval between Chapters:" msgstr "Rozestup mez kapitolami:" -#: src/mgui/timeline/select.cpp:160 +#: src/mgui/timeline/select.cpp:183 msgid "min." msgstr "min." -#: src/mgui/timeline/select.cpp:163 +#: src/mgui/timeline/select.cpp:186 msgid "Remove Existing Chapters" msgstr "Odebrat existující kapitoly" #. Delete -#: src/mgui/timeline/select.cpp:196 +#: src/mgui/timeline/select.cpp:219 msgid "Delete Chapter Point" msgstr "Smazat bod kapitoly" #. Delete All -#: src/mgui/timeline/select.cpp:200 +#: src/mgui/timeline/select.cpp:223 msgid "Delete All Chapter Points" msgstr "Smazat všechny body kapitoly" -#: src/mgui/timeline/select.cpp:213 +#: src/mgui/timeline/select.cpp:236 msgid "Save Current Frame" msgstr "Uložit aktuální snímek" - -#~ msgid "Default _folder for authoring" -#~ msgstr "Výchozí _složka pro tvorbu" - -#~ msgid "A_dd to project" -#~ msgstr "Při_dat do projektu" diff -Nru bombono-dvd-0.7.0/po/da.po bombono-dvd-0.8.0/po/da.po --- bombono-dvd-0.7.0/po/da.po 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/da.po 2010-11-01 21:58:28.000000000 +0000 @@ -7,8 +7,8 @@ # authoring -> oprettelse (måske fremstilling) # elementary -> elementær (? i tvivl eller er det bare undervisnings, # men hvad er det) -# det er ok mener jeg, alt efter sammenhængen kan det også være simpel -# eller grundlæggende, men hvis du ikke kender sammenhængen er elementær fint +# det er ok mener jeg, alt efter sammenhængen kan det også være simpel +# eller grundlæggende, men hvis du ikke kender sammenhængen er elementær fint # frame -> billedrate # mux -> mux # Still Images -> fastbilleder (øjebliksbilleder eller simpelthen bare @@ -16,21 +16,21 @@ # msgid "" msgstr "" -"Project-Id-Version: bombono-dvd 0.5.9\n" +"Project-Id-Version: bombono-dvd 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-03 00:13+0400\n" -"PO-Revision-Date: 2010-08-01 20:36+0200\n" +"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"PO-Revision-Date: 2010-10-09 20:36+0200\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:200 +#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:202 msgid "Chapter" msgstr "Kapitel" -#: src/mbase/project/media.cpp:112 +#: src/mbase/project/media.cpp:114 #, boost-format msgid "Cant create folder %1% (check permissions)" msgstr "Kan ikke oprette mappe %1% (tjek rettigheder)" @@ -39,266 +39,270 @@ msgid "Menu" msgstr "Menu" -#: src/mgui/dvdimport.cpp:82 +#: src/mgui/dvdimport.cpp:83 msgid "Choose Source DVD-Video" msgstr "Vælg kilde-dvd-video" -#: src/mgui/dvdimport.cpp:85 +#: src/mgui/dvdimport.cpp:86 msgid "Select Videos to Import" msgstr "Vælg videoer til importering" -#: src/mgui/dvdimport.cpp:88 +#: src/mgui/dvdimport.cpp:89 msgid "Select Folder to Save Videos" msgstr "Vælg mappe til gemning af videoer" -#: src/mgui/dvdimport.cpp:91 +#: src/mgui/dvdimport.cpp:92 msgid "Importing..." msgstr "Importerer..." -#: src/mgui/dvdimport.cpp:94 +#: src/mgui/dvdimport.cpp:95 msgid "Import is completed." msgstr "Import er færdig." -#: src/mgui/dvdimport.cpp:207 src/mgui/project/mconstructor.cpp:824 +#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:527 msgid "MB" msgstr "MB" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Select All" msgstr "Vælg alle" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Unselect All" msgstr "Fravælg alle" #. мы не можем пустить исключение здесь, потому что оно пойдет #. и через C-шный код (Gtk) - отложим -#: src/mgui/dvdimport.cpp:410 +#: src/mgui/dvdimport.cpp:411 msgid "Are you sure to stop importing?" msgstr "Er du sikker på du ønsker at stoppe importering?" -#: src/mgui/dvdimport.cpp:443 +#: src/mgui/dvdimport.cpp:444 #, boost-format msgid "Cant write to folder %1% (check permissions)." msgstr "Kan ikke skrive til mappe %1% (tjek rettigheder)." -#: src/mgui/dvdimport.cpp:471 src/mgui/win_utils.cpp:319 +#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:322 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "En fil med navnet »%1%« eksisterer allerede. Ønsker du at erstatte den?" -#: src/mgui/dvdimport.cpp:504 +#: src/mgui/dvdimport.cpp:505 msgid "Import error!" msgstr "Importfejl!" -#: src/mgui/dvdimport.cpp:508 +#: src/mgui/dvdimport.cpp:509 msgid "Videos successfully imported." msgstr "Videoer importeret." -#: src/mgui/dvdimport.cpp:509 +#: src/mgui/dvdimport.cpp:510 msgid "Import has been interrupted." msgstr "Import er blevet afbrudt." -#: src/mgui/dvdimport.cpp:543 +#: src/mgui/dvdimport.cpp:544 msgid "DVD-Video Import" msgstr "Dvd-video-import" -#: src/mgui/dvdimport.cpp:566 +#: src/mgui/dvdimport.cpp:567 msgid "Choose DVD disc, DVD folder or iso image file." msgstr "Vælg dvd-disk, dvd-mappe eller iso-aftryksfil." -#: src/mgui/dvdimport.cpp:584 +#: src/mgui/dvdimport.cpp:585 msgid "NTSC/PAL mismatch. Try another disc or import to project of corresponding type." msgstr "Forskel på NTSC/PAL. Forsøg med en anden disk eller importer til et projekt med tilsvarende type." #. имя -#: src/mgui/dvdimport.cpp:608 src/mgui/project/media-browser.cpp:217 +#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:219 msgid "Name" msgstr "Navn" -#: src/mgui/dvdimport.cpp:621 +#: src/mgui/dvdimport.cpp:622 msgid "Details" msgstr "Detaljer" # evt. målmappen -#: src/mgui/dvdimport.cpp:667 +#: src/mgui/dvdimport.cpp:668 msgid "It is desirable the destination folder to be empty." msgstr "Det er formålstjenligt at modtagelsesmappen er tom." #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:27 +#: src/mgui/execution.cpp:52 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "Du er ved at afbryde %1%. Er du sikker?" -#: src/mgui/mux.cpp:29 +#: src/mgui/execution.cpp:411 +#, boost-format +msgid "exit code = %1%" +msgstr "afslutningskode = %1%" + +#: src/mgui/execution.cpp:413 +#, boost-format +msgid "broken by signal %1%" +msgstr "i stykker efter signal %1%" + +#: src/mgui/mux.cpp:50 msgid "muxing" msgstr "muxing" -#: src/mgui/mux.cpp:45 +#: src/mgui/mux.cpp:66 #, boost-format msgid "Muxing \"%1%\"" msgstr "Muxer »%1%«" -#: src/mgui/mux.cpp:56 src/mgui/author/output.cpp:229 +#: src/mgui/mux.cpp:77 src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "Vis/_skjul detaljer" -#: src/mgui/mux.cpp:80 +#: src/mgui/mux.cpp:101 msgid "Muxing error" msgstr "Muxingfejl" -#: src/mgui/mux.cpp:81 src/mgui/author/output.cpp:632 +#: src/mgui/mux.cpp:102 src/mgui/author/output.cpp:654 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "Årsagen er »%1%« (se detaljer)" -#: src/mgui/mux.cpp:97 +#: src/mgui/mux.cpp:118 msgid "Select a folder" msgstr "Vælg en mappe" -#: src/mgui/mux.cpp:109 +#: src/mgui/mux.cpp:130 msgid "in" msgstr "i" -#: src/mgui/mux.cpp:143 +#: src/mgui/mux.cpp:164 msgid "Mux streams" msgstr "Mux-strømme" -#: src/mgui/mux.cpp:145 +#: src/mgui/mux.cpp:166 msgid "Output" msgstr "Uddata" -#: src/mgui/mux.cpp:146 +#: src/mgui/mux.cpp:167 msgid "Select elementary video" msgstr "Vælg elementærvideo" -#: src/mgui/mux.cpp:147 +#: src/mgui/mux.cpp:168 msgid "Select audio" msgstr "Vælg lyd" #. Названия типов для i18n -#: src/mgui/mux.cpp:151 src/mgui/project/media-browser.cpp:199 +#: src/mgui/mux.cpp:172 src/mgui/project/media-browser.cpp:201 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "Video" -#: src/mgui/mux.cpp:154 +#: src/mgui/mux.cpp:175 msgid "MPEG2 elementary video (m2v)" msgstr "MPEG2-elementærvideo (m2v)" -#: src/mgui/mux.cpp:159 +#: src/mgui/mux.cpp:180 msgid "Audio" msgstr "Lyd" -#: src/mgui/mux.cpp:162 src/mgui/timeline/mviewer.cpp:271 +#: src/mgui/mux.cpp:183 src/mgui/timeline/mviewer.cpp:281 msgid "Audio for DVD" msgstr "Lyd til dvd" -#: src/mgui/mux.cpp:187 +#: src/mgui/mux.cpp:208 msgid "Elementary video file is not selected." msgstr "Elementærvideofil er ikke valgt." -#: src/mgui/mux.cpp:189 +#: src/mgui/mux.cpp:210 msgid "Audio file is not selected." msgstr "Lydfil er ikke valgt." -#: src/mgui/mux.cpp:191 +#: src/mgui/mux.cpp:212 msgid "Output file name is empty." msgstr "Filnavn for uddata er tom." -#: src/mgui/prefs.cpp:98 +#: src/mgui/prefs.cpp:143 msgid "Bombono DVD Preferences" msgstr "Indstillinger for Bombono DVD" -#: src/mgui/prefs.cpp:111 -msgid "_Default Project Type" +#: src/mgui/prefs.cpp:157 +msgid "_Default project type" msgstr "_Standardprojekttype" -#: src/mgui/prefs.cpp:116 -msgid "_Play Authoring Result in" +#: src/mgui/prefs.cpp:160 +msgid "Default _folder for authoring" +msgstr "Standard_mappe for oprettelse" + +#: src/mgui/prefs.cpp:165 +msgid "_Play authoring result in" msgstr "_Afspilningsoprettelse resulterer i" -#: src/mgui/win_utils.cpp:322 +#: src/mgui/win_utils.cpp:325 msgid "Replacing the file overwrite its contents." msgstr "Erstatning af filen overskriver dens indhold." -#: src/mgui/author/burn.cpp:198 +#: src/mgui/author/burn.cpp:199 msgid "Auto" msgstr "Auto" -#: src/mgui/author/burn.cpp:210 +#: src/mgui/author/burn.cpp:211 msgid "Update speeds ..." msgstr "Opdateringshastigheder..." # Måske "Kontrollerer .." -#: src/mgui/author/burn.cpp:331 +#: src/mgui/author/burn.cpp:332 msgid "Checking Disc ..." msgstr "Tjekker disk..." -#: src/mgui/author/burn.cpp:345 +#: src/mgui/author/burn.cpp:346 msgid "Selected burn drive is for CD discs only. Change to another burn drive." msgstr "Det valgte brændingsdrev er kun til cd'er. Skift til et andet brændingsdrev." -#: src/mgui/author/burn.cpp:350 +#: src/mgui/author/burn.cpp:351 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." msgstr "Cd-disk er fundet i drevet, ikke dvd. Skift til en dvd-disk." -#: src/mgui/author/burn.cpp:355 +#: src/mgui/author/burn.cpp:356 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "Ingen dvd-disk i drevet. Indlæs en tom og tryk o.k." -#: src/mgui/author/burn.cpp:360 +#: src/mgui/author/burn.cpp:361 #, boost-format msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." msgstr "Disk med typen »%1%« blev fundet i drevet, men til dvd-video bør disktypen være en af de følgende: DVD-R, DVD+R, DVD-RW, DVD+RW. Indlæs en korrekt tom type og tryk på o.k." -#: src/mgui/author/burn.cpp:369 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "Disk af typen »%1%« i drevet er ikke tom. Kun tomme optagbare diske kan bruges til brænding af dvd-videoer. Indlæs en tom og tryk på o.k." -#: src/mgui/author/burn.cpp:376 +#: src/mgui/author/burn.cpp:377 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" msgstr "Disk af typen »%1%« i drevet er ikke tom. Vi har brug for at fjerne dens indhold før vi skriver på den igen. Fortsæt?" -#: src/mgui/author/burn.cpp:380 +#: src/mgui/author/burn.cpp:381 msgid "_Cancel" msgstr "_Afbryd" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:382 msgid "_Try again" msgstr "_Forsøg igen" -#: src/mgui/author/execute.cpp:72 +#: src/mgui/author/execute.cpp:62 msgid "Status: " msgstr "Status: " -#: src/mgui/author/execute.cpp:568 -#, boost-format -msgid "exit code = %1%" -msgstr "afslutningskode = %1%" - -#: src/mgui/author/execute.cpp:570 -#, boost-format -msgid "broken by signal %1%" -msgstr "i stykker efter signal %1%" - -#: src/mgui/author/indicator.cpp:67 +#: src/mgui/author/indicator.cpp:66 msgid "Rendering Menus" msgstr "Optegningsmenuer" -#: src/mgui/author/indicator.cpp:68 +#: src/mgui/author/indicator.cpp:67 msgid "Generating DVD-Video" msgstr "Genererer dvd-video" -#: src/mgui/author/indicator.cpp:69 +#: src/mgui/author/indicator.cpp:68 msgid "Creating ISO Image" msgstr "Opretter ISO-aftryk" -#: src/mgui/author/indicator.cpp:70 +#: src/mgui/author/indicator.cpp:69 msgid "Burning DVD" msgstr "Brænder dvd" @@ -319,71 +323,71 @@ msgid "Select Output _Folder:" msgstr "Vælg uddata_mappe:" -#: src/mgui/author/output.cpp:175 +#: src/mgui/author/output.cpp:177 msgid " Choose Author Mode: " msgstr " Vælg forfattertilstand: " #. цель по умолчанию -#: src/mgui/author/output.cpp:181 +#: src/mgui/author/output.cpp:183 msgid "_Write DVD Folder" msgstr "_Skriv dvd-mappe" -#: src/mgui/author/output.cpp:182 +#: src/mgui/author/output.cpp:184 msgid "Write Disk _Image" msgstr "Skriv disk_aftryk" -#: src/mgui/author/output.cpp:191 +#: src/mgui/author/output.cpp:193 msgid "Disc Label: " msgstr "Disketiket: " -#: src/mgui/author/output.cpp:196 +#: src/mgui/author/output.cpp:198 msgid "Burn to _DVD" msgstr "Brænd til _dvd" -#: src/mgui/author/output.cpp:204 +#: src/mgui/author/output.cpp:206 msgid "DVD Drive: " msgstr "Dvd-drive: " -#: src/mgui/author/output.cpp:210 +#: src/mgui/author/output.cpp:212 msgid "Writing Speed: " msgstr "Skrivehastighed: " -#: src/mgui/author/output.cpp:221 +#: src/mgui/author/output.cpp:223 msgid "_Rendering only" msgstr "Kun _optegning" -#: src/mgui/author/output.cpp:275 +#: src/mgui/author/output.cpp:277 msgid "Rendering" msgstr "Optegning" -#: src/mgui/author/output.cpp:352 +#: src/mgui/author/output.cpp:354 msgid "DVD Burning" msgstr "Dvd-brænding" -#: src/mgui/author/output.cpp:396 +#: src/mgui/author/output.cpp:398 msgid "The result is here" msgstr "Resultatet er her" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:400 msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." msgstr "Du kan køre oprettelse (authoring) manuelt ved at køre kommandoen »scons« ved den angivne mappe. Se også README-filen for andre tilvalg." #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:422 +#: src/mgui/author/output.cpp:424 msgid "Authoring is cancelled." msgstr "Oprettelse (authoring) er afbrudt." -#: src/mgui/author/output.cpp:433 +#: src/mgui/author/output.cpp:435 #, boost-format msgid "%1% is not a folder" msgstr "%1% er ikke en mappe" -#: src/mgui/author/output.cpp:444 +#: src/mgui/author/output.cpp:446 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "Kan ikke have fuld adgang til mappe %1% (læs, skriv)" -#: src/mgui/author/output.cpp:452 +#: src/mgui/author/output.cpp:454 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before authoring.\n" @@ -392,54 +396,54 @@ "Mappe %1% er ikke tom. Vi har brug for at fjerne alle filer i mappen før oprettelse (authoring).\n" "Fortsæt?" -#: src/mgui/author/output.cpp:458 +#: src/mgui/author/output.cpp:460 #, boost-format msgid "Error during removing files: %1%" msgstr "Fejl under fjernelse af filer: %1%" -#: src/mgui/author/output.cpp:629 +#: src/mgui/author/output.cpp:651 #, boost-format msgid "%1% cancelled." msgstr "%1% afbrudt." -#: src/mgui/author/output.cpp:631 +#: src/mgui/author/output.cpp:653 #, boost-format msgid "%1% broken." msgstr "%1% i stykker." #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:638 +#: src/mgui/author/output.cpp:660 #, boost-format msgid "%1% successfully completed." msgstr "%1% færdig." -#: src/mgui/author/output.cpp:668 src/mgui/timeline/select.cpp:216 +#: src/mgui/author/output.cpp:690 src/mgui/timeline/select.cpp:239 #, boost-format msgid "_Play in %1%" msgstr "_Afspil i %1%" -#: src/mgui/author/output.cpp:669 +#: src/mgui/author/output.cpp:691 msgid "_Burn to DVD" msgstr "_Brænd til dvd" -#: src/mgui/author/script.cpp:392 +#: src/mgui/author/script.cpp:391 msgid "There is no media (video or menu)." msgstr "Der er intet medie (video eller menu)." -#: src/mgui/author/script.cpp:557 +#: src/mgui/author/script.cpp:556 #, boost-format msgid "external command failure: %1%" msgstr "ekstern kommandofejl: %1%" -#: src/mgui/editor/select.cpp:499 +#: src/mgui/editor/select.cpp:599 msgid "Delete" msgstr "Slet" -#: src/mgui/editor/select.cpp:513 +#: src/mgui/editor/select.cpp:613 msgid "Link" msgstr "Henvisning" -#: src/mgui/editor/select.cpp:517 +#: src/mgui/editor/select.cpp:617 msgid "Remove Link" msgstr "Fjern henvisning" @@ -447,333 +451,187 @@ # Det er et godt spørgsmål, måske kan man putte en plakat for en film # ind sammen med ?!? måske værd at spørge om #. Poster Link -#: src/mgui/editor/select.cpp:521 +#: src/mgui/editor/select.cpp:621 msgid "Set Poster" msgstr "Angiv plakat" -#: src/mgui/editor/select.cpp:530 +#: src/mgui/editor/select.cpp:630 msgid "Align" msgstr "Juster" -#: src/mgui/editor/select.cpp:538 +#: src/mgui/editor/select.cpp:638 msgid "Align Left" msgstr "Juster venstre" -#: src/mgui/editor/select.cpp:539 +#: src/mgui/editor/select.cpp:639 msgid "Align Right" msgstr "Juster højre" -#: src/mgui/editor/select.cpp:540 +#: src/mgui/editor/select.cpp:640 msgid "Align Top" msgstr "Juster øverst" -#: src/mgui/editor/select.cpp:541 +#: src/mgui/editor/select.cpp:641 msgid "Align Bottom" msgstr "Juster nederst" -#: src/mgui/editor/select.cpp:544 +#: src/mgui/editor/select.cpp:644 msgid "Center Horizontally" msgstr "Centrer vandret" -#: src/mgui/editor/select.cpp:545 +#: src/mgui/editor/select.cpp:645 msgid "Center Vertically" msgstr "Centrer lodret" +#: src/mgui/editor/select.cpp:650 +msgid "Distribute Horizontally" +msgstr "Fordel vandret" + +#: src/mgui/editor/select.cpp:651 +msgid "Distribute Vertically" +msgstr "Fordel lodret" + #. Set Background Color -#: src/mgui/editor/select.cpp:550 src/mgui/editor/select.cpp:802 +#: src/mgui/editor/select.cpp:656 src/mgui/editor/select.cpp:908 msgid "Set Background Color..." msgstr "Angiv baggrundsfarve..." #. Selection Tool -#: src/mgui/editor/toolbar.cpp:129 +#: src/mgui/editor/toolbar.cpp:135 msgid "Selection Tool" msgstr "Markeringsværktøj" #. Text Tool -#: src/mgui/editor/toolbar.cpp:132 +#: src/mgui/editor/toolbar.cpp:138 msgid "Text Tool" msgstr "Tekstværktøj" -#: src/mgui/editor/toolbar.cpp:493 +#: src/mgui/editor/toolbar.cpp:495 msgid "Add Item" msgstr "Tilføj punkt" -#: src/mgui/editor/toolbar.cpp:515 +#: src/mgui/editor/toolbar.cpp:517 msgid "Font Name" msgstr "Skriftnavn" -#: src/mgui/editor/toolbar.cpp:531 +#: src/mgui/editor/toolbar.cpp:533 msgid "Font Size" msgstr "Skriftstørrelse" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:536 +#: src/mgui/editor/toolbar.cpp:538 msgid "Bold" msgstr "Fed" -#: src/mgui/editor/toolbar.cpp:537 +#: src/mgui/editor/toolbar.cpp:539 msgid "Italic" msgstr "Kursiv" -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:540 msgid "Underline" msgstr "Understregning" -#: src/mgui/editor/toolbar.cpp:547 +#: src/mgui/editor/toolbar.cpp:549 msgid "Pick a Color for Text" msgstr "Vælg en farve til teksten" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:551 msgid "Text Color" msgstr "Tekstfarve" # Vis sikkerhedsområde -#: src/mgui/editor/toolbar.cpp:561 +#: src/mgui/editor/toolbar.cpp:563 msgid "Show Safe Area" msgstr "Vis sikker område" -#: src/mgui/project/browser.cpp:128 -#, boost-format -msgid "Do you really want to delete \"%1%\" from Media List?" -msgstr "Ønsker du virkelig at slette »%1%« fra medielisten?" - -#: src/mgui/project/browser.cpp:129 -#, boost-format -msgid "Do you really want to delete chapter \"%1%\"?" -msgstr "Ønsker du virkelig at slette kapitel »%1%«?" - -#: src/mgui/project/browser.cpp:130 -#, boost-format -msgid "Do you really want to delete menu \"%1%\"?" -msgstr "Ønsker du virkelig at slette menu »%1%«?" - -#: src/mgui/project/browser.cpp:242 -msgid "First-Play media can be Video or Menu only." -msgstr "First-Play-medie kan kun være video eller menu." - -#: src/mgui/project/mconstructor.cpp:132 -msgid "Save Project As..." -msgstr "Gem projekt som..." - -#: src/mgui/project/mconstructor.cpp:169 -#, boost-format -msgid "Cant open project file \"%1%\"" -msgstr "Kan ikke åbne projektfil »%1%«" - -#: src/mgui/project/mconstructor.cpp:465 -msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" -msgstr "Bombono DVD er et dvd-oprettelsesprogram med en pæn og ren grænseflade" - -#. dlg.set_authors(authors); -#. dlg.set_documenters(documenters); -#. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:470 -msgid "translator-credits" -msgstr "" -"Joe Hansen, 2010.\n" -"\n" -"Dansk-gruppen \n" -"Mere info: http://www.dansk-gruppen.dk" - -#: src/mgui/project/mconstructor.cpp:611 -#, boost-format -msgid "Save changes to \"%1%\"?" -msgstr "Gem ændringer til »%1%«?" - -#: src/mgui/project/mconstructor.cpp:613 -msgid "Close _without Saving" -msgstr "Luk _uden at gemme" - -#: src/mgui/project/mconstructor.cpp:653 -msgid "New Project" -msgstr "Nyt projekt" - -#: src/mgui/project/mconstructor.cpp:662 -msgid "Please select a Television standard for your project:" -msgstr "Vælg venligst en tv-standard for dit projekt:" - -#: src/mgui/project/mconstructor.cpp:687 -msgid "Open Project" -msgstr "Åbn projekt" - -#: src/mgui/project/mconstructor.cpp:691 -msgid "Project files (*.xml)" -msgstr "Projektfiler (*.xml)" - -#: src/mgui/project/mconstructor.cpp:696 src/mgui/timeline/mviewer.cpp:273 -msgid "All Files (*.*)" -msgstr "Alle filer (*.*)" - -#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически -#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero -#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:824 -msgid "KB" -msgstr "KB" - -#: src/mgui/project/mconstructor.cpp:824 -msgid "GB" -msgstr "GB" - -#. Project -#: src/mgui/project/mconstructor.cpp:935 -msgid "_Project" -msgstr "_Projekt" - -#: src/mgui/project/mconstructor.cpp:940 -msgid "_New Project" -msgstr "_Nyt projekt" - -#: src/mgui/project/mconstructor.cpp:942 -msgid "_Open..." -msgstr "_Åbn..." - -#: src/mgui/project/mconstructor.cpp:944 -msgid "_Save" -msgstr "_Gem" - -#: src/mgui/project/mconstructor.cpp:946 -msgid "Save _As..." -msgstr "Gem _som..." - -#: src/mgui/project/mconstructor.cpp:948 -msgid "_Quit" -msgstr "_Afslut" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "Add Videos from _DVD" -msgstr "Tilføj videoer fra _dvd" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "DVD-Import Assistant" -msgstr "Assistent til dvd-import" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "_Mux" -msgstr "_Mux" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "Mux Elementary Streams into MPEG2" -msgstr "Mux elementærstrømme ind i MPEG" - -#: src/mgui/project/mconstructor.cpp:954 -msgid "Pr_eferences" -msgstr "_Indstillinger" - -#. Go -#: src/mgui/project/mconstructor.cpp:993 -msgid "_Go" -msgstr "_Begynd" - -#. первый вставляем сразу -#. Help -#: src/mgui/project/mconstructor.cpp:999 -msgid "_Help" -msgstr "_Hjælp" - -#: src/mgui/project/mconstructor.cpp:1100 -msgctxt "MainTabs" -msgid "_Source" -msgstr "_Kilde" - -#: src/mgui/project/mconstructor.cpp:1102 -msgctxt "MainTabs" -msgid "_Menu" -msgstr "_Menu" - -#: src/mgui/project/mconstructor.cpp:1104 -msgctxt "MainTabs" -msgid "_Output" -msgstr "_Uddata" - -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "yes" msgstr "ja" -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "no" msgstr "nej" -#: src/mgui/project/mb-actions.cpp:191 +#: src/mgui/project/add.cpp:86 msgid "Video bitrate" msgstr "Videobitrate" -#: src/mgui/project/mb-actions.cpp:192 +#: src/mgui/project/add.cpp:87 msgid "kbps" msgstr "kbps" -#: src/mgui/project/mb-actions.cpp:193 +#: src/mgui/project/add.cpp:88 msgid "Maximum data rate for video (9800 kbps) is exceeded." msgstr "Maksimal datahastighed for video (9.800 kbps) er overskredet." -#: src/mgui/project/mb-actions.cpp:196 +#: src/mgui/project/add.cpp:91 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with resolutions: %2% only." msgstr "Dvd-videoen %1% kan kun acceptere MPEG-2 med opløsninger: %2%." -#: src/mgui/project/mb-actions.cpp:197 +#: src/mgui/project/add.cpp:92 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with frame rate: %2% only." msgstr "Dvd-videoen %1% kan kun acceptere MPEG-2 med billedrate: %2%." -#: src/mgui/project/mb-actions.cpp:198 +#: src/mgui/project/add.cpp:93 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with aspects 4:3, 16:9 only." msgstr "Dvd-videoen %1% kan kun acceptere MPEG-2 i forholdet 4:3, 16:9." -#: src/mgui/project/mb-actions.cpp:218 +#: src/mgui/project/add.cpp:113 msgid "Video size" msgstr "Videostørrelse" -#: src/mgui/project/mb-actions.cpp:238 +#: src/mgui/project/add.cpp:133 msgid "Frame rate" msgstr "Billedrate" -#: src/mgui/project/mb-actions.cpp:239 +#: src/mgui/project/add.cpp:134 msgid "fps" msgstr "bps" # Billedforhold -#: src/mgui/project/mb-actions.cpp:247 +#: src/mgui/project/add.cpp:142 msgid "Aspect ratio" msgstr "Størrelsesforhold" -#: src/mgui/project/mb-actions.cpp:322 +#: src/mgui/project/add.cpp:217 msgid "Bombono DVD can use \"DVD-ready\" video only now. Use muxing programs like \"mplex -f 8\" (from mjpegtools), mencoder (from mplayer) or transcode to make your video ready for Bombono DVD." msgstr "Bombono DVD kan i øjeblikke kun bruge »DVD-ready-video«. Brug muxingprogrammer som »mplex -f 8« (fra mjpegtools), mencoder (fra mplayer) eller transcode for at gøre dine video klar til Bombono DVD." -#: src/mgui/project/mb-actions.cpp:326 +#: src/mgui/project/add.cpp:221 msgid "DVD packs" msgstr "Dvd-pakker" -#: src/mgui/project/mb-actions.cpp:328 +#: src/mgui/project/add.cpp:223 msgid "NAV packets" msgstr "NAV-pakker" -#: src/mgui/project/mb-actions.cpp:334 +#: src/mgui/project/add.cpp:229 msgid "This video may not be added due to (errors in red color):" msgstr "Denne video kan ikke tilføjes på grund af (fejl i rød farve):" #. подскажем пользователю, что он ошибся форматом проекта -#: src/mgui/project/mb-actions.cpp:345 +#: src/mgui/project/add.cpp:240 #, boost-format msgid "This video has %1% type and can't be added to current project of %2% type. Create new project from menu \"Project->New Project\" with right type." msgstr "Denne video indeholder typen %1% og kan ikke tilføjes til det aktuelle projekt af typen %2%. Opret et nyt projekt fra menuen »Projekt->Nyt projekt« med den korrekte type." -#: src/mgui/project/mb-actions.cpp:373 +#: src/mgui/project/add.cpp:269 msgid "File doesn't exist." msgstr "Fil eksisterer ikke." -#: src/mgui/project/mb-actions.cpp:378 +#: src/mgui/project/add.cpp:274 msgid "Folders can't be added." msgstr "Mapper kan ikke tilføjes." #. по расширению выводим наиболее вероятную ошибку -#: src/mgui/project/mb-actions.cpp:413 +#: src/mgui/project/add.cpp:309 msgid "Unknown file type." msgstr "Ukendt filtype." -#: src/mgui/project/mb-actions.cpp:631 +#: src/mgui/project/add.cpp:379 #, boost-format msgid "" "The file \"%1%\" looks like VOB from DVD.\n" @@ -782,52 +640,152 @@ "Filen »%1%« ligner vob fra dvd.\n" "Kør import?" -#: src/mgui/project/mb-actions.cpp:648 +#: src/mgui/project/add.cpp:396 #, boost-format msgid "The file \"%1%\" looks like elementary stream and need to be muxed before using. Run muxing?" msgstr "Filen »%1%« ligner elementærstrøm og skal muxes før brug. Kør muxing?" -#: src/mgui/project/mb-actions.cpp:710 +#: src/mgui/project/add.cpp:458 msgid "Also:" msgstr "Også:" -#: src/mgui/project/mb-actions.cpp:719 +#: src/mgui/project/add.cpp:471 #, boost-format msgid "See more about preparing video for authoring in online help." msgstr "Se mere om forberedelse af video til oprettelse (authoring) i hjælpen på nettet." -#: src/mgui/project/mb-actions.cpp:727 +#: src/mgui/project/add.cpp:482 #, boost-format msgid "Can't add file \"%1%\"." msgstr "Kan ikke tilføje fil »%1%«." -#: src/mgui/project/mb-actions.cpp:730 +#: src/mgui/project/add.cpp:484 msgid "Can't add files:" msgstr "Kan ikke tilføje filer:" -#: src/mgui/project/media-browser.cpp:146 +#: src/mgui/project/browser.cpp:128 +#, boost-format +msgid "Do you really want to delete \"%1%\" from Media List?" +msgstr "Ønsker du virkelig at slette »%1%« fra medielisten?" + +#: src/mgui/project/browser.cpp:129 +#, boost-format +msgid "Do you really want to delete chapter \"%1%\"?" +msgstr "Ønsker du virkelig at slette kapitel »%1%«?" + +#: src/mgui/project/browser.cpp:130 +#, boost-format +msgid "Do you really want to delete menu \"%1%\"?" +msgstr "Ønsker du virkelig at slette menu »%1%«?" + +#: src/mgui/project/browser.cpp:242 +msgid "First-Play media can be Video or Menu only." +msgstr "First-Play-medie kan kun være video eller menu." + +#: src/mgui/project/mconstructor.cpp:335 +msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" +msgstr "Bombono DVD er et dvd-oprettelsesprogram med en pæn og ren grænseflade" + +#. dlg.set_authors(authors); +#. dlg.set_documenters(documenters); +#. dlg.set_decorated(false); +#: src/mgui/project/mconstructor.cpp:340 +msgid "translator-credits" +msgstr "" +"Joe Hansen, 2010.\n" +"\n" +"Dansk-gruppen \n" +"Mere info: http://www.dansk-gruppen.dk" + +#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически +#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero +#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) +#: src/mgui/project/mconstructor.cpp:527 +msgid "KB" +msgstr "KB" + +#: src/mgui/project/mconstructor.cpp:527 +msgid "GB" +msgstr "GB" + +#. Project +#: src/mgui/project/mconstructor.cpp:635 +msgid "_Project" +msgstr "_Projekt" + +#: src/mgui/project/mconstructor.cpp:642 +msgid "_Quit" +msgstr "_Afslut" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "Add Videos from _DVD" +msgstr "Tilføj videoer fra _dvd" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "DVD-Import Assistant" +msgstr "Assistent til dvd-import" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "_Mux" +msgstr "_Mux" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "Mux Elementary Streams into MPEG2" +msgstr "Mux elementærstrømme ind i MPEG" + +#: src/mgui/project/mconstructor.cpp:648 +msgid "Pr_eferences" +msgstr "_Indstillinger" + +#. Go +#: src/mgui/project/mconstructor.cpp:687 +msgid "_Go" +msgstr "_Begynd" + +#. первый вставляем сразу +#. Help +#: src/mgui/project/mconstructor.cpp:693 +msgid "_Help" +msgstr "_Hjælp" + +#: src/mgui/project/mconstructor.cpp:818 +msgctxt "MainTabs" +msgid "_Source" +msgstr "_Kilde" + +#: src/mgui/project/mconstructor.cpp:820 +msgctxt "MainTabs" +msgid "_Menu" +msgstr "_Menu" + +#: src/mgui/project/mconstructor.cpp:822 +msgctxt "MainTabs" +msgid "_Output" +msgstr "_Uddata" + +#: src/mgui/project/media-browser.cpp:148 msgid "Previous Menu" msgstr "Forrige menu" -#: src/mgui/project/media-browser.cpp:146 #: src/mgui/project/media-browser.cpp:148 +#: src/mgui/project/media-browser.cpp:150 msgid "Next Video" msgstr "Næste video" -#: src/mgui/project/media-browser.cpp:147 +#: src/mgui/project/media-browser.cpp:149 #, boost-format msgid "Auto (%1%)" msgstr "Auto (%1%)" -#: src/mgui/project/media-browser.cpp:177 +#: src/mgui/project/media-browser.cpp:179 msgid "End Action" msgstr "Afslut handling" -#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/project/media-browser.cpp:203 msgid "Still Picture" msgstr "Fastbillede" -#: src/mgui/project/media-browser.cpp:233 +#: src/mgui/project/media-browser.cpp:235 msgid "Type" msgstr "Type" @@ -837,97 +795,159 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:291 -#: src/mgui/project/menu-browser.cpp:373 +#: src/mgui/project/media-browser.cpp:293 +#: src/mgui/project/menu-browser.cpp:374 msgid "Media List" msgstr "Medieliste" -#: src/mgui/project/media-browser.cpp:331 +#: src/mgui/project/media-browser.cpp:333 msgid "Add Media from File Browser" msgstr "Tilføj medie fra filbrowser" -#: src/mgui/project/media-browser.cpp:340 +#: src/mgui/project/media-browser.cpp:342 msgid "Remove Media" msgstr "Fjern medie" -#: src/mgui/project/media-browser.cpp:351 +#: src/mgui/project/media-browser.cpp:353 msgid "Make Chapters for Video" msgstr "Lav kapitler til videoen" -#: src/mgui/project/menu-browser.cpp:190 +#: src/mgui/project/menu-browser.cpp:191 msgid "No Link" msgstr "Ingen henvisning" #. * subj -#: src/mgui/project/menu-browser.cpp:337 +#: src/mgui/project/menu-browser.cpp:338 msgid "Menu List" msgstr "Menuliste" -#: src/mgui/project/menu-browser.cpp:353 +#: src/mgui/project/menu-browser.cpp:354 msgid "Add Menu" msgstr "Tilføj menu" -#: src/mgui/project/menu-browser.cpp:358 +#: src/mgui/project/menu-browser.cpp:359 msgid "Remove Menu" msgstr "Fjern menu" -#: src/mgui/project/menu-browser.cpp:363 +#: src/mgui/project/menu-browser.cpp:364 msgid "Edit Menu" msgstr "Rediger menu" +#: src/mgui/project/serialize.cpp:61 +msgid "Save Project As..." +msgstr "Gem projekt som..." + +#: src/mgui/project/serialize.cpp:93 +#, boost-format +msgid "Cant open project file \"%1%\"" +msgstr "Kan ikke åbne projektfil »%1%«" + +#: src/mgui/project/serialize.cpp:166 +#, boost-format +msgid "Save changes to \"%1%\"?" +msgstr "Gem ændringer til »%1%«?" + +#: src/mgui/project/serialize.cpp:168 +msgid "Close _without Saving" +msgstr "Luk _uden at gemme" + +#: src/mgui/project/serialize.cpp:206 +msgid "New Project" +msgstr "Nyt projekt" + +#: src/mgui/project/serialize.cpp:215 +msgid "Please select a Television standard for your project:" +msgstr "Vælg venligst en tv-standard for dit projekt:" + +#: src/mgui/project/serialize.cpp:237 +msgid "Open Project" +msgstr "Åbn projekt" + +#: src/mgui/project/serialize.cpp:241 +msgid "Project files (*.xml)" +msgstr "Projektfiler (*.xml)" + +#: src/mgui/project/serialize.cpp:246 src/mgui/timeline/mviewer.cpp:283 +msgid "All Files (*.*)" +msgstr "Alle filer (*.*)" + +#: src/mgui/project/serialize.cpp:308 +msgid "_New Project" +msgstr "_Nyt projekt" + +#: src/mgui/project/serialize.cpp:310 +msgid "_Open..." +msgstr "_Åbn..." + +#: src/mgui/project/serialize.cpp:312 +msgid "_Save" +msgstr "_Gem" + +#: src/mgui/project/serialize.cpp:314 +msgid "Save _As..." +msgstr "Gem _som..." + #. Add -#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:193 +#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:216 msgid "Add Chapter Point" msgstr "Tilføj kapitelpunkt" +#: src/mgui/timeline/mviewer.cpp:76 +msgid "Error while opening file:" +msgstr "Der opstod en fejl under åbning af fil:" + #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:239 +#: src/mgui/timeline/mviewer.cpp:249 msgid "File Browser" msgstr "Filbrowser" -#: src/mgui/timeline/mviewer.cpp:269 +#: src/mgui/timeline/mviewer.cpp:279 msgid "All formats" msgstr "Alle formater" -#: src/mgui/timeline/mviewer.cpp:270 +#: src/mgui/timeline/mviewer.cpp:280 msgid "MPEG files" msgstr "MPEG-filer" -#: src/mgui/timeline/mviewer.cpp:272 +#: src/mgui/timeline/mviewer.cpp:282 msgid "Still Images" msgstr "Fastbilleder" -#: src/mgui/timeline/select.cpp:127 +#: src/mgui/timeline/select.cpp:143 +msgid "A_dd to project" +msgstr "_Tilføj til projekt" + +#: src/mgui/timeline/select.cpp:146 msgid "Save Frame..." msgstr "Gem billedrate..." #. Add at Intervals -#: src/mgui/timeline/select.cpp:147 src/mgui/timeline/select.cpp:205 +#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:228 msgid "Add Chapter Points at Intervals" msgstr "Tilføj kapitelpunkt ved intervaller" -#: src/mgui/timeline/select.cpp:153 +#: src/mgui/timeline/select.cpp:176 msgid "Interval between Chapters:" msgstr "Interval mellem kapitler:" -#: src/mgui/timeline/select.cpp:160 +#: src/mgui/timeline/select.cpp:183 msgid "min." msgstr "min." -#: src/mgui/timeline/select.cpp:163 +#: src/mgui/timeline/select.cpp:186 msgid "Remove Existing Chapters" msgstr "Fjern eksisterende kapitler" #. Delete -#: src/mgui/timeline/select.cpp:196 +#: src/mgui/timeline/select.cpp:219 msgid "Delete Chapter Point" msgstr "Slet kapitelpunkt" #. Delete All -#: src/mgui/timeline/select.cpp:200 +#: src/mgui/timeline/select.cpp:223 msgid "Delete All Chapter Points" msgstr "Slet alle kapitelpunkter" -#: src/mgui/timeline/select.cpp:213 +#: src/mgui/timeline/select.cpp:236 msgid "Save Current Frame" msgstr "Gem aktuel billedrate" diff -Nru bombono-dvd-0.7.0/po/es.po bombono-dvd-0.8.0/po/es.po --- bombono-dvd-0.7.0/po/es.po 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/po/es.po 2010-11-01 21:58:28.000000000 +0000 @@ -0,0 +1,950 @@ +# Spanish translation for bombono-dvd. +# Copyright (C) 2010 "Ilya Murav'jov" +# This file is distributed under the same license as the bombono-dvd package. +# Carlos Sánchez , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: bombono-dvd 0.7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"PO-Revision-Date: 2010-10-10 16:33-0400\n" +"Last-Translator: Carlos Sánchez \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: VENEZUELA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: src/mbase/project/media.cpp:68 +#: src/mgui/project/media-browser.cpp:202 +msgid "Chapter" +msgstr "Capítulo" + +#: src/mbase/project/media.cpp:114 +#, boost-format +msgid "Cant create folder %1% (check permissions)" +msgstr "No se puede crear el directorio %1% (revise los permisos)" + +#: src/mbase/project/menu.cpp:276 +msgid "Menu" +msgstr "Menú" + +#: src/mgui/dvdimport.cpp:83 +msgid "Choose Source DVD-Video" +msgstr "Elija Vídeo DVD fuente" + +#: src/mgui/dvdimport.cpp:86 +msgid "Select Videos to Import" +msgstr "Seleccione Vídeos para Importar" + +#: src/mgui/dvdimport.cpp:89 +msgid "Select Folder to Save Videos" +msgstr "Seleccione el directorio para Guardar Vídeos" + +#: src/mgui/dvdimport.cpp:92 +msgid "Importing..." +msgstr "Importando..." + +#: src/mgui/dvdimport.cpp:95 +msgid "Import is completed." +msgstr "La importación está completa." + +#: src/mgui/dvdimport.cpp:208 +#: src/mgui/project/mconstructor.cpp:527 +msgid "MB" +msgstr "MB" + +#: src/mgui/dvdimport.cpp:389 +msgid "Select All" +msgstr "Seleccionar Todo" + +#: src/mgui/dvdimport.cpp:389 +msgid "Unselect All" +msgstr "Deseleccionar Todo" + +#. мы не можем пустить исключение здесь, потому что оно пойдет +#. и через C-шный код (Gtk) - отложим +#: src/mgui/dvdimport.cpp:411 +msgid "Are you sure to stop importing?" +msgstr "¿Está seguro de detener la importación?" + +#: src/mgui/dvdimport.cpp:444 +#, boost-format +msgid "Cant write to folder %1% (check permissions)." +msgstr "No se puede copiar al directorio %1% (revise los permisos)." + +#: src/mgui/dvdimport.cpp:472 +#: src/mgui/win_utils.cpp:322 +#, boost-format +msgid "A file named \"%1%\" already exists. Do you want to replace it?" +msgstr "Un archivo llamado \"%1%\" ya existe. ¿Desea reemplazarlo?" + +#: src/mgui/dvdimport.cpp:505 +msgid "Import error!" +msgstr "¡Error de importación!" + +#: src/mgui/dvdimport.cpp:509 +msgid "Videos successfully imported." +msgstr "Vídeos satisfactoriamente importados." + +#: src/mgui/dvdimport.cpp:510 +msgid "Import has been interrupted." +msgstr "La importación ha sido interrumpida" + +#: src/mgui/dvdimport.cpp:544 +msgid "DVD-Video Import" +msgstr "Importar Vídeo DVD" + +#: src/mgui/dvdimport.cpp:567 +msgid "Choose DVD disc, DVD folder or iso image file." +msgstr "Elija un disco DVD, directorio DVD o un fichero de imagen ISO." + +#: src/mgui/dvdimport.cpp:585 +msgid "NTSC/PAL mismatch. Try another disc or import to project of corresponding type." +msgstr "No coincide NTSC/PAL. Pruebe otro disco o importe un proyecto del tipo correspondiente." + +#. имя +#: src/mgui/dvdimport.cpp:609 +#: src/mgui/project/media-browser.cpp:219 +msgid "Name" +msgstr "Nombre" + +#: src/mgui/dvdimport.cpp:622 +msgid "Details" +msgstr "Detalles" + +#: src/mgui/dvdimport.cpp:668 +msgid "It is desirable the destination folder to be empty." +msgstr "Se requiere que el directorio de destino esté vacío." + +#. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" +#. А что делать - нафига свои придумывать, если смысл один и тот же +#: src/mgui/execution.cpp:52 +#, boost-format +msgid "You are about to cancel %1%. Are you sure?" +msgstr "Está a punto de cancelar %1%. ¿Está seguro?" + +#: src/mgui/execution.cpp:411 +#, boost-format +msgid "exit code = %1%" +msgstr "código de salida = %1%" + +#: src/mgui/execution.cpp:413 +#, boost-format +msgid "broken by signal %1%" +msgstr "Abortado por señal %1%" + +#: src/mgui/mux.cpp:50 +msgid "muxing" +msgstr "muxing" + +#: src/mgui/mux.cpp:66 +#, boost-format +msgid "Muxing \"%1%\"" +msgstr "Muxing \"%1%\"" + +#: src/mgui/mux.cpp:77 +#: src/mgui/author/output.cpp:231 +msgid "Show/_Hide Details" +msgstr "Mostrar/O_cultar Detalles" + +#: src/mgui/mux.cpp:101 +msgid "Muxing error" +msgstr "Muxing error" + +#: src/mgui/mux.cpp:102 +#: src/mgui/author/output.cpp:654 +#, boost-format +msgid "The reason is \"%1%\" (see Details)" +msgstr "La razón es \"%1%\" (ver detalles)" + +#: src/mgui/mux.cpp:118 +msgid "Select a folder" +msgstr "Seleccione un directorio" + +#: src/mgui/mux.cpp:130 +msgid "in" +msgstr "en" + +#: src/mgui/mux.cpp:164 +msgid "Mux streams" +msgstr "Mux streams" + +#: src/mgui/mux.cpp:166 +msgid "Output" +msgstr "Salida" + +#: src/mgui/mux.cpp:167 +msgid "Select elementary video" +msgstr "Selecciona el video elemental" + +#: src/mgui/mux.cpp:168 +msgid "Select audio" +msgstr "Seleccione audio" + +#. Названия типов для i18n +#: src/mgui/mux.cpp:172 +#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/timeline/layout-draw.cpp:156 +msgid "Video" +msgstr "Vídeo" + +#: src/mgui/mux.cpp:175 +msgid "MPEG2 elementary video (m2v)" +msgstr "Vídeo elemental MPEG (m2v)" + +#: src/mgui/mux.cpp:180 +msgid "Audio" +msgstr "Audio" + +#: src/mgui/mux.cpp:183 +#: src/mgui/timeline/mviewer.cpp:281 +msgid "Audio for DVD" +msgstr "Audio para DVD" + +#: src/mgui/mux.cpp:208 +msgid "Elementary video file is not selected." +msgstr "Fichero de vídeo elemental no seleccionado." + +#: src/mgui/mux.cpp:210 +msgid "Audio file is not selected." +msgstr "Fichero de Audio no está seleccionado" + +#: src/mgui/mux.cpp:212 +msgid "Output file name is empty." +msgstr "Nombre del Fichero de salida vacío" + +#: src/mgui/prefs.cpp:143 +msgid "Bombono DVD Preferences" +msgstr "Preferencias de Bombono DVD" + +#: src/mgui/prefs.cpp:157 +msgid "_Default project type" +msgstr "Tipo de proyecto por _defecto:" + +#: src/mgui/prefs.cpp:160 +msgid "Default _folder for authoring" +msgstr "Direct_orio de autoría por defecto:" + +#: src/mgui/prefs.cpp:165 +msgid "_Play authoring result in" +msgstr "Re_producir los resultados en:" + +#: src/mgui/win_utils.cpp:325 +msgid "Replacing the file overwrite its contents." +msgstr "Reemplazando el fichero sobreescribiendo su contenido." + +#: src/mgui/author/burn.cpp:199 +msgid "Auto" +msgstr "Auto" + +#: src/mgui/author/burn.cpp:211 +msgid "Update speeds ..." +msgstr "Actualiza Velocidades ..." + +#: src/mgui/author/burn.cpp:332 +msgid "Checking Disc ..." +msgstr "Chequeando Disco ..." + +#: src/mgui/author/burn.cpp:346 +msgid "Selected burn drive is for CD discs only. Change to another burn drive." +msgstr "La unidad grabadora seleccionada es para discos CD solamente. Cambie a otra unidad grabadora." + +#: src/mgui/author/burn.cpp:351 +msgid "CD disc is found in the drive, not DVD. Change to DVD disc." +msgstr "Se encontró un CD en la unidad. Cambie a un disco DVD." + +#: src/mgui/author/burn.cpp:356 +msgid "No DVD disc in the drive. Load a clear one and press OK." +msgstr "No hay disco DVD en la unidad. Coloque uno en blanco y presione Aceptar." + +#: src/mgui/author/burn.cpp:361 +#, boost-format +msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." +msgstr "Un disco de tipo \"%1%\" se encuentra en la unidad, pero el tipo de disco para Vídeo DVD debería ser uno de: DVD-R, DVD+R, DVD-RW, DVD+RW. Coloque uno vacío con el tipo correcto y presione aceptar." + +#: src/mgui/author/burn.cpp:370 +#, boost-format +msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." +msgstr "El disco en la unidad de tipo \"%1%\" no está vacío. Sólo un disco grabable vacío puede ser usado para grabar un Vídeo DVD. Coloque uno vacío y presione Aceptar." + +#: src/mgui/author/burn.cpp:377 +#, boost-format +msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" +msgstr "El disco en la unidad de tipo \"%1%\" no está vacío. Se necesita eliminar el contenido antes de escribir uno nuevo. ¿Continuar?" + +#: src/mgui/author/burn.cpp:381 +msgid "_Cancel" +msgstr "_Cancelar" + +#: src/mgui/author/burn.cpp:382 +msgid "_Try again" +msgstr "In_tentar de nuevo" + +#: src/mgui/author/execute.cpp:62 +msgid "Status: " +msgstr "Estado:" + +#: src/mgui/author/indicator.cpp:66 +msgid "Rendering Menus" +msgstr "Renderizando Menús" + +#: src/mgui/author/indicator.cpp:67 +msgid "Generating DVD-Video" +msgstr "Generando Vídeo DVD" + +#: src/mgui/author/indicator.cpp:68 +msgid "Creating ISO Image" +msgstr "Creando imagen ISO" + +#: src/mgui/author/indicator.cpp:69 +msgid "Burning DVD" +msgstr "Grabando DVD" + +#: src/mgui/author/output.cpp:53 +msgid "DVD-Video Building" +msgstr "Creando Vídeo DVD" + +#: src/mgui/author/output.cpp:63 +#, boost-format +msgid "_Cancel %1%" +msgstr "_Cancelar %1%" + +#: src/mgui/author/output.cpp:64 +msgid "_Build DVD-Video" +msgstr "Cre_ar Vídeo DVD" + +#: src/mgui/author/output.cpp:161 +msgid "Select Output _Folder:" +msgstr "Selecciona direc_torio de salida:" + +#: src/mgui/author/output.cpp:177 +msgid " Choose Author Mode: " +msgstr "Elija modo de Autoría:" + +#. цель по умолчанию +#: src/mgui/author/output.cpp:183 +msgid "_Write DVD Folder" +msgstr "_Escribir directorio DVD" + +#: src/mgui/author/output.cpp:184 +msgid "Write Disk _Image" +msgstr "Escribir _Imagen de disco" + +#: src/mgui/author/output.cpp:193 +msgid "Disc Label: " +msgstr "Etiqueta de Disco:" + +#: src/mgui/author/output.cpp:198 +msgid "Burn to _DVD" +msgstr "Grabar a _DVD" + +#: src/mgui/author/output.cpp:206 +msgid "DVD Drive: " +msgstr "Unidad de DVD:" + +#: src/mgui/author/output.cpp:212 +msgid "Writing Speed: " +msgstr "Velocidad de escritura:" + +#: src/mgui/author/output.cpp:223 +msgid "_Rendering only" +msgstr "Sólo _Renderizado" + +#: src/mgui/author/output.cpp:277 +msgid "Rendering" +msgstr "Renderizando" + +#: src/mgui/author/output.cpp:354 +msgid "DVD Burning" +msgstr "Grabando DVD" + +#: src/mgui/author/output.cpp:398 +msgid "The result is here" +msgstr "El resultado está aquí" + +#: src/mgui/author/output.cpp:400 +msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." +msgstr "Usted puede ejecutar la autoría manualmente mediante el comando \"scons\" en el directorio especificado. Véase también el fichero README para otras opciones." + +#. Translators: impossible to go on! +#: src/mgui/author/output.cpp:424 +msgid "Authoring is cancelled." +msgstr "La autoría está cancelada." + +#: src/mgui/author/output.cpp:435 +#, boost-format +msgid "%1% is not a folder" +msgstr "%1% no es un directorio" + +#: src/mgui/author/output.cpp:446 +#, boost-format +msgid "Cant have full access to folder %1% (read, write)" +msgstr "No se tiene acceso completo al directorio %1% (lectura,escritura)" + +#: src/mgui/author/output.cpp:454 +#, boost-format +msgid "" +"Folder %1% is not empty. We need to remove all files in it before authoring.\n" +"Continue?" +msgstr "" +"El directorio %1% no está vacío. Se necesita borrar todos los ficheros en él antes de la autoría.\n" +"¿Continuar?" + +#: src/mgui/author/output.cpp:460 +#, boost-format +msgid "Error during removing files: %1%" +msgstr "Error durante la eliminación de ficheros: %1%" + +#: src/mgui/author/output.cpp:651 +#, boost-format +msgid "%1% cancelled." +msgstr "%1% cancelado." + +#: src/mgui/author/output.cpp:653 +#, boost-format +msgid "%1% broken." +msgstr "%1% Abortado." + +#. Translators: can be tranlated as "Operation "%1%" ..." +#: src/mgui/author/output.cpp:660 +#, boost-format +msgid "%1% successfully completed." +msgstr "%1% completado satisfactoriamente." + +#: src/mgui/author/output.cpp:690 +#: src/mgui/timeline/select.cpp:239 +#, boost-format +msgid "_Play in %1%" +msgstr "Repro_ducir en %1%" + +#: src/mgui/author/output.cpp:691 +msgid "_Burn to DVD" +msgstr "Grabar a D_VD" + +#: src/mgui/author/script.cpp:391 +msgid "There is no media (video or menu)." +msgstr "No hay medios (Vídeo o Menú)" + +#: src/mgui/author/script.cpp:556 +#, boost-format +msgid "external command failure: %1%" +msgstr "Fallo en comando externo: %1%" + +#: src/mgui/editor/select.cpp:599 +msgid "Delete" +msgstr "Borrar" + +#: src/mgui/editor/select.cpp:613 +msgid "Link" +msgstr "Enlace" + +#: src/mgui/editor/select.cpp:617 +msgid "Remove Link" +msgstr "Remover enlace" + +#. Poster Link +#: src/mgui/editor/select.cpp:621 +msgid "Set Poster" +msgstr "Establecer Poster" + +#: src/mgui/editor/select.cpp:630 +msgid "Align" +msgstr "Alinear" + +#: src/mgui/editor/select.cpp:638 +msgid "Align Left" +msgstr "Alinear a la izquierda" + +#: src/mgui/editor/select.cpp:639 +msgid "Align Right" +msgstr "Alinear a la derecha" + +#: src/mgui/editor/select.cpp:640 +msgid "Align Top" +msgstr "Alinear hacia arriba" + +#: src/mgui/editor/select.cpp:641 +msgid "Align Bottom" +msgstr "Alinear Botón" + +#: src/mgui/editor/select.cpp:644 +msgid "Center Horizontally" +msgstr "Centrar Horizontalmente" + +#: src/mgui/editor/select.cpp:645 +msgid "Center Vertically" +msgstr "Centrar Verticalmente" + +#: src/mgui/editor/select.cpp:650 +msgid "Distribute Horizontally" +msgstr "Distribuir Horizontalmente" + +#: src/mgui/editor/select.cpp:651 +msgid "Distribute Vertically" +msgstr "Distribuir Verticalmente" + +#. Set Background Color +#: src/mgui/editor/select.cpp:656 +#: src/mgui/editor/select.cpp:908 +msgid "Set Background Color..." +msgstr "Establecer color de fondo..." + +#. Selection Tool +#: src/mgui/editor/toolbar.cpp:135 +msgid "Selection Tool" +msgstr "Herramienta de selección" + +#. Text Tool +#: src/mgui/editor/toolbar.cpp:138 +msgid "Text Tool" +msgstr "Herramienta de Texto" + +#: src/mgui/editor/toolbar.cpp:495 +msgid "Add Item" +msgstr "Agregar elemento" + +#: src/mgui/editor/toolbar.cpp:517 +msgid "Font Name" +msgstr "Nombre de la fuente" + +#: src/mgui/editor/toolbar.cpp:533 +msgid "Font Size" +msgstr "Tamaño de la fuente" + +#. * кнопки стилей шрифта +#: src/mgui/editor/toolbar.cpp:538 +msgid "Bold" +msgstr "Negrita" + +#: src/mgui/editor/toolbar.cpp:539 +msgid "Italic" +msgstr "Cursiva" + +#: src/mgui/editor/toolbar.cpp:540 +msgid "Underline" +msgstr "Subrayado" + +#: src/mgui/editor/toolbar.cpp:549 +msgid "Pick a Color for Text" +msgstr "Elija un color para el texto" + +#: src/mgui/editor/toolbar.cpp:551 +msgid "Text Color" +msgstr "Color del Texto" + +#: src/mgui/editor/toolbar.cpp:563 +msgid "Show Safe Area" +msgstr "Mostrar área segura" + +#: src/mgui/project/add.cpp:37 +msgid "yes" +msgstr "sí" + +#: src/mgui/project/add.cpp:37 +msgid "no" +msgstr "no" + +#: src/mgui/project/add.cpp:86 +msgid "Video bitrate" +msgstr "Bitrate de vídeo" + +#: src/mgui/project/add.cpp:87 +msgid "kbps" +msgstr "kbps" + +#: src/mgui/project/add.cpp:88 +msgid "Maximum data rate for video (9800 kbps) is exceeded." +msgstr "Máxima velocidad de datos para vídeo (9800 kbps) se excede." + +#: src/mgui/project/add.cpp:91 +#, boost-format +msgid "The %1% DVD-Video can accept MPEG-2 with resolutions: %2% only." +msgstr "El Vídeo DVD %1% puede aceptar MPEG-2 con resoluciones: de sólo %2%." + +#: src/mgui/project/add.cpp:92 +#, boost-format +msgid "The %1% DVD-Video can accept MPEG-2 with frame rate: %2% only." +msgstr "El Vídeo DVD %1% puede aceptar MPEG-2 con resoluciones: de sólo %2%." + +#: src/mgui/project/add.cpp:93 +#, boost-format +msgid "The %1% DVD-Video can accept MPEG-2 with aspects 4:3, 16:9 only." +msgstr "El Vídeo DVD %1% puede aceptar MPEG-2 sólo con aspectos de 4:3 y 16:9." + +#: src/mgui/project/add.cpp:113 +msgid "Video size" +msgstr "Tamaño de Vídeo" + +#: src/mgui/project/add.cpp:133 +msgid "Frame rate" +msgstr "Tasa de imágenes" + +#: src/mgui/project/add.cpp:134 +msgid "fps" +msgstr "fps" + +#: src/mgui/project/add.cpp:142 +msgid "Aspect ratio" +msgstr "Relación de aspecto" + +#: src/mgui/project/add.cpp:217 +msgid "Bombono DVD can use \"DVD-ready\" video only now. Use muxing programs like \"mplex -f 8\" (from mjpegtools), mencoder (from mplayer) or transcode to make your video ready for Bombono DVD." +msgstr "Bombono DVD puede usar sólo vídeos DVD preparados por ahora. Use programas de muxing como \"mplex -f 8\" (de mjpegtools), mencoder (de mplayer) o transcode para dejar su vídeo listo para Bombono DVD." + +#: src/mgui/project/add.cpp:221 +msgid "DVD packs" +msgstr "DVD packs" + +#: src/mgui/project/add.cpp:223 +msgid "NAV packets" +msgstr "NAV packets" + +#: src/mgui/project/add.cpp:229 +msgid "This video may not be added due to (errors in red color):" +msgstr "Éste vídeo podría no ser agregado debido a (errores en red color):" + +#. подскажем пользователю, что он ошибся форматом проекта +#: src/mgui/project/add.cpp:240 +#, boost-format +msgid "This video has %1% type and can't be added to current project of %2% type. Create new project from menu \"Project->New Project\" with right type." +msgstr "Éste vídeo es de tipo %1% y no puede ser agregado al proyecto actual de tipo %2%. Cree un nuevo proyecto desde el menú \"Proyecto->Nuevo Proyecto\" con el tipo correcto." + +#: src/mgui/project/add.cpp:269 +msgid "File doesn't exist." +msgstr "No existe fichero." + +#: src/mgui/project/add.cpp:274 +msgid "Folders can't be added." +msgstr "No pueden ser agregar directorios." + +#. по расширению выводим наиболее вероятную ошибку +#: src/mgui/project/add.cpp:309 +msgid "Unknown file type." +msgstr "Tipo de fichero desconocido." + +#: src/mgui/project/add.cpp:379 +#, boost-format +msgid "" +"The file \"%1%\" looks like VOB from DVD.\n" +"Run import?" +msgstr "" +"El fichero \"%1%\" parece ser un VOB de un DVD.\n" +"¿Ejecutar importación?" + +#: src/mgui/project/add.cpp:396 +#, boost-format +msgid "The file \"%1%\" looks like elementary stream and need to be muxed before using. Run muxing?" +msgstr "El fichero \"%1%\" parece ser un estream elemental y necesita de mux antes de usarse. ¿Ejecutar muxing?" + +#: src/mgui/project/add.cpp:458 +msgid "Also:" +msgstr "También:" + +#: src/mgui/project/add.cpp:471 +#, boost-format +msgid "See more about preparing video for authoring in online help." +msgstr "Consulte más información acerca de la preparación de vídeo para autoría en ayuda en línea." + +#: src/mgui/project/add.cpp:482 +#, boost-format +msgid "Can't add file \"%1%\"." +msgstr "No se puede agregar el fichero \"%1%\"." + +#: src/mgui/project/add.cpp:484 +msgid "Can't add files:" +msgstr "No se puede agregar ficheros:" + +#: src/mgui/project/browser.cpp:128 +#, boost-format +msgid "Do you really want to delete \"%1%\" from Media List?" +msgstr "¿Realmente desea borrar \"%1%\" de la lista de medios?" + +#: src/mgui/project/browser.cpp:129 +#, boost-format +msgid "Do you really want to delete chapter \"%1%\"?" +msgstr "¿Realmente desea borrar el capítulo \"%1%\"?" + +#: src/mgui/project/browser.cpp:130 +#, boost-format +msgid "Do you really want to delete menu \"%1%\"?" +msgstr "¿Realmente desea borrar el menú \"%1%\"?" + +#: src/mgui/project/browser.cpp:242 +msgid "First-Play media can be Video or Menu only." +msgstr "Primera reproducción de medios puede ser de Vídeo o Menú solamente." + +#: src/mgui/project/mconstructor.cpp:335 +msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" +msgstr "Bombono DVD es un programa de autoría de DVD con una bonita y limpia GUI" + +#. dlg.set_authors(authors); +#. dlg.set_documenters(documenters); +#. dlg.set_decorated(false); +#: src/mgui/project/mconstructor.cpp:340 +msgid "translator-credits" +msgstr "" +"Carlos Sánchez \n" +"Sitio Web: http://elsimpicuitico.wordpress.com" + +#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически +#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero +#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) +#: src/mgui/project/mconstructor.cpp:527 +msgid "KB" +msgstr "KB" + +#: src/mgui/project/mconstructor.cpp:527 +msgid "GB" +msgstr "GB" + +#. Project +#: src/mgui/project/mconstructor.cpp:635 +msgid "_Project" +msgstr "_Proyecto" + +#: src/mgui/project/mconstructor.cpp:642 +msgid "_Quit" +msgstr "Sa_lir" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "Add Videos from _DVD" +msgstr "Agregar Vídeos desde _DVD" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "DVD-Import Assistant" +msgstr "Asistente para importar DVD" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "_Mux" +msgstr "Mu_x" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "Mux Elementary Streams into MPEG2" +msgstr "Mux Streams elementales en MPEG2" + +#: src/mgui/project/mconstructor.cpp:648 +msgid "Pr_eferences" +msgstr "Pr_eferencias" + +#. Go +#: src/mgui/project/mconstructor.cpp:687 +msgid "_Go" +msgstr "I_r a..." + +#. первый вставляем сразу +#. Help +#: src/mgui/project/mconstructor.cpp:693 +msgid "_Help" +msgstr "Ayud_a" + +#: src/mgui/project/mconstructor.cpp:818 +msgctxt "MainTabs" +msgid "_Source" +msgstr "_Fuente" + +#: src/mgui/project/mconstructor.cpp:820 +msgctxt "MainTabs" +msgid "_Menu" +msgstr "_Menú" + +#: src/mgui/project/mconstructor.cpp:822 +msgctxt "MainTabs" +msgid "_Output" +msgstr "Sal_ida" + +#: src/mgui/project/media-browser.cpp:148 +msgid "Previous Menu" +msgstr "Menú Anterior" + +#: src/mgui/project/media-browser.cpp:148 +#: src/mgui/project/media-browser.cpp:150 +msgid "Next Video" +msgstr "Siguiente Vídeo" + +#: src/mgui/project/media-browser.cpp:149 +#, boost-format +msgid "Auto (%1%)" +msgstr "Auto (%1%)" + +#: src/mgui/project/media-browser.cpp:179 +msgid "End Action" +msgstr "Acción Final" + +#: src/mgui/project/media-browser.cpp:203 +msgid "Still Picture" +msgstr "Imagen Fija" + +#: src/mgui/project/media-browser.cpp:235 +msgid "Type" +msgstr "Tipo" + +#. // не меньше чем размер шрифта элемента в списке +#. Gtk::Label& label = *Gtk::manage(new Gtk::Label("Media List")); +#. label.set_use_markup(true); +#. vbox.pack_start(label, Gtk::PACK_SHRINK); +#. Gtk::Requisition req = label.size_request(); +#. label.set_size_request(0, req.height+10); +#: src/mgui/project/media-browser.cpp:293 +#: src/mgui/project/menu-browser.cpp:374 +msgid "Media List" +msgstr "Lista de medios" + +#: src/mgui/project/media-browser.cpp:333 +msgid "Add Media from File Browser" +msgstr "Agregar medio desde el visor de ficheros" + +#: src/mgui/project/media-browser.cpp:342 +msgid "Remove Media" +msgstr "Remover medio" + +#: src/mgui/project/media-browser.cpp:353 +msgid "Make Chapters for Video" +msgstr "Crear Capítulos para el Vídeo" + +#: src/mgui/project/menu-browser.cpp:191 +msgid "No Link" +msgstr "Sin Enlace" + +#. * subj +#: src/mgui/project/menu-browser.cpp:338 +msgid "Menu List" +msgstr "Lista de Menús" + +#: src/mgui/project/menu-browser.cpp:354 +msgid "Add Menu" +msgstr "Agregar Menú" + +#: src/mgui/project/menu-browser.cpp:359 +msgid "Remove Menu" +msgstr "Remover Menú" + +#: src/mgui/project/menu-browser.cpp:364 +msgid "Edit Menu" +msgstr "Editar Menú" + +#: src/mgui/project/serialize.cpp:61 +msgid "Save Project As..." +msgstr "Guardar Proyecto Como..." + +#: src/mgui/project/serialize.cpp:93 +#, boost-format +msgid "Cant open project file \"%1%\"" +msgstr "No se puede abrir el fichero de proyecto \"%1%\"" + +#: src/mgui/project/serialize.cpp:166 +#, boost-format +msgid "Save changes to \"%1%\"?" +msgstr "¿Guardar cambios para \"%1%\"?" + +#: src/mgui/project/serialize.cpp:168 +msgid "Close _without Saving" +msgstr "Cerrar si_n Guardar" + +#: src/mgui/project/serialize.cpp:206 +msgid "New Project" +msgstr "Nuevo Proyecto" + +#: src/mgui/project/serialize.cpp:215 +msgid "Please select a Television standard for your project:" +msgstr "Por favor seleccione una norma de TV para su proyecto:" + +#: src/mgui/project/serialize.cpp:237 +msgid "Open Project" +msgstr "Abrir Proyecto" + +#: src/mgui/project/serialize.cpp:241 +msgid "Project files (*.xml)" +msgstr "Fichero de Proyecto (*.xml)" + +#: src/mgui/project/serialize.cpp:246 +#: src/mgui/timeline/mviewer.cpp:283 +msgid "All Files (*.*)" +msgstr "Todos los ficheros (*.*)" + +#: src/mgui/project/serialize.cpp:308 +msgid "_New Project" +msgstr "_Nuevo Proyecto" + +#: src/mgui/project/serialize.cpp:310 +msgid "_Open..." +msgstr "A_brir..." + +#: src/mgui/project/serialize.cpp:312 +msgid "_Save" +msgstr "G_uardar" + +#: src/mgui/project/serialize.cpp:314 +msgid "Save _As..." +msgstr "Guardar Có_mo..." + +#. Add +#: src/mgui/timeline/layout.cpp:526 +#: src/mgui/timeline/select.cpp:216 +msgid "Add Chapter Point" +msgstr "Agregar Marca de Capítulo" + +#: src/mgui/timeline/mviewer.cpp:76 +msgid "Error while opening file:" +msgstr "Error mientras abría el fichero:" + +#. 0 надпись +#: src/mgui/timeline/mviewer.cpp:249 +msgid "File Browser" +msgstr "Visor de Ficheros" + +#: src/mgui/timeline/mviewer.cpp:279 +msgid "All formats" +msgstr "Todos los formatos" + +#: src/mgui/timeline/mviewer.cpp:280 +msgid "MPEG files" +msgstr "Ficheros MPEG" + +#: src/mgui/timeline/mviewer.cpp:282 +msgid "Still Images" +msgstr "Imágenes fijas" + +#: src/mgui/timeline/select.cpp:143 +msgid "A_dd to project" +msgstr "Agr_egar al proyecto" + +#: src/mgui/timeline/select.cpp:146 +msgid "Save Frame..." +msgstr "Guardar Imagen..." + +#. Add at Intervals +#: src/mgui/timeline/select.cpp:170 +#: src/mgui/timeline/select.cpp:228 +msgid "Add Chapter Points at Intervals" +msgstr "Agregar marca de Capítulo a intervalos" + +#: src/mgui/timeline/select.cpp:176 +msgid "Interval between Chapters:" +msgstr "Intervalo entre Capítulos" + +#: src/mgui/timeline/select.cpp:183 +msgid "min." +msgstr "min." + +#: src/mgui/timeline/select.cpp:186 +msgid "Remove Existing Chapters" +msgstr "Remover Capítulos Existentes" + +#. Delete +#: src/mgui/timeline/select.cpp:219 +msgid "Delete Chapter Point" +msgstr "Borrar marca de Capítulo" + +#. Delete All +#: src/mgui/timeline/select.cpp:223 +msgid "Delete All Chapter Points" +msgstr "Borrar todas las marcas de Capítulo" + +#: src/mgui/timeline/select.cpp:236 +msgid "Save Current Frame" +msgstr "Guardar Imagen Actual" + diff -Nru bombono-dvd-0.7.0/po/fi.po bombono-dvd-0.8.0/po/fi.po --- bombono-dvd-0.7.0/po/fi.po 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/fi.po 2010-11-01 21:58:28.000000000 +0000 @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: bombono-dvd 0.5.9\n" +"Project-Id-Version: bombono-dvd 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-03 00:13+0400\n" -"PO-Revision-Date: 2010-04-06 09:34+0200\n" +"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"PO-Revision-Date: 2010-10-08 18:57+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" @@ -16,11 +16,11 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:200 +#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:202 msgid "Chapter" msgstr "Kappale" -#: src/mbase/project/media.cpp:112 +#: src/mbase/project/media.cpp:114 #, boost-format msgid "Cant create folder %1% (check permissions)" msgstr "Ei voi luoda kansiota %1% (tarkista käyttöoikeudet)" @@ -29,264 +29,268 @@ msgid "Menu" msgstr "Valikko" -#: src/mgui/dvdimport.cpp:82 +#: src/mgui/dvdimport.cpp:83 msgid "Choose Source DVD-Video" msgstr "Valitse lähde-DVD-video" -#: src/mgui/dvdimport.cpp:85 +#: src/mgui/dvdimport.cpp:86 msgid "Select Videos to Import" msgstr "Valitse tuotavat videot" -#: src/mgui/dvdimport.cpp:88 +#: src/mgui/dvdimport.cpp:89 msgid "Select Folder to Save Videos" msgstr "Valitse kansio, johon videot tallennetaan" -#: src/mgui/dvdimport.cpp:91 +#: src/mgui/dvdimport.cpp:92 msgid "Importing..." msgstr "Tuodaan..." -#: src/mgui/dvdimport.cpp:94 +#: src/mgui/dvdimport.cpp:95 msgid "Import is completed." msgstr "Tuonti on toteutettu." -#: src/mgui/dvdimport.cpp:207 src/mgui/project/mconstructor.cpp:824 +#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:527 msgid "MB" msgstr "megatavua" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Select All" msgstr "Valitse kaikki" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Unselect All" msgstr "Poista kaikki valinnat" #. мы не можем пустить исключение здесь, потому что оно пойдет #. и через C-шный код (Gtk) - отложим -#: src/mgui/dvdimport.cpp:410 +#: src/mgui/dvdimport.cpp:411 msgid "Are you sure to stop importing?" msgstr "Haluatko varmasti pysäyttää tuonnin?" -#: src/mgui/dvdimport.cpp:443 +#: src/mgui/dvdimport.cpp:444 #, boost-format msgid "Cant write to folder %1% (check permissions)." msgstr "Ei voi kirjoittaa kansioon %1% (tarkista käyttöoikeudet)." -#: src/mgui/dvdimport.cpp:471 src/mgui/win_utils.cpp:319 +#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:322 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "Tiedosto nimeltä ”%1%” on jo olemassa. Haluatko korvata sen?" -#: src/mgui/dvdimport.cpp:504 +#: src/mgui/dvdimport.cpp:505 msgid "Import error!" msgstr "Tuontivirhe!" -#: src/mgui/dvdimport.cpp:508 +#: src/mgui/dvdimport.cpp:509 msgid "Videos successfully imported." msgstr "Videot tuotiin onnistuneesti." -#: src/mgui/dvdimport.cpp:509 +#: src/mgui/dvdimport.cpp:510 msgid "Import has been interrupted." msgstr "Tuonti on keskeytetty." -#: src/mgui/dvdimport.cpp:543 +#: src/mgui/dvdimport.cpp:544 msgid "DVD-Video Import" msgstr "DVD-videotuonti" -#: src/mgui/dvdimport.cpp:566 +#: src/mgui/dvdimport.cpp:567 msgid "Choose DVD disc, DVD folder or iso image file." msgstr "Valitse DVD-levy, DVD-kansio tai iso-vedostiedosto." -#: src/mgui/dvdimport.cpp:584 +#: src/mgui/dvdimport.cpp:585 msgid "NTSC/PAL mismatch. Try another disc or import to project of corresponding type." msgstr "NTSC/PAL-täsmäämättömyys. Kokeile toista levyä tai tuo vastaavantyyppinen projekti." #. имя -#: src/mgui/dvdimport.cpp:608 src/mgui/project/media-browser.cpp:217 +#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:219 msgid "Name" msgstr "Nimi" -#: src/mgui/dvdimport.cpp:621 +#: src/mgui/dvdimport.cpp:622 msgid "Details" msgstr "Yksityiskohdat" -#: src/mgui/dvdimport.cpp:667 +#: src/mgui/dvdimport.cpp:668 msgid "It is desirable the destination folder to be empty." msgstr "On toivottavaa, että kohdekansio olisi tyhjä." #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:27 +#: src/mgui/execution.cpp:52 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "Olet perumassa toiminnon %1%. Oletko varma?" -#: src/mgui/mux.cpp:29 +#: src/mgui/execution.cpp:411 +#, boost-format +msgid "exit code = %1%" +msgstr "poistumiskoodi = %1%" + +#: src/mgui/execution.cpp:413 +#, boost-format +msgid "broken by signal %1%" +msgstr "signaalin %1% rikkoma" + +#: src/mgui/mux.cpp:50 msgid "muxing" msgstr "lomitus" -#: src/mgui/mux.cpp:45 +#: src/mgui/mux.cpp:66 #, boost-format msgid "Muxing \"%1%\"" msgstr "Lomitetaan ”%1%”" -#: src/mgui/mux.cpp:56 src/mgui/author/output.cpp:229 +#: src/mgui/mux.cpp:77 src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "Näytä/P_iilota yksityiskohdat" -#: src/mgui/mux.cpp:80 +#: src/mgui/mux.cpp:101 msgid "Muxing error" msgstr "Lomitusvirhe" -#: src/mgui/mux.cpp:81 src/mgui/author/output.cpp:632 +#: src/mgui/mux.cpp:102 src/mgui/author/output.cpp:654 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "Syy on ”%1%” (katso Yksityiskohdat)" -#: src/mgui/mux.cpp:97 +#: src/mgui/mux.cpp:118 msgid "Select a folder" msgstr "Valitse kansio" -#: src/mgui/mux.cpp:109 +#: src/mgui/mux.cpp:130 msgid "in" msgstr "kohteessa" -#: src/mgui/mux.cpp:143 +#: src/mgui/mux.cpp:164 msgid "Mux streams" msgstr "Lomitusvuot" -#: src/mgui/mux.cpp:145 +#: src/mgui/mux.cpp:166 msgid "Output" msgstr "Tuloste" -#: src/mgui/mux.cpp:146 +#: src/mgui/mux.cpp:167 msgid "Select elementary video" msgstr "Valitse perusvideo" -#: src/mgui/mux.cpp:147 +#: src/mgui/mux.cpp:168 msgid "Select audio" msgstr "Valitse ääni" #. Названия типов для i18n -#: src/mgui/mux.cpp:151 src/mgui/project/media-browser.cpp:199 +#: src/mgui/mux.cpp:172 src/mgui/project/media-browser.cpp:201 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "Video" -#: src/mgui/mux.cpp:154 +#: src/mgui/mux.cpp:175 msgid "MPEG2 elementary video (m2v)" msgstr "MPEG2-perusvideo (m2v)" -#: src/mgui/mux.cpp:159 +#: src/mgui/mux.cpp:180 msgid "Audio" msgstr "Ääni" -#: src/mgui/mux.cpp:162 src/mgui/timeline/mviewer.cpp:271 +#: src/mgui/mux.cpp:183 src/mgui/timeline/mviewer.cpp:281 msgid "Audio for DVD" msgstr "Ääni DVD:lle" -#: src/mgui/mux.cpp:187 +#: src/mgui/mux.cpp:208 msgid "Elementary video file is not selected." msgstr "Perusvideotiedostoa ei ole valittu." -#: src/mgui/mux.cpp:189 +#: src/mgui/mux.cpp:210 msgid "Audio file is not selected." msgstr "Äänitiedostoa ei ole valittu." -#: src/mgui/mux.cpp:191 +#: src/mgui/mux.cpp:212 msgid "Output file name is empty." msgstr "Tulostetiedostonimi on tyhjä." -#: src/mgui/prefs.cpp:98 +#: src/mgui/prefs.cpp:143 msgid "Bombono DVD Preferences" msgstr "Bombono DVD-asetukset" -#: src/mgui/prefs.cpp:111 -msgid "_Default Project Type" -msgstr "Ol_etusprojektityyppi" +#: src/mgui/prefs.cpp:157 +msgid "_Default project type" +msgstr "Oletusprojektit_yyppi" + +#: src/mgui/prefs.cpp:160 +msgid "Default _folder for authoring" +msgstr "O_letuskansio tekemiselle" -#: src/mgui/prefs.cpp:116 -msgid "_Play Authoring Result in" +#: src/mgui/prefs.cpp:165 +msgid "_Play authoring result in" msgstr "S_oita tekemistulokset kohteessa" -#: src/mgui/win_utils.cpp:322 +#: src/mgui/win_utils.cpp:325 msgid "Replacing the file overwrite its contents." msgstr "Tiedoston korvaamisessa sen sisältö ylikirjoitetaan." -#: src/mgui/author/burn.cpp:198 +#: src/mgui/author/burn.cpp:199 msgid "Auto" msgstr "Automaattinen" -#: src/mgui/author/burn.cpp:210 +#: src/mgui/author/burn.cpp:211 msgid "Update speeds ..." msgstr "Päivitysnopeudet ..." -#: src/mgui/author/burn.cpp:331 +#: src/mgui/author/burn.cpp:332 msgid "Checking Disc ..." msgstr "Tarkistetaan levyä ..." -#: src/mgui/author/burn.cpp:345 +#: src/mgui/author/burn.cpp:346 msgid "Selected burn drive is for CD discs only. Change to another burn drive." msgstr "Valittu tallennuslaite on vain CD-levyjä varten. Vaihda toiseen tallentavaan laitteeseen." -#: src/mgui/author/burn.cpp:350 +#: src/mgui/author/burn.cpp:351 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." msgstr "Levyasemasta löytyi CD-levy, ei DVD-levy. Vaihda DVD-levyyn." -#: src/mgui/author/burn.cpp:355 +#: src/mgui/author/burn.cpp:356 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "Levyasemassa ei ole DVD-levyä. Lataa tyhjä levy ja paina OK-painiketta." -#: src/mgui/author/burn.cpp:360 +#: src/mgui/author/burn.cpp:361 #, boost-format msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." msgstr "Levyasemasta löytyi ”%1%”-tyyppinen levy, mutta DVD-videolevyä varten tyypin pitäisi olla yksi seuraavista: DVD-R, DVD+R, DVD-RW, DVD+RW. Lataa tyhjä oikeantyyppinen levy ja paina OK-painiketta." -#: src/mgui/author/burn.cpp:369 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "Levyasemassa oleva ”%1%”-tyyppinen levy ei ole tyhjä. Vain tyhjiä tallentavia levyjä voidaan käyttää DVD-videon tallentamiseen. Lataa tyhjä levy ja paina OK-painiketta." -#: src/mgui/author/burn.cpp:376 +#: src/mgui/author/burn.cpp:377 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" msgstr "Levyasemassa oleva ”%1%”-tyyppinen levy ei ole tyhjä. Meidän on poistettava sen sisältö ennen uuden kirjoittamista. Jatketaanko?" -#: src/mgui/author/burn.cpp:380 +#: src/mgui/author/burn.cpp:381 msgid "_Cancel" msgstr "_Peru" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:382 msgid "_Try again" msgstr "Yri_tä uudelleen" -#: src/mgui/author/execute.cpp:72 +#: src/mgui/author/execute.cpp:62 msgid "Status: " msgstr "Tila: " -#: src/mgui/author/execute.cpp:568 -#, boost-format -msgid "exit code = %1%" -msgstr "poistumiskoodi = %1%" - -#: src/mgui/author/execute.cpp:570 -#, boost-format -msgid "broken by signal %1%" -msgstr "signaalin %1% rikkoma" - -#: src/mgui/author/indicator.cpp:67 +#: src/mgui/author/indicator.cpp:66 msgid "Rendering Menus" msgstr "Hahmontamisvalikot" -#: src/mgui/author/indicator.cpp:68 +#: src/mgui/author/indicator.cpp:67 msgid "Generating DVD-Video" msgstr "Tuotetaan DVD-video" -#: src/mgui/author/indicator.cpp:69 +#: src/mgui/author/indicator.cpp:68 msgid "Creating ISO Image" msgstr "Luodaan ISO-vedos" -#: src/mgui/author/indicator.cpp:70 +#: src/mgui/author/indicator.cpp:69 msgid "Burning DVD" msgstr "Tallennetaan DVD" @@ -308,71 +312,71 @@ msgid "Select Output _Folder:" msgstr "Valitse tulo_stekansio:" -#: src/mgui/author/output.cpp:175 +#: src/mgui/author/output.cpp:177 msgid " Choose Author Mode: " msgstr " Valitse tekijätila: " #. цель по умолчанию -#: src/mgui/author/output.cpp:181 +#: src/mgui/author/output.cpp:183 msgid "_Write DVD Folder" msgstr "Kir_joita DVD-kansio" -#: src/mgui/author/output.cpp:182 +#: src/mgui/author/output.cpp:184 msgid "Write Disk _Image" -msgstr "Kirj_oita levyvedos" +msgstr "Kirjoita levyvedos" -#: src/mgui/author/output.cpp:191 +#: src/mgui/author/output.cpp:193 msgid "Disc Label: " msgstr "Levynimiö: " -#: src/mgui/author/output.cpp:196 +#: src/mgui/author/output.cpp:198 msgid "Burn to _DVD" msgstr "Tallenna _DVD:lle" -#: src/mgui/author/output.cpp:204 +#: src/mgui/author/output.cpp:206 msgid "DVD Drive: " msgstr "DVD-asema: " -#: src/mgui/author/output.cpp:210 +#: src/mgui/author/output.cpp:212 msgid "Writing Speed: " msgstr "Kirjoitusnopeus: " -#: src/mgui/author/output.cpp:221 +#: src/mgui/author/output.cpp:223 msgid "_Rendering only" msgstr "_Vain hahmontaminen" -#: src/mgui/author/output.cpp:275 +#: src/mgui/author/output.cpp:277 msgid "Rendering" msgstr "Hahmonnetaan" -#: src/mgui/author/output.cpp:352 +#: src/mgui/author/output.cpp:354 msgid "DVD Burning" msgstr "DVD-tallennus" -#: src/mgui/author/output.cpp:396 +#: src/mgui/author/output.cpp:398 msgid "The result is here" msgstr "Tulos on tässä" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:400 msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." msgstr "Voit suorittaa tekemisen manuaalisesti komennolla ”scons” määritellyssä kansiossa. Katso myös README-tiedostosta lisävalitsimia." #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:422 +#: src/mgui/author/output.cpp:424 msgid "Authoring is cancelled." msgstr "Tekeminen peruttiin." -#: src/mgui/author/output.cpp:433 +#: src/mgui/author/output.cpp:435 #, boost-format msgid "%1% is not a folder" msgstr "%1% ei ole kansio" -#: src/mgui/author/output.cpp:444 +#: src/mgui/author/output.cpp:446 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "Ei voi olla täysiä käyttöoikeuksia kansioon %1% (luku, kirjoitus)" -#: src/mgui/author/output.cpp:452 +#: src/mgui/author/output.cpp:454 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before authoring.\n" @@ -381,382 +385,239 @@ "Kansio %1% ei ole tyhjä. Meidän on poistettava siitä kaikki tiedostot ennen tekemistä.\n" "Jatketaanko?" -#: src/mgui/author/output.cpp:458 +#: src/mgui/author/output.cpp:460 #, boost-format msgid "Error during removing files: %1%" msgstr "Virhe poistettaessa tiedostoja: %1%" -#: src/mgui/author/output.cpp:629 +#: src/mgui/author/output.cpp:651 #, boost-format msgid "%1% cancelled." msgstr "%1% peruttu." -#: src/mgui/author/output.cpp:631 +#: src/mgui/author/output.cpp:653 #, boost-format msgid "%1% broken." msgstr "%1% rikki." #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:638 +#: src/mgui/author/output.cpp:660 #, boost-format msgid "%1% successfully completed." msgstr "Toiminto %1% valmis." -#: src/mgui/author/output.cpp:668 src/mgui/timeline/select.cpp:216 +#: src/mgui/author/output.cpp:690 src/mgui/timeline/select.cpp:239 #, boost-format msgid "_Play in %1%" msgstr "_Soita kohteessa %1%" -#: src/mgui/author/output.cpp:669 +#: src/mgui/author/output.cpp:691 msgid "_Burn to DVD" msgstr "T_allenna DVD:lle" -#: src/mgui/author/script.cpp:392 +#: src/mgui/author/script.cpp:391 msgid "There is no media (video or menu)." msgstr "Ei ole mediaa (video tai valikko)." -#: src/mgui/author/script.cpp:557 +#: src/mgui/author/script.cpp:556 #, boost-format msgid "external command failure: %1%" msgstr "ulkoisen komennon virhe: %1%" -#: src/mgui/editor/select.cpp:499 +#: src/mgui/editor/select.cpp:599 msgid "Delete" msgstr "Poista" -#: src/mgui/editor/select.cpp:513 +#: src/mgui/editor/select.cpp:613 msgid "Link" msgstr "Linkki" -#: src/mgui/editor/select.cpp:517 +#: src/mgui/editor/select.cpp:617 msgid "Remove Link" msgstr "Poista linkki" #. Poster Link -#: src/mgui/editor/select.cpp:521 +#: src/mgui/editor/select.cpp:621 msgid "Set Poster" msgstr "Aseta juliste" -#: src/mgui/editor/select.cpp:530 +#: src/mgui/editor/select.cpp:630 msgid "Align" msgstr "Tasaa" -#: src/mgui/editor/select.cpp:538 +#: src/mgui/editor/select.cpp:638 msgid "Align Left" msgstr "Tasaa vasemmalle" -#: src/mgui/editor/select.cpp:539 +#: src/mgui/editor/select.cpp:639 msgid "Align Right" msgstr "Tasaa oikealle" -#: src/mgui/editor/select.cpp:540 +#: src/mgui/editor/select.cpp:640 msgid "Align Top" msgstr "Tasaa ylös" -#: src/mgui/editor/select.cpp:541 +#: src/mgui/editor/select.cpp:641 msgid "Align Bottom" msgstr "Tasaa alas" -#: src/mgui/editor/select.cpp:544 +#: src/mgui/editor/select.cpp:644 msgid "Center Horizontally" msgstr "Keskitä vaakasuoraan" -#: src/mgui/editor/select.cpp:545 +#: src/mgui/editor/select.cpp:645 msgid "Center Vertically" msgstr "Keskitä pystysuoraan" +#: src/mgui/editor/select.cpp:650 +msgid "Distribute Horizontally" +msgstr "Jakele vaakasuoraan" + +#: src/mgui/editor/select.cpp:651 +msgid "Distribute Vertically" +msgstr "Jakele pystysuoraan" + #. Set Background Color -#: src/mgui/editor/select.cpp:550 src/mgui/editor/select.cpp:802 +#: src/mgui/editor/select.cpp:656 src/mgui/editor/select.cpp:908 msgid "Set Background Color..." msgstr "Aseta taustaväri..." #. Selection Tool -#: src/mgui/editor/toolbar.cpp:129 +#: src/mgui/editor/toolbar.cpp:135 msgid "Selection Tool" msgstr "Valintatyökalu" #. Text Tool -#: src/mgui/editor/toolbar.cpp:132 +#: src/mgui/editor/toolbar.cpp:138 msgid "Text Tool" msgstr "Tekstityökalu" -#: src/mgui/editor/toolbar.cpp:493 +#: src/mgui/editor/toolbar.cpp:495 msgid "Add Item" msgstr "Lisää kohde" -#: src/mgui/editor/toolbar.cpp:515 +#: src/mgui/editor/toolbar.cpp:517 msgid "Font Name" msgstr "Kirjasinnimi" -#: src/mgui/editor/toolbar.cpp:531 +#: src/mgui/editor/toolbar.cpp:533 msgid "Font Size" msgstr "Kirjasinkoko" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:536 +#: src/mgui/editor/toolbar.cpp:538 msgid "Bold" msgstr "Vahvennettu" -#: src/mgui/editor/toolbar.cpp:537 +#: src/mgui/editor/toolbar.cpp:539 msgid "Italic" msgstr "Kursiivi" -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:540 msgid "Underline" msgstr "Alleviivattu" -#: src/mgui/editor/toolbar.cpp:547 +#: src/mgui/editor/toolbar.cpp:549 msgid "Pick a Color for Text" msgstr "Valitse tekstiväri" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:551 msgid "Text Color" msgstr "Tekstiväri" -#: src/mgui/editor/toolbar.cpp:561 +#: src/mgui/editor/toolbar.cpp:563 msgid "Show Safe Area" msgstr "Näytä turva-alue" -#: src/mgui/project/browser.cpp:128 -#, boost-format -msgid "Do you really want to delete \"%1%\" from Media List?" -msgstr "Haluatko varmasti poistaa ”%1%” Media-luettelosta?" - -#: src/mgui/project/browser.cpp:129 -#, boost-format -msgid "Do you really want to delete chapter \"%1%\"?" -msgstr "Haluatko todella poistaa kappaleen ”%1%”?" - -#: src/mgui/project/browser.cpp:130 -#, boost-format -msgid "Do you really want to delete menu \"%1%\"?" -msgstr "Haluatko todella poistaa valikon ”%1%”?" - -#: src/mgui/project/browser.cpp:242 -msgid "First-Play media can be Video or Menu only." -msgstr "Ensimmäinen soittomedia voi olla vain video tai valikko." - -#: src/mgui/project/mconstructor.cpp:132 -msgid "Save Project As..." -msgstr "Tallenna projekti nimellä..." - -#: src/mgui/project/mconstructor.cpp:169 -#, boost-format -msgid "Cant open project file \"%1%\"" -msgstr "Ei voi avata projektitiedostoa ”%1%”" - -#: src/mgui/project/mconstructor.cpp:465 -msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" -msgstr "Bombono DVD on DVD-tekemisohjelma kauniilla ja siistillä graafisella käyttöliittymällä" - -#. dlg.set_authors(authors); -#. dlg.set_documenters(documenters); -#. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:470 -msgid "translator-credits" -msgstr "Jorma Karvonen " - -# Parametri on ilmeisesti projektin otsikko -#: src/mgui/project/mconstructor.cpp:611 -#, boost-format -msgid "Save changes to \"%1%\"?" -msgstr "Tallenna muutokset projektiin ”%1%”?" - -#: src/mgui/project/mconstructor.cpp:613 -msgid "Close _without Saving" -msgstr "Sulje tallenta_matta" - -#: src/mgui/project/mconstructor.cpp:653 -msgid "New Project" -msgstr "Uusi projekti" - -#: src/mgui/project/mconstructor.cpp:662 -msgid "Please select a Television standard for your project:" -msgstr "Valitse televisiostandardi projektillesi:" - -#: src/mgui/project/mconstructor.cpp:687 -msgid "Open Project" -msgstr "Avaa projekti" - -#: src/mgui/project/mconstructor.cpp:691 -msgid "Project files (*.xml)" -msgstr "Projektitiedostot (*.xml)" - -#: src/mgui/project/mconstructor.cpp:696 src/mgui/timeline/mviewer.cpp:273 -msgid "All Files (*.*)" -msgstr "Kaikki tiedostot (*.*)" - -#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически -#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero -#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:824 -msgid "KB" -msgstr "kilotavua" - -#: src/mgui/project/mconstructor.cpp:824 -msgid "GB" -msgstr "gigatavua" - -#. Project -#: src/mgui/project/mconstructor.cpp:935 -msgid "_Project" -msgstr "Proje_kti" - -#: src/mgui/project/mconstructor.cpp:940 -msgid "_New Project" -msgstr "Uu_si projekti" - -#: src/mgui/project/mconstructor.cpp:942 -msgid "_Open..." -msgstr "A_vaa..." - -#: src/mgui/project/mconstructor.cpp:944 -msgid "_Save" -msgstr "Talle_nna" - -#: src/mgui/project/mconstructor.cpp:946 -msgid "Save _As..." -msgstr "T_allenna nimellä..." - -#: src/mgui/project/mconstructor.cpp:948 -msgid "_Quit" -msgstr "_Poistu" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "Add Videos from _DVD" -msgstr "Lisää videot _DVD:stä" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "DVD-Import Assistant" -msgstr "DVD-tuontiavustaja" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "_Mux" -msgstr "_Multiplekseri" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "Mux Elementary Streams into MPEG2" -msgstr "Multiplekseriperusvuot MPEG2:teen" - -#: src/mgui/project/mconstructor.cpp:954 -msgid "Pr_eferences" -msgstr "Asetu_kset" - -#. Go -#: src/mgui/project/mconstructor.cpp:993 -msgid "_Go" -msgstr "_Siirry" - -#. первый вставляем сразу -#. Help -#: src/mgui/project/mconstructor.cpp:999 -msgid "_Help" -msgstr "O_paste" - -#: src/mgui/project/mconstructor.cpp:1100 -msgctxt "MainTabs" -msgid "_Source" -msgstr "Lä_hde" - -#: src/mgui/project/mconstructor.cpp:1102 -msgctxt "MainTabs" -msgid "_Menu" -msgstr "Valikk_o" - -#: src/mgui/project/mconstructor.cpp:1104 -msgctxt "MainTabs" -msgid "_Output" -msgstr "_Tuloste" - -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "yes" msgstr "kyllä" -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "no" msgstr "ei" -#: src/mgui/project/mb-actions.cpp:191 +#: src/mgui/project/add.cpp:86 msgid "Video bitrate" msgstr "Videon bittinopeus" -#: src/mgui/project/mb-actions.cpp:192 +#: src/mgui/project/add.cpp:87 msgid "kbps" msgstr "kilobittiä per sekunti" -#: src/mgui/project/mb-actions.cpp:193 +#: src/mgui/project/add.cpp:88 msgid "Maximum data rate for video (9800 kbps) is exceeded." msgstr "Enimmäisdatanopeus videolle (9800 kilobittiä per sekunti) ylitettiin." -#: src/mgui/project/mb-actions.cpp:196 +#: src/mgui/project/add.cpp:91 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with resolutions: %2% only." msgstr "DVD-video %1% voi hyväksyä MPEG-2 -koodausta vain resoluutioilla: %2%." -#: src/mgui/project/mb-actions.cpp:197 +#: src/mgui/project/add.cpp:92 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with frame rate: %2% only." msgstr "DVD-video %1% voi hyväksyä MPEG-2 -koodausta vain kehysnopeudella: %2%." -#: src/mgui/project/mb-actions.cpp:198 +#: src/mgui/project/add.cpp:93 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with aspects 4:3, 16:9 only." msgstr "DVD-video %1% voi hyväksyä MPEG-2 -koodausta vain kuvasuhteilla 4:3, 16:9." -#: src/mgui/project/mb-actions.cpp:218 +#: src/mgui/project/add.cpp:113 msgid "Video size" msgstr "Videokoko" -#: src/mgui/project/mb-actions.cpp:238 +#: src/mgui/project/add.cpp:133 msgid "Frame rate" msgstr "Kehysnopeus" # Arvaus: frames per second -#: src/mgui/project/mb-actions.cpp:239 +#: src/mgui/project/add.cpp:134 msgid "fps" msgstr "kehystä/sekunti" -#: src/mgui/project/mb-actions.cpp:247 +#: src/mgui/project/add.cpp:142 msgid "Aspect ratio" msgstr "Kuvasuhde" # Muxing tarkoittaa samaa kuin multiplexing -#: src/mgui/project/mb-actions.cpp:322 +#: src/mgui/project/add.cpp:217 msgid "Bombono DVD can use \"DVD-ready\" video only now. Use muxing programs like \"mplex -f 8\" (from mjpegtools), mencoder (from mplayer) or transcode to make your video ready for Bombono DVD." msgstr "Bombono DVD voidaan käyttää nyt vain ”DVD-ready”-videoille. Käytä lomittamisohjelmia kuten ”mplex -f 8” (ohjelmasta mjpegtools), mencoder (ohjelmasta mplayer) tai transcode tekemään videon valmiiksi Bombono DVD:lle." -#: src/mgui/project/mb-actions.cpp:326 +#: src/mgui/project/add.cpp:221 msgid "DVD packs" msgstr "DVD-kokoelmat" -#: src/mgui/project/mb-actions.cpp:328 +#: src/mgui/project/add.cpp:223 msgid "NAV packets" msgstr "NAV-paketit" -#: src/mgui/project/mb-actions.cpp:334 +#: src/mgui/project/add.cpp:229 msgid "This video may not be added due to (errors in red color):" msgstr "Tätä videota ei saa lisätä seuraavista syistä (virheet punaisella värillä):" #. подскажем пользователю, что он ошибся форматом проекта -#: src/mgui/project/mb-actions.cpp:345 +#: src/mgui/project/add.cpp:240 #, boost-format msgid "This video has %1% type and can't be added to current project of %2% type. Create new project from menu \"Project->New Project\" with right type." msgstr "Tämän videon tyyppi on %1% ja sitä ei voi lisätä nykyiseen %2%-tyyppiseen projektiin. Luo uusi oikean tyyppinen projekti valikosta ”Projekti->Uusi projekti”." -#: src/mgui/project/mb-actions.cpp:373 +#: src/mgui/project/add.cpp:269 msgid "File doesn't exist." msgstr "Tiedostoa ei ole olemassa." -#: src/mgui/project/mb-actions.cpp:378 +#: src/mgui/project/add.cpp:274 msgid "Folders can't be added." msgstr "Kansioita ei voida lisätä." #. по расширению выводим наиболее вероятную ошибку -#: src/mgui/project/mb-actions.cpp:413 +#: src/mgui/project/add.cpp:309 msgid "Unknown file type." msgstr "Tuntematon tiedostotyyppi." -#: src/mgui/project/mb-actions.cpp:631 +#: src/mgui/project/add.cpp:379 #, boost-format msgid "" "The file \"%1%\" looks like VOB from DVD.\n" @@ -765,52 +626,148 @@ "Tiedosto ”%1%” näyttää aivan VOB-tiedostolta DVD:ltä.\n" "Suoritetaanko tuonti?" -#: src/mgui/project/mb-actions.cpp:648 +#: src/mgui/project/add.cpp:396 #, boost-format msgid "The file \"%1%\" looks like elementary stream and need to be muxed before using. Run muxing?" msgstr "Tiedosto ”%1%” näyttää perusvuolta ja se on lomitettava ennen käyttöä. Suoritetaanko lomitus?" -#: src/mgui/project/mb-actions.cpp:710 +#: src/mgui/project/add.cpp:458 msgid "Also:" msgstr "Myös:" -#: src/mgui/project/mb-actions.cpp:719 +#: src/mgui/project/add.cpp:471 #, boost-format msgid "See more about preparing video for authoring in online help." msgstr "Lisätietoja videon tekemisvalmisteluista online-opasteesta." -#: src/mgui/project/mb-actions.cpp:727 +#: src/mgui/project/add.cpp:482 #, boost-format msgid "Can't add file \"%1%\"." msgstr "Ei voi lisätä tiedostoa ”%1%”." -#: src/mgui/project/mb-actions.cpp:730 +#: src/mgui/project/add.cpp:484 msgid "Can't add files:" msgstr "Ei voi lisätä tiedostoja:" -#: src/mgui/project/media-browser.cpp:146 +#: src/mgui/project/browser.cpp:128 +#, boost-format +msgid "Do you really want to delete \"%1%\" from Media List?" +msgstr "Haluatko varmasti poistaa ”%1%” Media-luettelosta?" + +#: src/mgui/project/browser.cpp:129 +#, boost-format +msgid "Do you really want to delete chapter \"%1%\"?" +msgstr "Haluatko todella poistaa kappaleen ”%1%”?" + +#: src/mgui/project/browser.cpp:130 +#, boost-format +msgid "Do you really want to delete menu \"%1%\"?" +msgstr "Haluatko todella poistaa valikon ”%1%”?" + +#: src/mgui/project/browser.cpp:242 +msgid "First-Play media can be Video or Menu only." +msgstr "Ensimmäinen soittomedia voi olla vain video tai valikko." + +#: src/mgui/project/mconstructor.cpp:335 +msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" +msgstr "Bombono DVD on DVD-tekemisohjelma kauniilla ja siistillä graafisella käyttöliittymällä" + +#. dlg.set_authors(authors); +#. dlg.set_documenters(documenters); +#. dlg.set_decorated(false); +#: src/mgui/project/mconstructor.cpp:340 +msgid "translator-credits" +msgstr "Jorma Karvonen " + +#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически +#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero +#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) +#: src/mgui/project/mconstructor.cpp:527 +msgid "KB" +msgstr "kilotavua" + +#: src/mgui/project/mconstructor.cpp:527 +msgid "GB" +msgstr "gigatavua" + +#. Project +#: src/mgui/project/mconstructor.cpp:635 +msgid "_Project" +msgstr "Proje_kti" + +#: src/mgui/project/mconstructor.cpp:642 +msgid "_Quit" +msgstr "_Poistu" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "Add Videos from _DVD" +msgstr "Lisää videot _DVD:stä" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "DVD-Import Assistant" +msgstr "DVD-tuontiavustaja" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "_Mux" +msgstr "_Multiplekseri" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "Mux Elementary Streams into MPEG2" +msgstr "Multiplekseriperusvuot MPEG2:teen" + +#: src/mgui/project/mconstructor.cpp:648 +msgid "Pr_eferences" +msgstr "Asetu_kset" + +#. Go +#: src/mgui/project/mconstructor.cpp:687 +msgid "_Go" +msgstr "_Siirry" + +#. первый вставляем сразу +#. Help +#: src/mgui/project/mconstructor.cpp:693 +msgid "_Help" +msgstr "O_paste" + +#: src/mgui/project/mconstructor.cpp:818 +msgctxt "MainTabs" +msgid "_Source" +msgstr "Lä_hde" + +#: src/mgui/project/mconstructor.cpp:820 +msgctxt "MainTabs" +msgid "_Menu" +msgstr "Valikk_o" + +#: src/mgui/project/mconstructor.cpp:822 +msgctxt "MainTabs" +msgid "_Output" +msgstr "_Tuloste" + +#: src/mgui/project/media-browser.cpp:148 msgid "Previous Menu" msgstr "Edellinen valikko" -#: src/mgui/project/media-browser.cpp:146 #: src/mgui/project/media-browser.cpp:148 +#: src/mgui/project/media-browser.cpp:150 msgid "Next Video" msgstr "Seuraava video" -#: src/mgui/project/media-browser.cpp:147 +#: src/mgui/project/media-browser.cpp:149 #, boost-format msgid "Auto (%1%)" msgstr "Automaattinen (%1%)" -#: src/mgui/project/media-browser.cpp:177 +#: src/mgui/project/media-browser.cpp:179 msgid "End Action" msgstr "Lopputoiminto" -#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/project/media-browser.cpp:203 msgid "Still Picture" msgstr "Pysäytyskuva" -#: src/mgui/project/media-browser.cpp:233 +#: src/mgui/project/media-browser.cpp:235 msgid "Type" msgstr "Tyyppi" @@ -820,98 +777,161 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:291 -#: src/mgui/project/menu-browser.cpp:373 +#: src/mgui/project/media-browser.cpp:293 +#: src/mgui/project/menu-browser.cpp:374 msgid "Media List" msgstr "Medialuettelo" -#: src/mgui/project/media-browser.cpp:331 +#: src/mgui/project/media-browser.cpp:333 msgid "Add Media from File Browser" msgstr "Lisää media tiedostoselaimesta" -#: src/mgui/project/media-browser.cpp:340 +#: src/mgui/project/media-browser.cpp:342 msgid "Remove Media" msgstr "Poista media" -#: src/mgui/project/media-browser.cpp:351 +#: src/mgui/project/media-browser.cpp:353 msgid "Make Chapters for Video" msgstr "Tee kappaleita videolle" -#: src/mgui/project/menu-browser.cpp:190 +#: src/mgui/project/menu-browser.cpp:191 msgid "No Link" msgstr "Ei linkkiä" #. * subj -#: src/mgui/project/menu-browser.cpp:337 +#: src/mgui/project/menu-browser.cpp:338 msgid "Menu List" msgstr "Valikkoluettelo" -#: src/mgui/project/menu-browser.cpp:353 +#: src/mgui/project/menu-browser.cpp:354 msgid "Add Menu" msgstr "Lisää valikko" -#: src/mgui/project/menu-browser.cpp:358 +#: src/mgui/project/menu-browser.cpp:359 msgid "Remove Menu" msgstr "Poista valikko" -#: src/mgui/project/menu-browser.cpp:363 +#: src/mgui/project/menu-browser.cpp:364 msgid "Edit Menu" msgstr "Muokkaa valikkoa" +#: src/mgui/project/serialize.cpp:61 +msgid "Save Project As..." +msgstr "Tallenna projekti nimellä..." + +#: src/mgui/project/serialize.cpp:93 +#, boost-format +msgid "Cant open project file \"%1%\"" +msgstr "Ei voi avata projektitiedostoa ”%1%”" + +# Parametri on ilmeisesti projektin otsikko +#: src/mgui/project/serialize.cpp:166 +#, boost-format +msgid "Save changes to \"%1%\"?" +msgstr "Tallenna muutokset projektiin ”%1%”?" + +#: src/mgui/project/serialize.cpp:168 +msgid "Close _without Saving" +msgstr "Sulje tallenta_matta" + +#: src/mgui/project/serialize.cpp:206 +msgid "New Project" +msgstr "Uusi projekti" + +#: src/mgui/project/serialize.cpp:215 +msgid "Please select a Television standard for your project:" +msgstr "Valitse televisiostandardi projektillesi:" + +#: src/mgui/project/serialize.cpp:237 +msgid "Open Project" +msgstr "Avaa projekti" + +#: src/mgui/project/serialize.cpp:241 +msgid "Project files (*.xml)" +msgstr "Projektitiedostot (*.xml)" + +#: src/mgui/project/serialize.cpp:246 src/mgui/timeline/mviewer.cpp:283 +msgid "All Files (*.*)" +msgstr "Kaikki tiedostot (*.*)" + +#: src/mgui/project/serialize.cpp:308 +msgid "_New Project" +msgstr "Uu_si projekti" + +#: src/mgui/project/serialize.cpp:310 +msgid "_Open..." +msgstr "A_vaa..." + +#: src/mgui/project/serialize.cpp:312 +msgid "_Save" +msgstr "Talle_nna" + +#: src/mgui/project/serialize.cpp:314 +msgid "Save _As..." +msgstr "T_allenna nimellä..." + #. Add -#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:193 +#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:216 msgid "Add Chapter Point" msgstr "Lisää kappalekohta" +#: src/mgui/timeline/mviewer.cpp:76 +msgid "Error while opening file:" +msgstr "Virhe avattaessa tiedostoa:" + #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:239 +#: src/mgui/timeline/mviewer.cpp:249 msgid "File Browser" msgstr "Tiedostoselain" -#: src/mgui/timeline/mviewer.cpp:269 +#: src/mgui/timeline/mviewer.cpp:279 msgid "All formats" msgstr "Kaikki muodot" -#: src/mgui/timeline/mviewer.cpp:270 +#: src/mgui/timeline/mviewer.cpp:280 msgid "MPEG files" msgstr "MPEG-tiedostot" -#: src/mgui/timeline/mviewer.cpp:272 +#: src/mgui/timeline/mviewer.cpp:282 msgid "Still Images" msgstr "Pysätyskuvat" -#: src/mgui/timeline/select.cpp:127 +#: src/mgui/timeline/select.cpp:143 +msgid "A_dd to project" +msgstr "Lisää _Projektiin" + +#: src/mgui/timeline/select.cpp:146 msgid "Save Frame..." msgstr "Tallenna kehys..." #. Add at Intervals -#: src/mgui/timeline/select.cpp:147 src/mgui/timeline/select.cpp:205 +#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:228 msgid "Add Chapter Points at Intervals" msgstr "Lisää kappalekohtia aikavälein" -#: src/mgui/timeline/select.cpp:153 +#: src/mgui/timeline/select.cpp:176 msgid "Interval between Chapters:" msgstr "Kappeleiden välinen aika:" -#: src/mgui/timeline/select.cpp:160 +#: src/mgui/timeline/select.cpp:183 msgid "min." msgstr "min." -#: src/mgui/timeline/select.cpp:163 +#: src/mgui/timeline/select.cpp:186 msgid "Remove Existing Chapters" msgstr "Poista olemassa olevat kappaleet" #. Delete -#: src/mgui/timeline/select.cpp:196 +#: src/mgui/timeline/select.cpp:219 msgid "Delete Chapter Point" msgstr "Poista kappalekohta" #. Delete All -#: src/mgui/timeline/select.cpp:200 +#: src/mgui/timeline/select.cpp:223 msgid "Delete All Chapter Points" msgstr "Poista kaikki kappalekohdat" -#: src/mgui/timeline/select.cpp:213 +#: src/mgui/timeline/select.cpp:236 msgid "Save Current Frame" msgstr "Tallenna nykyinen kehys" diff -Nru bombono-dvd-0.7.0/po/it.po bombono-dvd-0.8.0/po/it.po --- bombono-dvd-0.7.0/po/it.po 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/it.po 2010-11-01 21:58:28.000000000 +0000 @@ -2,23 +2,25 @@ # Copyright (C) 2010 "Ilya Murav'jov" # This file is distributed under the same license as the bombono-dvd package. # Sergio Zanchetta , 2010. +# msgid "" msgstr "" -"Project-Id-Version: bombono-dvd-0.5.9\n" +"Project-Id-Version: bombono-dvd-0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-03 00:13+0400\n" -"PO-Revision-Date: 2010-09-16 23:35+0200\n" +"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"PO-Revision-Date: 2010-10-22 00:19+0200\n" "Last-Translator: Sergio Zanchetta \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural= (n != 1)\n" -#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:200 +#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:202 msgid "Chapter" msgstr "Capitolo" -#: src/mbase/project/media.cpp:112 +#: src/mbase/project/media.cpp:114 #, boost-format msgid "Cant create folder %1% (check permissions)" msgstr "Impossibile creare la cartella %1% (verificare i permessi)" @@ -27,272 +29,276 @@ msgid "Menu" msgstr "Menù" -#: src/mgui/dvdimport.cpp:82 +#: src/mgui/dvdimport.cpp:83 msgid "Choose Source DVD-Video" msgstr "Scegli sorgente DVD-Video" -#: src/mgui/dvdimport.cpp:85 +#: src/mgui/dvdimport.cpp:86 msgid "Select Videos to Import" -msgstr "Selezionare video da importare" +msgstr "Selezionare i video da importare" -#: src/mgui/dvdimport.cpp:88 +#: src/mgui/dvdimport.cpp:89 msgid "Select Folder to Save Videos" -msgstr "Selezionare cartella in cui salvare i video" +msgstr "Selezionare la cartella in cui salvare i video" -#: src/mgui/dvdimport.cpp:91 +#: src/mgui/dvdimport.cpp:92 msgid "Importing..." msgstr "Importazione..." -#: src/mgui/dvdimport.cpp:94 +#: src/mgui/dvdimport.cpp:95 msgid "Import is completed." msgstr "Importazione completata." -#: src/mgui/dvdimport.cpp:207 src/mgui/project/mconstructor.cpp:824 +#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:527 msgid "MB" msgstr "MB" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Select All" msgstr "Seleziona tutto" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Unselect All" msgstr "Deseleziona tutto" #. мы не можем пустить исключение здесь, потому что оно пойдет #. и через C-шный код (Gtk) - отложим -#: src/mgui/dvdimport.cpp:410 +#: src/mgui/dvdimport.cpp:411 msgid "Are you sure to stop importing?" msgstr "Fermare l'importazione?" -#: src/mgui/dvdimport.cpp:443 +#: src/mgui/dvdimport.cpp:444 #, boost-format msgid "Cant write to folder %1% (check permissions)." msgstr "Impossibile scrivere nella cartella %1% (verificare i permessi)." -#: src/mgui/dvdimport.cpp:471 src/mgui/win_utils.cpp:319 +#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:322 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "Esiste già un file con il nome «%1%». Sostituirlo?" -#: src/mgui/dvdimport.cpp:504 +#: src/mgui/dvdimport.cpp:505 msgid "Import error!" msgstr "Errore di importazione." -#: src/mgui/dvdimport.cpp:508 +#: src/mgui/dvdimport.cpp:509 msgid "Videos successfully imported." msgstr "Video importati con successo." -#: src/mgui/dvdimport.cpp:509 +#: src/mgui/dvdimport.cpp:510 msgid "Import has been interrupted." msgstr "L'importazione è stata interrotta." -#: src/mgui/dvdimport.cpp:543 +#: src/mgui/dvdimport.cpp:544 msgid "DVD-Video Import" msgstr "Importazione DVD-Video" -#: src/mgui/dvdimport.cpp:566 +#: src/mgui/dvdimport.cpp:567 msgid "Choose DVD disc, DVD folder or iso image file." msgstr "Scegliere un disco, una cartella DVD oppure un file immagine ISO." -#: src/mgui/dvdimport.cpp:584 +#: src/mgui/dvdimport.cpp:585 msgid "NTSC/PAL mismatch. Try another disc or import to project of corresponding type." msgstr "Corrispondenza NTSC/PAL non trovata. Provare un'altro disco o importare in un progetto di tipo corrispondente." #. имя -#: src/mgui/dvdimport.cpp:608 src/mgui/project/media-browser.cpp:217 +#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:219 msgid "Name" msgstr "Nome" -#: src/mgui/dvdimport.cpp:621 +#: src/mgui/dvdimport.cpp:622 msgid "Details" msgstr "Dettagli" -#: src/mgui/dvdimport.cpp:667 +#: src/mgui/dvdimport.cpp:668 msgid "It is desirable the destination folder to be empty." msgstr "È consigliabile che la cartella di destinazione sia vuota." #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:27 +#: src/mgui/execution.cpp:52 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "Annullare il processo di %1%?" -#: src/mgui/mux.cpp:29 +#: src/mgui/execution.cpp:411 +#, boost-format +msgid "exit code = %1%" +msgstr "codice di uscita = %1%" + +#: src/mgui/execution.cpp:413 +#, boost-format +msgid "broken by signal %1%" +msgstr "interrotto dal segnale %1%" + +#: src/mgui/mux.cpp:50 msgid "muxing" msgstr "muxing" -#: src/mgui/mux.cpp:45 +#: src/mgui/mux.cpp:66 #, boost-format msgid "Muxing \"%1%\"" msgstr "Muxing di «%1%»" -#: src/mgui/mux.cpp:56 src/mgui/author/output.cpp:229 +#: src/mgui/mux.cpp:77 src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "Mostra/_Nascondi dettagli" -#: src/mgui/mux.cpp:80 +#: src/mgui/mux.cpp:101 msgid "Muxing error" msgstr "Errore di muxing" -#: src/mgui/mux.cpp:81 src/mgui/author/output.cpp:632 +#: src/mgui/mux.cpp:102 src/mgui/author/output.cpp:654 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "Il motivo è «%1%» (consultare i dettagli)" -#: src/mgui/mux.cpp:97 +#: src/mgui/mux.cpp:118 msgid "Select a folder" msgstr "Seleziona una cartella" -#: src/mgui/mux.cpp:109 -#, fuzzy +#: src/mgui/mux.cpp:130 msgid "in" -msgstr "Collegamento" +msgstr "in" -#: src/mgui/mux.cpp:143 +#: src/mgui/mux.cpp:164 msgid "Mux streams" -msgstr "Fa il mux degli stream" +msgstr "Mux degli stream" -#: src/mgui/mux.cpp:145 +# Output in generale è stato tradotto come destinazione. +# In questo caso indica il nome da fornire per il file generato dell'operazione di mux. +#: src/mgui/mux.cpp:166 msgid "Output" -msgstr "Destinazione" +msgstr "Nome file" -#: src/mgui/mux.cpp:146 +#: src/mgui/mux.cpp:167 msgid "Select elementary video" -msgstr "Selezionare video elementare" +msgstr "Seleziona video" -#: src/mgui/mux.cpp:147 +#: src/mgui/mux.cpp:168 msgid "Select audio" msgstr "Seleziona audio" #. Названия типов для i18n -#: src/mgui/mux.cpp:151 src/mgui/project/media-browser.cpp:199 +#: src/mgui/mux.cpp:172 src/mgui/project/media-browser.cpp:201 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "Video" -#: src/mgui/mux.cpp:154 +#: src/mgui/mux.cpp:175 msgid "MPEG2 elementary video (m2v)" msgstr "Video MPEG2 (m2v)" -#: src/mgui/mux.cpp:159 +#: src/mgui/mux.cpp:180 msgid "Audio" msgstr "Audio" -#: src/mgui/mux.cpp:162 src/mgui/timeline/mviewer.cpp:271 +#: src/mgui/mux.cpp:183 src/mgui/timeline/mviewer.cpp:281 msgid "Audio for DVD" msgstr "Audio per DVD" -#: src/mgui/mux.cpp:187 +#: src/mgui/mux.cpp:208 msgid "Elementary video file is not selected." -msgstr "Il file video non è selezionato" +msgstr "Il file video non è selezionato." -#: src/mgui/mux.cpp:189 +#: src/mgui/mux.cpp:210 msgid "Audio file is not selected." msgstr "Il file audio non è selezionato." -#: src/mgui/mux.cpp:191 +#: src/mgui/mux.cpp:212 msgid "Output file name is empty." msgstr "Il nome del file di destinazione è vuoto." -#: src/mgui/prefs.cpp:98 +#: src/mgui/prefs.cpp:143 msgid "Bombono DVD Preferences" msgstr "Preferenze di Bombono DVD" -#: src/mgui/prefs.cpp:111 -#, fuzzy -msgid "_Default Project Type" -msgstr "_Tipo di progetto predefinito" - -#: src/mgui/prefs.cpp:116 -msgid "_Play Authoring Result in" -msgstr "" +#: src/mgui/prefs.cpp:157 +msgid "_Default project type" +msgstr "_Tipo predefinito di progetto" + +#: src/mgui/prefs.cpp:160 +msgid "Default _folder for authoring" +msgstr "_Cartella predefinita per i video" + +#: src/mgui/prefs.cpp:165 +msgid "_Play authoring result in" +msgstr "_Riproduci i video con" -#: src/mgui/win_utils.cpp:322 +#: src/mgui/win_utils.cpp:325 msgid "Replacing the file overwrite its contents." msgstr "Sostituendo il file il suo contenuto verrà sovrascritto." -#: src/mgui/author/burn.cpp:198 +#: src/mgui/author/burn.cpp:199 msgid "Auto" -msgstr "Automatico" +msgstr "Automatica" -#: src/mgui/author/burn.cpp:210 +#: src/mgui/author/burn.cpp:211 msgid "Update speeds ..." -msgstr "Aggiornamento velocità..." +msgstr "Aggiorna velocità..." -#: src/mgui/author/burn.cpp:331 +#: src/mgui/author/burn.cpp:332 msgid "Checking Disc ..." -msgstr "Verifica del disco..." +msgstr "verifica del disco..." -#: src/mgui/author/burn.cpp:345 +#: src/mgui/author/burn.cpp:346 msgid "Selected burn drive is for CD discs only. Change to another burn drive." -msgstr "L'unità di masterizzazione selezionata è solo per dischi CD. Selezionare un'altra unità." +msgstr "L'unità di masterizzazione selezionata è solo per CD. Selezionare un'altra unità." -#: src/mgui/author/burn.cpp:350 +#: src/mgui/author/burn.cpp:351 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." -msgstr "Nell'unità è presente un disco CD, non un DVD. Cambiare il disco." +msgstr "Nell'unità è presente un CD, non un DVD. Cambiare il disco." -#: src/mgui/author/burn.cpp:355 +#: src/mgui/author/burn.cpp:356 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "Nessun disco DVD nell'unità. Caricare un disco vuoto e premere OK." -#: src/mgui/author/burn.cpp:360 +#: src/mgui/author/burn.cpp:361 #, boost-format msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." msgstr "Nell'unità è presente un disco «%1%» ma per i DVD-Video i dischi devono essere di tipo DVD-R, DVD+R, DVD-RW oppure DVD+RW. Caricare un disco vuoto del tipo corretto e premere OK." -#: src/mgui/author/burn.cpp:369 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "Il disco «%1%» presente nell'unità non è vuoto. Per masterizzare DVD-Video possono essere usati solo dischi registrabili vuoti. Caricare un disco vuoto e premere OK." -#: src/mgui/author/burn.cpp:376 +#: src/mgui/author/burn.cpp:377 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" msgstr "Il disco «%1%» presente nell'unità non è vuoto. È necessario cancellarne il contenuto prima di una nuova scrittura. Continuare?" -#: src/mgui/author/burn.cpp:380 +#: src/mgui/author/burn.cpp:381 msgid "_Cancel" msgstr "_Annulla" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:382 msgid "_Try again" msgstr "_Prova ancora" -#: src/mgui/author/execute.cpp:72 +#: src/mgui/author/execute.cpp:62 msgid "Status: " -msgstr "Stato:" - -#: src/mgui/author/execute.cpp:568 -#, boost-format -msgid "exit code = %1%" -msgstr "codice di uscita = %1%" +msgstr "Stato: " -#: src/mgui/author/execute.cpp:570 -#, boost-format -msgid "broken by signal %1%" -msgstr "interrotto dal segnale %1%" - -#: src/mgui/author/indicator.cpp:67 +#: src/mgui/author/indicator.cpp:66 msgid "Rendering Menus" -msgstr "Rendering dei menù" +msgstr "rendering dei menù" -#: src/mgui/author/indicator.cpp:68 +#: src/mgui/author/indicator.cpp:67 msgid "Generating DVD-Video" -msgstr "Generazione del DVD-Video" +msgstr "generazione del DVD-Video" -#: src/mgui/author/indicator.cpp:69 +#: src/mgui/author/indicator.cpp:68 msgid "Creating ISO Image" -msgstr "Creazione dell'immagine ISO" +msgstr "creazione dell'immagine ISO" -#: src/mgui/author/indicator.cpp:70 +#: src/mgui/author/indicator.cpp:69 msgid "Burning DVD" -msgstr "Masterizzazione DVD" +msgstr "masterizzazione del DVD" #: src/mgui/author/output.cpp:53 msgid "DVD-Video Building" -msgstr "Creazione del DVD-Video" +msgstr "creazione del DVD-Video" #: src/mgui/author/output.cpp:63 #, boost-format @@ -305,454 +311,312 @@ #: src/mgui/author/output.cpp:161 msgid "Select Output _Folder:" -msgstr "Selezionare _cartella di destinazione:" +msgstr "Selezionare la _cartella di destinazione:" -#: src/mgui/author/output.cpp:175 +#: src/mgui/author/output.cpp:177 msgid " Choose Author Mode: " msgstr " Scegliere la modalità di scrittura: " #. цель по умолчанию -#: src/mgui/author/output.cpp:181 +#: src/mgui/author/output.cpp:183 msgid "_Write DVD Folder" msgstr "_Crea cartella DVD" -#: src/mgui/author/output.cpp:182 +#: src/mgui/author/output.cpp:184 msgid "Write Disk _Image" msgstr "Crea _immagine disco" -#: src/mgui/author/output.cpp:191 +#: src/mgui/author/output.cpp:193 msgid "Disc Label: " -msgstr "Etichetta disco:" +msgstr "Etichetta disco: " -#: src/mgui/author/output.cpp:196 +#: src/mgui/author/output.cpp:198 msgid "Burn to _DVD" msgstr "Masterizza su _DVD" -#: src/mgui/author/output.cpp:204 +#: src/mgui/author/output.cpp:206 msgid "DVD Drive: " -msgstr "Unità DVD:" +msgstr "Unità DVD: " -#: src/mgui/author/output.cpp:210 +#: src/mgui/author/output.cpp:212 msgid "Writing Speed: " -msgstr "Velocità di scrittura:" +msgstr "Velocità di scrittura: " -#: src/mgui/author/output.cpp:221 +#: src/mgui/author/output.cpp:223 msgid "_Rendering only" msgstr "Solo _rendering" -#: src/mgui/author/output.cpp:275 +#: src/mgui/author/output.cpp:277 msgid "Rendering" -msgstr "Rendering" +msgstr "rendering" -#: src/mgui/author/output.cpp:352 +#: src/mgui/author/output.cpp:354 msgid "DVD Burning" -msgstr "Masterizzazione DVD" +msgstr "masterizzazione del DVD" -#: src/mgui/author/output.cpp:396 +#: src/mgui/author/output.cpp:398 msgid "The result is here" msgstr "Il risultato si trova qui" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:400 msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." msgstr "È possibile avviare manualmente la creazione del DVD eseguendo il comando «scons» nella cartella specificata. Consultare inoltre il file README per altre opzioni." #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:422 +#: src/mgui/author/output.cpp:424 msgid "Authoring is cancelled." msgstr "Creazione del DVD annullata." -#: src/mgui/author/output.cpp:433 +#: src/mgui/author/output.cpp:435 #, boost-format msgid "%1% is not a folder" msgstr "%1% non è una cartella" -#: src/mgui/author/output.cpp:444 +#: src/mgui/author/output.cpp:446 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "Impossibile avere accesso completo alla cartella %1% (lettura, scrittura)" -#: src/mgui/author/output.cpp:452 +#: src/mgui/author/output.cpp:454 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before authoring.\n" "Continue?" msgstr "" -"La cartella %1% non è vuota. È necessario rimuovere tutti i file che sono contenuti prima della creazione del DVD.\n" +"La cartella %1% non è vuota. È necessario rimuovere tutti i file che vi sono contenuti prima della creazione del DVD.\n" "Continuare?" -#: src/mgui/author/output.cpp:458 +#: src/mgui/author/output.cpp:460 #, boost-format msgid "Error during removing files: %1%" msgstr "Errore durante la rimozione dei file: %1%" -#: src/mgui/author/output.cpp:629 +#: src/mgui/author/output.cpp:651 #, boost-format msgid "%1% cancelled." -msgstr "%1% annullata." +msgstr "Operazione di %1% annullata." -#: src/mgui/author/output.cpp:631 +#: src/mgui/author/output.cpp:653 #, boost-format msgid "%1% broken." -msgstr "%1% interrotta." +msgstr "Operazione di %1% interrotta." #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:638 +#: src/mgui/author/output.cpp:660 #, boost-format msgid "%1% successfully completed." -msgstr "%1% completato con successo." +msgstr "Operazione di %1% completata con successo." -#: src/mgui/author/output.cpp:668 src/mgui/timeline/select.cpp:216 +#: src/mgui/author/output.cpp:690 src/mgui/timeline/select.cpp:239 #, boost-format msgid "_Play in %1%" -msgstr "_Riproduci in %1%" +msgstr "_Riproduci con %1%" -#: src/mgui/author/output.cpp:669 +#: src/mgui/author/output.cpp:691 msgid "_Burn to DVD" msgstr "_Masterizza su DVD" -#: src/mgui/author/script.cpp:392 +#: src/mgui/author/script.cpp:391 msgid "There is no media (video or menu)." msgstr "Non ci sono contenuti (video o menù)." -#: src/mgui/author/script.cpp:557 +#: src/mgui/author/script.cpp:556 #, boost-format msgid "external command failure: %1%" msgstr "esecuzione comando esterno non riuscita: %1%" -#: src/mgui/editor/select.cpp:499 +#: src/mgui/editor/select.cpp:599 msgid "Delete" msgstr "Elimina" -#: src/mgui/editor/select.cpp:513 +#: src/mgui/editor/select.cpp:613 msgid "Link" -msgstr "Collegamento" +msgstr "Aggiungi collegamento" -#: src/mgui/editor/select.cpp:517 +#: src/mgui/editor/select.cpp:617 msgid "Remove Link" msgstr "Rimuovi collegamento" #. Poster Link -#: src/mgui/editor/select.cpp:521 +#: src/mgui/editor/select.cpp:621 msgid "Set Poster" -msgstr "" +msgstr "Imposta locandina" -#: src/mgui/editor/select.cpp:530 +#: src/mgui/editor/select.cpp:630 msgid "Align" msgstr "Allinea" -#: src/mgui/editor/select.cpp:538 +#: src/mgui/editor/select.cpp:638 msgid "Align Left" msgstr "Allinea a sinistra" -#: src/mgui/editor/select.cpp:539 +#: src/mgui/editor/select.cpp:639 msgid "Align Right" msgstr "Allinea a destra" -#: src/mgui/editor/select.cpp:540 +#: src/mgui/editor/select.cpp:640 msgid "Align Top" msgstr "Allinea in alto" -#: src/mgui/editor/select.cpp:541 +#: src/mgui/editor/select.cpp:641 msgid "Align Bottom" msgstr "Allinea in basso" -#: src/mgui/editor/select.cpp:544 +#: src/mgui/editor/select.cpp:644 msgid "Center Horizontally" msgstr "Centra orizzontalmente" -#: src/mgui/editor/select.cpp:545 +#: src/mgui/editor/select.cpp:645 msgid "Center Vertically" msgstr "Centra verticalmente" +#: src/mgui/editor/select.cpp:650 +msgid "Distribute Horizontally" +msgstr "Distribuisci orizzontalmente" + +#: src/mgui/editor/select.cpp:651 +msgid "Distribute Vertically" +msgstr "Distribuisci verticalmente" + #. Set Background Color -#: src/mgui/editor/select.cpp:550 src/mgui/editor/select.cpp:802 +#: src/mgui/editor/select.cpp:656 src/mgui/editor/select.cpp:908 msgid "Set Background Color..." msgstr "Imposta colore di sfondo..." #. Selection Tool -#: src/mgui/editor/toolbar.cpp:129 +#: src/mgui/editor/toolbar.cpp:135 msgid "Selection Tool" msgstr "Strumento selezione" #. Text Tool -#: src/mgui/editor/toolbar.cpp:132 +#: src/mgui/editor/toolbar.cpp:138 msgid "Text Tool" msgstr "Strumento testo" -#: src/mgui/editor/toolbar.cpp:493 +#: src/mgui/editor/toolbar.cpp:495 msgid "Add Item" -msgstr "Aggiunge elemento" +msgstr "Aggiunge un elemento" -#: src/mgui/editor/toolbar.cpp:515 +#: src/mgui/editor/toolbar.cpp:517 msgid "Font Name" msgstr "Tipo di carattere" -#: src/mgui/editor/toolbar.cpp:531 +#: src/mgui/editor/toolbar.cpp:533 msgid "Font Size" -msgstr "Dimensione carattere" +msgstr "Dimensione del carattere" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:536 +#: src/mgui/editor/toolbar.cpp:538 msgid "Bold" msgstr "Grassetto" -#: src/mgui/editor/toolbar.cpp:537 +#: src/mgui/editor/toolbar.cpp:539 msgid "Italic" msgstr "Corsivo" -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:540 msgid "Underline" msgstr "Sottolineato" -#: src/mgui/editor/toolbar.cpp:547 +#: src/mgui/editor/toolbar.cpp:549 msgid "Pick a Color for Text" msgstr "Preleva un colore per il testo" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:551 msgid "Text Color" msgstr "Colore del testo" -#: src/mgui/editor/toolbar.cpp:561 +#: src/mgui/editor/toolbar.cpp:563 msgid "Show Safe Area" -msgstr "" - -#: src/mgui/project/browser.cpp:128 -#, boost-format -msgid "Do you really want to delete \"%1%\" from Media List?" -msgstr "Eliminare «%1%» dall'elenco dei contenuti?" - -#: src/mgui/project/browser.cpp:129 -#, boost-format -msgid "Do you really want to delete chapter \"%1%\"?" -msgstr "Eliminare il capitolo «%1%»?" +msgstr "Mostra area di visibilità" -#: src/mgui/project/browser.cpp:130 -#, boost-format -msgid "Do you really want to delete menu \"%1%\"?" -msgstr "Eliminare il menù «%1%»?" - -#: src/mgui/project/browser.cpp:242 -msgid "First-Play media can be Video or Menu only." -msgstr "Il primo contenuto da riprodurre può essere solamente un video oppure un menù." - -#: src/mgui/project/mconstructor.cpp:132 -msgid "Save Project As..." -msgstr "Salva progetto come..." - -#: src/mgui/project/mconstructor.cpp:169 -#, boost-format -msgid "Cant open project file \"%1%\"" -msgstr "Impossibile aprire il file di progetto «%1%»" - -#: src/mgui/project/mconstructor.cpp:465 -msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" -msgstr "Bombono DVD è un programma di creazione DVD con un'interfaccia carina e semplice" - -#. dlg.set_authors(authors); -#. dlg.set_documenters(documenters); -#. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:470 -msgid "translator-credits" -msgstr "Sergio Zanchetta " - -#: src/mgui/project/mconstructor.cpp:611 -#, boost-format -msgid "Save changes to \"%1%\"?" -msgstr "Salvare le modifiche a «%1%»?" - -#: src/mgui/project/mconstructor.cpp:613 -msgid "Close _without Saving" -msgstr "Chiudi _senza salvare" - -#: src/mgui/project/mconstructor.cpp:653 -msgid "New Project" -msgstr "Nuovo progetto" - -#: src/mgui/project/mconstructor.cpp:662 -msgid "Please select a Television standard for your project:" -msgstr "Selezionare uno standard televisivo per il progetto:" - -#: src/mgui/project/mconstructor.cpp:687 -msgid "Open Project" -msgstr "Apri progetto" - -#: src/mgui/project/mconstructor.cpp:691 -msgid "Project files (*.xml)" -msgstr "File di progetto (*.xml)" - -#: src/mgui/project/mconstructor.cpp:696 src/mgui/timeline/mviewer.cpp:273 -msgid "All Files (*.*)" -msgstr "Tutti i file (*.*)" - -#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически -#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero -#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:824 -msgid "KB" -msgstr "KB" - -#: src/mgui/project/mconstructor.cpp:824 -msgid "GB" -msgstr "GB" - -#. Project -#: src/mgui/project/mconstructor.cpp:935 -msgid "_Project" -msgstr "_Progetto" - -#: src/mgui/project/mconstructor.cpp:940 -msgid "_New Project" -msgstr "_Nuovo progetto" - -#: src/mgui/project/mconstructor.cpp:942 -msgid "_Open..." -msgstr "_Apri..." - -#: src/mgui/project/mconstructor.cpp:944 -msgid "_Save" -msgstr "_Salva" - -#: src/mgui/project/mconstructor.cpp:946 -msgid "Save _As..." -msgstr "Salva _come..." - -#: src/mgui/project/mconstructor.cpp:948 -msgid "_Quit" -msgstr "_Esci" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "Add Videos from _DVD" -msgstr "Aggiungi video da _DVD" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "DVD-Import Assistant" -msgstr "Assistente di importazione DVD" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "_Mux" -msgstr "_Mux" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "Mux Elementary Streams into MPEG2" -msgstr "Fa il mux degli stream in MPEG2" - -#: src/mgui/project/mconstructor.cpp:954 -msgid "Pr_eferences" -msgstr "Pr_eferenze" - -#. Go -#: src/mgui/project/mconstructor.cpp:993 -msgid "_Go" -msgstr "_Vai a" - -#. первый вставляем сразу -#. Help -#: src/mgui/project/mconstructor.cpp:999 -msgid "_Help" -msgstr "A_iuto" - -#: src/mgui/project/mconstructor.cpp:1100 -msgctxt "MainTabs" -msgid "_Source" -msgstr "_Sorgente" - -#: src/mgui/project/mconstructor.cpp:1102 -msgctxt "MainTabs" -msgid "_Menu" -msgstr "_Menù" - -#: src/mgui/project/mconstructor.cpp:1104 -msgctxt "MainTabs" -msgid "_Output" -msgstr "_Destinazione" - -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "yes" msgstr "sì" -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "no" msgstr "no" -#: src/mgui/project/mb-actions.cpp:191 +#: src/mgui/project/add.cpp:86 msgid "Video bitrate" msgstr "Bitrate del video" -#: src/mgui/project/mb-actions.cpp:192 +#: src/mgui/project/add.cpp:87 msgid "kbps" msgstr "kbps" -#: src/mgui/project/mb-actions.cpp:193 +#: src/mgui/project/add.cpp:88 msgid "Maximum data rate for video (9800 kbps) is exceeded." msgstr "Superato il bitrate video massimo (9800 kbps)." -#: src/mgui/project/mb-actions.cpp:196 +#: src/mgui/project/add.cpp:91 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with resolutions: %2% only." msgstr "Il DVD-Video %1% può accettare solo MPEG-2 con risoluzione %2%." -#: src/mgui/project/mb-actions.cpp:197 +#: src/mgui/project/add.cpp:92 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with frame rate: %2% only." msgstr "Il DVD-Video %1% può accettare solo MPEG-2 con %2% fotogrammi al secondo." -#: src/mgui/project/mb-actions.cpp:198 +#: src/mgui/project/add.cpp:93 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with aspects 4:3, 16:9 only." msgstr "Il DVD-Video %1% può accettare solo MPEG-2 di formato 4:3 oppure 16:9." -#: src/mgui/project/mb-actions.cpp:218 +#: src/mgui/project/add.cpp:113 msgid "Video size" -msgstr "Dimensione video" +msgstr "Dimensione del video" -#: src/mgui/project/mb-actions.cpp:238 +#: src/mgui/project/add.cpp:133 msgid "Frame rate" msgstr "Fotogrammi al secondo" -#: src/mgui/project/mb-actions.cpp:239 +#: src/mgui/project/add.cpp:134 msgid "fps" msgstr "fps" -#: src/mgui/project/mb-actions.cpp:247 +#: src/mgui/project/add.cpp:142 msgid "Aspect ratio" -msgstr "Proporzioni" +msgstr "Formato" -#: src/mgui/project/mb-actions.cpp:322 +#: src/mgui/project/add.cpp:217 msgid "Bombono DVD can use \"DVD-ready\" video only now. Use muxing programs like \"mplex -f 8\" (from mjpegtools), mencoder (from mplayer) or transcode to make your video ready for Bombono DVD." -msgstr "Per ora Bombono DVD supporta solo video «DVD-ready». Usare programmi di muxing tipo «mplex -f 8» (da mjpegtools), mencoder (da mplayer) oppure transcode per rendere i propri video adatti a Bombono DVD." +msgstr "Attualmente Bombono DVD supporta solo video «DVD-ready». Usare programmi di muxing tipo «mplex -f 8» (da mjpegtools), mencoder (da mplayer) oppure transcode per rendere i propri video adatti a Bombono DVD." -#: src/mgui/project/mb-actions.cpp:326 +#: src/mgui/project/add.cpp:221 msgid "DVD packs" msgstr "Pacchetti DVD" -#: src/mgui/project/mb-actions.cpp:328 +#: src/mgui/project/add.cpp:223 msgid "NAV packets" msgstr "Pacchetti NAV" -#: src/mgui/project/mb-actions.cpp:334 +#: src/mgui/project/add.cpp:229 msgid "This video may not be added due to (errors in red color):" -msgstr "Questo video non può essere aggiunto a causa di (errori in colore rosso):" +msgstr "Questo video non può essere aggiunto. Vedere gli errori in colore rosso:" #. подскажем пользователю, что он ошибся форматом проекта -#: src/mgui/project/mb-actions.cpp:345 +#: src/mgui/project/add.cpp:240 #, boost-format msgid "This video has %1% type and can't be added to current project of %2% type. Create new project from menu \"Project->New Project\" with right type." -msgstr "Questo video è di tipo %1% e non può essere aggiunto al progetto corrente che è di tipo %2%. Creare un nuovo progetto dal menù «Progetto->Nuovo progetto» di tipo corretto." +msgstr "Questo video è di tipo %1% e non può essere aggiunto al progetto corrente che è di tipo %2%. Creare un nuovo progetto di tipo corretto dal menù «Progetto→Nuovo progetto»." -#: src/mgui/project/mb-actions.cpp:373 +#: src/mgui/project/add.cpp:269 msgid "File doesn't exist." msgstr "Il file non esiste." -#: src/mgui/project/mb-actions.cpp:378 +#: src/mgui/project/add.cpp:274 msgid "Folders can't be added." msgstr "Le cartelle non possono essere aggiunte." #. по расширению выводим наиболее вероятную ошибку -#: src/mgui/project/mb-actions.cpp:413 +#: src/mgui/project/add.cpp:309 msgid "Unknown file type." msgstr "Tipo di file sconosciuto." -#: src/mgui/project/mb-actions.cpp:631 +#: src/mgui/project/add.cpp:379 #, boost-format msgid "" "The file \"%1%\" looks like VOB from DVD.\n" @@ -761,52 +625,148 @@ "Il file «%1%» sembra essere un VOB di un DVD.\n" "Eseguire l'importazione?" -#: src/mgui/project/mb-actions.cpp:648 +#: src/mgui/project/add.cpp:396 #, boost-format msgid "The file \"%1%\" looks like elementary stream and need to be muxed before using. Run muxing?" msgstr "Il file «%1%» sembra essere uno stream elementare e bisogna effettuarne il mux prima di usarlo. Eseguire il mux?" -#: src/mgui/project/mb-actions.cpp:710 +#: src/mgui/project/add.cpp:458 msgid "Also:" msgstr "Anche:" -#: src/mgui/project/mb-actions.cpp:719 +#: src/mgui/project/add.cpp:471 #, boost-format msgid "See more about preparing video for authoring in online help." msgstr "Per maggiori informazioni riguardo la preparazione dei video per la creazione dei DVD consultare la guida online." -#: src/mgui/project/mb-actions.cpp:727 +#: src/mgui/project/add.cpp:482 #, boost-format msgid "Can't add file \"%1%\"." msgstr "Impossibile aggiungere il file «%1%»." -#: src/mgui/project/mb-actions.cpp:730 +#: src/mgui/project/add.cpp:484 msgid "Can't add files:" msgstr "Impossibile aggiungere i file:" -#: src/mgui/project/media-browser.cpp:146 +#: src/mgui/project/browser.cpp:128 +#, boost-format +msgid "Do you really want to delete \"%1%\" from Media List?" +msgstr "Eliminare «%1%» dall'elenco dei contenuti?" + +#: src/mgui/project/browser.cpp:129 +#, boost-format +msgid "Do you really want to delete chapter \"%1%\"?" +msgstr "Eliminare il capitolo «%1%»?" + +#: src/mgui/project/browser.cpp:130 +#, boost-format +msgid "Do you really want to delete menu \"%1%\"?" +msgstr "Eliminare il menù «%1%»?" + +#: src/mgui/project/browser.cpp:242 +msgid "First-Play media can be Video or Menu only." +msgstr "Il primo contenuto da riprodurre può essere solamente un video oppure un menù." + +#: src/mgui/project/mconstructor.cpp:335 +msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" +msgstr "Bombono DVD è un programma di creazione DVD con un'interfaccia carina e semplice" + +#. dlg.set_authors(authors); +#. dlg.set_documenters(documenters); +#. dlg.set_decorated(false); +#: src/mgui/project/mconstructor.cpp:340 +msgid "translator-credits" +msgstr "Sergio Zanchetta " + +#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически +#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero +#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) +#: src/mgui/project/mconstructor.cpp:527 +msgid "KB" +msgstr "kB" + +#: src/mgui/project/mconstructor.cpp:527 +msgid "GB" +msgstr "GB" + +#. Project +#: src/mgui/project/mconstructor.cpp:635 +msgid "_Project" +msgstr "_Progetto" + +#: src/mgui/project/mconstructor.cpp:642 +msgid "_Quit" +msgstr "_Esci" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "Add Videos from _DVD" +msgstr "Aggiungi video da _DVD" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "DVD-Import Assistant" +msgstr "Assistente di importazione DVD" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "_Mux" +msgstr "_Mux" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "Mux Elementary Streams into MPEG2" +msgstr "Esegue il mux degli stream in MPEG2" + +#: src/mgui/project/mconstructor.cpp:648 +msgid "Pr_eferences" +msgstr "Pr_eferenze" + +#. Go +#: src/mgui/project/mconstructor.cpp:687 +msgid "_Go" +msgstr "_Vai a" + +#. первый вставляем сразу +#. Help +#: src/mgui/project/mconstructor.cpp:693 +msgid "_Help" +msgstr "A_iuto" + +#: src/mgui/project/mconstructor.cpp:818 +msgctxt "MainTabs" +msgid "_Source" +msgstr "_Sorgente" + +#: src/mgui/project/mconstructor.cpp:820 +msgctxt "MainTabs" +msgid "_Menu" +msgstr "_Menù" + +#: src/mgui/project/mconstructor.cpp:822 +msgctxt "MainTabs" +msgid "_Output" +msgstr "_Destinazione" + +#: src/mgui/project/media-browser.cpp:148 msgid "Previous Menu" msgstr "Menù precedente" -#: src/mgui/project/media-browser.cpp:146 #: src/mgui/project/media-browser.cpp:148 +#: src/mgui/project/media-browser.cpp:150 msgid "Next Video" -msgstr "Prossimo video" +msgstr "Video successivo" -#: src/mgui/project/media-browser.cpp:147 +#: src/mgui/project/media-browser.cpp:149 #, boost-format msgid "Auto (%1%)" msgstr "Auto (%1%)" -#: src/mgui/project/media-browser.cpp:177 +#: src/mgui/project/media-browser.cpp:179 msgid "End Action" -msgstr "" +msgstr "Azione successiva" -#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/project/media-browser.cpp:203 msgid "Still Picture" -msgstr "Fermo immagine" +msgstr "Immagine" -#: src/mgui/project/media-browser.cpp:233 +#: src/mgui/project/media-browser.cpp:235 msgid "Type" msgstr "Tipo" @@ -816,97 +776,159 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:291 -#: src/mgui/project/menu-browser.cpp:373 +#: src/mgui/project/media-browser.cpp:293 +#: src/mgui/project/menu-browser.cpp:374 msgid "Media List" msgstr "Elenco contenuti" -#: src/mgui/project/media-browser.cpp:331 +#: src/mgui/project/media-browser.cpp:333 msgid "Add Media from File Browser" msgstr "Aggiunge un contenuto da «Esplorazione file»" -#: src/mgui/project/media-browser.cpp:340 +#: src/mgui/project/media-browser.cpp:342 msgid "Remove Media" -msgstr "Rimuove contenuto" +msgstr "Rimuove un contenuto" -#: src/mgui/project/media-browser.cpp:351 +#: src/mgui/project/media-browser.cpp:353 msgid "Make Chapters for Video" msgstr "Crea capitoli per il video" -#: src/mgui/project/menu-browser.cpp:190 +#: src/mgui/project/menu-browser.cpp:191 msgid "No Link" msgstr "Nessun collegamento" #. * subj -#: src/mgui/project/menu-browser.cpp:337 +#: src/mgui/project/menu-browser.cpp:338 msgid "Menu List" msgstr "Elenco menù" -#: src/mgui/project/menu-browser.cpp:353 +#: src/mgui/project/menu-browser.cpp:354 msgid "Add Menu" -msgstr "Aggiunge menù" +msgstr "Aggiunge un menù" -#: src/mgui/project/menu-browser.cpp:358 +#: src/mgui/project/menu-browser.cpp:359 msgid "Remove Menu" -msgstr "Rimuove menù" +msgstr "Rimuove un menù" -#: src/mgui/project/menu-browser.cpp:363 +#: src/mgui/project/menu-browser.cpp:364 msgid "Edit Menu" -msgstr "Modifica menù" +msgstr "Modifica un menù" + +#: src/mgui/project/serialize.cpp:61 +msgid "Save Project As..." +msgstr "Salva progetto come..." + +#: src/mgui/project/serialize.cpp:93 +#, boost-format +msgid "Cant open project file \"%1%\"" +msgstr "Impossibile aprire il file di progetto «%1%»" + +#: src/mgui/project/serialize.cpp:166 +#, boost-format +msgid "Save changes to \"%1%\"?" +msgstr "Salvare le modifiche a «%1%»?" + +#: src/mgui/project/serialize.cpp:168 +msgid "Close _without Saving" +msgstr "Chiudi _senza salvare" + +#: src/mgui/project/serialize.cpp:206 +msgid "New Project" +msgstr "Nuovo progetto" + +#: src/mgui/project/serialize.cpp:215 +msgid "Please select a Television standard for your project:" +msgstr "Selezionare uno standard televisivo per il progetto:" + +#: src/mgui/project/serialize.cpp:237 +msgid "Open Project" +msgstr "Apri progetto" + +#: src/mgui/project/serialize.cpp:241 +msgid "Project files (*.xml)" +msgstr "File di progetto (*.xml)" + +#: src/mgui/project/serialize.cpp:246 src/mgui/timeline/mviewer.cpp:283 +msgid "All Files (*.*)" +msgstr "Tutti i file (*.*)" + +#: src/mgui/project/serialize.cpp:308 +msgid "_New Project" +msgstr "_Nuovo progetto" + +#: src/mgui/project/serialize.cpp:310 +msgid "_Open..." +msgstr "_Apri..." + +#: src/mgui/project/serialize.cpp:312 +msgid "_Save" +msgstr "_Salva" + +#: src/mgui/project/serialize.cpp:314 +msgid "Save _As..." +msgstr "Salva _come..." #. Add -#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:193 +#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:216 msgid "Add Chapter Point" msgstr "Aggiungi capitolo" +#: src/mgui/timeline/mviewer.cpp:76 +msgid "Error while opening file:" +msgstr "Errore durante l'apertura del file:" + #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:239 +#: src/mgui/timeline/mviewer.cpp:249 msgid "File Browser" msgstr "Esplorazione file" -#: src/mgui/timeline/mviewer.cpp:269 +#: src/mgui/timeline/mviewer.cpp:279 msgid "All formats" msgstr "Tutti i formati" -#: src/mgui/timeline/mviewer.cpp:270 +#: src/mgui/timeline/mviewer.cpp:280 msgid "MPEG files" msgstr "File MPEG" -#: src/mgui/timeline/mviewer.cpp:272 +#: src/mgui/timeline/mviewer.cpp:282 msgid "Still Images" -msgstr "Immagini fisse" +msgstr "Immagini" + +#: src/mgui/timeline/select.cpp:143 +msgid "A_dd to project" +msgstr "_Aggiungi al progetto" -#: src/mgui/timeline/select.cpp:127 +#: src/mgui/timeline/select.cpp:146 msgid "Save Frame..." msgstr "Salva fotogramma..." #. Add at Intervals -#: src/mgui/timeline/select.cpp:147 src/mgui/timeline/select.cpp:205 +#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:228 msgid "Add Chapter Points at Intervals" msgstr "Aggiungi capitoli a intervalli" -#: src/mgui/timeline/select.cpp:153 +#: src/mgui/timeline/select.cpp:176 msgid "Interval between Chapters:" msgstr "Intervallo tra i capitoli:" -#: src/mgui/timeline/select.cpp:160 +#: src/mgui/timeline/select.cpp:183 msgid "min." msgstr "min." -#: src/mgui/timeline/select.cpp:163 +#: src/mgui/timeline/select.cpp:186 msgid "Remove Existing Chapters" msgstr "Rimuovi capitoli esistenti" #. Delete -#: src/mgui/timeline/select.cpp:196 +#: src/mgui/timeline/select.cpp:219 msgid "Delete Chapter Point" msgstr "Elimina capitolo" #. Delete All -#: src/mgui/timeline/select.cpp:200 +#: src/mgui/timeline/select.cpp:223 msgid "Delete All Chapter Points" msgstr "Elimina tutti i capitoli" -#: src/mgui/timeline/select.cpp:213 +#: src/mgui/timeline/select.cpp:236 msgid "Save Current Frame" msgstr "Salva fotogramma corrente" diff -Nru bombono-dvd-0.7.0/po/ru.po bombono-dvd-0.8.0/po/ru.po --- bombono-dvd-0.7.0/po/ru.po 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/ru.po 2010-11-01 21:58:28.000000000 +0000 @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-08 01:13+0400\n" -"PO-Revision-Date: 2010-10-08 01:19+0300\n" +"POT-Creation-Date: 2010-10-31 20:23+0300\n" +"PO-Revision-Date: 2010-10-31 20:30+0300\n" "Last-Translator: Ilya Murav'jov \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -18,7 +18,7 @@ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/mbase/project/media.cpp:68 -#: src/mgui/project/media-browser.cpp:202 +#: src/mgui/project/media-browser.cpp:223 msgid "Chapter" msgstr "Глава" @@ -27,7 +27,7 @@ msgid "Cant create folder %1% (check permissions)" msgstr "Не удалось создать папку %1% (проверьте права доступа)" -#: src/mbase/project/menu.cpp:276 +#: src/mbase/project/menu.cpp:331 msgid "Menu" msgstr "Меню" @@ -52,7 +52,7 @@ msgstr "Импорт завершён" #: src/mgui/dvdimport.cpp:208 -#: src/mgui/project/mconstructor.cpp:527 +#: src/mgui/project/mconstructor.cpp:540 msgid "MB" msgstr "МБ" @@ -76,7 +76,7 @@ msgstr "Не могу записывать в папку %1% (проверьте права)." #: src/mgui/dvdimport.cpp:472 -#: src/mgui/win_utils.cpp:322 +#: src/mgui/win_utils.cpp:327 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "Файл с именем \"%1%\" уже существует. Заменить его?" @@ -107,7 +107,7 @@ #. имя #: src/mgui/dvdimport.cpp:609 -#: src/mgui/project/media-browser.cpp:219 +#: src/mgui/project/media-browser.cpp:240 msgid "Name" msgstr "Имя" @@ -121,169 +121,170 @@ #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:52 +#: src/mgui/execution.cpp:56 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "Вы собираетесь прекратить %1%. Вы уверены?" -#: src/mgui/execution.cpp:411 +#: src/mgui/execution.cpp:479 #, boost-format msgid "exit code = %1%" msgstr "Код выхода: %1%" -#: src/mgui/execution.cpp:413 +#: src/mgui/execution.cpp:481 #, boost-format msgid "broken by signal %1%" msgstr "прервано по сигналу %1%" -#: src/mgui/mux.cpp:50 +#: src/mgui/mux.cpp:55 msgid "muxing" msgstr "микширование" -#: src/mgui/mux.cpp:66 +#: src/mgui/mux.cpp:71 #, boost-format msgid "Muxing \"%1%\"" msgstr "Микширование \"%1%\"" -#: src/mgui/mux.cpp:77 +#: src/mgui/mux.cpp:82 #: src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "По_казать/скрыть подробности" -#: src/mgui/mux.cpp:101 +#: src/mgui/mux.cpp:105 msgid "Muxing error" msgstr "Ошибка микширования" -#: src/mgui/mux.cpp:102 -#: src/mgui/author/output.cpp:654 +#: src/mgui/mux.cpp:106 +#: src/mgui/author/output.cpp:653 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "Причина \"%1%\" (см. Подробности)" -#: src/mgui/mux.cpp:118 +#: src/mgui/mux.cpp:122 msgid "Select a folder" msgstr "Выберите папку назначения" -#: src/mgui/mux.cpp:130 +#: src/mgui/mux.cpp:134 msgid "in" msgstr "в" -#: src/mgui/mux.cpp:164 +#: src/mgui/mux.cpp:168 msgid "Mux streams" -msgstr "Микшировать видео и аудио" +msgstr "Микшировать видео и звук" -#: src/mgui/mux.cpp:166 +#: src/mgui/mux.cpp:170 msgid "Output" msgstr "Результат" -#: src/mgui/mux.cpp:167 +#: src/mgui/mux.cpp:171 msgid "Select elementary video" msgstr "Выберите видеодорожку" -#: src/mgui/mux.cpp:168 +#: src/mgui/mux.cpp:172 msgid "Select audio" msgstr "Выберите аудиодорожку" #. Названия типов для i18n -#: src/mgui/mux.cpp:172 -#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/mux.cpp:176 +#: src/mgui/project/media-browser.cpp:222 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "Видео" -#: src/mgui/mux.cpp:175 +#: src/mgui/mux.cpp:179 msgid "MPEG2 elementary video (m2v)" msgstr "MPEG2-видео (m2v)" -#: src/mgui/mux.cpp:180 +#: src/mgui/mux.cpp:184 +#: src/mgui/project/menu-browser.cpp:406 msgid "Audio" -msgstr "Аудио" +msgstr "Звук" -#: src/mgui/mux.cpp:183 -#: src/mgui/timeline/mviewer.cpp:281 +#: src/mgui/mux.cpp:187 +#: src/mgui/timeline/mviewer.cpp:282 msgid "Audio for DVD" -msgstr "Аудио для DVD" +msgstr "Звук для DVD" -#: src/mgui/mux.cpp:208 +#: src/mgui/mux.cpp:212 msgid "Elementary video file is not selected." msgstr "Файл видеодорожки не выбран." -#: src/mgui/mux.cpp:210 +#: src/mgui/mux.cpp:214 msgid "Audio file is not selected." msgstr "Файл аудиодорожки не выбран." -#: src/mgui/mux.cpp:212 +#: src/mgui/mux.cpp:216 msgid "Output file name is empty." msgstr "Имя нового файла пустое." -#: src/mgui/prefs.cpp:143 +#: src/mgui/prefs.cpp:172 msgid "Bombono DVD Preferences" msgstr "Настройки Bombono DVD" -#: src/mgui/prefs.cpp:157 +#: src/mgui/prefs.cpp:186 msgid "_Default project type" msgstr "_Тип проекта по умолчанию" -#: src/mgui/prefs.cpp:160 +#: src/mgui/prefs.cpp:189 msgid "Default _folder for authoring" msgstr "_Папка для авторинга по умолчанию" -#: src/mgui/prefs.cpp:165 +#: src/mgui/prefs.cpp:194 msgid "_Play authoring result in" msgstr "_Воспроизводить результат авторинга в" -#: src/mgui/win_utils.cpp:325 +#: src/mgui/win_utils.cpp:330 msgid "Replacing the file overwrite its contents." msgstr "Его замена приведёт к перезаписи содержимого." -#: src/mgui/author/burn.cpp:199 +#: src/mgui/author/burn.cpp:192 msgid "Auto" msgstr "Авто" -#: src/mgui/author/burn.cpp:211 +#: src/mgui/author/burn.cpp:204 msgid "Update speeds ..." msgstr "Обновить скорости ..." -#: src/mgui/author/burn.cpp:332 +#: src/mgui/author/burn.cpp:325 msgid "Checking Disc ..." msgstr "Проверка диска ..." -#: src/mgui/author/burn.cpp:346 +#: src/mgui/author/burn.cpp:339 msgid "Selected burn drive is for CD discs only. Change to another burn drive." msgstr "Выбранный привод предназначен только для CD. Смените на другой." -#: src/mgui/author/burn.cpp:351 +#: src/mgui/author/burn.cpp:344 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." msgstr "CD-диск найден в приводе. Смените на DVD-диск." -#: src/mgui/author/burn.cpp:356 +#: src/mgui/author/burn.cpp:349 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "DVD-диск не найден в приводе. Загрузите чистый диск и нажмите ОК." -#: src/mgui/author/burn.cpp:361 +#: src/mgui/author/burn.cpp:354 #, boost-format msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." msgstr "Диск с типом \"%1%\" найден в приводе, но для DVD-Video тип диска должен быть одним из: DVD-R, DVD+R, DVD-RW, DVD+RW. Загрузите чистый диск соответствующего типа и нажмите ОК." -#: src/mgui/author/burn.cpp:370 +#: src/mgui/author/burn.cpp:363 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "Диск с типом \"%1%\" не пустой. Только чистые записываемые диски могут быть использованы для записи DVD-Video. Загрузите чистый диск и нажмите ОК." -#: src/mgui/author/burn.cpp:377 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" msgstr "Диск с типом \"%1%\" не пустой. Необходимо удалить его содержимое перед записью. Продолжать?" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:374 msgid "_Cancel" msgstr "_Отмена" -#: src/mgui/author/burn.cpp:382 +#: src/mgui/author/burn.cpp:375 msgid "_Try again" msgstr "_Повторить снова" -#: src/mgui/author/execute.cpp:62 +#: src/mgui/author/execute.cpp:64 msgid "Status: " msgstr "Статус: " @@ -353,38 +354,38 @@ msgid "_Rendering only" msgstr "_Только рендеринг" -#: src/mgui/author/output.cpp:277 +#: src/mgui/author/output.cpp:276 msgid "Rendering" msgstr "Рендеринг" -#: src/mgui/author/output.cpp:354 +#: src/mgui/author/output.cpp:353 msgid "DVD Burning" msgstr "Запись DVD" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:397 msgid "The result is here" msgstr "Результат находится здесь" -#: src/mgui/author/output.cpp:400 +#: src/mgui/author/output.cpp:399 msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." msgstr "Вы можете довести авторинг вручную, выполнив команду \"scons\" в указанной папке. Дополнительные опции смотрите в файле README там же." #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:424 +#: src/mgui/author/output.cpp:423 msgid "Authoring is cancelled." msgstr "Авторинг прекращен." -#: src/mgui/author/output.cpp:435 +#: src/mgui/author/output.cpp:434 #, boost-format msgid "%1% is not a folder" msgstr "%1% не является папкой" -#: src/mgui/author/output.cpp:446 +#: src/mgui/author/output.cpp:445 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "Не удалось получить полный доступ к папке %1% (read, write)" -#: src/mgui/author/output.cpp:454 +#: src/mgui/author/output.cpp:453 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before authoring.\n" @@ -393,149 +394,179 @@ "Папка %1% не пуста. Требуется удалить все файлы в ней перед авторингом.\n" "Продолжать?" -#: src/mgui/author/output.cpp:460 +#: src/mgui/author/output.cpp:459 #, boost-format msgid "Error during removing files: %1%" msgstr "Ошибка во время удаления файлов: %1%" -#: src/mgui/author/output.cpp:651 +#: src/mgui/author/output.cpp:650 #, boost-format msgid "%1% cancelled." msgstr "Операция \"%1%\" отменена." -#: src/mgui/author/output.cpp:653 +#: src/mgui/author/output.cpp:652 #, boost-format msgid "%1% broken." msgstr "Операция \"%1%\" завершена неудачно." #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:660 +#: src/mgui/author/output.cpp:659 #, boost-format msgid "%1% successfully completed." msgstr "Операция \"%1%\" успешно завершена." -#: src/mgui/author/output.cpp:690 -#: src/mgui/timeline/select.cpp:239 +#: src/mgui/author/output.cpp:699 +#: src/mgui/timeline/select.cpp:236 #, boost-format msgid "_Play in %1%" msgstr "_Воспроизвести в %1%" -#: src/mgui/author/output.cpp:691 +#: src/mgui/author/output.cpp:700 msgid "_Burn to DVD" msgstr "_Записать на DVD" -#: src/mgui/author/script.cpp:391 +#: src/mgui/author/render.cpp:443 +#, boost-format +msgid "ffmpeg failure: %1%" +msgstr "ошибка ffmpeg: %1%" + +#: src/mgui/author/render.cpp:810 +msgid "command not found" +msgstr "команда не найдена" + +#: src/mgui/author/script.cpp:469 msgid "There is no media (video or menu)." msgstr "Нечего авторить (ни видео, ни меню)." -#: src/mgui/author/script.cpp:556 +#: src/mgui/author/script.cpp:780 #, boost-format msgid "external command failure: %1%" msgstr "ошибка выполнения внешней команды: %1%" -#: src/mgui/editor/select.cpp:599 +#: src/mgui/editor/select.cpp:410 +#: src/mgui/project/menu-browser.cpp:259 +msgid "Play All" +msgstr "Смотреть все" + +#: src/mgui/editor/select.cpp:662 msgid "Delete" msgstr "Удалить" -#: src/mgui/editor/select.cpp:613 +#. Link +#. bool is_background = !has_selected; +#. Project::Menu cur_mn = edt_area.CurMenu(); +#. Project::SetLinkMenu& slm = cur_mn->GetData(); +#. slm.isForBack = is_background; +#. slm.newLink = GetCurObjectLink(is_background); +#. +#. InvokeOn(cur_mn, "SetLinkMenu"); +#. if( slm.linkMenu ) +#. { +#. mn.items().push_back(MenuElem(_("Link"))); +#. mn.items().back().set_submenu(*slm.linkMenu.release()); +#. } +#. mn.items().push_back( +#. MenuElem(_("Remove Link"), bb::bind(&SetSelObjectsLinks, +#. Project::MediaItem(), is_background))); +#: src/mgui/editor/select.cpp:681 msgid "Link" msgstr "Связать" -#: src/mgui/editor/select.cpp:617 +#: src/mgui/editor/select.cpp:684 msgid "Remove Link" msgstr "Удалить связь" #. Poster Link -#: src/mgui/editor/select.cpp:621 +#: src/mgui/editor/select.cpp:688 msgid "Set Poster" msgstr "Установить постер" -#: src/mgui/editor/select.cpp:630 +#: src/mgui/editor/select.cpp:700 msgid "Align" msgstr "Выравнивание" -#: src/mgui/editor/select.cpp:638 +#: src/mgui/editor/select.cpp:706 msgid "Align Left" msgstr "По левому краю" -#: src/mgui/editor/select.cpp:639 +#: src/mgui/editor/select.cpp:707 msgid "Align Right" msgstr "По правому краю" -#: src/mgui/editor/select.cpp:640 +#: src/mgui/editor/select.cpp:708 msgid "Align Top" msgstr "По верхнему краю" -#: src/mgui/editor/select.cpp:641 +#: src/mgui/editor/select.cpp:709 msgid "Align Bottom" msgstr "По нижнему краю" -#: src/mgui/editor/select.cpp:644 +#: src/mgui/editor/select.cpp:712 msgid "Center Horizontally" msgstr "По центру (горизонтально)" -#: src/mgui/editor/select.cpp:645 +#: src/mgui/editor/select.cpp:713 msgid "Center Vertically" msgstr "По центру (вертикально)" -#: src/mgui/editor/select.cpp:650 +#: src/mgui/editor/select.cpp:718 msgid "Distribute Horizontally" msgstr "Распределить горизонтально" -#: src/mgui/editor/select.cpp:651 +#: src/mgui/editor/select.cpp:719 msgid "Distribute Vertically" msgstr "Распределить вертикально" #. Set Background Color -#: src/mgui/editor/select.cpp:656 -#: src/mgui/editor/select.cpp:908 +#: src/mgui/editor/select.cpp:724 +#: src/mgui/editor/select.cpp:976 msgid "Set Background Color..." msgstr "Выбрать цвет фона..." #. Selection Tool -#: src/mgui/editor/toolbar.cpp:135 +#: src/mgui/editor/toolbar.cpp:136 msgid "Selection Tool" msgstr "Выделение" #. Text Tool -#: src/mgui/editor/toolbar.cpp:138 +#: src/mgui/editor/toolbar.cpp:139 msgid "Text Tool" msgstr "Текст" -#: src/mgui/editor/toolbar.cpp:495 +#: src/mgui/editor/toolbar.cpp:500 msgid "Add Item" msgstr "Добавить элемент" -#: src/mgui/editor/toolbar.cpp:517 +#: src/mgui/editor/toolbar.cpp:522 msgid "Font Name" msgstr "Название шрифта" -#: src/mgui/editor/toolbar.cpp:533 +#: src/mgui/editor/toolbar.cpp:538 msgid "Font Size" msgstr "Размер шрифта" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:543 msgid "Bold" msgstr "Жирный" -#: src/mgui/editor/toolbar.cpp:539 +#: src/mgui/editor/toolbar.cpp:544 msgid "Italic" msgstr "Наклонный" -#: src/mgui/editor/toolbar.cpp:540 +#: src/mgui/editor/toolbar.cpp:545 msgid "Underline" msgstr "Подчёркнутый" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:552 msgid "Pick a Color for Text" msgstr "Выберите цвет текста" -#: src/mgui/editor/toolbar.cpp:551 +#: src/mgui/editor/toolbar.cpp:554 msgid "Text Color" msgstr "Цвет текста" -#: src/mgui/editor/toolbar.cpp:563 +#: src/mgui/editor/toolbar.cpp:566 msgid "Show Safe Area" msgstr "Показать безопасную область" @@ -676,106 +707,93 @@ msgid "First-Play media can be Video or Menu only." msgstr "Только видео или меню может быть First-Play." -#: src/mgui/project/mconstructor.cpp:335 +#: src/mgui/project/mconstructor.cpp:348 msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" msgstr "Bombono DVD - программа авторинга с аккуратным графическим интерфейсом" #. dlg.set_authors(authors); #. dlg.set_documenters(documenters); #. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:340 +#: src/mgui/project/mconstructor.cpp:353 msgid "translator-credits" msgstr "Илья Муравьев " #. раньше Brasero использовал KiB, MiB и GiB, как более точные технически #. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero #. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:527 +#: src/mgui/project/mconstructor.cpp:540 msgid "KB" msgstr "КБ" -#: src/mgui/project/mconstructor.cpp:527 +#: src/mgui/project/mconstructor.cpp:540 msgid "GB" msgstr "ГБ" #. Project -#: src/mgui/project/mconstructor.cpp:635 +#: src/mgui/project/mconstructor.cpp:648 msgid "_Project" msgstr "_Проект" -#: src/mgui/project/mconstructor.cpp:642 +#: src/mgui/project/mconstructor.cpp:655 msgid "_Quit" msgstr "_Выход" -#: src/mgui/project/mconstructor.cpp:644 +#: src/mgui/project/mconstructor.cpp:657 msgid "Add Videos from _DVD" msgstr "_Добавить видео с DVD" -#: src/mgui/project/mconstructor.cpp:644 +#: src/mgui/project/mconstructor.cpp:657 msgid "DVD-Import Assistant" msgstr "Помощник по импорту с DVD" -#: src/mgui/project/mconstructor.cpp:646 +#: src/mgui/project/mconstructor.cpp:659 msgid "_Mux" msgstr "_Микшировать" -#: src/mgui/project/mconstructor.cpp:646 +#: src/mgui/project/mconstructor.cpp:659 msgid "Mux Elementary Streams into MPEG2" msgstr "Микшировать дорожки в MPEG2" -#: src/mgui/project/mconstructor.cpp:648 +#: src/mgui/project/mconstructor.cpp:661 msgid "Pr_eferences" msgstr "_Параметры" #. Go -#: src/mgui/project/mconstructor.cpp:687 +#: src/mgui/project/mconstructor.cpp:700 msgid "_Go" msgstr "П_ерейти" #. первый вставляем сразу #. Help -#: src/mgui/project/mconstructor.cpp:693 +#: src/mgui/project/mconstructor.cpp:706 msgid "_Help" msgstr "_Справка" -#: src/mgui/project/mconstructor.cpp:818 +#: src/mgui/project/mconstructor.cpp:860 msgctxt "MainTabs" msgid "_Source" msgstr "_Начало" -#: src/mgui/project/mconstructor.cpp:820 +#: src/mgui/project/mconstructor.cpp:862 msgctxt "MainTabs" msgid "_Menu" msgstr "_Меню" -#: src/mgui/project/mconstructor.cpp:822 +#: src/mgui/project/mconstructor.cpp:864 msgctxt "MainTabs" msgid "_Output" msgstr "_Результат" -#: src/mgui/project/media-browser.cpp:148 -msgid "Previous Menu" -msgstr "Вернуться в предыдущее меню" - -#: src/mgui/project/media-browser.cpp:148 -#: src/mgui/project/media-browser.cpp:150 -msgid "Next Video" -msgstr "Следующее видео" - -#: src/mgui/project/media-browser.cpp:149 -#, boost-format -msgid "Auto (%1%)" -msgstr "Авто (%1%)" - -#: src/mgui/project/media-browser.cpp:179 +#: src/mgui/project/media-browser.cpp:198 +#: src/mgui/project/menu-browser.cpp:427 msgid "End Action" msgstr "Действие по окончанию" -#: src/mgui/project/media-browser.cpp:203 +#: src/mgui/project/media-browser.cpp:224 msgid "Still Picture" msgstr "Рисунок" -#: src/mgui/project/media-browser.cpp:235 +#: src/mgui/project/media-browser.cpp:256 msgid "Type" msgstr "Тип" @@ -785,123 +803,192 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:293 -#: src/mgui/project/menu-browser.cpp:374 +#: src/mgui/project/media-browser.cpp:312 +#: src/mgui/project/menu-browser.cpp:808 msgid "Media List" msgstr "Список медиа" -#: src/mgui/project/media-browser.cpp:333 +#: src/mgui/project/media-browser.cpp:352 msgid "Add Media from File Browser" msgstr "Добавить медиа из браузера" -#: src/mgui/project/media-browser.cpp:342 +#: src/mgui/project/media-browser.cpp:361 msgid "Remove Media" msgstr "Удалить медиа" -#: src/mgui/project/media-browser.cpp:353 +#: src/mgui/project/media-browser.cpp:372 msgid "Make Chapters for Video" msgstr "Разметить главы для видео" -#: src/mgui/project/menu-browser.cpp:191 +#: src/mgui/project/menu-browser.cpp:99 +#: src/mgui/project/menu-browser.cpp:608 msgid "No Link" msgstr "Без связи" +#: src/mgui/project/menu-browser.cpp:248 +msgid "Previous Menu" +msgstr "Вернуться в предыдущее меню" + +#: src/mgui/project/menu-browser.cpp:248 +#: src/mgui/project/menu-browser.cpp:256 +msgid "Next Video" +msgstr "Следующее видео" + +#: src/mgui/project/menu-browser.cpp:249 +#, boost-format +msgid "Auto (%1%)" +msgstr "Авто (%1%)" + +#: src/mgui/project/menu-browser.cpp:252 +msgid "Loop" +msgstr "Цикл" + +#: src/mgui/project/menu-browser.cpp:351 +#: src/mgui/project/menu-browser.cpp:482 +msgid "Menu Settings" +msgstr "Настройки меню" + +#: src/mgui/project/menu-browser.cpp:363 +msgid "_Still picture" +msgstr "_Неподвижная картинка" + +#: src/mgui/project/menu-browser.cpp:368 +msgid "Select external audio file" +msgstr "Выберите внешний аудиофайл" + +#: src/mgui/project/menu-browser.cpp:371 +#: src/mgui/project/menu-browser.cpp:373 +msgid "_Motion menu" +msgstr "_Анимационное Меню" + +#: src/mgui/project/menu-browser.cpp:387 +msgid "_Duration (in seconds)" +msgstr "_Длительность (в секундах)" + +#: src/mgui/project/menu-browser.cpp:400 +msgid "Still menu with audio in the background" +msgstr "Неподвижное меню со звуком в фоне" + +#: src/mgui/project/menu-browser.cpp:410 +msgid "_From the project" +msgstr "_Из проекта" + +#: src/mgui/project/menu-browser.cpp:414 +msgid "_External audio" +msgstr "_Внешний звук" + +#: src/mgui/project/menu-browser.cpp:437 +msgid "_Subpicture Colors" +msgstr "_Цвета 'subpicture'" + +#: src/mgui/project/menu-browser.cpp:439 +msgid "S_elected item color" +msgstr "Цвет _выбранного элемента" + +#: src/mgui/project/menu-browser.cpp:440 +msgid "_Activated item color" +msgstr "Цвет _активированного элемента" + +#: src/mgui/project/menu-browser.cpp:442 +msgid "_Restore default colors" +msgstr "_Восстановить цвета по умолчанию" + #. * subj -#: src/mgui/project/menu-browser.cpp:338 +#: src/mgui/project/menu-browser.cpp:773 msgid "Menu List" msgstr "Список меню" -#: src/mgui/project/menu-browser.cpp:354 +#: src/mgui/project/menu-browser.cpp:788 msgid "Add Menu" msgstr "Добавить меню" -#: src/mgui/project/menu-browser.cpp:359 +#: src/mgui/project/menu-browser.cpp:793 msgid "Remove Menu" msgstr "Удалить меню" -#: src/mgui/project/menu-browser.cpp:364 +#: src/mgui/project/menu-browser.cpp:798 msgid "Edit Menu" msgstr "Редактировать меню" -#: src/mgui/project/serialize.cpp:61 +#: src/mgui/project/serialize.cpp:62 msgid "Save Project As..." msgstr "Сохранить проект _как..." -#: src/mgui/project/serialize.cpp:93 +#: src/mgui/project/serialize.cpp:94 #, boost-format msgid "Cant open project file \"%1%\"" msgstr "Не удалось открыть файл проекта \"%1%\"" -#: src/mgui/project/serialize.cpp:166 +#: src/mgui/project/serialize.cpp:167 #, boost-format msgid "Save changes to \"%1%\"?" msgstr "Сохранить изменения в \"%1%\"?" -#: src/mgui/project/serialize.cpp:168 +#: src/mgui/project/serialize.cpp:169 msgid "Close _without Saving" msgstr "Закрыть _без сохранения" -#: src/mgui/project/serialize.cpp:206 +#: src/mgui/project/serialize.cpp:207 msgid "New Project" msgstr "Создать проект" -#: src/mgui/project/serialize.cpp:215 +#: src/mgui/project/serialize.cpp:216 msgid "Please select a Television standard for your project:" msgstr "Выберите, пожалуйста, ТВ-стандарт для вашего проекта:" -#: src/mgui/project/serialize.cpp:237 +#: src/mgui/project/serialize.cpp:238 msgid "Open Project" msgstr "Открыть проект" -#: src/mgui/project/serialize.cpp:241 +#: src/mgui/project/serialize.cpp:242 msgid "Project files (*.xml)" msgstr "Файлы проектов (*xml)" -#: src/mgui/project/serialize.cpp:246 -#: src/mgui/timeline/mviewer.cpp:283 +#: src/mgui/project/serialize.cpp:247 +#: src/mgui/timeline/mviewer.cpp:284 msgid "All Files (*.*)" msgstr "Все файлы (*.*)" -#: src/mgui/project/serialize.cpp:308 +#: src/mgui/project/serialize.cpp:309 msgid "_New Project" msgstr "_Создать проект" -#: src/mgui/project/serialize.cpp:310 +#: src/mgui/project/serialize.cpp:311 msgid "_Open..." msgstr "_Открыть..." -#: src/mgui/project/serialize.cpp:312 +#: src/mgui/project/serialize.cpp:313 msgid "_Save" msgstr "Со_хранить" -#: src/mgui/project/serialize.cpp:314 +#: src/mgui/project/serialize.cpp:315 msgid "Save _As..." msgstr "Сохранить _как..." #. Add -#: src/mgui/timeline/layout.cpp:526 -#: src/mgui/timeline/select.cpp:216 +#: src/mgui/timeline/layout.cpp:525 +#: src/mgui/timeline/select.cpp:213 msgid "Add Chapter Point" msgstr "Добавить главу" -#: src/mgui/timeline/mviewer.cpp:76 +#: src/mgui/timeline/mviewer.cpp:77 msgid "Error while opening file:" msgstr "Ошибка во время открытия файла:" #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:249 +#: src/mgui/timeline/mviewer.cpp:250 msgid "File Browser" msgstr "Браузер файлов" -#: src/mgui/timeline/mviewer.cpp:279 +#: src/mgui/timeline/mviewer.cpp:280 msgid "All formats" msgstr "Поддерживаемые форматы" -#: src/mgui/timeline/mviewer.cpp:280 +#: src/mgui/timeline/mviewer.cpp:281 msgid "MPEG files" msgstr "Файлы MPEG" -#: src/mgui/timeline/mviewer.cpp:282 +#: src/mgui/timeline/mviewer.cpp:283 msgid "Still Images" msgstr "Рисунки" @@ -915,33 +1002,34 @@ #. Add at Intervals #: src/mgui/timeline/select.cpp:170 -#: src/mgui/timeline/select.cpp:228 +#: src/mgui/timeline/select.cpp:225 msgid "Add Chapter Points at Intervals" msgstr "Добавить главы через интервал" -#: src/mgui/timeline/select.cpp:176 +#: src/mgui/timeline/select.cpp:177 msgid "Interval between Chapters:" msgstr "Интервал между главами" -#: src/mgui/timeline/select.cpp:183 +#. 5 мин. по умолчанию +#: src/mgui/timeline/select.cpp:181 msgid "min." msgstr "мин." -#: src/mgui/timeline/select.cpp:186 +#: src/mgui/timeline/select.cpp:184 msgid "Remove Existing Chapters" msgstr "Удалить существующие главы" #. Delete -#: src/mgui/timeline/select.cpp:219 +#: src/mgui/timeline/select.cpp:216 msgid "Delete Chapter Point" msgstr "Удалить главу" #. Delete All -#: src/mgui/timeline/select.cpp:223 +#: src/mgui/timeline/select.cpp:220 msgid "Delete All Chapter Points" msgstr "Удалить все главы" -#: src/mgui/timeline/select.cpp:236 +#: src/mgui/timeline/select.cpp:233 msgid "Save Current Frame" msgstr "Сохранить текущий кадр" diff -Nru bombono-dvd-0.7.0/po/vi.po bombono-dvd-0.8.0/po/vi.po --- bombono-dvd-0.7.0/po/vi.po 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/po/vi.po 2010-11-01 21:58:28.000000000 +0000 @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: bombono-dvd 0.5.9\n" +"Project-Id-Version: bombono-dvd 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-03 00:13+0400\n" -"PO-Revision-Date: 2010-04-06 17:00+0930\n" +"POT-Creation-Date: 2010-10-08 00:37+0400\n" +"PO-Revision-Date: 2010-10-08 17:00+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: LocFactoryEditor 1.8\n" -#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:200 +#: src/mbase/project/media.cpp:68 src/mgui/project/media-browser.cpp:202 msgid "Chapter" msgstr "Tập" -#: src/mbase/project/media.cpp:112 +#: src/mbase/project/media.cpp:114 #, boost-format msgid "Cant create folder %1% (check permissions)" msgstr "Không thể tạo thư mục %1% (kiểm tra quyền hạn)" @@ -31,264 +31,268 @@ msgid "Menu" msgstr "Trình đơn" -#: src/mgui/dvdimport.cpp:82 +#: src/mgui/dvdimport.cpp:83 msgid "Choose Source DVD-Video" msgstr "Chọn DVD Phim nguồn" -#: src/mgui/dvdimport.cpp:85 +#: src/mgui/dvdimport.cpp:86 msgid "Select Videos to Import" msgstr "Chọn các phim cần nhập" -#: src/mgui/dvdimport.cpp:88 +#: src/mgui/dvdimport.cpp:89 msgid "Select Folder to Save Videos" msgstr "Chọn thư mục vào đó cần lưu phim" -#: src/mgui/dvdimport.cpp:91 +#: src/mgui/dvdimport.cpp:92 msgid "Importing..." msgstr "Đang nhập..." -#: src/mgui/dvdimport.cpp:94 +#: src/mgui/dvdimport.cpp:95 msgid "Import is completed." msgstr "Hoàn tất nhập vào." -#: src/mgui/dvdimport.cpp:207 src/mgui/project/mconstructor.cpp:824 +#: src/mgui/dvdimport.cpp:208 src/mgui/project/mconstructor.cpp:527 msgid "MB" msgstr "MB" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Select All" msgstr "Chọn tất cả" -#: src/mgui/dvdimport.cpp:388 +#: src/mgui/dvdimport.cpp:389 msgid "Unselect All" msgstr "Bỏ chọn tất cả" #. мы не можем пустить исключение здесь, потому что оно пойдет #. и через C-шный код (Gtk) - отложим -#: src/mgui/dvdimport.cpp:410 +#: src/mgui/dvdimport.cpp:411 msgid "Are you sure to stop importing?" msgstr "Bạn chắc chắn muốn dừng chạy tiến trình nhập không?" -#: src/mgui/dvdimport.cpp:443 +#: src/mgui/dvdimport.cpp:444 #, boost-format msgid "Cant write to folder %1% (check permissions)." msgstr "Không thẻ ghi lên thư mục %1% (kiểm tra quyền hạn)." -#: src/mgui/dvdimport.cpp:471 src/mgui/win_utils.cpp:319 +#: src/mgui/dvdimport.cpp:472 src/mgui/win_utils.cpp:322 #, boost-format msgid "A file named \"%1%\" already exists. Do you want to replace it?" msgstr "Một tập tin tên « %1% » đã có. Bạn có muốn thay thế nó không?" -#: src/mgui/dvdimport.cpp:504 +#: src/mgui/dvdimport.cpp:505 msgid "Import error!" msgstr "Lỗi nhập !" -#: src/mgui/dvdimport.cpp:508 +#: src/mgui/dvdimport.cpp:509 msgid "Videos successfully imported." msgstr "Các phim đã được nhập." -#: src/mgui/dvdimport.cpp:509 +#: src/mgui/dvdimport.cpp:510 msgid "Import has been interrupted." msgstr "Tiến trình nhập bị gián đoạn." -#: src/mgui/dvdimport.cpp:543 +#: src/mgui/dvdimport.cpp:544 msgid "DVD-Video Import" msgstr "Nhập DVD Phim" -#: src/mgui/dvdimport.cpp:566 +#: src/mgui/dvdimport.cpp:567 msgid "Choose DVD disc, DVD folder or iso image file." msgstr "Chọn đĩa DVD, thư mục DVD hay tập tin ảnh ISO." -#: src/mgui/dvdimport.cpp:584 +#: src/mgui/dvdimport.cpp:585 msgid "NTSC/PAL mismatch. Try another disc or import to project of corresponding type." msgstr "NTSC/PAL không tương ứng. Hãy thử một đĩa khác hoặc nhập vào một dự án có kiểu thích hợp." #. имя -#: src/mgui/dvdimport.cpp:608 src/mgui/project/media-browser.cpp:217 +#: src/mgui/dvdimport.cpp:609 src/mgui/project/media-browser.cpp:219 msgid "Name" msgstr "Tên" -#: src/mgui/dvdimport.cpp:621 +#: src/mgui/dvdimport.cpp:622 msgid "Details" msgstr "Chi tiết" -#: src/mgui/dvdimport.cpp:667 +#: src/mgui/dvdimport.cpp:668 msgid "It is desirable the destination folder to be empty." msgstr "Tốt hơn nếu thư mục đích vẫn trống." #. COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" #. А что делать - нафига свои придумывать, если смысл один и тот же -#: src/mgui/execution.cpp:27 +#: src/mgui/execution.cpp:52 #, boost-format msgid "You are about to cancel %1%. Are you sure?" msgstr "Bạn sắp thôi tiến trình %1%. Bạn có chắc chưa?" -#: src/mgui/mux.cpp:29 +#: src/mgui/execution.cpp:411 +#, boost-format +msgid "exit code = %1%" +msgstr "mã thoát = %1%" + +#: src/mgui/execution.cpp:413 +#, boost-format +msgid "broken by signal %1%" +msgstr "bị ngắt do tín hiệu %1%" + +#: src/mgui/mux.cpp:50 msgid "muxing" msgstr "đang kết hợp lại" -#: src/mgui/mux.cpp:45 +#: src/mgui/mux.cpp:66 #, boost-format msgid "Muxing \"%1%\"" msgstr "Đang kết hợp lại « %1% »" -#: src/mgui/mux.cpp:56 src/mgui/author/output.cpp:229 +#: src/mgui/mux.cpp:77 src/mgui/author/output.cpp:231 msgid "Show/_Hide Details" msgstr "_Hiện/ẩn chi tiết" -#: src/mgui/mux.cpp:80 +#: src/mgui/mux.cpp:101 msgid "Muxing error" msgstr "Lỗi kết hợp lại" -#: src/mgui/mux.cpp:81 src/mgui/author/output.cpp:632 +#: src/mgui/mux.cpp:102 src/mgui/author/output.cpp:654 #, boost-format msgid "The reason is \"%1%\" (see Details)" msgstr "Lý do là « %1% » (xem Chi tiết)" -#: src/mgui/mux.cpp:97 +#: src/mgui/mux.cpp:118 msgid "Select a folder" msgstr "Chọn một thư mục" -#: src/mgui/mux.cpp:109 +#: src/mgui/mux.cpp:130 msgid "in" msgstr "trong" -#: src/mgui/mux.cpp:143 +#: src/mgui/mux.cpp:164 msgid "Mux streams" msgstr "Kết hợp lại các luồng" -#: src/mgui/mux.cpp:145 +#: src/mgui/mux.cpp:166 msgid "Output" msgstr "Xuất" -#: src/mgui/mux.cpp:146 +#: src/mgui/mux.cpp:167 msgid "Select elementary video" msgstr "Chọn phim cơ bản" -#: src/mgui/mux.cpp:147 +#: src/mgui/mux.cpp:168 msgid "Select audio" msgstr "Chọn âm thanh" #. Названия типов для i18n -#: src/mgui/mux.cpp:151 src/mgui/project/media-browser.cpp:199 +#: src/mgui/mux.cpp:172 src/mgui/project/media-browser.cpp:201 #: src/mgui/timeline/layout-draw.cpp:156 msgid "Video" msgstr "Phim" -#: src/mgui/mux.cpp:154 +#: src/mgui/mux.cpp:175 msgid "MPEG2 elementary video (m2v)" msgstr "Phim cơ bản MPEG2 (m2v)" -#: src/mgui/mux.cpp:159 +#: src/mgui/mux.cpp:180 msgid "Audio" msgstr "Âm thanh" -#: src/mgui/mux.cpp:162 src/mgui/timeline/mviewer.cpp:271 +#: src/mgui/mux.cpp:183 src/mgui/timeline/mviewer.cpp:281 msgid "Audio for DVD" msgstr "Âm thanh cho DVD" -#: src/mgui/mux.cpp:187 +#: src/mgui/mux.cpp:208 msgid "Elementary video file is not selected." msgstr "Chưa chọn tập tin phim cơ bản." -#: src/mgui/mux.cpp:189 +#: src/mgui/mux.cpp:210 msgid "Audio file is not selected." msgstr "Chưa chọn tập tin âm thanh." -#: src/mgui/mux.cpp:191 +#: src/mgui/mux.cpp:212 msgid "Output file name is empty." msgstr "Tên tập tin kết xuất còn trống." -#: src/mgui/prefs.cpp:98 +#: src/mgui/prefs.cpp:143 msgid "Bombono DVD Preferences" msgstr "Tùy thích Bombono DVD" -#: src/mgui/prefs.cpp:111 -msgid "_Default Project Type" -msgstr "Kiểu dự án _mặc định" +#: src/mgui/prefs.cpp:157 +msgid "_Default project type" +msgstr "Kiểu _dự án mặc định" + +#: src/mgui/prefs.cpp:160 +msgid "Default _folder for authoring" +msgstr "Thư _mục mặc định để sáng tạo" -#: src/mgui/prefs.cpp:116 -msgid "_Play Authoring Result in" +#: src/mgui/prefs.cpp:165 +msgid "_Play authoring result in" msgstr "_Phát kết quả sáng tạo bằng" -#: src/mgui/win_utils.cpp:322 +#: src/mgui/win_utils.cpp:325 msgid "Replacing the file overwrite its contents." msgstr "Việc thay thế tập tin đó thì cũng ghi đè lên nội dung của nó." -#: src/mgui/author/burn.cpp:198 +#: src/mgui/author/burn.cpp:199 msgid "Auto" msgstr "Tự động" -#: src/mgui/author/burn.cpp:210 +#: src/mgui/author/burn.cpp:211 msgid "Update speeds ..." msgstr "Thời gian cập nhật ..." -#: src/mgui/author/burn.cpp:331 +#: src/mgui/author/burn.cpp:332 msgid "Checking Disc ..." msgstr "Đang kiểm tra đĩa ..." -#: src/mgui/author/burn.cpp:345 +#: src/mgui/author/burn.cpp:346 msgid "Selected burn drive is for CD discs only. Change to another burn drive." msgstr "Bạn đã chọn một ổ đĩa chép ra dành cho đĩa CD. Chuyển đổi sang một ổ đĩa khác." -#: src/mgui/author/burn.cpp:350 +#: src/mgui/author/burn.cpp:351 msgid "CD disc is found in the drive, not DVD. Change to DVD disc." msgstr "Bạn đã nạp một đĩa CD, không phải DVD. Chuyển đổi sang một đĩa DVD." -#: src/mgui/author/burn.cpp:355 +#: src/mgui/author/burn.cpp:356 msgid "No DVD disc in the drive. Load a clear one and press OK." msgstr "Ổ đĩa không chứa đĩa DVD. Nạp một đĩa DVD trống và bấm nút OK." -#: src/mgui/author/burn.cpp:360 +#: src/mgui/author/burn.cpp:361 #, boost-format msgid "Disc with type \"%1%\" is found in the drive but for DVD-Video disc type should be one from: DVD-R, DVD+R, DVD-RW, DVD+RW. Load a clear one with right type and press OK." msgstr "Bạn đã nạp một đĩa kiểu « %1% », nhưng mà đối với đĩa DVD Phim nên có một của những kiểu này: DVD-R, DVD+R, DVD-RW, DVD+RW. Hãy nạp một đĩa trống có kiểu đúng, sau đó bấm nút OK." -#: src/mgui/author/burn.cpp:369 +#: src/mgui/author/burn.cpp:370 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. Only clear recordable discs can be used for burning DVD-Video. Load a clear one and press OK." msgstr "Bạn đã nạp một đĩa kiểu « %1% » mà không trống. Chỉ đĩa thu được vẫn trống có thể được sử dụng để chép ra đĩa DVD Phim. Hãy nạp một đĩa trống, và bấm nút OK." -#: src/mgui/author/burn.cpp:376 +#: src/mgui/author/burn.cpp:377 #, boost-format msgid "Disc with type \"%1%\" in the drive is not clear. We need to remove its contents before writing new one. Continue?" msgstr "Bạn đã nạp một đĩa kiểu « %1% » mà không trống. Có nên xoá bỏ nội dung của nó trước khi ghi dữ liệu mới. Tiếp tục ?" -#: src/mgui/author/burn.cpp:380 +#: src/mgui/author/burn.cpp:381 msgid "_Cancel" msgstr "_Thôi" -#: src/mgui/author/burn.cpp:381 +#: src/mgui/author/burn.cpp:382 msgid "_Try again" msgstr "Thử _lại" -#: src/mgui/author/execute.cpp:72 +#: src/mgui/author/execute.cpp:62 msgid "Status: " msgstr "Trạng thái: " -#: src/mgui/author/execute.cpp:568 -#, boost-format -msgid "exit code = %1%" -msgstr "mã thoát = %1%" - -#: src/mgui/author/execute.cpp:570 -#, boost-format -msgid "broken by signal %1%" -msgstr "bị ngắt do tín hiệu %1%" - -#: src/mgui/author/indicator.cpp:67 +#: src/mgui/author/indicator.cpp:66 msgid "Rendering Menus" msgstr "Đang vẽ các trình đơn" -#: src/mgui/author/indicator.cpp:68 +#: src/mgui/author/indicator.cpp:67 msgid "Generating DVD-Video" msgstr "Đang tạo ra đĩa DVD phim" -#: src/mgui/author/indicator.cpp:69 +#: src/mgui/author/indicator.cpp:68 msgid "Creating ISO Image" msgstr "Đang tạo ảnh ISO" -#: src/mgui/author/indicator.cpp:70 +#: src/mgui/author/indicator.cpp:69 msgid "Burning DVD" msgstr "Đang chép ra đĩa DVD" @@ -309,71 +313,71 @@ msgid "Select Output _Folder:" msgstr "Chọn thư mục _kết xuất:" -#: src/mgui/author/output.cpp:175 +#: src/mgui/author/output.cpp:177 msgid " Choose Author Mode: " msgstr "Chọn chế độ tạo tác: " #. цель по умолчанию -#: src/mgui/author/output.cpp:181 +#: src/mgui/author/output.cpp:183 msgid "_Write DVD Folder" msgstr "_Ghi thư mục DVD" -#: src/mgui/author/output.cpp:182 +#: src/mgui/author/output.cpp:184 msgid "Write Disk _Image" msgstr "Gh_i ảnh đĩa" -#: src/mgui/author/output.cpp:191 +#: src/mgui/author/output.cpp:193 msgid "Disc Label: " msgstr "Nhãn đĩa: " -#: src/mgui/author/output.cpp:196 +#: src/mgui/author/output.cpp:198 msgid "Burn to _DVD" msgstr "Chép vào _DVD" -#: src/mgui/author/output.cpp:204 +#: src/mgui/author/output.cpp:206 msgid "DVD Drive: " msgstr "Ổ đĩa DVD: " -#: src/mgui/author/output.cpp:210 +#: src/mgui/author/output.cpp:212 msgid "Writing Speed: " msgstr "Tốc độ ghi: " -#: src/mgui/author/output.cpp:221 +#: src/mgui/author/output.cpp:223 msgid "_Rendering only" msgstr "Chỉ _vẽ" -#: src/mgui/author/output.cpp:275 +#: src/mgui/author/output.cpp:277 msgid "Rendering" msgstr "Đang dựng hình" -#: src/mgui/author/output.cpp:352 +#: src/mgui/author/output.cpp:354 msgid "DVD Burning" msgstr "Chép ra đĩa DVD" -#: src/mgui/author/output.cpp:396 +#: src/mgui/author/output.cpp:398 msgid "The result is here" msgstr "Kết quả ở đây" -#: src/mgui/author/output.cpp:398 +#: src/mgui/author/output.cpp:400 msgid "You can run authoring manually by executing command \"scons\" at the specified folder. Also, see README file for other options over there." msgstr "Bạn cũng có thể tự thực hiện bằng cách chạy lệnh « scons » trong thư mục đưa ra. Cũng xem tập tin Đọc Đi (README) để tìm thêm tuỳ chọn." #. Translators: impossible to go on! -#: src/mgui/author/output.cpp:422 +#: src/mgui/author/output.cpp:424 msgid "Authoring is cancelled." msgstr "Tiến trình tạo tác bị thôi." -#: src/mgui/author/output.cpp:433 +#: src/mgui/author/output.cpp:435 #, boost-format msgid "%1% is not a folder" msgstr "%1% không phải là thư mục" -#: src/mgui/author/output.cpp:444 +#: src/mgui/author/output.cpp:446 #, boost-format msgid "Cant have full access to folder %1% (read, write)" msgstr "Không thể truy cập hoàn toàn đến thư mục %1% (đọc và ghi)" -#: src/mgui/author/output.cpp:452 +#: src/mgui/author/output.cpp:454 #, boost-format msgid "" "Folder %1% is not empty. We need to remove all files in it before authoring.\n" @@ -382,379 +386,237 @@ "Thư mục %1% không trống. Có nên xoá bỏ tất cả các tập tin khỏi nó trước khi tạo dữ liệu mới.\n" "Tiếp tục ?" -#: src/mgui/author/output.cpp:458 +#: src/mgui/author/output.cpp:460 #, boost-format msgid "Error during removing files: %1%" msgstr "Gặp lỗi trong khi gỡ bỏ tập tin: %1%" -#: src/mgui/author/output.cpp:629 +#: src/mgui/author/output.cpp:651 #, boost-format msgid "%1% cancelled." msgstr "%1% bị thôi." -#: src/mgui/author/output.cpp:631 +#: src/mgui/author/output.cpp:653 #, boost-format msgid "%1% broken." msgstr "%1% bị hỏng." #. Translators: can be tranlated as "Operation "%1%" ..." -#: src/mgui/author/output.cpp:638 +#: src/mgui/author/output.cpp:660 #, boost-format msgid "%1% successfully completed." msgstr "Hoàn tất thành công chạy thao tác %1%." -#: src/mgui/author/output.cpp:668 src/mgui/timeline/select.cpp:216 +#: src/mgui/author/output.cpp:690 src/mgui/timeline/select.cpp:239 #, boost-format msgid "_Play in %1%" msgstr "_Phát bằng %1%" -#: src/mgui/author/output.cpp:669 +#: src/mgui/author/output.cpp:691 msgid "_Burn to DVD" msgstr "_Chép vào DVD" -#: src/mgui/author/script.cpp:392 +#: src/mgui/author/script.cpp:391 msgid "There is no media (video or menu)." msgstr "Không có phương tiện (phim hay trình đơn)." -#: src/mgui/author/script.cpp:557 +#: src/mgui/author/script.cpp:556 #, boost-format msgid "external command failure: %1%" msgstr "lỗi chạy câu lệnh mở ngoài: %1%" -#: src/mgui/editor/select.cpp:499 +#: src/mgui/editor/select.cpp:599 msgid "Delete" msgstr "Xoá" -#: src/mgui/editor/select.cpp:513 +#: src/mgui/editor/select.cpp:613 msgid "Link" msgstr "Liên kết" -#: src/mgui/editor/select.cpp:517 +#: src/mgui/editor/select.cpp:617 msgid "Remove Link" msgstr "Gỡ bỏ liên kết" #. Poster Link -#: src/mgui/editor/select.cpp:521 +#: src/mgui/editor/select.cpp:621 msgid "Set Poster" msgstr "Lập bích chương" -#: src/mgui/editor/select.cpp:530 +#: src/mgui/editor/select.cpp:630 msgid "Align" msgstr "Sắp hàng" -#: src/mgui/editor/select.cpp:538 +#: src/mgui/editor/select.cpp:638 msgid "Align Left" msgstr "Sắp hàng bên trái" -#: src/mgui/editor/select.cpp:539 +#: src/mgui/editor/select.cpp:639 msgid "Align Right" msgstr "Sắp hàng bên phải" -#: src/mgui/editor/select.cpp:540 +#: src/mgui/editor/select.cpp:640 msgid "Align Top" msgstr "Sắp hàng bên trên" -#: src/mgui/editor/select.cpp:541 +#: src/mgui/editor/select.cpp:641 msgid "Align Bottom" msgstr "Sắp hàng bên dưới" -#: src/mgui/editor/select.cpp:544 +#: src/mgui/editor/select.cpp:644 msgid "Center Horizontally" -msgstr "Đặt giữa ngang" +msgstr "Đặt vào giữa theo chiều ngang" -#: src/mgui/editor/select.cpp:545 +#: src/mgui/editor/select.cpp:645 msgid "Center Vertically" -msgstr "Đặt giữa dọc" +msgstr "Đặt vào giữa theo chiều dọc" + +#: src/mgui/editor/select.cpp:650 +msgid "Distribute Horizontally" +msgstr "Phân phát theo chiều ngang" + +#: src/mgui/editor/select.cpp:651 +msgid "Distribute Vertically" +msgstr "Phân phát theo chiều dọc" #. Set Background Color -#: src/mgui/editor/select.cpp:550 src/mgui/editor/select.cpp:802 +#: src/mgui/editor/select.cpp:656 src/mgui/editor/select.cpp:908 msgid "Set Background Color..." msgstr "Chọn màu nền..." #. Selection Tool -#: src/mgui/editor/toolbar.cpp:129 +#: src/mgui/editor/toolbar.cpp:135 msgid "Selection Tool" msgstr "Công cụ Lựa chọn" #. Text Tool -#: src/mgui/editor/toolbar.cpp:132 +#: src/mgui/editor/toolbar.cpp:138 msgid "Text Tool" msgstr "Công cụ Văn bản" -#: src/mgui/editor/toolbar.cpp:493 +#: src/mgui/editor/toolbar.cpp:495 msgid "Add Item" msgstr "Thêm mục" -#: src/mgui/editor/toolbar.cpp:515 +#: src/mgui/editor/toolbar.cpp:517 msgid "Font Name" msgstr "Tên phông chữ" -#: src/mgui/editor/toolbar.cpp:531 +#: src/mgui/editor/toolbar.cpp:533 msgid "Font Size" msgstr "Cỡ phông chữ" #. * кнопки стилей шрифта -#: src/mgui/editor/toolbar.cpp:536 +#: src/mgui/editor/toolbar.cpp:538 msgid "Bold" msgstr "Đậm" -#: src/mgui/editor/toolbar.cpp:537 +#: src/mgui/editor/toolbar.cpp:539 msgid "Italic" msgstr "Nghiêng" -#: src/mgui/editor/toolbar.cpp:538 +#: src/mgui/editor/toolbar.cpp:540 msgid "Underline" msgstr "Gạch dưới" -#: src/mgui/editor/toolbar.cpp:547 +#: src/mgui/editor/toolbar.cpp:549 msgid "Pick a Color for Text" msgstr "Chọn màu chữ" -#: src/mgui/editor/toolbar.cpp:549 +#: src/mgui/editor/toolbar.cpp:551 msgid "Text Color" msgstr "Màu chữ" -#: src/mgui/editor/toolbar.cpp:561 +#: src/mgui/editor/toolbar.cpp:563 msgid "Show Safe Area" msgstr "Hiện vùng an toàn" -#: src/mgui/project/browser.cpp:128 -#, boost-format -msgid "Do you really want to delete \"%1%\" from Media List?" -msgstr "Bạn có chắc muốn xoá « %1% » khỏi Danh sách Nhạc/Phim không?" - -#: src/mgui/project/browser.cpp:129 -#, boost-format -msgid "Do you really want to delete chapter \"%1%\"?" -msgstr "Bạn thực sự muốn xoá tập « %1% » không?" - -#: src/mgui/project/browser.cpp:130 -#, boost-format -msgid "Do you really want to delete menu \"%1%\"?" -msgstr "Bạn thực sự muốn xoá trình đơn « %1% » không?" - -#: src/mgui/project/browser.cpp:242 -msgid "First-Play media can be Video or Menu only." -msgstr "Phương tiện Phát-Trước chỉ có thể là Phim hay Trình đơn." - -#: src/mgui/project/mconstructor.cpp:132 -msgid "Save Project As..." -msgstr "Lưu dự án dạng..." - -#: src/mgui/project/mconstructor.cpp:169 -#, boost-format -msgid "Cant open project file \"%1%\"" -msgstr "Không thể mở tập tin dự án « %1% »" - -#: src/mgui/project/mconstructor.cpp:465 -msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" -msgstr "Bombono DVD là một chương trình tạo đĩa DVD có một giao diện đồ họa đẹp và thân thiện với người dùng" - -#. dlg.set_authors(authors); -#. dlg.set_documenters(documenters); -#. dlg.set_decorated(false); -#: src/mgui/project/mconstructor.cpp:470 -msgid "translator-credits" -msgstr "Clytie Siddall (clytie@riverland.net.au)" - -#: src/mgui/project/mconstructor.cpp:611 -#, boost-format -msgid "Save changes to \"%1%\"?" -msgstr "Lưu các thay đổi vào %1% ?" - -#: src/mgui/project/mconstructor.cpp:613 -msgid "Close _without Saving" -msgstr "Đóng mà _không lưu" - -#: src/mgui/project/mconstructor.cpp:653 -msgid "New Project" -msgstr "Dự án mới" - -#: src/mgui/project/mconstructor.cpp:662 -msgid "Please select a Television standard for your project:" -msgstr "Hãy chọn một tiêu chuẩn TV cho dự án này:" - -#: src/mgui/project/mconstructor.cpp:687 -msgid "Open Project" -msgstr "Mở dự án" - -#: src/mgui/project/mconstructor.cpp:691 -msgid "Project files (*.xml)" -msgstr "Tập tin dự án (*.xml)" - -#: src/mgui/project/mconstructor.cpp:696 src/mgui/timeline/mviewer.cpp:273 -msgid "All Files (*.*)" -msgstr "Mọi tập tin (*.*)" - -#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически -#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero -#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) -#: src/mgui/project/mconstructor.cpp:824 -msgid "KB" -msgstr "KB" - -#: src/mgui/project/mconstructor.cpp:824 -msgid "GB" -msgstr "GB" - -#. Project -#: src/mgui/project/mconstructor.cpp:935 -msgid "_Project" -msgstr "_Dự án" - -#: src/mgui/project/mconstructor.cpp:940 -msgid "_New Project" -msgstr "Dự á_n mới" - -#: src/mgui/project/mconstructor.cpp:942 -msgid "_Open..." -msgstr "_Mở..." - -#: src/mgui/project/mconstructor.cpp:944 -msgid "_Save" -msgstr "_Lưu" - -#: src/mgui/project/mconstructor.cpp:946 -msgid "Save _As..." -msgstr "Lưu _dạng..." - -#: src/mgui/project/mconstructor.cpp:948 -msgid "_Quit" -msgstr "T_hoát" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "Add Videos from _DVD" -msgstr "Thêm phim từ _DVD" - -#: src/mgui/project/mconstructor.cpp:950 -msgid "DVD-Import Assistant" -msgstr "Trợ lý nhập DVD" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "_Mux" -msgstr "_Kết hợp lại" - -#: src/mgui/project/mconstructor.cpp:952 -msgid "Mux Elementary Streams into MPEG2" -msgstr "Kết hợp lại các luồng cơ bản thành MPEG2" - -#: src/mgui/project/mconstructor.cpp:954 -msgid "Pr_eferences" -msgstr "T_uỳ thích" - -#. Go -#: src/mgui/project/mconstructor.cpp:993 -msgid "_Go" -msgstr "_Tới" - -#. первый вставляем сразу -#. Help -#: src/mgui/project/mconstructor.cpp:999 -msgid "_Help" -msgstr "Trợ g_iúp" - -#: src/mgui/project/mconstructor.cpp:1100 -msgctxt "MainTabs" -msgid "_Source" -msgstr "_Nguồn" - -#: src/mgui/project/mconstructor.cpp:1102 -msgctxt "MainTabs" -msgid "_Menu" -msgstr "T_rình đơn" - -#: src/mgui/project/mconstructor.cpp:1104 -msgctxt "MainTabs" -msgid "_Output" -msgstr "_Xuất" - -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "yes" msgstr "có" -#: src/mgui/project/mb-actions.cpp:142 +#: src/mgui/project/add.cpp:37 msgid "no" msgstr "không" -#: src/mgui/project/mb-actions.cpp:191 +#: src/mgui/project/add.cpp:86 msgid "Video bitrate" msgstr "Tỷ lệ bit phim" -#: src/mgui/project/mb-actions.cpp:192 +#: src/mgui/project/add.cpp:87 msgid "kbps" msgstr "kb/giây" -#: src/mgui/project/mb-actions.cpp:193 +#: src/mgui/project/add.cpp:88 msgid "Maximum data rate for video (9800 kbps) is exceeded." msgstr "Vượt quá tốc độ dữ liệu cho phim (9800 kilô-byte/giây)." -#: src/mgui/project/mb-actions.cpp:196 +#: src/mgui/project/add.cpp:91 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with resolutions: %2% only." msgstr "Đĩa DVD Phim %1% chỉ chấp nhận định dạng MPEG-2 có độ phân giải %2%." -#: src/mgui/project/mb-actions.cpp:197 +#: src/mgui/project/add.cpp:92 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with frame rate: %2% only." msgstr "Đĩa DVD Phim %1% chỉ chấp nhận định dạng MPEG-2 có tỷ lệ khung %2%." -#: src/mgui/project/mb-actions.cpp:198 +#: src/mgui/project/add.cpp:93 #, boost-format msgid "The %1% DVD-Video can accept MPEG-2 with aspects 4:3, 16:9 only." msgstr "Đĩa DVD Phim %1% chỉ chấp nhận định dạng MPEG-2 có tỷ lệ hình thể 4:3 hay 16:9." -#: src/mgui/project/mb-actions.cpp:218 +#: src/mgui/project/add.cpp:113 msgid "Video size" msgstr "Kích cỡ phim" -#: src/mgui/project/mb-actions.cpp:238 +#: src/mgui/project/add.cpp:133 msgid "Frame rate" msgstr "Tỷ lệ khung" -#: src/mgui/project/mb-actions.cpp:239 +#: src/mgui/project/add.cpp:134 msgid "fps" msgstr "khung/giây" -#: src/mgui/project/mb-actions.cpp:247 +#: src/mgui/project/add.cpp:142 msgid "Aspect ratio" msgstr "Tỷ lệ hình thể" -#: src/mgui/project/mb-actions.cpp:322 +#: src/mgui/project/add.cpp:217 msgid "Bombono DVD can use \"DVD-ready\" video only now. Use muxing programs like \"mplex -f 8\" (from mjpegtools), mencoder (from mplayer) or transcode to make your video ready for Bombono DVD." msgstr "Bombono DVD giờ có khả năng sử dụng chỉ phim « sẵn sàng cho đĩa DVD ». Hãy dùng chương trình kết hợp lại (muxer) như « mplex -f 8 » (từ bộ công cụ mjpegtools), mencoder (từ mplayer) hay transcode để chuẩn bị phim cho trình Bombono DVD." -#: src/mgui/project/mb-actions.cpp:326 +#: src/mgui/project/add.cpp:221 msgid "DVD packs" msgstr "Bó DVD" -#: src/mgui/project/mb-actions.cpp:328 +#: src/mgui/project/add.cpp:223 msgid "NAV packets" msgstr "Gói tin NAV" -#: src/mgui/project/mb-actions.cpp:334 +#: src/mgui/project/add.cpp:229 msgid "This video may not be added due to (errors in red color):" msgstr "Phim này có thể không được thêm do (lỗi trong màu đỏ):" #. подскажем пользователю, что он ошибся форматом проекта -#: src/mgui/project/mb-actions.cpp:345 +#: src/mgui/project/add.cpp:240 #, boost-format msgid "This video has %1% type and can't be added to current project of %2% type. Create new project from menu \"Project->New Project\" with right type." msgstr "Phim này có kiểu %1% thì không thêm được vào dự án kiểu %2%. Hãy tạo một dự án mới trong trình đơn « Dự án > Dự án mới », cũng gán kiểu đúng." -#: src/mgui/project/mb-actions.cpp:373 +#: src/mgui/project/add.cpp:269 msgid "File doesn't exist." msgstr "Tập tin không tồn tại." -#: src/mgui/project/mb-actions.cpp:378 +#: src/mgui/project/add.cpp:274 msgid "Folders can't be added." msgstr "Không thêm được thư mục." #. по расширению выводим наиболее вероятную ошибку -#: src/mgui/project/mb-actions.cpp:413 +#: src/mgui/project/add.cpp:309 msgid "Unknown file type." msgstr "Không rõ dạng tập tin." -#: src/mgui/project/mb-actions.cpp:631 +#: src/mgui/project/add.cpp:379 #, boost-format msgid "" "The file \"%1%\" looks like VOB from DVD.\n" @@ -763,52 +625,148 @@ "Tập tin « %1% » hình như VOB từ đĩa DVD.\n" "Chạy tiến trình nhập vào ?" -#: src/mgui/project/mb-actions.cpp:648 +#: src/mgui/project/add.cpp:396 #, boost-format msgid "The file \"%1%\" looks like elementary stream and need to be muxed before using. Run muxing?" msgstr "Tập tin « %1% » hình như một luồng cơ bản thì cần phải được kết hợp lại (mux) trước khi sử dụng. Chạy tiến trình kết hợp lại ?" -#: src/mgui/project/mb-actions.cpp:710 +#: src/mgui/project/add.cpp:458 msgid "Also:" msgstr "Cũng: " -#: src/mgui/project/mb-actions.cpp:719 +#: src/mgui/project/add.cpp:471 #, boost-format msgid "See more about preparing video for authoring in online help." msgstr "Xem thêm về chuẩn bị phim để tạo đĩa trong trợ giúp trực tuyến." -#: src/mgui/project/mb-actions.cpp:727 +#: src/mgui/project/add.cpp:482 #, boost-format msgid "Can't add file \"%1%\"." msgstr "Không thêm được tập tin « %1% »." -#: src/mgui/project/mb-actions.cpp:730 +#: src/mgui/project/add.cpp:484 msgid "Can't add files:" msgstr "Không thể thêm những tập tin:" -#: src/mgui/project/media-browser.cpp:146 +#: src/mgui/project/browser.cpp:128 +#, boost-format +msgid "Do you really want to delete \"%1%\" from Media List?" +msgstr "Bạn có chắc muốn xoá « %1% » khỏi Danh sách Nhạc/Phim không?" + +#: src/mgui/project/browser.cpp:129 +#, boost-format +msgid "Do you really want to delete chapter \"%1%\"?" +msgstr "Bạn thực sự muốn xoá tập « %1% » không?" + +#: src/mgui/project/browser.cpp:130 +#, boost-format +msgid "Do you really want to delete menu \"%1%\"?" +msgstr "Bạn thực sự muốn xoá trình đơn « %1% » không?" + +#: src/mgui/project/browser.cpp:242 +msgid "First-Play media can be Video or Menu only." +msgstr "Phương tiện Phát-Trước chỉ có thể là Phim hay Trình đơn." + +#: src/mgui/project/mconstructor.cpp:335 +msgid "Bombono DVD is a DVD authoring program with nice and clean GUI" +msgstr "Bombono DVD là một chương trình tạo đĩa DVD có một giao diện đồ họa đẹp và thân thiện với người dùng" + +#. dlg.set_authors(authors); +#. dlg.set_documenters(documenters); +#. dlg.set_decorated(false); +#: src/mgui/project/mconstructor.cpp:340 +msgid "translator-credits" +msgstr "Clytie Siddall (clytie@riverland.net.au)" + +#. раньше Brasero использовал KiB, MiB и GiB, как более точные технически +#. (вроде как размеры HDD принято измерять по 1GB=1000MB); теперь Brasero +#. перешел на стандарт KB/MB/GB, ну и BmD тоже (а че, мы не гордые :) +#: src/mgui/project/mconstructor.cpp:527 +msgid "KB" +msgstr "KB" + +#: src/mgui/project/mconstructor.cpp:527 +msgid "GB" +msgstr "GB" + +#. Project +#: src/mgui/project/mconstructor.cpp:635 +msgid "_Project" +msgstr "_Dự án" + +#: src/mgui/project/mconstructor.cpp:642 +msgid "_Quit" +msgstr "T_hoát" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "Add Videos from _DVD" +msgstr "Thêm phim từ _DVD" + +#: src/mgui/project/mconstructor.cpp:644 +msgid "DVD-Import Assistant" +msgstr "Trợ lý nhập DVD" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "_Mux" +msgstr "_Kết hợp lại" + +#: src/mgui/project/mconstructor.cpp:646 +msgid "Mux Elementary Streams into MPEG2" +msgstr "Kết hợp lại các luồng cơ bản thành MPEG2" + +#: src/mgui/project/mconstructor.cpp:648 +msgid "Pr_eferences" +msgstr "T_uỳ thích" + +#. Go +#: src/mgui/project/mconstructor.cpp:687 +msgid "_Go" +msgstr "_Tới" + +#. первый вставляем сразу +#. Help +#: src/mgui/project/mconstructor.cpp:693 +msgid "_Help" +msgstr "Trợ g_iúp" + +#: src/mgui/project/mconstructor.cpp:818 +msgctxt "MainTabs" +msgid "_Source" +msgstr "_Nguồn" + +#: src/mgui/project/mconstructor.cpp:820 +msgctxt "MainTabs" +msgid "_Menu" +msgstr "T_rình đơn" + +#: src/mgui/project/mconstructor.cpp:822 +msgctxt "MainTabs" +msgid "_Output" +msgstr "_Xuất" + +#: src/mgui/project/media-browser.cpp:148 msgid "Previous Menu" msgstr "Trình đơn trước" -#: src/mgui/project/media-browser.cpp:146 #: src/mgui/project/media-browser.cpp:148 +#: src/mgui/project/media-browser.cpp:150 msgid "Next Video" msgstr "Phim tiếp" -#: src/mgui/project/media-browser.cpp:147 +#: src/mgui/project/media-browser.cpp:149 #, boost-format msgid "Auto (%1%)" msgstr "Tự động (%1%)" -#: src/mgui/project/media-browser.cpp:177 +#: src/mgui/project/media-browser.cpp:179 msgid "End Action" msgstr "Kết thúc hành vi" -#: src/mgui/project/media-browser.cpp:201 +#: src/mgui/project/media-browser.cpp:203 msgid "Still Picture" msgstr "Ảnh tĩnh" -#: src/mgui/project/media-browser.cpp:233 +#: src/mgui/project/media-browser.cpp:235 msgid "Type" msgstr "Kiểu" @@ -818,97 +776,159 @@ #. vbox.pack_start(label, Gtk::PACK_SHRINK); #. Gtk::Requisition req = label.size_request(); #. label.set_size_request(0, req.height+10); -#: src/mgui/project/media-browser.cpp:291 -#: src/mgui/project/menu-browser.cpp:373 +#: src/mgui/project/media-browser.cpp:293 +#: src/mgui/project/menu-browser.cpp:374 msgid "Media List" msgstr "Danh sách Nhạc/Phim" -#: src/mgui/project/media-browser.cpp:331 +#: src/mgui/project/media-browser.cpp:333 msgid "Add Media from File Browser" msgstr "Thêm nhạc/phim từ Bộ Quản lý Tập tin" -#: src/mgui/project/media-browser.cpp:340 +#: src/mgui/project/media-browser.cpp:342 msgid "Remove Media" msgstr "Bỏ nhạc/phim" -#: src/mgui/project/media-browser.cpp:351 +#: src/mgui/project/media-browser.cpp:353 msgid "Make Chapters for Video" msgstr "Chia phim ra các tập" -#: src/mgui/project/menu-browser.cpp:190 +#: src/mgui/project/menu-browser.cpp:191 msgid "No Link" msgstr "Không có liên kết" #. * subj -#: src/mgui/project/menu-browser.cpp:337 +#: src/mgui/project/menu-browser.cpp:338 msgid "Menu List" msgstr "Danh sách Trình đơn" -#: src/mgui/project/menu-browser.cpp:353 +#: src/mgui/project/menu-browser.cpp:354 msgid "Add Menu" msgstr "Thêm trình đơn" -#: src/mgui/project/menu-browser.cpp:358 +#: src/mgui/project/menu-browser.cpp:359 msgid "Remove Menu" msgstr "Bỏ trình đơn" -#: src/mgui/project/menu-browser.cpp:363 +#: src/mgui/project/menu-browser.cpp:364 msgid "Edit Menu" msgstr "Sửa trình đơn" +#: src/mgui/project/serialize.cpp:61 +msgid "Save Project As..." +msgstr "Lưu dự án dạng..." + +#: src/mgui/project/serialize.cpp:93 +#, boost-format +msgid "Cant open project file \"%1%\"" +msgstr "Không thể mở tập tin dự án « %1% »" + +#: src/mgui/project/serialize.cpp:166 +#, boost-format +msgid "Save changes to \"%1%\"?" +msgstr "Lưu các thay đổi vào %1% ?" + +#: src/mgui/project/serialize.cpp:168 +msgid "Close _without Saving" +msgstr "Đóng mà _không lưu" + +#: src/mgui/project/serialize.cpp:206 +msgid "New Project" +msgstr "Dự án mới" + +#: src/mgui/project/serialize.cpp:215 +msgid "Please select a Television standard for your project:" +msgstr "Hãy chọn một tiêu chuẩn TV cho dự án này:" + +#: src/mgui/project/serialize.cpp:237 +msgid "Open Project" +msgstr "Mở dự án" + +#: src/mgui/project/serialize.cpp:241 +msgid "Project files (*.xml)" +msgstr "Tập tin dự án (*.xml)" + +#: src/mgui/project/serialize.cpp:246 src/mgui/timeline/mviewer.cpp:283 +msgid "All Files (*.*)" +msgstr "Mọi tập tin (*.*)" + +#: src/mgui/project/serialize.cpp:308 +msgid "_New Project" +msgstr "Dự á_n mới" + +#: src/mgui/project/serialize.cpp:310 +msgid "_Open..." +msgstr "_Mở..." + +#: src/mgui/project/serialize.cpp:312 +msgid "_Save" +msgstr "_Lưu" + +#: src/mgui/project/serialize.cpp:314 +msgid "Save _As..." +msgstr "Lưu _dạng..." + #. Add -#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:193 +#: src/mgui/timeline/layout.cpp:526 src/mgui/timeline/select.cpp:216 msgid "Add Chapter Point" msgstr "Thêm điểm Tập " +#: src/mgui/timeline/mviewer.cpp:76 +msgid "Error while opening file:" +msgstr "Gặp lỗi trong khi mở tập tin:" + #. 0 надпись -#: src/mgui/timeline/mviewer.cpp:239 +#: src/mgui/timeline/mviewer.cpp:249 msgid "File Browser" msgstr "Bộ duyệt tập tin" -#: src/mgui/timeline/mviewer.cpp:269 +#: src/mgui/timeline/mviewer.cpp:279 msgid "All formats" msgstr "Mọi định dạng" -#: src/mgui/timeline/mviewer.cpp:270 +#: src/mgui/timeline/mviewer.cpp:280 msgid "MPEG files" msgstr "Tập tin MPEG" -#: src/mgui/timeline/mviewer.cpp:272 +#: src/mgui/timeline/mviewer.cpp:282 msgid "Still Images" msgstr "Ảnh tĩnh" -#: src/mgui/timeline/select.cpp:127 +#: src/mgui/timeline/select.cpp:143 +msgid "A_dd to project" +msgstr "Thêm vào _dự án" + +#: src/mgui/timeline/select.cpp:146 msgid "Save Frame..." msgstr "Lưu khung..." #. Add at Intervals -#: src/mgui/timeline/select.cpp:147 src/mgui/timeline/select.cpp:205 +#: src/mgui/timeline/select.cpp:170 src/mgui/timeline/select.cpp:228 msgid "Add Chapter Points at Intervals" msgstr "Thêm điểm Tập theo khoảng" -#: src/mgui/timeline/select.cpp:153 +#: src/mgui/timeline/select.cpp:176 msgid "Interval between Chapters:" msgstr "Khoảng giữa hai Tập:" -#: src/mgui/timeline/select.cpp:160 +#: src/mgui/timeline/select.cpp:183 msgid "min." msgstr "phút" -#: src/mgui/timeline/select.cpp:163 +#: src/mgui/timeline/select.cpp:186 msgid "Remove Existing Chapters" msgstr "Bỏ các Tập đã có" #. Delete -#: src/mgui/timeline/select.cpp:196 +#: src/mgui/timeline/select.cpp:219 msgid "Delete Chapter Point" msgstr "Xoá điểm Tập" #. Delete All -#: src/mgui/timeline/select.cpp:200 +#: src/mgui/timeline/select.cpp:223 msgid "Delete All Chapter Points" msgstr "Xoá mọi điểm Tập" -#: src/mgui/timeline/select.cpp:213 +#: src/mgui/timeline/select.cpp:236 msgid "Save Current Frame" msgstr "Lưu khung hiện tại" diff -Nru bombono-dvd-0.7.0/prjs/mbase.vpj bombono-dvd-0.8.0/prjs/mbase.vpj --- bombono-dvd-0.7.0/prjs/mbase.vpj 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/prjs/mbase.vpj 2010-11-01 21:58:28.000000000 +0000 @@ -192,6 +192,7 @@ + @@ -216,6 +217,7 @@ + diff -Nru bombono-dvd-0.7.0/prjs/mgui_tests.vpj bombono-dvd-0.8.0/prjs/mgui_tests.vpj --- bombono-dvd-0.7.0/prjs/mgui_tests.vpj 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/prjs/mgui_tests.vpj 2010-11-01 21:58:28.000000000 +0000 @@ -189,6 +189,7 @@ Name="Source Files" Filters="*.c;*.C;*.cc;*.cpp;*.cp;*.cxx;*.prg;*.pas;*.dpr;*.asm;*.s;*.bas;*.java;*.cs;*.sc;*.e;*.cob;*.html;*.rc;*.tcl;*.py;*.pl"> + @@ -202,6 +203,7 @@ + diff -Nru bombono-dvd-0.7.0/prjs/mgui.vpj bombono-dvd-0.8.0/prjs/mgui.vpj --- bombono-dvd-0.7.0/prjs/mgui.vpj 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/prjs/mgui.vpj 2010-11-01 21:58:28.000000000 +0000 @@ -212,6 +212,7 @@ + @@ -221,6 +222,7 @@ + @@ -265,6 +267,7 @@ + @@ -313,6 +316,7 @@ + @@ -322,7 +326,6 @@ - @@ -341,7 +344,9 @@ + + diff -Nru bombono-dvd-0.7.0/README bombono-dvd-0.8.0/README --- bombono-dvd-0.7.0/README 2010-10-07 22:20:07.000000000 +0000 +++ bombono-dvd-0.8.0/README 2010-11-01 21:58:26.000000000 +0000 @@ -16,7 +16,7 @@ Boyer-Moore algorithm code in src/mlib/sdk/memmem.h is licensed under docs/Python-License.txt. -Version: 0.7.0 +Version: 0.8.0 Author: Ilya Murav'jov @@ -43,6 +43,7 @@ o dvd+rw-tools - http://fy.chalmers.se/~appro/linux/DVD+RW/ o twolame - http://www.twolame.org/ o libxml++ - http://libxmlplusplus.sourceforge.net/ + o ffmpeg - http://www.ffmpeg.org/ II. You need SCons to build Bombono DVD - maybe the best build tool ever. ;) SCons is just make&autotools&libtool all together. Type: diff -Nru bombono-dvd-0.7.0/resources/scons_authoring/ADVD.py bombono-dvd-0.8.0/resources/scons_authoring/ADVD.py --- bombono-dvd-0.7.0/resources/scons_authoring/ADVD.py 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/resources/scons_authoring/ADVD.py 2010-11-01 21:58:28.000000000 +0000 @@ -4,21 +4,22 @@ import SConsTwin import ASettings -def MakeMenu(env): - # 1 - m2v - # '-a' - аспект: (1 - 1:1) 2 - 4:3, 3 - 16:9 (4 - 2.21:1) - aspect = '2' - if not ASettings.Is4_3: - aspect = '3' - # возможные опции оптимизации: -b , -q , -H - # однако отображение в totem все равно гораздо хуже, чем снимок того же кадра, сделанного в totem! - options = "-f 8" - # 'n -1' sucks: need to generate two frames (n -2) - # for much better encoding quality with mpeg2enc (thanks to stagediverr) - env.Command('Menu.m2v', 'Menu.png', "png2yuv -n 2 -I p -f 25 -j $SOURCE | mpeg2enc -a " + aspect + " " + options + " -o $TARGET") - - # 2 - mpg - env.Command('Menu.mpg', ['Menu.m2v', '#Silent.mp2'], "mplex -f 8 -o $TARGET $SOURCES") +def MakeMenu(env, is_moving): + if not is_moving: + # 1 - m2v + # '-a' - аспект: (1 - 1:1) 2 - 4:3, 3 - 16:9 (4 - 2.21:1) + aspect = '2' + if not ASettings.Is4_3: + aspect = '3' + # возможные опции оптимизации: -b , -q , -H + # однако отображение в totem все равно гораздо хуже, чем снимок того же кадра, сделанного в totem! + options = "-f 8" + # 'n -1' sucks: need to generate two frames (n -2) + # for much better encoding quality with mpeg2enc (thanks to stagediverr) + env.Command('Menu.m2v', 'Menu.png', "png2yuv -n 2 -I p -f 25 -j $SOURCE | mpeg2enc -a " + aspect + " " + options + " -o $TARGET") + + # 2 - mpg + env.Command('Menu.mpg', ['Menu.m2v', '#Silent.mp2'], "mplex -f 8 -o $TARGET $SOURCES") # 3 - menu subpictures import SCons.Action diff -Nru bombono-dvd-0.7.0/resources/scons_authoring/menu_SConscript bombono-dvd-0.8.0/resources/scons_authoring/menu_SConscript --- bombono-dvd-0.7.0/resources/scons_authoring/menu_SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/resources/scons_authoring/menu_SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -2,4 +2,4 @@ # coding: utf-8 Import('MakeADVDMenu') -MakeADVDMenu(DefaultEnvironment()) +MakeADVDMenu(DefaultEnvironment(), %1%) diff -Nru bombono-dvd-0.7.0/src/mbase/composite/component.h bombono-dvd-0.8.0/src/mbase/composite/component.h --- bombono-dvd-0.7.0/src/mbase/composite/component.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/composite/component.h 2010-11-01 21:58:28.000000000 +0000 @@ -89,18 +89,20 @@ class MediaObj: public Object { public: - MediaObj(): mdItem(this) {} + MediaObj(): mdItem(this), playAll(false) {} // положение на холсте const Rect& Placement() const { return mdPlc; } virtual void SetPlacement(const Rect& rct) { mdPlc = rct; } MediaLink& MediaItem() { return mdItem; } + bool& PlayAll() { return playAll; } protected: Rect mdPlc; MediaLink mdItem; + bool playAll; // альтернатива явному mdItem }; // // шаблон для объектов, порожденных от MediaStrategy diff -Nru bombono-dvd-0.7.0/src/mbase/instantiate.cpp bombono-dvd-0.8.0/src/mbase/instantiate.cpp --- bombono-dvd-0.7.0/src/mbase/instantiate.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/instantiate.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mbase/instantiate.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include diff -Nru bombono-dvd-0.7.0/src/mbase/obj_bind.cpp bombono-dvd-0.8.0/src/mbase/obj_bind.cpp --- bombono-dvd-0.7.0/src/mbase/obj_bind.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/obj_bind.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -224,16 +224,42 @@ void ForeachWithPoster(Project::MediaItem mi, Composition::FOFunctor fnr) { - ForeachLinked(PosterLinks(), mi, bl::bind(&PosterFunctorImpl, bl::_1, boost::ref(fnr))); + ForeachLinked(PosterLinks(), mi, bb::bind(&PosterFunctorImpl, _1, boost::ref(fnr))); +} + +std::string MediaItem2String(Project::MediaItem mi) +{ + std::string res("0(Null)"); + if( mi ) + res = mi->mdName + "(" + mi->TypeString() + ")"; + return res; +} + +void PrintAbandonedLinks(MILinkList& links) +{ + io::cout << "###############" << io::endl; + io::cout << "Abandoned Links" << io::endl; + io::cout << "###############" << io::endl; + boost_foreach( const MILink& lnk, links ) + io::cout << MediaItem2String(lnk.ref) << io::endl; + io::cout << "###############" << io::endl; } // удостовериться, что все связей нет void CheckObjectLinksEmpty() { // видеопереходы - ASSERT( MenuLinks().empty() ); + if( !MenuLinks().empty() ) + { + PrintAbandonedLinks(MenuLinks()); + ASSERT( 0 ); + } // постеры для кнопок - ASSERT( PosterLinks().empty() ); + if( !PosterLinks().empty() ) + { + PrintAbandonedLinks(PosterLinks()); + ASSERT( 0 ); + } } diff -Nru bombono-dvd-0.7.0/src/mbase/obj_bind.h bombono-dvd-0.8.0/src/mbase/obj_bind.h --- bombono-dvd-0.7.0/src/mbase/obj_bind.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/obj_bind.h 2010-11-01 21:58:28.000000000 +0000 @@ -39,5 +39,7 @@ // затем по пунктам меню), однако могут быть проблемы при удалении меню/пунктов в процессе // перебора +std::string MediaItem2String(Project::MediaItem mi); + #endif // #ifndef __MBASE_OBJ_BIND_H__ diff -Nru bombono-dvd-0.7.0/src/mbase/pixel.cpp bombono-dvd-0.8.0/src/mbase/pixel.cpp --- bombono-dvd-0.7.0/src/mbase/pixel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/pixel.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -0,0 +1,50 @@ +// +// mbase/pixel.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include + +#include "pixel.h" + +namespace RGBA +{ + +Pixel::Pixel(const unsigned int rgba) +{ + FromUint(rgba); +} + +Pixel& Pixel::FromUint(const unsigned int rgba) +{ + red = rgba >> 24; + green = (rgba & 0x00ff0000) >> 16; + blue = (rgba & 0x0000ff00) >> 8; + alpha = (rgba & 0x000000ff); + + return *this; +} + +unsigned int Pixel::ToUint() +{ + return (red << 24) | (green << 16) | (blue << 8) | alpha; +} + +} // namespace RGBA + diff -Nru bombono-dvd-0.7.0/src/mbase/pixel.h bombono-dvd-0.8.0/src/mbase/pixel.h --- bombono-dvd-0.7.0/src/mbase/pixel.h 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/pixel.h 2010-11-01 21:58:28.000000000 +0000 @@ -0,0 +1,61 @@ +// +// mbase/pixel.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __MBASE_PIXEL_H__ +#define __MBASE_PIXEL_H__ + +#include + +inline int Round(double val) { return int(round(val)); } + +namespace RGBA +{ + +#include PACK_ON +struct Pixel +{ + typedef unsigned char ClrType; + static const ClrType MinClr = 0; + static const ClrType MaxClr = 255; + + ClrType red; + ClrType green; + ClrType blue; + ClrType alpha; + + Pixel(): red(MinClr), green(MinClr), blue(MinClr), alpha(MaxClr) {} + Pixel(ClrType r, ClrType g, ClrType b, ClrType a = MaxClr): + red(r), green(g), blue(b), alpha(a) {} + Pixel(const unsigned int rgba); + //Pixel(const Gdk::Color& clr); + + Pixel& FromUint(const unsigned int rgba); +unsigned int ToUint(); + + static double FromQuant(ClrType c) { return (double)c/MaxClr; } + static ClrType ToQuant(double c) { return ClrType( Round(c*MaxClr) ); } +}; +#include PACK_OFF + +} // namespace RGBA + +#endif // #ifndef __MBASE_PIXEL_H__ + diff -Nru bombono-dvd-0.7.0/src/mbase/project/_extlibs_.h bombono-dvd-0.8.0/src/mbase/project/_extlibs_.h --- bombono-dvd-0.7.0/src/mbase/project/_extlibs_.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/_extlibs_.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mbase/project/_extlibs_.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -40,7 +40,7 @@ //#ifndef EXT_BOOST //#include //#endif // EXT_BOOST -#include +//#include #include // diff -Nru bombono-dvd-0.7.0/src/mbase/project/media.h bombono-dvd-0.8.0/src/mbase/project/media.h --- bombono-dvd-0.7.0/src/mbase/project/media.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/media.h 2010-11-01 21:58:28.000000000 +0000 @@ -97,9 +97,12 @@ enum PostActionType { patAUTO = 0, // (по умолчанию) наиболее ожидаемое действие - // при "существующей топологии проекта" + // при "существующей топологии проекта": + // - для меню это Loop + // - для видео - Previous Menu или Next Video patNEXT_TITLE, // (для видео) следующий по списку patEXP_LINK, // явная ссылка + patPLAY_ALL, // смотреть все }; struct PostAction diff -Nru bombono-dvd-0.7.0/src/mbase/project/menu.cpp bombono-dvd-0.8.0/src/mbase/project/menu.cpp --- bombono-dvd-0.7.0/src/mbase/project/menu.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/menu.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -31,6 +31,9 @@ namespace Project { +SubpicturePalette::SubpicturePalette(): selClr(HIGH_CLR), actClr(SELECT_CLR) +{} + Menu IsMenu(MediaItem mi) { return ptr::dynamic_pointer_cast(mi); @@ -55,34 +58,85 @@ return NameValue("MenuItem", *mi); } +template +void LoadRef(Archieve& ar, const char* attr_name, T& mi) +{ + std::string ref; + ar >> NameValue(attr_name, ref); + //mi = Ref2Media(ref); + typedef typename MITypes::RefArr RefArr; + AData().GetData().push_back(std::make_pair(&mi, ref)); +} + +void SaveRef(Archieve& ar, const char* attr_name, MediaItem mi) +{ + ar << NameValue(attr_name, Media2Ref(mi)); +} + void SerializeReference(Archieve& ar, const char* attr_name, MediaItem& mi) { if( ar.IsLoad() ) + LoadRef(ar, attr_name, mi); + else + SaveRef(ar, attr_name, mi); +} + +void SerializeReference(Archieve& ar, const char* attr_name, WMediaItem& wi) +{ + if( ar.IsLoad() ) + LoadRef(ar, attr_name, wi); + else + SaveRef(ar, attr_name, wi.lock()); +} + +void SerializePath(Archieve& ar, const char* tag_name, std::string& fpath); + +static void Serialize(Archieve& ar, MotionData& mtn_data) +{ + ar( "IsMotion", mtn_data.isMotion ) + ( "Duration", mtn_data.duration ) + ( "IsStillPicture", mtn_data.isStillPicture ) + ( "IsInternalAudio", mtn_data.isIntAudio ); + + SerializeReference(ar, "AudioRef", mtn_data.audioRef); + SerializePath(ar, "ExtAudio", mtn_data.audioExtPath); + SerializePostAction(ar, mtn_data.pAct); +} + +static void SerializeColor(Archieve& ar, const char* tag_name, RGBA::Pixel& clr) +{ + if( ar.IsLoad() ) { - std::string ref; - ar >> NameValue(attr_name, ref); - //mi = Ref2Media(ref); - AData().GetData().push_back(std::make_pair(&mi, ref)); + std::string tmp; + ar >> NameValue(tag_name, tmp); + clr = MakeColor(tmp); } - else - ar << NameValue(attr_name, Media2Ref(mi)); + else // IsSave + ar << NameValue(tag_name, ToString(clr)); } void MenuMD::SerializeImpl(Archieve& ar) { // * параметры - ar( "Params", mPrms ) - ( "Color", color ); + ar( "Params", mPrms ) + ( "Color", color ); SerializeReference(ar, "BGRef", bgRef); + ar( "MotionData", mtnData ); + + // * цвета субкартинок + { + ArchieveStackFrame asf(ar, "SubpicturePalette"); + SerializeColor(ar, "Selected", subPal.selClr); + SerializeColor(ar, "Activated", subPal.actClr); + } // * пункты меню { ArchieveStackFrame asf(ar, "MenuItems"); if( ar.IsLoad() ) { - using namespace boost; ArchieveFunctor fnr = - MakeArchieveFunctor( lambda::bind(&LoadMenuItem, boost::ref(ar), this) ); + MakeArchieveFunctor( bb::bind(&LoadMenuItem, boost::ref(ar), this) ); LoadArray(ar, fnr); } else @@ -245,7 +299,8 @@ SerializeReference(ar, "Ref", itmRef); // * - ar & NameValue("Placement", itmPlc); + ar( "Placement", itmPlc ) + ( "PlayAll", playAll ); } void FrameItemMD::SerializeImpl(Archieve& ar) diff -Nru bombono-dvd-0.7.0/src/mbase/project/menu.h bombono-dvd-0.8.0/src/mbase/project/menu.h --- bombono-dvd-0.7.0/src/mbase/project/menu.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/menu.h 2010-11-01 21:58:28.000000000 +0000 @@ -22,9 +22,12 @@ #ifndef __MBASE_PROJECT_MENU_H__ #define __MBASE_PROJECT_MENU_H__ -#include // MenuParams #include "media.h" +#include + +#include // MenuParams + namespace Project { @@ -34,6 +37,40 @@ typedef boost::intrusive_ptr Menu; typedef boost::intrusive_ptr MenuItem; +typedef ptr::weak_intrusive WMediaItem; + +const double DEF_MOTION_DURATION = 20; // 20 секунд +const double MAX_MOTION_DURATION = 10*60; // 10 минут + +struct MotionData +{ + bool isMotion; // меню будет анимационным + double duration; // длительность в секундах + bool isStillPicture; // "неподвижное видео" + + bool isIntAudio; + WMediaItem audioRef; // отсюда берем аудио (видео или глава!) + std::string audioExtPath; + + PostAction pAct; + + MotionData(): isMotion(false), duration(DEF_MOTION_DURATION), isStillPicture(false), + isIntAudio(true) {} +}; + +// используем "родной" прозрачный цвет в png +//const uint BLACK2_CLR = 0x010101ff; // заменяется на прозрачный spumux'ом +const uint HIGH_CLR = 0xfff00080; // прозрачность = 50% +const uint SELECT_CLR = 0xff006c80; + +struct SubpicturePalette +{ + RGBA::Pixel selClr; // технически это "highlight" + RGBA::Pixel actClr; // "select" + + SubpicturePalette(); +}; + // меню class MenuMD: public PSO // от Media { @@ -48,7 +85,9 @@ ListType& List() { return itmLst; } MediaItem& BgRef() { return bgRef; } std::string& Color() { return color; } + MotionData& MtnData(){ return mtnData; } + SubpicturePalette subPal; virtual std::string TypeString() { return "Menu"; } virtual void SerializeImpl(Archieve& /*ar*/); @@ -58,6 +97,7 @@ ListType itmLst; // список глав MediaItem bgRef; // фон меню std::string color; + MotionData mtnData; }; Menu IsMenu(MediaItem mi); @@ -66,12 +106,14 @@ class MenuItemMD: public Media { public: - MenuItemMD(): owner(0) {} + MenuItemMD(): owner(0), playAll(false) {} // положение на холсте Rect& Placement() { return itmPlc; } MediaItem& Ref() { return itmRef; } + bool playAll; + virtual void SerializeImpl(Archieve& ar); protected: @@ -132,8 +174,12 @@ std::string Media2Ref(MediaItem mi); MediaItem Ref2Media(const std::string& ref); -// при загрузке устанавливаем ссылки в конце, когда все объекты уже загружены -typedef std::vector > MediaRefArr; +template +struct MITypes +{ + // при загрузке устанавливаем ссылки в конце, когда все объекты уже загружены + typedef std::vector > RefArr; +}; } // namespace Project diff -Nru bombono-dvd-0.7.0/src/mbase/project/serialization.h bombono-dvd-0.8.0/src/mbase/project/serialization.h --- bombono-dvd-0.7.0/src/mbase/project/serialization.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/serialization.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mbase/project/serialization.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -108,7 +108,7 @@ template ToStringConverter GetConverter(const T& t) { - return boost::lambda::bind(&MakeString, t); + return bb::bind(&MakeString, t); } } // namespace ToString @@ -137,8 +137,7 @@ template FromStringConverter GetConverter(const T& t) { - using namespace boost; - return lambda::bind(&MakeType, boost::ref(const_cast(t)), lambda::_1); + return bb::bind(&MakeType, boost::ref(const_cast(t)), _1); } } // namespace FromString @@ -195,11 +194,23 @@ template struct DoStringType { + struct saver + { + const char* str; + saver(const char* s): str(s) {} + std::string operator()() const { return str; } + }; + template static void Invoke(SaverFnr& ar, const T& t) { //io::cout << "This is char*-variant, " << t << io::endl; - ar.SerializeStringable(ToString::GetConverter(t)); + + // при замене B.L. -> B.B. оказалось, что последний не дружит + // с MakeString() при T = const char[N]; потому заменяем + // (заодно упрощаем) + //ar.SerializeStringable(ToString::GetConverter(t)); + ar.SerializeStringable(saver(t)); } template diff -Nru bombono-dvd-0.7.0/src/mbase/project/srl-common.cpp bombono-dvd-0.8.0/src/mbase/project/srl-common.cpp --- bombono-dvd-0.7.0/src/mbase/project/srl-common.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/srl-common.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mbase/project/srl-common.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -22,6 +22,7 @@ #include #include "srl-common.h" +#include namespace Project { @@ -32,6 +33,54 @@ ar & NameValue("Aspect", mp.GetAF()); } +std::string ToString(const RGBA::Pixel& pxl) +{ + using Mpeg::set_hms; + return (str::stream("#") << std::hex + << set_hms() << (int)pxl.red + << set_hms() << (int)pxl.green + << set_hms() << (int)pxl.blue << (int)pxl.alpha).str(); +} + +// как pango_color_parse() +static bool ParseHex2(const char* src, unsigned char& c) +{ + bool res = true; + int len = 2; + for( const char* end = src + len; src != end; src++ ) + if( g_ascii_isxdigit(*src) ) + c = (c << 4) | g_ascii_xdigit_value(*src); + else + { + res = false; + break; + } + return res; +} + +bool ParseColor(RGBA::Pixel& pxl, const std::string& clr_str) +{ + bool res = false; + if( (clr_str.size() == 1+8) && (clr_str[0] == '#') ) + { + if( ParseHex2(clr_str.c_str()+1, pxl.red) && + ParseHex2(clr_str.c_str()+3, pxl.green) && + ParseHex2(clr_str.c_str()+5, pxl.blue) && + ParseHex2(clr_str.c_str()+7, pxl.alpha) ) + res = true; + } + + if( !res ) + pxl = RGBA::Pixel(); // черный если ошибки + return res; +} + +RGBA::Pixel MakeColor(const std::string& clr_str) +{ + RGBA::Pixel clr; + ParseColor(clr, clr_str); + return clr; +} } // namespace Project diff -Nru bombono-dvd-0.7.0/src/mbase/project/srl-common.h bombono-dvd-0.8.0/src/mbase/project/srl-common.h --- bombono-dvd-0.7.0/src/mbase/project/srl-common.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/srl-common.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mbase/project/srl-common.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ #include "media.h" #include "archieve.h" +#include namespace Project { @@ -54,6 +55,11 @@ void Serialize(Archieve& ar, MenuParams& mp); void SerializeReference(Archieve& ar, const char* attr_name, MediaItem& mi); +std::string ToString(const RGBA::Pixel& pxl); +RGBA::Pixel MakeColor(const std::string& clr_str); + +void SerializePostAction(Archieve& ar, PostAction& pa); + } // namespace Project #endif // #ifndef __MBASE_PROJECT_TABLE_SRL_H__ diff -Nru bombono-dvd-0.7.0/src/mbase/project/srl-db.cpp bombono-dvd-0.8.0/src/mbase/project/srl-db.cpp --- bombono-dvd-0.7.0/src/mbase/project/srl-db.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/srl-db.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mbase/project/srl-db.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -46,46 +46,47 @@ static void Load(Archieve& ar, MenuList& ml) { - using namespace boost; ArchieveFunctor fnr = - MakeArchieveFunctor( lambda::bind(&LoadMenu, boost::ref(ml)) ); + MakeArchieveFunctor( bb::bind(&LoadMenu, boost::ref(ml)) ); LoadArray(ar, fnr); } APROJECT_SRL_SPLIT_FREE(MenuList) +template class DelayedRefLoading { + typedef typename MITypes::RefArr RefArr; public: - DelayedRefLoading(): arr(AData().GetData()) + DelayedRefLoading(): arr(AData().GetData()) { arr.clear(); } ~DelayedRefLoading() { - if( std::uncaught_exception() ) - arr.clear(); - - if( !arr.empty() ) // только в случае загрузки будет непустым + if( !std::uncaught_exception() ) { - for( MediaRefArr::iterator itr = arr.begin(), end = arr.end(); itr != end; ++itr ) + typedef typename RefArr::iterator iterator; + // только в случае загрузки будет непустым + for( iterator itr = arr.begin(), end = arr.end(); itr != end; ++itr ) { - MediaItem& mi = *(itr->first); + Item& mi = *(itr->first); mi = Ref2Media(itr->second); } - arr.clear(); } + arr.clear(); } protected: - MediaRefArr& arr; + RefArr& arr; }; void DbSerializeProjectImpl(Archieve& ar) { - DelayedRefLoading drl; + DelayedRefLoading drl; + DelayedRefLoading wdrl; // секция "Globals" { diff -Nru bombono-dvd-0.7.0/src/mbase/project/table.cpp bombono-dvd-0.8.0/src/mbase/project/table.cpp --- bombono-dvd-0.7.0/src/mbase/project/table.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/table.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -31,7 +31,7 @@ #include -const char* APROJECT_VERSION = "0.7.0"; +const char* APROJECT_VERSION = "0.8.0"; namespace Project { @@ -150,27 +150,61 @@ return NameValue("Media", *md); } -void StorageMD::SerializeImpl(Archieve& ar) +// либо пусто, либо полный путь +void SerializePath(Archieve& ar, const char* tag_name, std::string& fpath) { //ar & NameValue("Path", mdPath); fs::path rel_to_dir = fs::path(AData().GetProjectFName()).branch_path(); if( ar.IsLoad() ) { - ar >> NameValue("Path", mdPath); + ar >> NameValue(tag_name, fpath); - fs::path pth(mdPath); - if( !pth.is_complete() ) - mdPath = (rel_to_dir/mdPath).string(); + if( !fpath.empty() ) + { + fs::path pth(fpath); + if( !pth.is_complete() ) + fpath = (rel_to_dir/fpath).string(); + } } else // IsSave { - fs::path pth(mdPath); - MakeRelativeToDir(pth, rel_to_dir); + std::string res; + if( !fpath.empty() ) + { + + fs::path pth(fpath); + MakeRelativeToDir(pth, rel_to_dir); + res = pth.string(); + } - ar << NameValue("Path", pth.string()); + ar << NameValue(tag_name, res); } } +void StorageMD::SerializeImpl(Archieve& ar) +{ + ////ar & NameValue("Path", mdPath); + //fs::path rel_to_dir = fs::path(AData().GetProjectFName()).branch_path(); + //if( ar.IsLoad() ) + //{ + // ar >> NameValue("Path", mdPath); + // + // fs::path pth(mdPath); + // if( !pth.is_complete() ) + // mdPath = (rel_to_dir/mdPath).string(); + //} + //else // IsSave + //{ + // fs::path pth(mdPath); + // MakeRelativeToDir(pth, rel_to_dir); + // + // ar << NameValue("Path", pth.string()); + //} + if( ar.IsSave() ) + ASSERT( !mdPath.empty() ); + SerializePath(ar, "Path", mdPath); +} + void StillImageMD::SerializeImpl(Archieve& ar) { MyParent::SerializeImpl(ar); @@ -192,6 +226,11 @@ SerializeReference(ar, "Ref", pa.paLink); } +void SerializePostAction(Archieve& ar, PostAction& pa) +{ + ar("PostAction", pa); +} + void VideoMD::SerializeImpl(Archieve& ar) { MyParent::SerializeImpl(ar); @@ -203,9 +242,8 @@ ArchieveStackFrame asf(ar, "Parts"); if( ar.IsLoad() ) { - using namespace boost; ArchieveFunctor fnr = - MakeArchieveFunctor( lambda::bind(&LoadChapter, this) ); + MakeArchieveFunctor( bb::bind(&LoadChapter, this) ); LoadArray(ar, fnr); } else // IsSave @@ -215,7 +253,7 @@ } } - ar("PostAction", pAct); + SerializePostAction(ar, pAct); } void VideoChapterMD::SerializeImpl(Archieve& ar) @@ -232,10 +270,8 @@ void Load(Archieve& ar, MediaList& md_list) { - using namespace boost; - ArchieveFunctor fnr = - MakeArchieveFunctor( lambda::bind(&LoadMedia, boost::ref(ar), boost::ref(md_list)) ); + MakeArchieveFunctor( bb::bind(&LoadMedia, boost::ref(ar), boost::ref(md_list)) ); LoadArray(ar, fnr); } diff -Nru bombono-dvd-0.7.0/src/mbase/project/tests/test_srl.cpp bombono-dvd-0.8.0/src/mbase/project/tests/test_srl.cpp --- bombono-dvd-0.7.0/src/mbase/project/tests/test_srl.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/project/tests/test_srl.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mbase/project/test_srl.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -103,7 +103,7 @@ { Archieve ar(root_node, true); ArchieveFunctor fnr = - MakeArchieveFunctor( boost::lambda::bind(&LoadTestData, boost::ref(arr2)) ); + MakeArchieveFunctor( bb::bind(&LoadTestData, boost::ref(arr2)) ); LoadArray(ar, fnr); } diff -Nru bombono-dvd-0.7.0/src/mbase/SConscript bombono-dvd-0.8.0/src/mbase/SConscript --- bombono-dvd-0.7.0/src/mbase/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mbase/SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -10,6 +10,7 @@ 'composite/component.cpp', 'instantiate.cpp', 'obj_bind.cpp', + 'pixel.cpp', #'resources.cpp', 'project/archieve.cpp', diff -Nru bombono-dvd-0.7.0/src/mcomposite/moptions.cpp bombono-dvd-0.8.0/src/mcomposite/moptions.cpp --- bombono-dvd-0.7.0/src/mcomposite/moptions.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mcomposite/moptions.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -20,7 +20,6 @@ // #include -#include // S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH #include @@ -79,27 +78,6 @@ return 0; } -// открыть файл: только для чтения (is_read) или только для записи -int OpenFileAsArg(const char* fpath, bool is_read) -{ - int fd = is_read ? IN_HNDL : OUT_HNDL ; - int opts = is_read ? O_RDONLY : O_WRONLY|O_CREAT|O_TRUNC ; - - if( strcmp( fpath, "-" ) != 0 ) - { - // обязательно выставляем режим mode с S_IRUSR|S_IWUSR, - // иначе у нас не будет прав на изменение/удаление этого - // же файла во второй раз (при перезаписи)! - mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH; - fd = open(fpath, opts, mode); - } - - if( fd == NO_HNDL ) - Error("Cant open one of files!"); - - return fd; -} - Comp::Media* CreateMedia(const char* fpath, bool& is_movie) { Comp::Media* md = NULL; diff -Nru bombono-dvd-0.7.0/src/mcomposite/moptions.h bombono-dvd-0.8.0/src/mcomposite/moptions.h --- bombono-dvd-0.7.0/src/mcomposite/moptions.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mcomposite/moptions.h 2010-11-01 21:58:28.000000000 +0000 @@ -51,8 +51,6 @@ void SetNextBase() { nxtBas = true; } }; -// открыть файл: только для чтения (is_read) или только для записи -int OpenFileAsArg(const char* fpath, bool is_read); // Comp::Media* CreateMedia(const char* fpath, bool& is_movie); diff -Nru bombono-dvd-0.7.0/src/mdemux/decoder.cpp bombono-dvd-0.8.0/src/mdemux/decoder.cpp --- bombono-dvd-0.7.0/src/mdemux/decoder.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/decoder.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/decoder.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mdemux/demuxconst.h bombono-dvd-0.8.0/src/mdemux/demuxconst.h --- bombono-dvd-0.7.0/src/mdemux/demuxconst.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/demuxconst.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/demuxconst.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mdemux/mpeg.cpp bombono-dvd-0.8.0/src/mdemux/mpeg.cpp --- bombono-dvd-0.7.0/src/mdemux/mpeg.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/mpeg.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/mpeg.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mdemux/mpeg_video.cpp bombono-dvd-0.8.0/src/mdemux/mpeg_video.cpp --- bombono-dvd-0.7.0/src/mdemux/mpeg_video.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/mpeg_video.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/mpeg_video.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mdemux/player.cpp bombono-dvd-0.8.0/src/mdemux/player.cpp --- bombono-dvd-0.7.0/src/mdemux/player.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/player.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/player.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -331,5 +331,12 @@ SetPosByPos(new_pos, new_pos->pts); } +} // namespace Mpeg + +void CheckOpen(Mpeg::Player& plyr, const std::string& fname) +{ + bool is_open = plyr.Open(fname.c_str()); + ASSERT_OR_UNUSED( is_open ); } + diff -Nru bombono-dvd-0.7.0/src/mdemux/player.h bombono-dvd-0.8.0/src/mdemux/player.h --- bombono-dvd-0.7.0/src/mdemux/player.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/player.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/player.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -147,6 +147,7 @@ } // namespace Mpeg +void CheckOpen(Mpeg::Player& plyr, const std::string& fname); #endif // __MDEMUX_PLAYER_H__ diff -Nru bombono-dvd-0.7.0/src/mdemux/tests/ac3_splitter.cpp bombono-dvd-0.8.0/src/mdemux/tests/ac3_splitter.cpp --- bombono-dvd-0.7.0/src/mdemux/tests/ac3_splitter.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/tests/ac3_splitter.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/tests/ac3_splitter.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -219,7 +219,7 @@ strm.clear(); strm.seekg(0, iof::beg); - ReadStream(fnr, strm, StreamSize(strm)); + ReadAllStream(fnr, strm); return 0; } diff -Nru bombono-dvd-0.7.0/src/mdemux/tests/log.cpp bombono-dvd-0.8.0/src/mdemux/tests/log.cpp --- bombono-dvd-0.7.0/src/mdemux/tests/log.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/tests/log.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/tests/log.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mdemux/tests/log.h bombono-dvd-0.8.0/src/mdemux/tests/log.h --- bombono-dvd-0.7.0/src/mdemux/tests/log.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/tests/log.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/tests/log.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mdemux/tests/test_mpeg2.cpp bombono-dvd-0.8.0/src/mdemux/tests/test_mpeg2.cpp --- bombono-dvd-0.7.0/src/mdemux/tests/test_mpeg2.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/tests/test_mpeg2.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -584,9 +584,8 @@ void PlayerViewTestImpl(const char* fname) { Mpeg::FwdPlayer plyr; - bool is_open = plyr.Open(fname); + CheckOpen(plyr, fname); - BOOST_REQUIRE( is_open ); Mpeg::MediaInfo inf = plyr.MInfo(); int n = inf.FramesCount(); @@ -689,8 +688,7 @@ Mpeg::FwdPlayer plyr; BOOST_CHECK( !plyr.IsOpened() ); - plyr.Open(fname); - BOOST_CHECK( plyr.IsOpened() ); + CheckOpen(plyr, fname); plyr.Close(); BOOST_CHECK( !plyr.IsOpened() ); diff -Nru bombono-dvd-0.7.0/src/mdemux/trackbuf.cpp bombono-dvd-0.8.0/src/mdemux/trackbuf.cpp --- bombono-dvd-0.7.0/src/mdemux/trackbuf.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/trackbuf.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/trackbuf.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -38,7 +38,8 @@ return (old_sz != sz) ? (char*)realloc(data, sz) : data ; } -TrackBuf::TrackBuf() : begDat(0), endDat(0), bufSz(0) +TrackBuf::TrackBuf() : begDat(0), endDat(0), bufSz(0), + isUnlimited(false) { // начальный размер Reserve(optimalSize); @@ -56,7 +57,7 @@ if( is_add ) new_sz += dat_sz; - if( new_sz>MAX_STRM_BUF_SZ ) + if( !isUnlimited && (new_sz > MAX_STRM_BUF_SZ) ) Error("TrackBuf: Attempt to set too big buffer size"); begDat = ::Extend(begDat, bufSz, new_sz, optimalSize); diff -Nru bombono-dvd-0.7.0/src/mdemux/trackbuf.h bombono-dvd-0.8.0/src/mdemux/trackbuf.h --- bombono-dvd-0.7.0/src/mdemux/trackbuf.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/trackbuf.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/trackbuf.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -57,13 +57,15 @@ // // отрезать с позиции // void CutEnd(const char* pos); - void Reserve(int sz) { Extend(sz, false); } + void Reserve(int sz) { Extend(sz, false); } + void SetUnlimited() { isUnlimited = true; } protected: char* begDat; // начало и конец данных char* endDat; // - int bufSz; // + int bufSz; // размер выделенного буфера + bool isUnlimited; void Extend(int new_sz, bool is_add); }; diff -Nru bombono-dvd-0.7.0/src/mdemux/videoline.cpp bombono-dvd-0.8.0/src/mdemux/videoline.cpp --- bombono-dvd-0.7.0/src/mdemux/videoline.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mdemux/videoline.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mdemux/videoline.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/author/burn.cpp bombono-dvd-0.8.0/src/mgui/author/burn.cpp --- bombono-dvd-0.7.0/src/mgui/author/burn.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/burn.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -85,11 +85,6 @@ return bd; } -static void ConcatToStr(const char* buf, int sz, std::string& str) -{ - str += std::string(buf, sz); -} - re::pattern WriteSpeed_RE("Write Speed #"RG_NUM":"RG_SPS RG_NUM"\\."RG_NUM "x1385"); RefPtr sp_store; @@ -157,9 +152,7 @@ bool TestDvdDisc(const std::string& dev_path, std::string& str) { - ReadReadyFnr fnr = boost::lambda::bind(&ConcatToStr, boost::lambda::_1, boost::lambda::_2, boost::ref(str)); - ExitData ed = ExecuteAsync(0, ("dvd+rw-mediainfo " + dev_path).c_str(), fnr); - + ExitData ed = PipeOutput("dvd+rw-mediainfo " + dev_path, str); return ed.IsGood(); } diff -Nru bombono-dvd-0.7.0/src/mgui/author/burn.h bombono-dvd-0.8.0/src/mgui/author/burn.h --- bombono-dvd-0.7.0/src/mgui/author/burn.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/burn.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/author/burn.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/author/execute.cpp bombono-dvd-0.8.0/src/mgui/author/execute.cpp --- bombono-dvd-0.7.0/src/mgui/author/execute.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/execute.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -34,6 +34,8 @@ #include #include +guint64 FFmpegSizeForDVD(double sec); + namespace Author { @@ -197,16 +199,24 @@ return true; } -io::pos VideoSizeSum() +bool MenuSize(Project::Menu mn, io::pos& sz) +{ + if( Project::IsMotion(mn) ) + sz += FFmpegSizeForDVD(Project::MenuDuration(mn)); + return true; +} + +io::pos ProjectSizeSum() { io::pos sz = 0; - Project::ForeachVideo(boost::lambda::bind(&GetSize, boost::lambda::_1, boost::ref(sz))); + Project::ForeachVideo(bb::bind(&GetSize, _1, b::ref(sz))); + Project::ForeachMenu(bb::bind(&MenuSize, _1, b::ref(sz))); return sz; } int BuildDvdOF::GetDVDSize() { - return Round(VideoSizeSum() / (double)(1024*1024)); + return Round(ProjectSizeSum() / (double)(1024*1024)); } void BuildDvdOF::SetProgress(double percent) @@ -222,11 +232,3 @@ } // namespace Author -ExitData ExecuteAsync(const char* dir, const char* cmd, Author::OutputFilter& of, GPid* pid) -{ - using namespace boost; - ReadReadyFnr fnr = lambda::bind(&Author::OutputFilter::OnGetLine, &of, - lambda::_1, lambda::_2, lambda::_3); - return ExecuteAsync(dir, cmd, fnr, pid); -} - diff -Nru bombono-dvd-0.7.0/src/mgui/author/execute.h bombono-dvd-0.8.0/src/mgui/author/execute.h --- bombono-dvd-0.7.0/src/mgui/author/execute.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/execute.h 2010-11-01 21:58:28.000000000 +0000 @@ -28,7 +28,6 @@ #include #include // Singleton<> -#include // NO_HNDL #include #include @@ -48,7 +47,6 @@ Mode mode; std::string operationName; - std::string exitDesc; // описание причины неудачного авторинга str::stream settings; // = ASettings.py @@ -134,13 +132,5 @@ } // namespace Author -#define RG_BW "\\<" // начало слова -#define RG_EW "\\>" // конец слова -#define RG_SPS "[[:space:]]*" // пробелы -#define RG_NUM "([0-9]+)" // число -#define RG_CMD_BEG RG_BW // "^"RG_SPS // начало команды - -ExitData ExecuteAsync(const char* dir, const char* cmd, Author::OutputFilter& of, GPid* pid); - #endif // #ifndef __MGUI_AUTHOR_EXECUTE_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/author/ffmpeg.h bombono-dvd-0.8.0/src/mgui/author/ffmpeg.h --- bombono-dvd-0.7.0/src/mgui/author/ffmpeg.h 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/ffmpeg.h 2010-11-01 21:58:28.000000000 +0000 @@ -0,0 +1,59 @@ +// +// mgui/author/ffmpeg.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __MGUI_AUTHOR_FFMPEG_H__ +#define __MGUI_AUTHOR_FFMPEG_H__ + +#include + +#include + +#include + +namespace Project { + +std::string FFmpegPostArgs(const std::string& out_fname, bool is_4_3, bool is_pal, + const std::string& a_fname = std::string(), double a_shift = 0.); + +struct FFmpegCloser +{ + GPid pid; + int inFd; + ExitData& ed; +ptr::one oeb; + + FFmpegCloser(ExitData& ed_): pid(NO_HNDL), inFd(NO_HNDL), ed(ed_) {} + ~FFmpegCloser(); +}; + +struct PPMWriter +{ + int inFd; + TrackBuf pipeBuf; + + PPMWriter(int in_fd); + void Write(RefPtr img); +}; + +} // namespace Project + +#endif // #ifndef __MGUI_AUTHOR_FFMPEG_H__ + diff -Nru bombono-dvd-0.7.0/src/mgui/author/indicator.cpp bombono-dvd-0.8.0/src/mgui/author/indicator.cpp --- bombono-dvd-0.7.0/src/mgui/author/indicator.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/indicator.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -21,7 +21,7 @@ #include -#include "script.h" // CheckAuthorMode +#include "script.h" // ConsoleMode #include // Round() #include @@ -100,7 +100,7 @@ void SetStageProgress(double percent) { - if( Project::CheckAuthorMode::Flag ) + if( Execution::ConsoleMode::Flag ) return; double sum = 0; @@ -134,7 +134,7 @@ void SetStage(Stage st) { - if( Project::CheckAuthorMode::Flag ) + if( Execution::ConsoleMode::Flag ) return; GetES().SetStatus(StageToStr(st)); diff -Nru bombono-dvd-0.7.0/src/mgui/author/output.cpp bombono-dvd-0.8.0/src/mgui/author/output.cpp --- bombono-dvd-0.7.0/src/mgui/author/output.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/output.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -92,7 +92,7 @@ { Gtk::RadioButton& btn = NewManaged(grp, name); btn.set_use_underline(true); - SetForRadioToggle(btn, bl::bind(&SetAuthorMode, mode)); + SetForRadioToggle(btn, bb::bind(&SetAuthorMode, mode)); PackStart(box, btn); // ручками устанавливаем режим вначале @@ -237,8 +237,7 @@ Gtk::Button& build_btn = Add(PackStart(vbox, MakeNullAlg()), es.ExecButton()); FillBuildButton(build_btn, true, DVDOperation); - using namespace boost; - build_btn.signal_clicked().connect( lambda::bind(&Author::OnDVDBuild, boost::ref(ch_btn)) ); + build_btn.signal_clicked().connect( bb::bind(&Author::OnDVDBuild, boost::ref(ch_btn)) ); } // :BUG: связка GtkComboBox(включая производные классы, содержащие его - GtkFileChooserButton) в GtkNotebook @@ -253,7 +252,7 @@ // Выход: заранее скрываем закладку с проблемным GtkComboBox (альтернатива - сделать комбобокс невыбираемым) // //nbook.get_nth_page(nbook.get_n_pages()-1)->hide(); - return bl::bind(&Gtk::Widget::hide, nbook.get_nth_page(nbook.get_n_pages()-1)); + return bb::bind(&Gtk::Widget::hide, nbook.get_nth_page(nbook.get_n_pages()-1)); } } // namespace Project @@ -296,10 +295,10 @@ imgList.push_back(Gdk::Pixbuf::create_from_file(img_path)); } - ForAllWidgets(static_cast(es.ExecButton()).gobj(), bl::bind(&FindBurnImage, bl::_1, &imgWdg)); + ForAllWidgets(static_cast(es.ExecButton()).gobj(), bb::bind(&FindBurnImage, _1, &imgWdg)); ASSERT( imgWdg ); - tm.Connect(bl::bind(&DiscSpinning::Turn, this), 150); + tm.Connect(bb::bind(&DiscSpinning::Turn, this), 150); } ~DiscSpinning() { @@ -669,10 +668,20 @@ return res; } -static void PostBuildOperation(bool res, const std::string& dir_str) +static void BurnImpl(const std::string& dir_str) +{ + str::stream scons_options; + FillSconsOptions(scons_options, false); + + BurningStateSetter bss(GetES()); + ConsoleOF of; + ExecuteSconsCmd(dir_str, of, modBURN, scons_options); +} + +static void PostBuildOperation(const std::string& res, const std::string& dir_str) { ExecState& es = GetES(); - if( res ) + if( IsGood(res) ) { std::string status = OperationCompleted(es); std::string desc_str = MakeDescForOutput(es.mode, dir_str); @@ -695,30 +704,21 @@ dlg.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); dlg.set_default_response(Gtk::RESPONSE_OK); - using namespace boost; - while( Run(dlg, false, lambda::bind(&NotForPlay, lambda::_1, dir_str)) == RESPONSE_BURN ) + while( Run(dlg, false, bb::bind(&NotForPlay, _1, dir_str)) == RESPONSE_BURN ) { dlg.hide(); if( !CheckDVDBlank() ) break; // * прожиг - str::stream scons_options; - FillSconsOptions(scons_options, false); - ExitData ed; - { - BurningStateSetter bss(es); - - ConsoleOF of; - ed = ExecuteSconsCmd(dir_str, of, modBURN, scons_options); - } - if( ed.IsGood() ) + std::string res = SafeCall(bb::bind(&BurnImpl, dir_str)); + if( IsGood(res) ) { SetFinalStatus(OperationCompleted(es), true); } else { - FailureMessageBox(es, ExitDescription(ed)); + FailureMessageBox(es, res); break; } @@ -729,7 +729,7 @@ } } else - FailureMessageBox(es, es.exitDesc); + FailureMessageBox(es, res); } void OnDVDBuild(Gtk::FileChooserButton& ch_btn) @@ -741,7 +741,7 @@ if( CanUseForAuthoring(dir_str) && CheckDVDBlankForBurning() ) { - bool res = true; + std::string res; { ExecStateSetter ess(es); res = Project::AuthorDVD(dir_str); diff -Nru bombono-dvd-0.7.0/src/mgui/author/render.cpp bombono-dvd-0.8.0/src/mgui/author/render.cpp --- bombono-dvd-0.7.0/src/mgui/author/render.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/render.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -22,17 +22,26 @@ #include #include "script.h" +#include "ffmpeg.h" #include // CommonRenderVis #include #include // Project::PrimaryShotGetter #include // EdtTextRenderer #include // MBind::TextRendering +#include +#include // VideoStart +#include +#include // AppendCommandText() #include #include #include +#include // ReadAllStream() +#include // GetClockTime() +#include +#include #include @@ -45,29 +54,50 @@ namespace Project { -PixCanvasBuf& GetAuthorPCB(Menu mn) +PixCanvasBuf& GetTaggedPCB(Menu mn, const char* tag) { - PixCanvasBuf& pcb = mn->GetData(AUTHOR_TAG); + PixCanvasBuf& pcb = mn->GetData(tag); if( !pcb.Canvas() ) { Point sz(mn->Params().Size()); pcb.Set(CreatePixbuf(sz), Planed::Transition(Rect0Sz(sz), sz)); - pcb.DataTag() = AUTHOR_TAG; + pcb.DataTag() = tag; } return pcb; } -PixCanvasBuf& GetAuthorPCB(MenuRegion& menu_rgn) +PixCanvasBuf& GetAuthorPCB(Menu mn) { - return GetAuthorPCB(GetOwnerMenu(&menu_rgn)); + return GetTaggedPCB(mn, AUTHOR_TAG); } -class SPRenderVis: public CommonRenderVis +class CommonMenuRVis: public CommonRenderVis { typedef CommonRenderVis MyParent; public: + CommonMenuRVis(const char* pcb_tag, RectListRgn& r_lst): + MyParent(r_lst), pcbTag(pcb_tag) {} + + protected: + const char* pcbTag; + + virtual CanvasBuf& FindCanvasBuf(MenuRegion& menu_rgn); + +void RenderStatic(FrameThemeObj& fto); +}; + +CanvasBuf& CommonMenuRVis::FindCanvasBuf(MenuRegion& menu_rgn) +{ + MenuMD* mn = GetOwnerMenu(&menu_rgn); + return GetTaggedPCB(mn, pcbTag); +} + +class SPRenderVis: public CommonMenuRVis +{ + typedef CommonMenuRVis MyParent; + public: SPRenderVis(RectListRgn& r_lst, xmlpp::Element* spu_node) - : MyParent(r_lst), isSelect(false), spuNode(spu_node) {} + : MyParent(AUTHOR_TAG, r_lst), isSelect(false), spuNode(spu_node) {} void SetSelect(bool is_select) { isSelect = is_select; } @@ -79,15 +109,8 @@ protected: bool isSelect; xmlpp::Element* spuNode; - - virtual CanvasBuf& FindCanvasBuf(MenuRegion& menu_rgn) { return GetAuthorPCB(menu_rgn); } }; -// используем "родной" прозрачный цвет в png -//const uint BLACK2_CLR = 0x010101ff; // заменяется на прозрачный spumux'ом -const uint HIGH_CLR = 0xfff00080; // прозрачность = 50% -const uint SELECT_CLR = 0xff006c80; - void SPRenderVis::RenderBackground() { //drw->SetForegroundColor(BLACK2_CLR); @@ -167,12 +190,19 @@ } } +static RGBA::Pixel GetSPColor(Comp::MediaObj& obj, bool activated_clr) +{ + //return activated_clr ? SELECT_CLR : HIGH_CLR; + SubpicturePalette& pal = GetOwnerMenu(&obj)->subPal; + return activated_clr ? pal.actClr : pal.selClr ; +} + void SPRenderVis::Visit(TextObj& t_obj) { std::string targ_str; if( HasButtonLink(t_obj, targ_str) ) { - RGBA::Pixel clr = isSelect ? SELECT_CLR : HIGH_CLR; + RGBA::Pixel clr = GetSPColor(t_obj, isSelect); // меняем на лету цвет и др. параметры SubtitleWrapper sw(t_obj, clr, FindTextRenderer(t_obj, *cnvBuf)); Make(t_obj).Render(); @@ -185,13 +215,6 @@ } } -static void CopyArea(RefPtr canv_pix, RefPtr obj_pix, - const Rect& plc, const Rect& drw_rgn) -{ - obj_pix->copy_area(drw_rgn.lft-plc.lft, drw_rgn.top-plc.top, drw_rgn.Width(), drw_rgn.Height(), - canv_pix, drw_rgn.lft, drw_rgn.top); -} - void SPRenderVis::Visit(FrameThemeObj& fto) { std::string targ_str; @@ -204,7 +227,7 @@ Rect plc = CalcRelPlacement(fto.Placement()); Point sz(plc.Size()); RefPtr obj_pix = CreatePixbuf(sz); //PixbufSize(td.vFrameImg)); - uint clr = isSelect ? SELECT_CLR : HIGH_CLR; + uint clr = GetSPColor(fto, isSelect).ToUint(); obj_pix->fill(clr); RefPtr vf_pix = CreatePixbuf(sz); @@ -214,8 +237,7 @@ DiscreteByAlpha(obj_pix, clr); //drw->CompositePixbuf(obj_pix, plc); - using namespace boost; - RGBA::RgnPixelDrawer::DrwFunctor drw_fnr = lambda::bind(&CopyArea, drw->Canvas(), obj_pix, plc, lambda::_1); + RGBA::RgnPixelDrawer::DrwFunctor drw_fnr = bb::bind(&RGBA::CopyArea, drw->Canvas(), obj_pix, plc, _1); drw->DrawWithFunctor(plc, drw_fnr); ScriptButton(spuNode, isSelect, plc); @@ -233,26 +255,36 @@ cnv_pix->save(AppendPath(mn_dir, fname), "png"); } -void InitAuthorData(Menu mn) +void InitTextForTaggedPCB(Menu mn, const char* tag) { - SimpleInitTextVis titv(GetAuthorPCB(mn)); + SimpleInitTextVis titv(GetTaggedPCB(mn, tag)); GetMenuRegion(mn).Accept(titv); } +void InitAuthorData(Menu mn) +{ + InitTextForTaggedPCB(mn, AUTHOR_TAG); +} + +static void IterateAuthoringEvents() +{ + IteratePendingEvents(); + + Author::CheckAbortByUser(); +} + static int WorkCnt = 0; static int DoneCnt = 0; static void PulseRenderProgress() { - if( Project::CheckAuthorMode::Flag ) + if( Execution::ConsoleMode::Flag ) return; DoneCnt++; ASSERT( WorkCnt && (DoneCnt <= WorkCnt) ); Author::SetStageProgress( DoneCnt/(double)WorkCnt * 100.); - IteratePendingEvents(); - if( Author::GetES().eDat.userAbort ) - throw std::runtime_error("User Abortion"); // строка реально не нужна - сработает userAbort + IterateAuthoringEvents(); } bool RenderSubPictures(const std::string& out_dir, Menu mn, int i, @@ -297,25 +329,26 @@ SaveMenuPicture(mn_dir, "MenuSelect.png", cnv_pix); // * остальное - fs::copy_file(SConsAuxDir()/"menu_SConscript", fs::path(mn_dir)/"SConscript"); + //fs::copy_file(SConsAuxDir()/"menu_SConscript", fs::path(mn_dir)/"SConscript"); + std::string str = ReadAllStream(SConsAuxDir()/"menu_SConscript"); + bool is_motion = mn->MtnData().isMotion; + str = boost::format(str) % (is_motion ? "True" : "False") % bf::stop; + WriteAllStream(fs::path(mn_dir)/"SConscript", str); + // для последующего рендеринга SetCBDirty(cnv_buf); return true; } -class MenuRenderVis: public CommonRenderVis +class MenuRenderVis: public CommonMenuRVis { - typedef CommonRenderVis MyParent; + typedef CommonMenuRVis MyParent; public: - MenuRenderVis(RectListRgn& r_lst): MyParent(r_lst) {} + MenuRenderVis(RectListRgn& r_lst): MyParent(AUTHOR_TAG, r_lst) {} - //virtual void VisitImpl(MenuRegion& menu_rgn); virtual RefPtr CalcBgShot(); virtual void Visit(FrameThemeObj& fto); - - protected: - virtual CanvasBuf& FindCanvasBuf(MenuRegion& menu_rgn) { return GetAuthorPCB(menu_rgn); } }; RefPtr GetPrimaryAuthoredShot(MediaItem mi, const Point& sz = Point()) @@ -371,8 +404,7 @@ RefPtr pix; if( Menu mn = IsMenu(mi) ) { - using namespace boost; - ShotFunctor s_fnr = lambda::bind(&GetAuthoredMenu, mn); + ShotFunctor s_fnr = bb::bind(&GetAuthoredMenu, mn); pix = MakeCopyWithSz(GetAuthoredLRS(s_fnr), sz); } else @@ -380,19 +412,484 @@ return pix; } -void MenuRenderVis::Visit(FrameThemeObj& fto) +void CommonMenuRVis::RenderStatic(FrameThemeObj& fto) { // используем кэш FTOAuthorData& pix_data = fto.GetData(AUTHOR_TAG); drw->CompositePixbuf(pix_data.GetPix(), CalcRelPlacement(fto.Placement())); } +void MenuRenderVis::Visit(FrameThemeObj& fto) +{ + RenderStatic(fto); +} + +// +// Функционал анимационных меню +// + +static bool IsToBeMoving(MediaItem mi) +{ + return mi && (IsVideo(mi) || IsChapter(mi)); +} + +static Rect RealPosition(Comp::MediaObj& obj, const Planed::Transition& trans) +{ + return AbsToRel(trans, obj.Placement()); +} + +static const char* FFmpegErrorTemplate() +{ + return _("ffmpeg failure: %1%"); +} + +static void FFmpegError(const ExitData& ed) +{ + Author::ErrorByED(FFmpegErrorTemplate(), ed); +} + +static void FFmpegError(const std::string& msg) +{ + Author::Error(FFmpegErrorTemplate(), msg); +} + +static void WriteAsPPM(int fd, RefPtr pix, TrackBuf& buf) +{ + int wdh = pix->get_width(); + int hgt = pix->get_height(); + int stride = pix->get_rowstride(); + int channels = pix->get_n_channels(); + guint8* pixels = pix->get_pixels(); + + // операция записи в канал очень дорогая, поэтому собираем PPM + // в буфер и за раз все записываем + + // не пользуемся TrackBuf::End(), TrackBuf::Append(), ... + buf.Reserve(30); // для заголовка + snprintf(buf.Beg(), 30, "P6\n%d %d\n255\n", wdh, hgt); + // длина данных PPM: заголовок + все пикселы * 3 байта + int h_sz = strlen(buf.Beg()); + int sz = h_sz + 3 * wdh * hgt; + buf.Reserve(sz); + + char* beg = buf.Beg(); + char* cur = beg + h_sz; + for( int row = 0; row < hgt; row++, pixels += stride ) + { + guint8* p = pixels; + for( int col = 0; col < wdh; col++, p += channels, cur += 3 ) + { + // еще оптимизации: + // - memcpy(, 3) + // - запись внахлест memcpy(, 4) (неясно, быстрее ли) + cur[0] = p[0]; + cur[1] = p[1]; + cur[2] = p[2]; + } + } + + ASSERT( cur - beg == sz ); + //checked_writeall(fd, beg, sz); + if( !writeall(fd, beg, sz) ) + { + namespace bs = boost::system; + FFmpegError(bs::error_code(errno, bs::system_category()).message()); + } +} + +std::string FFmpegPostArgs(const std::string& out_fname, bool is_4_3, bool is_pal, + const std::string& a_fname, double a_shift) +{ + std::string a_input = "-an"; // без аудио + if( !a_fname.empty() ) + { + std::string shift; // без смещения + if( a_shift ) + shift = boost::format("-ss %.2f ") % a_shift % bf::stop; + a_input = boost::format("%2%-i \"%1%\"") % a_fname % shift % bf::stop; + } + + const char* target = "pal"; + int wdh = 720; // меню всегда полноразмерное + int hgt = 576; + if( !is_pal ) + { + target = "ntsc"; + hgt = 480; + } + + return boost::format("%1% -target %5%-dvd -aspect %2% -s %3%x%4% -y \"%6%\"") + % a_input % (is_4_3 ? "4:3" : "16:9") % wdh % hgt % target % out_fname % bf::stop; +} + +#define MOTION_MENU_TAG "Motion Menus" + +class MotionMenuRVis: public CommonMenuRVis +{ + typedef CommonMenuRVis MyParent; + public: + MotionMenuRVis(RectListRgn& r_lst): MyParent(MOTION_MENU_TAG, r_lst) {} + + virtual void RenderBackground(); + virtual void Visit(FrameThemeObj& fto); +}; + +static bool IsMovingBack(MenuRegion& m_rgn) +{ + return IsToBeMoving(m_rgn.BgRef()); +} + +struct MotionTimer +{ + int idx; + // нарезаем изображения со своим fps (близким к стандартным 25 и 29,97),- + // ffmpeg разберется как сделать из -target %5%-dvd + static const int fps = 30; + static const double shift; // не интегральный тип, потому в C++98 "приравнивать" нельзя + + MotionTimer(): idx(0) {} + + // рендеринг первого кадра + bool IsFirst() { return idx == 0; } + + double Time() { return idx * shift; } +}; + +const int MotionTimer::fps; +const double MotionTimer::shift = 1. / MotionTimer::fps; + +static MotionTimer& GetMotionTimer(Menu mn) +{ + return mn->GetData(MOTION_MENU_TAG); +} + +static std::string GetFilename(VideoStart vs) +{ + return GetFilename(*vs.first); +} + +static void LoadMotionFrame(RefPtr& pix, MediaItem ref, DataWare& src, + MotionTimer& mt) +{ + VideoStart vs = GetVideoStart(ref); + Mpeg::FwdPlayer& plyr = src.GetData(MOTION_MENU_TAG); + if( mt.IsFirst() ) + RGBOpen(plyr, GetFilename(vs)); + + double tm = vs.second + mt.Time(); + GetFrame(pix, tm, plyr); +} + +void MotionMenuRVis::RenderBackground() +{ + Menu mn = GetOwnerMenu(menuRgn); + MotionTimer& mt = GetMotionTimer(mn); + MediaItem bg_ref = menuRgn->BgRef(); + RefPtr menu_pix = cnvBuf->FramePixbuf(); + + if( IsToBeMoving(bg_ref) ) + { + // явно отображаем кадр в стиле монитора (DAMonitor), + // а не редактора, потому что: + // - область и так всю перерисовывать + // - самый быстрый вариант (без каких-либо посредников) + //drw->ScalePixbuf(pix, cnvBuf->FrameRect()); + LoadMotionFrame(menu_pix, bg_ref, *mn, mt); + } + else + { + RefPtr static_menu_pix = GetAuthoredMenu(mn); + if( mt.IsFirst() ) + { + // в первый раз отразим статичный вариант, + // потому что пока вообще пусто (а область рендеринга сужена + // до анимационных элементов) + //MyParent::RenderBackground(); + RGBA::Scale(menu_pix, static_menu_pix); + } + else + drw->ScalePixbuf(static_menu_pix, cnvBuf->FrameRect()); + } +} + +void MotionMenuRVis::Visit(FrameThemeObj& fto) +{ + MediaItem mi = MIToDraw(fto); + if( IsToBeMoving(mi) ) + { + // напрямую делаем то же, что FTOData::CompositeFTO(), + // чтобы явно видеть затраты + const Editor::ThemeData& td = Editor::ThemeCache::GetTheme(fto.Theme()); + // нужен оригинал в размере vFrameImg + RefPtr obj_pix = td.vFrameImg->copy(); + LoadMotionFrame(obj_pix, mi, fto, GetMotionTimer(GetOwnerMenu(&fto))); + + RefPtr pix = CompositeWithFrame(obj_pix, td); + + drw->CompositePixbuf(pix, CalcRelPlacement(fto.Placement())); + } + else + RenderStatic(fto); +} + +bool IsMotion(Menu mn) +{ + return mn->MtnData().isMotion; +} + +bool IsMenuToBe4_3(); + +static void SaveMenuPng(const std::string& mn_dir, Menu mn) +{ + SaveMenuPicture(mn_dir, "Menu.png", GetAuthoredMenu(mn)); +} + +static std::string MakeFFmpegPostArgs(const std::string& mn_dir, Menu mn) +{ + MotionData& mtn_dat = mn->MtnData(); + // аспект ставим как можем (а не из параметров меню) из-за того, что качество + // авторинга важнее гибкости (все валим в один titleset) + bool is_4_3 = IsMenuToBe4_3(); + std::string out_fname = AppendPath(mn_dir, "Menu.mpg"); + + std::string a_fname; + double a_shift = 0.; + if( mtn_dat.isIntAudio ) + { + if( MediaItem a_ref = mtn_dat.audioRef.lock() ) + { + VideoStart vs = GetVideoStart(a_ref); + a_fname = GetFilename(vs); + a_shift = vs.second; + } + } + else + a_fname = mtn_dat.audioExtPath; + return FFmpegPostArgs(out_fname, is_4_3, AData().PalTvSystem(), a_fname, a_shift); +} + +double MenuDuration(Menu mn) +{ + double duration = mn->MtnData().duration; + const int MAX_MOTION_DUR = 60 * 60; // адекватный теорет. максимум + ASSERT_RTL( duration > 0 && duration <= MAX_MOTION_DUR ); + + return duration; +} + +static Gtk::TextView& PrintCmdToDetails(const std::string& cmd) +{ + Gtk::TextView& tv = Author::GetES().detailsView; + AppendCommandText(tv, cmd); + return tv; +} + +static void SaveStillMenuMpg(const std::string& mn_dir, Menu mn) +{ + // сохраняем Menu.png и рендерим из нее + SaveMenuPng(mn_dir, mn); + std::string img_fname = AppendPath(mn_dir, "Menu.png"); + + std::string ffmpeg_cmd = boost::format("ffmpeg -t %3$.2f -loop_input -i \"%1%\" %2%") + % img_fname % MakeFFmpegPostArgs(mn_dir, mn) % MenuDuration(mn) % bf::stop; + + ExitData ed; + if( Execution::ConsoleMode::Flag ) + ed = System(ffmpeg_cmd); + else + { + Gtk::TextView& tv = PrintCmdToDetails(ffmpeg_cmd); + ed = Author::AsyncCall(0, ffmpeg_cmd.c_str(), TextViewAppender(tv)); + } + + if( !ed.IsGood() ) + FFmpegError(ed); +} + +FFmpegCloser::~FFmpegCloser() +{ + // 1 закрываем вход, чтобы разблокировать ffmpeg (несколько раз происходила взаимная + // блокировка с прекращением деятельности с обоих сторон,- судя по всему ffmpeg игнорировал + // прерывание по EINTR и снова блокировался на чтении) + ASSERT( inFd != NO_HNDL ); + close(inFd); + + // варианты остановить транскодирование сразу после окончания видео, см. ffmpeg.c:av_encode(): + // - через сигнал (SIGINT, SIGTERM, SIGQUIT) + // - по достижению размера или времени (см. соответ. опции вроде -t); но тут возможна проблема + // блокировки/закрытия раньше, чем мы закончим посылку всех данных; да и время высчитывать тоже придется + // - в момент окончания первого из источников, -shortest; не подходит, если аудио существенно длинней + // чем мы хотим записать + Execution::Stop(pid); + + // 2 дождаться выхода и проверить статус (и только после этого закрываем выходы) + ed = WaitForExit(pid); +} + +static PixCanvasBuf& GetMotionPCB(Menu mn) +{ + return GetTaggedPCB(mn, MOTION_MENU_TAG); +} + +PPMWriter::PPMWriter(int in_fd): inFd(in_fd) +{ + pipeBuf.SetUnlimited(); +} + +void PPMWriter::Write(RefPtr img) +{ + WriteAsPPM(inFd, img, pipeBuf); +} + +static void PipeVideo(Menu mn, int in_fd) +{ + MenuRegion& m_rgn = GetMenuRegion(mn); + PixCanvasBuf& mtn_buf = GetMotionPCB(mn); + RefPtr img = mtn_buf.FramePixbuf(); + ASSERT( img ); + + PPMWriter ppm_writer(in_fd); + double duration = MenuDuration(mn); + + MotionTimer& mt = GetMotionTimer(mn); + ASSERT( mt.IsFirst() ); + for( ; mt.Time() < duration; mt.idx++ ) + { + MotionMenuRVis r_vis(mtn_buf.RenderList()); + m_rgn.Accept(r_vis); + + //std::string fpath = "/dev/null"; //boost::format("../dvd_out/ppms/%1%.ppm") % i % bf::stop; + //int fd = OpenFileAsArg(fpath.c_str(), false); + ppm_writer.Write(img); + //close(fd); + + if( !Execution::ConsoleMode::Flag ) + // вывод от ffmpeg + IterateAuthoringEvents(); + } +} + +static void CheckStrippedFFmpeg(const re::pattern& pat, const std::string& conts, + const char* function) +{ + if( !re::search(conts, pat) ) + { + // похоже в Ubuntu не собирают урезанную версию ffmpeg (по крайней мере с Karmic), + // потому пока считаем редкой ошибкой -> не переводим + FFmpegError(boost::format("stripped ffmpeg version is detected; please install full version (with %1%)") + % function % bf::stop); + } +} + +// conts - вывод ffmpeg -formats +void TestFFmpegForDVDEncoding(const std::string& conts) +{ + static re::pattern dvd_format("^ .E dvd"RG_EW); + CheckStrippedFFmpeg(dvd_format, conts, "dvd format"); + + static re::pattern mpeg2video_codec("^ .EV... mpeg2video"RG_EW); + CheckStrippedFFmpeg(mpeg2video_codec, conts, "mpeg2 video encoder"); + + // по факту ffmpeg всегда использует ac3, однако mp2 тоже возможен + static re::pattern ac3_codec("^ .EA... ac3"RG_EW); + CheckStrippedFFmpeg(ac3_codec, conts, "ac3 audio encoder"); +} + bool RenderMainPicture(const std::string& out_dir, Menu mn, int i) { Author::Info((str::stream() << "Rendering menu \"" << mn->mdName << "\" ...").str()); + const std::string mn_dir = MakeMenuPath(out_dir, mn, i); + + if( IsMotion(mn) ) + { + // наличие полного ffmpeg + std::string ff_formats; + ExitData ed = PipeOutput("ffmpeg -formats", ff_formats); + if( !ed.IsGood() ) + { + const char* msg = ed.IsCode(127) ? _("command not found") : "unknown error" ; + FFmpegError(msg); + } + else + TestFFmpegForDVDEncoding(ff_formats); - CanvasBuf& cnv_buf = UpdateAuthoredMenu(mn); - SaveMenuPicture(MakeMenuPath(out_dir, mn, i), "Menu.png", cnv_buf.FramePixbuf()); + if( mn->MtnData().isStillPicture ) + SaveStillMenuMpg(mn_dir, mn); + else + { + // пока рендеринг всех меню идет независимо удаляем данные сразу по окончанию + DtorAction clear_motion_data(bb::bind(&ClearTaggedData, mn, MOTION_MENU_TAG)); + + MenuRegion& m_rgn = GetMenuRegion(mn); + PixCanvasBuf& mtn_buf = GetMotionPCB(mn); + + // 1 определяем область перерисовки на итерацию + RectListRgn& rlr = mtn_buf.RenderList(); + if( IsMovingBack(m_rgn) ) + // вся область из-за фона + rlr.push_back(mtn_buf.FrameRect()); + else + { + boost_foreach( Comp::Object* obj, m_rgn.List() ) + if( FrameThemeObj* frame_obj = dynamic_cast(obj) ) + if( IsToBeMoving(MIToDraw(*frame_obj)) ) + rlr.push_back(RealPosition(*frame_obj, mtn_buf.Transition())); + } + ReDivideRects(rlr); + + // рендеринг анимационного меню + // 2 рендеринг -> ffmpeg + if( rlr.size() ) + { + // подготовка + InitTextForTaggedPCB(mn, MOTION_MENU_TAG); + + // 1. Ставим частоту fps впереди -i pipe, чтобы она воспринималась для входного потока + // (а для выходного сработает -target) + // 2. И наоборот, для выходные параметры (-aspect, ...) ставим после всех входных файлов + std::string ffmpeg_cmd = boost::format("ffmpeg -r %1% -f image2pipe -vcodec ppm -i pipe: %2%") + % MotionTimer::fps % MakeFFmpegPostArgs(mn_dir, mn) % bf::stop; + + ExitData ed; + { + FFmpegCloser pc(ed); + int out_err[2]; + pc.pid = Spawn(0, ffmpeg_cmd.c_str(), Execution::ConsoleMode::Flag ? 0 : out_err, true, &pc.inFd); + + if( Execution::ConsoleMode::Flag ) + { + double all_time = GetClockTime(); + + PipeVideo(mn, pc.inFd); + + all_time = GetClockTime() - all_time; + io::cout << "Time to run: " << all_time << io::endl; + io::cout << "FPS: " << GetMotionTimer(mn).idx / all_time << io::endl; + } + else + { + Gtk::TextView& tv = PrintCmdToDetails(ffmpeg_cmd); + // закрываем выходы после окончания работы ffmpeg, иначе тот грохнется + // по SIGPIPE + //OutErrBlock oeb(out_err, TextViewAppender(tv)); + pc.oeb = new OutErrBlock(out_err, TextViewAppender(tv)); + + PipeVideo(mn, pc.inFd); + } + + } + + if( !ed.IsGood() ) + // ffmpeg завершает с кодом 255 при посылке сигнала, ffmpeg.c:av_exit(int ret) + if( !ed.IsCode(255) ) + FFmpegError(ed); + } + else + SaveStillMenuMpg(mn_dir, mn); + } + } + else + SaveMenuPng(mn_dir, mn); PulseRenderProgress(); return true; @@ -406,7 +903,6 @@ Author::Info("Rendering menu subtitles ..."); std::iostream& menu_list = Author::GetES().settings; - bool IsMenuToBe4_3(); menu_list << "Is4_3 = " << (IsMenuToBe4_3() ? 1 : 0) << "\n"; // список меню menu_list << "List = [\n"; @@ -414,12 +910,12 @@ // * подготовка к рендерингу // * создание слоев/субтитров выбора и скрипта //ForeachMenu(lambda::bind(&SetAuthorControl, lambda::_1, lambda::_2)); - ForeachMenu(bl::bind(&RenderSubPictures, boost::ref(out_dir), bl::_1, bl::_2, boost::ref(menu_list))); + ForeachMenu(bb::bind(&RenderSubPictures, boost::ref(out_dir), _1, _2, boost::ref(menu_list))); menu_list << "]\n" << io::endl; PulseRenderProgress(); // * отрисовка основного изображения - ForeachMenu(bl::bind(&RenderMainPicture, boost::ref(out_dir), bl::_1, bl::_2)); + ForeachMenu(bb::bind(&RenderMainPicture, boost::ref(out_dir), _1, _2)); } } // namespace Project diff -Nru bombono-dvd-0.7.0/src/mgui/author/script.cpp bombono-dvd-0.8.0/src/mgui/author/script.cpp --- bombono-dvd-0.7.0/src/mgui/author/script.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/script.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -41,8 +41,6 @@ #include #include -#include - namespace Project { @@ -65,19 +63,12 @@ return std::make_pair(children.begin(), children.end()); } -bool CheckAuthorMode::Flag = false; - -CheckAuthorMode::CheckAuthorMode(bool turn_on): origVal(Flag) -{ Flag = turn_on; } -CheckAuthorMode::~CheckAuthorMode() -{ Flag = origVal; } - // из-за того, что все медиа в одном браузере (включая картинки="не видео"), // нельзя использовать естественную нумерацию для авторинга -static int& GetAuthorNumber(VideoMD& obj) +static int& GetAuthorNumber(VideoItem vi) { //return GetBrowserPath(&obj)[0]+1; - return obj.GetData(AUTHOR_TAG); + return vi->GetData(AUTHOR_TAG); } int ForeachVideo(VideoFnr fnr) @@ -95,6 +86,22 @@ return i; } +static VideoItem ToVITransform(const Gtk::TreeRow& row) +{ + return IsVideo( MediaStore::Get(row) ); +} + +static bool IsNotNull(const VideoItem& vi) +{ + return bool(vi); +} + +fe::range AllVideos() +{ + RefPtr md_store = GetAStores().mdStore; + return fe::make_any( md_store->children() | fe::transformed(ToVITransform) | fe::filtered(IsNotNull) ); +} + typedef boost::function MenuFnr; void ForeachMenu(MenuFnr fnr) { @@ -110,17 +117,6 @@ } } -bool IndexForAuthoring(VideoItem vi, int idx) -{ - GetAuthorNumber(*vi) = idx+1; // индекс от 1 - return true; -} - -static int IndexVideosForAuthoring() -{ - return ForeachVideo(bl::bind(&IndexForAuthoring, bl::_1, bl::_2)); -} - static std::string MakeFPTarget(MediaItem mi) { // Doc: "DVD-Video/2. The Unofficial DVD Specifications Guide/1. Guide - DVD2.2.5.pdf", @@ -136,7 +132,7 @@ { VideoItem vi = IsVideo(mi); ASSERT( vi ); - str = (str::stream() << "title " << GetAuthorNumber(*vi)).str(); + str = (str::stream() << "title " << GetAuthorNumber(vi)).str(); } return str; } @@ -165,14 +161,19 @@ res = boost::format("g1 = %1%; %2% menu entry root;") % GetMenuANum(&obj) % (vtsDomain ? "call" : "jump") % bf::stop; } +static std::string JumpTitleCmd(int num) +{ + return boost::format("jump title %1%;") % num % bf::stop; +} + void TargetCommandVis::Visit(VideoMD& obj) { - res = (str::stream() << "jump title " << GetAuthorNumber(obj) << ";").str(); + res = JumpTitleCmd(GetAuthorNumber(&obj)); } void TargetCommandVis::Visit(VideoChapterMD& obj) { - int v_num = GetAuthorNumber(*obj.owner); + int v_num = GetAuthorNumber(obj.owner); // :TODO: title 1 всегда равно title 1 chapter 1; при этом dvdauthor не воспринимает // главы "вблизи нуля" (<0.27секунд; задание - посмотреть точно), поэтому нужна предварительная // перенумерация, как с видео @@ -186,12 +187,6 @@ return vis.res; } -static bool _GetFirstVideo(VideoItem& res, VideoItem vi, int) -{ - res = vi; - return false; -} - std::string MenuAuthorDir(Menu mn, int idx, bool cnv_from_utf8) { // нужно безопасное имя для директории @@ -211,14 +206,31 @@ return cnv_from_utf8 ? ConvertPathFromUtf8(fname) : fname ; } +int TitlesCount() +{ + return boost::distance(AllVideos()); +} + +static std::string PlayAllCmd() +{ + if( TitlesCount() == 0 ) + Author::Error("There is no video for \"Play All\" function."); + return boost::format("g2 = 1; %1%") % JumpTitleCmd(1) % bf::stop; +} + bool HasButtonLink(Comp::MediaObj& m_obj, std::string& targ_str) { - bool res = false; - if( MediaItem btn_target = m_obj.MediaItem() ) + bool res = true; + + if( m_obj.PlayAll() ) + targ_str = PlayAllCmd(); + else if( MediaItem btn_target = m_obj.MediaItem() ) { targ_str = MakeButtonJump(btn_target, false); res = !targ_str.empty(); } + else + res = false; return res; } @@ -227,6 +239,84 @@ return Size(GetAStores().mnStore); } +static bool IsEndVideo(int cur_num) +{ + return cur_num == TitlesCount(); +} + +static std::string JumpNextTitle(VideoItem vi) +{ + int cur_num = GetAuthorNumber(vi); + ASSERT( (cur_num > 0) && (cur_num <= TitlesCount()) ); + + int next_num = IsEndVideo(cur_num) ? 1 : cur_num + 1; + return JumpTitleCmd(next_num); +} + +static std::string AutoPostCmd(const std::string& jnt_cmd) +{ + return MenusCnt() ? std::string("call menu entry root;") : jnt_cmd ; +} + +static void AddPostCmd(xmlpp::Element* pgc_node, MediaItem mi) +{ + VideoItem vi = IsVideo(mi); + Menu mn = IsMenu(mi); + + ASSERT_RTL( vi || mn ); + // VTS domain + bool is_video = vi; + const PostAction& pa = is_video ? vi->PAction() : mn->MtnData().pAct ; + + std::string jnt_cmd; + // авто-команда + std::string auto_cmd; + if( is_video ) + { + jnt_cmd = JumpNextTitle(vi); + // чаще всего будет эта команда + auto_cmd = AutoPostCmd(jnt_cmd); + } + else + auto_cmd = "jump cell 1;"; // Loop + + std::string post_cmd; + switch( pa.paTyp ) + { + case patAUTO: + post_cmd = auto_cmd; + break; + case patNEXT_TITLE: + ASSERT( is_video ); + post_cmd = jnt_cmd; + break; + case patEXP_LINK: + if( pa.paLink ) + post_cmd = MakeButtonJump(pa.paLink, is_video); + break; + case patPLAY_ALL: + post_cmd = PlayAllCmd(); + break; + default: + //ASSERT_RTL(0); + break; // не вылетаем на плохих проектах + } + if( post_cmd.empty() ) // пока "Stop" нет, и непонятно, как лучше его сделать + post_cmd = auto_cmd; + + if( is_video ) + { + // реализация Play All + std::string prefix("g2 = 0;"); + if( !IsEndVideo(GetAuthorNumber(vi)) ) + prefix = boost::format("if(g2 == 1) {%1%}") % jnt_cmd % bf::stop; + + post_cmd = prefix + " " + post_cmd; + } + + pgc_node->add_child("post")->add_child_text(post_cmd); +} + static bool ScriptMenu(xmlpp::Element* menus_node, Menu root_menu, Menu mn, int i) { xmlpp::Element* pgc_node = menus_node->add_child("pgc"); @@ -245,6 +335,9 @@ // название меню std::string m_dir = MenuAuthorDir(mn, i); vob_node->set_attribute("file", AppendPath(m_dir, "MenuSub.mpg")); + if( IsMotion(mn) ) + AddPostCmd(pgc_node, mn); + // действия кнопок MenuRegion::ArrType& lst = GetMenuRegion(mn).List(); for( MenuRegion::Itr itr = lst.begin(), end = lst.end(); itr != end; ++itr ) @@ -260,23 +353,7 @@ return true; } -typedef boost::function TitlePostCommand; - -static std::string JumpNextTitle(VideoItem vi, int titles_cnt) -{ - int cur_num = GetAuthorNumber(*vi); - ASSERT( (cur_num > 0) && (cur_num <= titles_cnt) ); - - int next_num = (cur_num == titles_cnt) ? 1 : cur_num + 1; - return "jump title " + boost::lexical_cast(next_num) + ";"; -} - -static std::string AutoPostCmd(const std::string& jnt_cmd) -{ - return MenusCnt() ? std::string("call menu entry root;") : jnt_cmd ; -} - -static bool ScriptTitle(xmlpp::Element* ts_node, VideoItem vi, int titles_cnt) +static bool ScriptTitle(xmlpp::Element* ts_node, VideoItem vi) { xmlpp::Element* pgc_node = ts_node->add_child("pgc"); xmlpp::Element* vob_node = pgc_node->add_child("vob"); @@ -296,29 +373,7 @@ if( !is_empty ) vob_node->set_attribute("chapters", chapters); - xmlpp::Element* post_node = pgc_node->add_child("post"); - - std::string jnt_cmd = JumpNextTitle(vi, titles_cnt); - // чаще всего будет эта команда - std::string post_cmd = AutoPostCmd(jnt_cmd); - PostAction& pa = vi->PAction(); - switch( pa.paTyp ) - { - case patAUTO: - break; - case patNEXT_TITLE: - post_cmd = jnt_cmd; - break; - case patEXP_LINK: - if( pa.paLink ) - post_cmd = MakeButtonJump(pa.paLink, true); - break; - default: - //ASSERT_RTL(0); - break; // не вылетаем на плохих проектах - } - post_node->add_child_text(post_cmd); - + AddPostCmd(pgc_node, vi); return true; } @@ -329,10 +384,21 @@ return (menus_be.first != menus_be.second) ? GetMenu(mn_store, menus_be.first) : Menu(); } +//static bool _GetFirstVideo(VideoItem& res, VideoItem vi, int) +//{ +// res = vi; +// return false; +//} + VideoItem GetFirstVideo() { VideoItem first_vi; - ForeachVideo(bl::bind(&_GetFirstVideo, boost::ref(first_vi), bl::_1, bl::_2)); + //ForeachVideo(bb::bind(&_GetFirstVideo, boost::ref(first_vi), _1, _2)); + boost_foreach( VideoItem vi, AllVideos() ) + { + first_vi = vi; + break; + } return first_vi; } @@ -364,9 +430,21 @@ return is_menu_4_3; } +//bool IndexForAuthoring(VideoItem vi, int idx) +//{ +// GetAuthorNumber(vi) = idx+1; // индекс от 1 +// return true; +//} + void GenerateDVDAuthorScript(const std::string& out_dir) { - int titles_cnt = IndexVideosForAuthoring(); + // индексируем видео в titles + //IndexVideosForAuthoring(); + //ForeachVideo(bb::bind(&IndexForAuthoring, _1, _2)); + int idx = 1; // индекс от 1 + boost_foreach( VideoItem vi, AllVideos() ) + GetAuthorNumber(vi) = idx++; + ADatabase& db = AData(); AStores& as = GetAStores(); @@ -424,7 +502,9 @@ // кнопка "Title" = кнопка "Menu" xmlpp::Element* title_entry = node->add_child("pgc"); title_entry->set_attribute("entry", "title"); - std::string init_cmd = "jump " + MakeFPTarget(fp) + ";"; + // g1 - номер текущего меню + // g2 - признак Play All + std::string init_cmd = "g2 = 0; jump " + MakeFPTarget(fp) + ";"; if( root_menu ) // если есть меню (вообще есть), то инициализируем первое init_cmd = boost::format("g1 = %1%; %2%") % GetMenuANum(root_menu) % init_cmd % bf::stop; @@ -436,26 +516,31 @@ // * меню xmlpp::Element* menus_node = tts_node->add_child("menus"); AddVideoTag(menus_node, IsMenuToBe4_3()); - ForeachMenu(bl::bind(&ScriptMenu, menus_node, root_menu, bl::_1, bl::_2)); + ForeachMenu(bb::bind(&ScriptMenu, menus_node, root_menu, _1, _2)); // * список разделов (titles) xmlpp::Element* ts_node = tts_node->add_child("titles"); AddVideoTag(ts_node, Is4_3(first_vi)); - ForeachVideo(bl::bind(&ScriptTitle, ts_node, bl::_1, titles_cnt)); + ForeachVideo(bb::bind(&ScriptTitle, ts_node, _1)); } doc.write_to_file_formatted(AppendPath(out_dir, "DVDAuthor.xml")); } -static bool AuthorClearVideo(VideoItem vi, int) +static bool AuthorClearVideo(VideoItem vi) { vi->Clear(AUTHOR_TAG); return true; } -static bool AuthorClearMenu(Menu mn, int) +void ClearTaggedData(Menu mn, const char* tag) { - mn->Clear(AUTHOR_TAG); - Editor::ClearLocalData(GetMenuRegion(mn), AUTHOR_TAG); + mn->Clear(tag); + Editor::ClearLocalData(GetMenuRegion(mn), tag); +} + +static bool AuthorClearMenu(Menu mn) +{ + ClearTaggedData(mn, AUTHOR_TAG); return true; } @@ -502,13 +587,54 @@ void Do(bool is_on) { - using namespace boost; - if( CheckAuthorMode::Flag ) - ForeachMenu(lambda::bind(&RestrictGetCanvasBufMenu, lambda::_1, is_on)); + if( Execution::ConsoleMode::Flag ) + ForeachMenu(bb::bind(&RestrictGetCanvasBufMenu, _1, is_on)); } }; -bool AuthorDVD(const std::string& out_dir) +static void AuthorImpl(const std::string& out_dir) +{ + AuthorSectionInfo((str::stream() << "Build DVD-Video in folder: " << out_dir).str()); + IteratePendingEvents(); + + Author::ExecState& es = Author::GetES(); + str::stream& settings = es.settings; + settings.str("# coding: utf-8\n\n"); + // * рендерим меню и их скрипты + AuthorMenus(out_dir); + + // * + GenerateDVDAuthorScript(out_dir); + + // * вспомогательные файлы + const char* fnames[] = { "SConstruct", "ADVD.py", "SConsTwin.py", "README" }; + for( int i=0; i<(int)ARR_SIZE(fnames); i++ ) + CopyRootFile(fnames[i], out_dir); + // опции + str::stream scons_options; + Author::FillSconsOptions(scons_options, true); + // ASettings.py + io::stream settings_strm(AppendPath(out_dir, "ASettings.py").c_str(), iof::out); + settings_strm << settings.rdbuf(); + settings_strm.close(); + + // * + if( !Execution::ConsoleMode::Flag ) + { + if( es.mode != Author::modRENDERING ) + { + Author::BuildDvdOF of; + Author::ExecuteSconsCmd(out_dir, of, es.mode, scons_options); + } + } + else + { + ////int pid = gnome_execute_shell(out_dir.c_str(), "scons totem"); + //int pid = Spawn(out_dir.c_str(), "scons totem"); + } +} + +std::string AuthorDVD(const std::string& out_dir) { ASSERT( fs::is_directory(out_dir) ); ASSERT( fs::is_empty_directory(out_dir) ); @@ -517,67 +643,19 @@ // для тестов авторинга - не даем пользоваться GetCanvasBuf(), // так как он для интерактива RestrictGetCanvasBuf rgcb; - bool res = true; - try - { - AuthorSectionInfo((str::stream() << "Build DVD-Video in folder: " << out_dir).str()); - IteratePendingEvents(); + std::string res = Author::SafeCall(bb::bind(&AuthorImpl, out_dir)); - Author::ExecState& es = Author::GetES(); - str::stream& settings = es.settings; - settings.str("# coding: utf-8\n\n"); - // * рендерим меню и их скрипты - AuthorMenus(out_dir); - - // * - GenerateDVDAuthorScript(out_dir); - - // * вспомогательные файлы - const char* fnames[] = { "SConstruct", "ADVD.py", "SConsTwin.py", "README" }; - for( int i=0; i<(int)ARR_SIZE(fnames); i++ ) - CopyRootFile(fnames[i], out_dir); - // опции - str::stream scons_options; - Author::FillSconsOptions(scons_options, true); - // ASettings.py - io::stream settings_strm(AppendPath(out_dir, "ASettings.py").c_str(), iof::out); - settings_strm << settings.rdbuf(); - settings_strm.close(); + // очищаем все авторинговые данные + ForeachVideo(bb::bind(&AuthorClearVideo, _1)); + ForeachMenu(bb::bind(&AuthorClearMenu, _1)); - // * - if( !CheckAuthorMode::Flag ) - { - if( es.mode != Author::modRENDERING ) - { - Author::BuildDvdOF of; - ExitData ed = Author::ExecuteSconsCmd(out_dir, of, es.mode, scons_options); - - if( !ed.IsGood() ) - throw std::runtime_error(BF_("external command failure: %1%") % ExitDescription(ed) % bf::stop); - } - } - else - { - ////int pid = gnome_execute_shell(out_dir.c_str(), "scons totem"); - //int pid = Spawn(out_dir.c_str(), "scons totem"); - //ASSERT(pid > 0); - } - } - catch (const std::exception& err) + if( Author::IsGood(res) ) + AuthorSectionInfo("Authoring is successfully done."); + else { - Author::GetES().exitDesc = err.what(); - Author::Info(std::string("ERR: ") + err.what(), false); + Author::Info(std::string("ERR: ") + res, false); Author::Info("Stop authoring!\n", false); - res = false; } - - // очищаем все авторинговые данные - using namespace boost; - ForeachVideo(lambda::bind(&AuthorClearVideo, lambda::_1, lambda::_2)); - ForeachMenu(lambda::bind(&AuthorClearMenu, lambda::_1, lambda::_2)); - - if( res ) - AuthorSectionInfo("Authoring is successfully done."); return res; } @@ -587,7 +665,7 @@ static void AppendToLog(const std::string& txt) { - if( Project::CheckAuthorMode::Flag ) + if( Execution::ConsoleMode::Flag ) LOG_INF << txt << io::endl; else AppendText(GetES().detailsView, txt + "\n"); @@ -603,11 +681,6 @@ AppendToLog((add_info_sign ? "INFO: " : "") + str); } -void Error(const std::string& str) -{ - throw std::runtime_error(str); -} - std::string SconsTarget(Mode mode) { std::string res; @@ -652,7 +725,7 @@ { std::string def_dvd_label, def_drive; double def_speed = 0; - if( !Project::CheckAuthorMode::Flag ) + if( !Execution::ConsoleMode::Flag ) { BurnData& bd = GetBD(); def_dvd_label = bd.Label().get_text(); @@ -664,11 +737,62 @@ AddSconsOptions(scons_options, true, def_dvd_label, def_drive, def_speed); } -ExitData ExecuteSconsCmd(const std::string& out_dir, OutputFilter& of, - Mode mod, const str::stream& scons_options) +void CheckAbortByUser() +{ + if( Author::GetES().eDat.userAbort ) + throw std::runtime_error("User Abortion"); // строка реально не нужна - сработает userAbort +} + +ExitData AsyncCall(const char* dir, const char* cmd, const ReadReadyFnr& fnr) +{ + ExitData ed = ExecuteAsync(dir, cmd, fnr, &GetES().eDat.pid); + CheckAbortByUser(); + + return ed; +} + +ReadReadyFnr OF2RRF(OutputFilter& of) +{ + return bb::bind(&Author::OutputFilter::OnGetLine, &of, _1, _2, _3); +} + +void Error(const std::string& str) +{ + throw std::runtime_error(str); +} + +void Error(const std::string& msg, const std::string& reason) +{ + Error(boost::format(msg) % reason % bf::stop); +} + +void ErrorByED(const std::string& msg, const ExitData& ed) +{ + Error(msg, ExitDescription(ed)); +} + +void ExecuteSconsCmd(const std::string& out_dir, OutputFilter& of, + Mode mod, const str::stream& scons_options) { std::string cmd = "scons" + scons_options.str() + " " + SconsTarget(mod); - return ExecuteAsync(out_dir.c_str(), cmd.c_str(), of, &GetES().eDat.pid); + ExitData ed = AsyncCall(out_dir.c_str(), cmd.c_str(), OF2RRF(of)); + if( !ed.IsGood() ) + ErrorByED(_("external command failure: %1%"), ed); +} + +std::string SafeCall(const ActionFunctor& fnr) +{ + std::string result; + try + { + fnr(); + } + catch (const std::exception& err) + { + result = err.what(); + ASSERT( !result.empty() ); + } + return result; } } // namespace Author diff -Nru bombono-dvd-0.7.0/src/mgui/author/script.h bombono-dvd-0.8.0/src/mgui/author/script.h --- bombono-dvd-0.7.0/src/mgui/author/script.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/author/script.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/author/script.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -43,7 +43,7 @@ void AuthorMenus(const std::string& out_dir); // run_all - включая запуск внешшней команды сборки -bool AuthorDVD(const std::string& out_dir); +std::string AuthorDVD(const std::string& out_dir); #define AUTHOR_TAG "Authoring" @@ -52,16 +52,11 @@ bool HasButtonLink(Comp::MediaObj& m_obj, std::string& targ_str); -class CheckAuthorMode -{ - public: - static bool Flag; // спец. режим для тестов (доп. проверки) +bool IsMotion(Menu mn); +guint64 MenuSize(Menu mn); +double MenuDuration(Menu mn); - CheckAuthorMode(bool turn_on = true); - ~CheckAuthorMode(); - protected: - bool origVal; -}; +void ClearTaggedData(Menu mn, const char* tag); } // namespace Project @@ -69,13 +64,27 @@ void Warning(const std::string& str); void Info(const std::string& str, bool add_info_sign = true); -void Error(const std::string& str); void FillSconsOptions(str::stream& scons_options, bool fill_def); -ExitData ExecuteSconsCmd(const std::string& out_dir, OutputFilter& of, - Mode mod, const str::stream& scons_options); +void ExecuteSconsCmd(const std::string& out_dir, OutputFilter& of, + Mode mod, const str::stream& scons_options); +// вызов внешней команды в процессе авторинга +// устанавливает GetES().eDat.pid на время работы, потому нельзя выполнять +// одновременно более одной команды (а если потребуется, то придется держать +// список идентификаторов процессов) +ExitData AsyncCall(const char* dir, const char* cmd, const ReadReadyFnr& fnr); + +io::pos ProjectSizeSum(); + +// функтор сообщает об ошибках через исключение, которое преобразуется +// в строку => признак ошибки - непустой результат +std::string SafeCall(const ActionFunctor& fnr); +inline bool IsGood(const std::string& res) { return res.empty(); } -io::pos VideoSizeSum(); +void Error(const std::string& str); +void Error(const std::string& msg, const std::string& reason); +void ErrorByED(const std::string& msg, const ExitData& ed); +void CheckAbortByUser(); } // namespace Author diff -Nru bombono-dvd-0.7.0/src/mgui/common_tool.h bombono-dvd-0.8.0/src/mgui/common_tool.h --- bombono-dvd-0.7.0/src/mgui/common_tool.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/common_tool.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/common_tool.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/design.h bombono-dvd-0.8.0/src/mgui/design.h --- bombono-dvd-0.7.0/src/mgui/design.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/design.h 2010-11-01 21:58:28.000000000 +0000 @@ -59,8 +59,10 @@ // Общая компоновка окна // -const uint WDG_BORDER_WDH = 6; // ширина отступов между основными виджетами -const uint BROWSER_WDH = 230; // ширина виджетов ОВФ(окно выбора файлов) и MediaBrowser +const uint WDG_BORDER_WDH = 6; // ширина отступов между основными виджетами +const uint BROWSER_WDH = 230; // ширина MediaBrowser +const uint APPLICATION_WDH = 1000; // ширина всего приложения по умолчанию +const uint FCW_WDH = 350; // ширина ОВФ(окно выбора файлов) #endif // __MGUI_DESIGN_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/dialog.h bombono-dvd-0.8.0/src/mgui/dialog.h --- bombono-dvd-0.7.0/src/mgui/dialog.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/dialog.h 2010-11-01 21:58:28.000000000 +0000 @@ -73,11 +73,18 @@ }; DialogVBox& AddHIGedVBox(Gtk::Dialog& dlg); +DialogVBox& PackDialogVBox(Gtk::Box& box); + +void AppendWithLabel(DialogVBox& vbox, Gtk::Widget& wdg, const char* label, + Gtk::PackOptions opt = Gtk::PACK_EXPAND_WIDGET); +Gtk::HBox& PackNamedWidget(Gtk::VBox& vbox, Gtk::Widget& name_wdg, Gtk::Widget& wdg, + RefPtr sg, Gtk::PackOptions opt); +Gtk::Label& LabelForWidget(const char* label, Gtk::Widget& wdg); -void AppendWithLabel(DialogVBox& vbox, Gtk::Widget& wdg, const char* label); // close_style - вариант для настроек (без OK) void CompleteDialog(Gtk::Dialog& dlg, bool close_style = false); +void SetDialogStrict(Gtk::Dialog& dlg, int min_wdh, int min_hgt, bool set_resizable = false); #endif // #ifndef __MGUI_DIALOG_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/dvdimport.cpp bombono-dvd-0.8.0/src/mgui/dvdimport.cpp --- bombono-dvd-0.7.0/src/mgui/dvdimport.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/dvdimport.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -70,8 +70,8 @@ // value, lower, upper, step_increment = 1, page_increment = 10, page_size = 0 previewAdj(0., 0., 0.) { - SetOutputFormat(thumbPlyr, fofRGB); - SetOutputFormat(previewPlyr, fofRGB); + RGBOpen(thumbPlyr); + RGBOpen(previewPlyr); } static std::string PageTitle(int pg_num) @@ -133,7 +133,7 @@ static void OnSelVob(ImportData& id) { bool res = false; - ForeachVob(id, bl::bind(&CheckVobSelect, bl::_1, boost::ref(res))); + ForeachVob(id, bb::bind(&CheckVobSelect, _1, boost::ref(res))); CompleteSelection(id, res); } @@ -215,7 +215,7 @@ } ASSERT( id.curPage != ipSELECT_VOBS ); - id.thumbIdler.ConnectIdle(bl::bind(&OnSelectIdle, boost::ref(id))); + id.thumbIdler.ConnectIdle(bb::bind(&OnSelectIdle, boost::ref(id))); } else id.CloseIdlers(); @@ -290,7 +290,7 @@ static void OnSelectionButton(ImportData& id, bool select_all) { - ForeachVob(id, bl::bind(SetVobSel, bl::_1, select_all)); + ForeachVob(id, bb::bind(SetVobSel, _1, select_all)); CompleteSelection(id, select_all); } @@ -331,7 +331,7 @@ static void OnPreviewValueChanged(ImportData& id) { id.previewIdler.Disconnect(); - id.previewIdler.ConnectIdle(bl::bind(&UpdatePreview, boost::ref(id))); + id.previewIdler.ConnectIdle(bb::bind(&UpdatePreview, boost::ref(id))); } static void OnVobActivate(const Gtk::TreePath& pth, ImportData& id) @@ -390,7 +390,7 @@ Gtk::Button& btn = PackStart(hbox, NewManaged(text)); sg->add_widget(btn); - btn.signal_clicked().connect(bl::bind(&OnSelectionButton, boost::ref(id), select_all)); + btn.signal_clicked().connect(bb::bind(&OnSelectionButton, boost::ref(id), select_all)); } static double ToPercent(uint32_t written_cnt, uint32_t sector_cnt) @@ -480,8 +480,8 @@ { io::stream out_strm(fname.c_str(), iof::out); uint32_t written_cnt = sec_arr[i]; - ReadFunctor fnr = bl::bind(&CopyFilePartWithProgress, boost::ref(out_strm), - bl::_1, bl::_2, + ReadFunctor fnr = bb::bind(&CopyFilePartWithProgress, boost::ref(out_strm), + _1, _2, boost::ref(written_cnt), sector_cnt, boost::ref(id)); //ReadFunctor fnr = MakeWriter(out_strm); @@ -548,8 +548,8 @@ ast.signal_close().connect(&Gtk::Main::quit); boost::reference_wrapper ref_id(id); - ast.signal_prepare().connect(bl::bind(&OnPreparePage, ref_id)); - ast.signal_apply().connect(bl::bind(&OnApply, ref_id)); + ast.signal_prepare().connect(bb::bind(&OnPreparePage, ref_id)); + ast.signal_apply().connect(bb::bind(&OnApply, ref_id)); for( int i=0; i()); Gtk::TreeView& view = NewManaged(vob_list); - view.signal_row_activated().connect(bl::bind(&OnVobActivate, bl::_1, ref_id)); + view.signal_row_activated().connect(bb::bind(&OnVobActivate, _1, ref_id)); // нужно/нет Gtk::CellRendererToggle& sel_rndr = *dynamic_cast( view.get_column(view.append_column_editable("", VF().selState) - 1)->get_first_cell_renderer()); - sel_rndr.signal_toggled().connect(bl::bind(&OnSelVob, ref_id)); + sel_rndr.signal_toggled().connect(bb::bind(&OnSelVob, ref_id)); // имя Gtk::TreeView::Column& name_cln = NewManaged(_("Name")); @@ -638,7 +638,7 @@ Gtk::HScale& scl = PackStart(vbox, NewManaged(id.previewAdj)); SetScaleSecondary(scl); id.previewAdj.signal_value_changed().connect( - bl::bind(&OnPreviewValueChanged, ref_id)); + bb::bind(&OnPreviewValueChanged, ref_id)); } // кнопки выбора @@ -654,7 +654,7 @@ PackSelectionButton(hbox, sg, false, id); ast.signal_prepare().connect( - bl::bind(&OnPrepareSelect, boost::ref(alg), boost::ref(ast))); + bb::bind(&OnPrepareSelect, boost::ref(alg), boost::ref(ast))); alg.show_all(); } } @@ -668,7 +668,7 @@ PackFCWPage(vbox, fcw, _("It is desirable the destination folder to be empty.")); fcw.signal_selection_changed().connect( - bl::bind(&OnSelectDest, boost::ref(fcw), ref_id)); + bb::bind(&OnSelectDest, boost::ref(fcw), ref_id)); } break; case ipIMPORT_PROC: @@ -688,7 +688,7 @@ // кнопка отмены Gtk::Alignment& btn_alg = PackStart(vbox, NewManaged(1.0, 0.5, 0.1, 1.0)); Gtk::Button& btn = Add(btn_alg, *Gtk::manage(new Gtk::Button(Gtk::Stock::STOP))); - btn.signal_clicked().connect(bl::bind(&OnImportStop, ref_id)); + btn.signal_clicked().connect(bb::bind(&OnImportStop, ref_id)); } break; case ipEND: diff -Nru bombono-dvd-0.7.0/src/mgui/editor/actions.cpp bombono-dvd-0.8.0/src/mgui/editor/actions.cpp --- bombono-dvd-0.7.0/src/mgui/editor/actions.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/actions.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -224,7 +224,7 @@ void Editor::Kit::SetDndFrame(const Rect& dnd_rct) { if( dndSelFrame != dnd_rct ) // нужна перерисовка - CalcRgnForRedraw(*this, bl::bind(&Editor::Kit::RecalcForDndFrame, this, bl::_1, dnd_rct)); + CalcRgnForRedraw(*this, bb::bind(&Editor::Kit::RecalcForDndFrame, this, _1, dnd_rct)); } void Editor::Kit::on_drag_leave(const RefPtr& context, guint time) @@ -263,8 +263,9 @@ return MyParent::on_drag_motion(context, x, y, time); } -void ToggleSafeArea(MEditorArea& edt_area) +void ToggleSafeArea() { - CalcRgnForRedraw(edt_area, bl::bind(&DrawSafeArea, bl::_1, boost::ref(edt_area))); + MEditorArea& edt_area = MenuEditor(); + CalcRgnForRedraw(edt_area, bb::bind(&DrawSafeArea, _1, boost::ref(edt_area))); } diff -Nru bombono-dvd-0.7.0/src/mgui/editor/actions.h bombono-dvd-0.8.0/src/mgui/editor/actions.h --- bombono-dvd-0.7.0/src/mgui/editor/actions.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/actions.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/editor/actions.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/editor/fe-select.h bombono-dvd-0.8.0/src/mgui/editor/fe-select.h --- bombono-dvd-0.7.0/src/mgui/editor/fe-select.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/fe-select.h 2010-11-01 21:58:28.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mgui/editor/fe-select.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MGUI_EDITOR_FE_SELECT_H__ #define __MGUI_EDITOR_FE_SELECT_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/editor/kit.cpp bombono-dvd-0.8.0/src/mgui/editor/kit.cpp --- bombono-dvd-0.7.0/src/mgui/editor/kit.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/kit.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -63,9 +63,8 @@ // по умолчанию ChangeToSelectTool(*this); - using namespace boost; toolbar.selTool.signal_toggled().connect( - lambda::bind(&EditorToolToggled, boost::ref(toolbar.selTool), boost::ref(*this)) ); + bb::bind(&EditorToolToggled, boost::ref(toolbar.selTool), boost::ref(*this)) ); LoadMenu(0); @@ -240,12 +239,11 @@ void ClearLocalData(MenuRegion& m_rgn, const std::string& tag) { - using namespace boost; - function clear_fnr; + boost::function clear_fnr; if( tag.empty() ) - clear_fnr = lambda::bind(&ClearDataWare, lambda::_1); + clear_fnr = bb::bind(&ClearDataWare, _1); else - clear_fnr = lambda::bind(&ClearDataWareTag, lambda::_1, tag.c_str()); + clear_fnr = bb::bind(&ClearDataWareTag, _1, tag.c_str()); clear_fnr(m_rgn); for( Comp::ListObj::Itr itr = m_rgn.List().begin(), end = m_rgn.List().end(); diff -Nru bombono-dvd-0.7.0/src/mgui/editor/render.cpp bombono-dvd-0.8.0/src/mgui/editor/render.cpp --- bombono-dvd-0.7.0/src/mgui/editor/render.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/render.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/editor/render.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ #include #include #include -#include // CheckAuthorMode::Flag +#include // ConsoleMode::Flag ///////////////////////////////////////////////////// @@ -111,7 +111,7 @@ EdtTextRenderer& FindTextRenderer(TextObj& t_obj, CanvasBuf& cnv_buf) { const std::string& tag = cnv_buf.DataTag(); - ASSERT( !(Project::CheckAuthorMode::Flag && tag.empty()) ); + ASSERT( !(Execution::ConsoleMode::Flag && tag.empty()) ); return tag.empty() ? t_obj.GetData() : t_obj.GetData(tag.c_str()) ; } diff -Nru bombono-dvd-0.7.0/src/mgui/editor/select.cpp bombono-dvd-0.8.0/src/mgui/editor/select.cpp --- bombono-dvd-0.7.0/src/mgui/editor/select.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/select.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -36,6 +36,7 @@ #include #include #include // Popup() +#include // SetColor() #include //typedef boost::function CMFunctor; @@ -178,7 +179,7 @@ const std::string& theme = obj->Theme(); if( theme != Editor::GetActiveTheme() ) { - Gtk::ComboBox& combo = MenuToolbar().frame_combo; + Gtk::ComboBox& combo = MenuToolbar().frame_combo; //Gtk::TreeModel::Children children = combo.get_model()->children(); //for( Gtk::TreeModel::iterator itr = children.begin(), end = children.end(); // itr != end; ++itr ) @@ -208,9 +209,7 @@ tbar.itaBtn.set_active(dsc.get_style() == Pango::STYLE_ITALIC); tbar.undBtn.set_active(obj->Style().isUnderlined); // * - RGBA::Pixel pxl = obj->Color(); - tbar.clrBtn.set_color(RGBA::PixelToColor(pxl)); - tbar.clrBtn.set_alpha(RGBA::ToGdkComponent(pxl.alpha)); + SetColor(tbar.clrBtn, obj->Color()); return false; } @@ -279,26 +278,24 @@ static void DeleteSelObjects(); -//static bool GetFirstMILink(Comp::MediaObj* obj, Project::MediaItem& res_mi) -//{ -// res_mi = obj->MediaItem(); -// return true; -//} - -static Project::MediaItem GetCurObjectLink(bool is_background) +static Comp::MediaObj* GetCurMO() { - Project::MediaItem res_mi; - if( is_background ) - res_mi = CurMenuRegion().BgRef(); - else - //ForeachSelectedCM(edt_area, bb::bind(&GetFirstMILink, _1, boost::ref(res_mi))); - boost_foreach( Comp::MediaObj* obj, SelectedMediaObjs() ) - { - res_mi = obj->MediaItem(); - break; - } - - return res_mi; + //Project::MediaItem res_mi; + //if( is_background ) + // res_mi = CurMenuRegion().BgRef(); + //else + // boost_foreach( Comp::MediaObj* obj, SelectedMediaObjs() ) + // { + // res_mi = obj->MediaItem(); + // break; + // } + Comp::MediaObj* res = 0; + boost_foreach( Comp::MediaObj* obj, SelectedMediaObjs() ) + { + res = obj; + break; + } + return res; } // sel_pos - над каким элементом находимся @@ -360,19 +357,86 @@ SetObjectsLinksEx(edt_area, mi, edt_area.SelArr(), for_poster); } +static void SetPlayAllFlag(bool is_on) +{ + boost_foreach( Comp::MediaObj* obj, SelectedMediaObjs() ) + obj->PlayAll() = is_on; +} + +static void SetActionLinkImpl(Project::MediaItem mi) +{ + SetObjectsLinks(mi, false); +} + +static void SetActionLink(Project::MediaItem mi) +{ + SetActionLinkImpl(mi); + SetPlayAllFlag(false); +} + +static void SetPlayAll() +{ + SetActionLinkImpl(Project::MediaItem()); + SetPlayAllFlag(true); +} + +class LinkMenuBuilder: public Project::EditorMenuBuilder +{ + typedef Project::EditorMenuBuilder MyParent; + public: + LinkMenuBuilder(Comp::MediaObj* obj) + :MyParent(obj->MediaItem(), MenuEditor(), false), playAll(obj->PlayAll()) {} + + virtual ActionFunctor CreateAction(Project::MediaItem mi); + virtual void AddConstantChoice(); + + protected: + bool playAll; +}; + +ActionFunctor MakeActionLinker(Project::MediaItem mi) +{ + return bb::bind(&SetActionLink, mi); +} + +ActionFunctor LinkMenuBuilder::CreateAction(Project::MediaItem mi) +{ + return MakeActionLinker(mi); +} + +void LinkMenuBuilder::AddConstantChoice() +{ + AddNoLinkItem(*this, !playAll); + AddPredefinedItem(_("Play All"), playAll, SetPlayAll); +} + class PosterMenuBuilder: public Project::EditorMenuBuilder { typedef Project::EditorMenuBuilder MyParent; public: - PosterMenuBuilder(Project::MediaItem cur_itm, MEditorArea& ed) - :MyParent(cur_itm, ed, true) {} + PosterMenuBuilder(Project::MediaItem cur_itm, MEditorArea& ed, bool is_back) + :MyParent(cur_itm, ed, true), isBack(is_back) {} - virtual ActionFunctor CreateAction(Project::MediaItem mi) - { - return bb::bind(&SetObjectsLinks, mi, true); - } + virtual ActionFunctor CreateAction(Project::MediaItem mi); + + protected: + bool isBack; }; +static void OnPosterChoice(Project::MediaItem mi, bool is_back) +{ + if( is_back ) + SetBackgroundLink(mi); + else + SetObjectsLinks(mi, true); +} + +ActionFunctor PosterMenuBuilder::CreateAction(Project::MediaItem mi) +{ + // ко времени выбора "builder" меню уже не существует + return bb::bind(&OnPosterChoice, mi, isBack); +} + typedef boost::function CMFunctor2; class AlignVis: public CommonDrawVis @@ -551,15 +615,14 @@ RenderForRegion(edt_area, new_rlr); } -static void AddEnabledItem(Gtk::Menu& menu, const char* name, bool is_enabled, const ActionFunctor& fnr) +static void SetBgColor(); + +bool SetEnabled(Gtk::Widget& wdg, bool is_enabled) { - Gtk::MenuItem& itm = MakeAppendMI(menu, name); - itm.set_sensitive(is_enabled); - itm.signal_activate().connect(fnr); + wdg.set_sensitive(is_enabled); + return is_enabled; } -static void SetBgColor(); - void NormalSelect::OnMouseDown(MEditorArea& edt_area, GdkEventButton* event) { int sel_pos; @@ -593,44 +656,49 @@ using namespace Gtk::Menu_Helpers; const int_array& sel_arr = edt_area.SelArr(); - bool is_background = sel_arr.empty(); - Gtk::Menu& mn = NewPopupMenu(); + bool has_selected = !sel_arr.empty(); + Gtk::Menu& mn = NewPopupMenu(); - mn.items().push_back(MenuElem(_("Delete"), &DeleteSelObjects)); - if( is_background ) - mn.items().back().set_sensitive(false); - mn.items().push_back(SeparatorElem()); - - // Set Link - Project::Menu cur_mn = edt_area.CurMenu(); - Project::SetLinkMenu& slm = cur_mn->GetData(); - slm.isForBack = is_background; - slm.newLink = GetCurObjectLink(is_background); + AddEnabledItem(mn, _("Delete"), &DeleteSelObjects, has_selected); + AppendSeparator(mn); - InvokeOn(cur_mn, "SetLinkMenu"); - if( slm.linkMenu ) - { - mn.items().push_back(MenuElem(_("Link"))); - mn.items().back().set_submenu(*slm.linkMenu.release()); - } - mn.items().push_back( - MenuElem(_("Remove Link"), bb::bind(&SetSelObjectsLinks, - Project::MediaItem(), is_background))); + // Link + //bool is_background = !has_selected; + //Project::Menu cur_mn = edt_area.CurMenu(); + //Project::SetLinkMenu& slm = cur_mn->GetData(); + //slm.isForBack = is_background; + //slm.newLink = GetCurObjectLink(is_background); + // + //InvokeOn(cur_mn, "SetLinkMenu"); + //if( slm.linkMenu ) + //{ + // mn.items().push_back(MenuElem(_("Link"))); + // mn.items().back().set_submenu(*slm.linkMenu.release()); + //} + //mn.items().push_back( + // MenuElem(_("Remove Link"), bb::bind(&SetSelObjectsLinks, + // Project::MediaItem(), is_background))); + Gtk::MenuItem& link_itm = MakeAppendMI(mn, _("Link")); + if( SetEnabled(link_itm, has_selected) ) + link_itm.set_submenu(LinkMenuBuilder(GetCurMO()).Create()); + AddEnabledItem(mn, _("Remove Link"), MakeActionLinker(Project::MediaItem()), + has_selected); // Poster Link Gtk::MenuItem& poster_itm = MakeAppendMI(mn, _("Set Poster")); - bool can_set_poster; - Project::MediaItem cur_pstr = GetCurPosterLink(can_set_poster); - poster_itm.set_sensitive(can_set_poster); - if( can_set_poster ) - poster_itm.set_submenu(PosterMenuBuilder(cur_pstr, edt_area).Create()); + Project::MediaItem cur_pstr; + bool can_set_poster = true; + if( has_selected ) + cur_pstr = GetCurPosterLink(can_set_poster); + else + cur_pstr = CurMenuRegion().BgRef(); + if( SetEnabled(poster_itm, can_set_poster) ) + poster_itm.set_submenu(PosterMenuBuilder(cur_pstr, edt_area, !has_selected).Create()); // Align { Gtk::MenuItem& align_itm = MakeAppendMI(mn, _("Align")); - bool can_align = !is_background; - align_itm.set_sensitive(can_align); - if( can_align ) + if( SetEnabled(align_itm, has_selected) ) { Gtk::Menu& menu = NewManaged(); align_itm.set_submenu(menu); @@ -647,13 +715,13 @@ //allow horizontal or vertical distribute if three or more objects selected bool can_distribute = ( sel_arr.size() > 2 ); AppendSeparator(menu); - AddEnabledItem(menu, _("Distribute Horizontally"), can_distribute, bb::bind(&DistributeImpl, true)); - AddEnabledItem(menu, _("Distribute Vertically"), can_distribute, bb::bind(&DistributeImpl, false)); + AddEnabledItem(menu, _("Distribute Horizontally"), bb::bind(&DistributeImpl, true), can_distribute); + AddEnabledItem(menu, _("Distribute Vertically"), bb::bind(&DistributeImpl, false), can_distribute); } } // Set Background Color - AddEnabledItem(mn, _("Set Background Color..."), is_background, &SetBgColor); + AddEnabledItem(mn, _("Set Background Color..."), &SetBgColor, !has_selected); //mn.accelerate(edt_area); Popup(mn, event, true); @@ -895,13 +963,13 @@ RenderForRegion(edt_area, Rect0Sz(edt_area.FramePlacement().Size())); } -void SetSelObjectsLinks(Project::MediaItem mi, bool is_background) -{ - if( is_background ) - SetBackgroundLink(mi); - else - SetObjectsLinks(mi, false); -} +//void SetSelObjectsLinks(Project::MediaItem mi, bool is_background) +//{ +// if( is_background ) +// SetBackgroundLink(mi); +// else +// SetObjectsLinks(mi, false); +//} static void SetBgColor() { @@ -912,7 +980,7 @@ sel.set_current_color(PixelToColor(bg_clr)); if( dlg.run() == Gtk::RESPONSE_OK ) { - bg_clr = RGBA::Pixel(sel.get_current_color()); + bg_clr = RGBA::ColorToPixel(sel.get_current_color()); SetBackgroundLink(Project::MediaItem()); // очистка + перерисовка } } diff -Nru bombono-dvd-0.7.0/src/mgui/editor/text.cpp bombono-dvd-0.8.0/src/mgui/editor/text.cpp --- bombono-dvd-0.7.0/src/mgui/editor/text.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/text.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/editor/text.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -536,13 +536,12 @@ void TextRenderer::RenderByRegion(const Rect& drw_rct) { - using namespace boost; // 1 отрисовка текста - RenderWithFunctor( lambda::bind(&TextRenderer::RenderText, this), drw_rct, + RenderWithFunctor( bb::bind(&TextRenderer::RenderText, this), drw_rct, CalcTextPlc() ); // 2 отрисовка курсора - RenderWithFunctor( lambda::bind(&TextRenderer::RenderCursor, this), drw_rct, + RenderWithFunctor( bb::bind(&TextRenderer::RenderCursor, this), drw_rct, CalcCursorPlc() ); } @@ -590,7 +589,7 @@ static void PasteClipboard(TextRenderer* rndr) { - GetCb(*rndr)->request_text(bl::bind(InsertUText, rndr, bl::_1)); + GetCb(*rndr)->request_text(bb::bind(InsertUText, rndr, _1)); } void FillHotKeyMap(HK::Map& map, GdkKeymap* keymap) @@ -598,15 +597,15 @@ typedef HK::Functor Functor; // Copy Clipboard - Functor copy_cb_fnr = bl::bind(&CopyClipboard, bl::_1, false); + Functor copy_cb_fnr = bb::bind(&CopyClipboard, _1, false); AppendHK(map, GDK_c, GDK_CONTROL_MASK, copy_cb_fnr, keymap); AppendHK(map, GDK_Insert, GDK_CONTROL_MASK, copy_cb_fnr, keymap); // Cut Clipboard - Functor cut_cb_fnr = bl::bind(&CopyClipboard, bl::_1, true); + Functor cut_cb_fnr = bb::bind(&CopyClipboard, _1, true); AppendHK(map, GDK_x, GDK_CONTROL_MASK, cut_cb_fnr, keymap); AppendHK(map, GDK_Delete, GDK_SHIFT_MASK, cut_cb_fnr, keymap); // Paste Clipboard - Functor paste_cb_fnr = bl::bind(&PasteClipboard, bl::_1); + Functor paste_cb_fnr = bb::bind(&PasteClipboard, _1); AppendHK(map, GDK_v, GDK_CONTROL_MASK, paste_cb_fnr, keymap); AppendHK(map, GDK_Insert, GDK_SHIFT_MASK, paste_cb_fnr, keymap); } @@ -830,8 +829,7 @@ // dat.timer = // Glib::signal_timeout().connect(to_slot, GetBlinkTime(dat.toShow, txt_rndr.CursBlinkTime()) ); - using namespace boost; - BoolFnr fnr = lambda::bind(&BlinkCursor::OnTimeout, this, &txt_rndr); + BoolFnr fnr = bb::bind(&BlinkCursor::OnTimeout, this, &txt_rndr); dat.timer.Connect( fnr, GetBlinkTime(dat.toShow, txt_rndr.CursBlinkTime()) ); } @@ -868,8 +866,7 @@ { Data& dat = (Data&)txt_rndr; - using namespace boost; - BoolFnr fnr = lambda::bind(&PendingCursor::OnTimeout, this, &txt_rndr); + BoolFnr fnr = bb::bind(&PendingCursor::OnTimeout, this, &txt_rndr); dat.timer.Connect( fnr, int(CURSOR_PEND_PART*txt_rndr.CursBlinkTime()) ); } diff -Nru bombono-dvd-0.7.0/src/mgui/editor/toolbar.cpp bombono-dvd-0.8.0/src/mgui/editor/toolbar.cpp --- bombono-dvd-0.7.0/src/mgui/editor/toolbar.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/toolbar.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -208,9 +209,7 @@ fnt_desc.set_weight(bldBtn.get_active() ? Pango::WEIGHT_BOLD : Pango::WEIGHT_NORMAL); fnt_desc.set_style(itaBtn.get_active() ? Pango::STYLE_ITALIC : Pango::STYLE_NORMAL); - RGBA::Pixel pxl(clrBtn.get_color()); - pxl.alpha = RGBA::FromGdkComponent(clrBtn.get_alpha()); - return TextStyle(fnt_desc, undBtn.get_active(), pxl); + return TextStyle(fnt_desc, undBtn.get_active(), GetColor(clrBtn)); } std::string GetActiveTheme() @@ -362,7 +361,10 @@ { MenuRegion& rgn = editor.CurMenuRegion(); - Project::AddFTOItem(rgn, Editor::GetActiveTheme(), lct, mi); + FrameThemeObj* fto = Project::NewFTO(Editor::GetActiveTheme(), lct); + fto->MediaItem().SetLink(mi); + Project::AddMenuItem(rgn, fto); + RenderForRegion(editor, Planed::AbsToRel(rgn.Transition(), lct)); } @@ -379,8 +381,9 @@ AddFTOItem(editor, lct, mi); } -static void AddObjectClicked(MEditorArea& editor) +static void AddObjectClicked() { + MEditorArea& editor = MenuEditor(); if( Project::Menu mn = editor.CurMenu() ) { // * находим положение @@ -405,11 +408,11 @@ return true; } -static void FrameTypeChanged(MEditorArea& editor) +static void FrameTypeChanged() { RectListRgn r_lst; - ForAllSelectedFTO( bb::bind(&ReframeFTO, boost::ref(r_lst), _1, _2)); - RenderForRegion(editor, r_lst); + ForAllSelectedFTO( bb::bind(&ReframeFTO, boost::ref(r_lst), _1, _2) ); + RenderForRegion(MenuEditor(), r_lst); } static void EntryChanged(Gtk::Entry& ent, bool is_activate, ActionFunctor fnr) @@ -430,21 +433,6 @@ SetSelObjectsTStyle(editor, editor.Toolbar().GetFontDesc(), only_clr); } -static void OnToolbarControlled(MEditorArea& editor, ActionFunctor fnr) -{ -// if( Gtk::Widget* wdg = GetFocusWidget(editor) ) -// PrintWidgetPath(*wdg); -// else -// io::cout << "Focus not on the window?" << io::endl; - - if( !editor.has_focus() && editor.CurMenu() ) - { - fnr(); - // * - GrabFocus(editor); - } -} - static void SetupStyleBtn(Gtk::ToggleButton& btn, Gtk::Toolbar& tbar, const char* tooltip, const ActionFunctor& fnr, Gtk::BuiltinStockID stock_id) @@ -464,6 +452,29 @@ btn.signal_toggled().connect(fnr); } +// хочется отрабатывать изменения в управляющих элементах только когда +// фокус не на редакторе (т.е. когда не сам редактор изменился) +static void OnToolbarControlled(const ActionFunctor& fnr) +{ + MEditorArea& editor = MenuEditor(); +// if( Gtk::Widget* wdg = GetFocusWidget(editor) ) +// PrintWidgetPath(*wdg); +// else +// io::cout << "Focus not on the window?" << io::endl; + + if( !editor.has_focus() && editor.CurMenu() ) + { + fnr(); + // * + GrabFocus(editor); + } +} + +static ActionFunctor MakeToolbarFunctor(const ActionFunctor& fnr) +{ + return bb::bind(&OnToolbarControlled, fnr); +} + Gtk::Toolbar& PackToolbar(MEditorArea& editor, Gtk::VBox& lct_box) { Editor::Toolbar& edt_tbar = editor.Toolbar(); @@ -478,28 +489,22 @@ tbar.append(edt_tbar.txtTool); AppendTSeparator(tbar); - // хочется отрабатывать изменения в управляющих элементах только когда - // фокус не на редакторе (т.е. когда не сам редактор изменился) - typedef boost::function ActionActionFunctor; - ActionActionFunctor otc = bl::bind(&OnToolbarControlled, boost::ref(editor), bl::_1); - // * выбор темы объекта { Gtk::ComboBox& combo = edt_tbar.frame_combo; AppendToToolbar(tbar, combo); - combo.signal_changed().connect( - bl::bind(otc, ActionFunctor(bl::bind(&FrameTypeChanged, boost::ref(editor))))); + combo.signal_changed().connect(MakeToolbarFunctor(&FrameTypeChanged)); // * кнопка Gtk::ToolButton& add_btn = NewManaged(Gtk::StockID(Gtk::Stock::ADD)); add_btn.set_tooltip(TooltipFactory(), _("Add Item")); tbar.append(add_btn); - add_btn.signal_clicked().connect( bl::bind(&AddObjectClicked, boost::ref(editor)) ); + add_btn.signal_clicked().connect(&AddObjectClicked); } AppendTSeparator(tbar); // * управление шрифтами - ActionFunctor on_font_change = bl::bind(otc, ActionFunctor(bl::bind(&FontNameChanged, boost::ref(editor), false))); + ActionFunctor on_font_change = MakeToolbarFunctor(bb::bind(&FontNameChanged, boost::ref(editor), false)); { std::string def_font = tbar.get_style()->get_font().get_family().raw(); // * семейства @@ -541,16 +546,14 @@ // * кнопка цвета текста Gtk::ColorButton& clr_btn = edt_tbar.clrBtn; - clr_btn.set_use_alpha(); + ConfigureRGBAButton(clr_btn, RGBA::Pixel(GOLD_CLR)); clr_btn.set_relief(Gtk::RELIEF_NONE); - clr_btn.set_color(RGBA::PixelToColor(GOLD_CLR)); - clr_btn.set_alpha(0xffff); clr_btn.set_title(_("Pick a Color for Text")); clr_btn.set_focus_on_click(false); SetTip(clr_btn, _("Text Color")); - clr_btn.signal_color_set().connect(bl::bind(&FontNameChanged, boost::ref(editor), true)); + clr_btn.signal_color_set().connect(MakeToolbarFunctor(bb::bind(&FontNameChanged, boost::ref(editor), true))); AppendToToolbar(tbar, clr_btn); } @@ -561,8 +564,8 @@ frm_btn.set_relief(Gtk::RELIEF_NONE); frm_btn.add(GetFactoryGtkImage("copy-n-paste/lpetool_show_bbox.png")); SetTip(frm_btn, _("Show Safe Area")); - // обвязка otc здесь используется для проверки, что в редакторе есть меню (и не валится при его отстутствии) - frm_btn.signal_toggled().connect(bl::bind(otc, ActionFunctor(bl::bind(&ToggleSafeArea, boost::ref(editor))))); + // обвязка здесь используется для проверки, что в редакторе есть меню (и не валится при его отстутствии) + frm_btn.signal_toggled().connect(MakeToolbarFunctor(&ToggleSafeArea)); return tbar; } diff -Nru bombono-dvd-0.7.0/src/mgui/editor/toolbar.h bombono-dvd-0.8.0/src/mgui/editor/toolbar.h --- bombono-dvd-0.7.0/src/mgui/editor/toolbar.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/editor/toolbar.h 2010-11-01 21:58:28.000000000 +0000 @@ -44,19 +44,19 @@ namespace Project { -FrameThemeObj* AddFTOItem(MenuRegion& menu_rgn, const std::string& theme, const Rect& lct, MediaItem mi); +FrameThemeObj* NewFTO(const std::string& theme, const Rect& lct); void AddMenuItem(MenuRegion& menu_rgn, Comp::Object* obj); -// вспомогательная структура для передачи меню ссылок -// от браузеров к редактору -struct SetLinkMenu -{ - bool isForBack; // нужны ссылки для фона - ptr::one linkMenu; - MediaItem newLink; - - SetLinkMenu(): isForBack(false) {} -}; +//// вспомогательная структура для передачи меню ссылок +//// от браузеров к редактору +//struct SetLinkMenu +//{ +// bool isForBack; // нужны ссылки для фона +// ptr::one linkMenu; +// MediaItem newLink; +// +// SetLinkMenu(): isForBack(false) {} +//}; } // namespace Project @@ -80,40 +80,41 @@ } // namespace Editor -void SetSelObjectsLinks(Project::MediaItem mi, bool is_background); void SetSelObjectsTStyle(MEditorArea& edt_area, const Editor::TextStyle& ts, bool only_clr); void SetBackgroundLink(Project::MediaItem mi); void SetLinkForObject(MEditorArea& edt_area, Project::MediaItem mi, int pos, bool for_poster); -void ToggleSafeArea(MEditorArea& edt_area); +void ToggleSafeArea(); namespace Project { -class CommonMenuBuilder +struct CommonMenuBuilder { - public: - CommonMenuBuilder(MediaItem cur_itm, bool for_poster); + MediaItem curItm; // текущая ссылка + // визуальная ссылка (=> только "первичка") + // для переходов (может быть меню, не может быть рисунком) + bool forPoster; + bool onlyWithAudio; // картинки запрещены + + Gtk::Menu& resMenu; // результирующее меню; обязательно должно быть присоединено после Create(), + // иначе утечка +Gtk::RadioButtonGroup radioGrp; + + CommonMenuBuilder(MediaItem cur_itm, bool for_poster, bool only_with_audio = false); virtual ~CommonMenuBuilder() {} virtual ActionFunctor CreateAction(MediaItem mi) = 0; Gtk::Menu& Create(); - virtual void AddConstantChoice(Gtk::Menu& lnk_list); + virtual void AddConstantChoice(); - protected: - MediaItem curItm; // текущая ссылка - bool forPoster; // визуальная ссылка или для переходов (может быть меню, не может быть рисунком) - - Gtk::Menu& resMenu; // результирующее меню; обязательно должно быть присоединено после Creat(), - // иначе утечка - Gtk::RadioButtonGroup radioGrp; - -Gtk::RadioMenuItem& -AddMediaItemChoice(Gtk::Menu& lnk_list, MediaItem mi, const std::string& name = std::string()); +Gtk::RadioMenuItem& AddMediaItemChoice(Gtk::Menu& lnk_list, MediaItem mi, const std::string& name = std::string()); +void AddPredefinedItem(const std::string& label, bool is_active, const ActionFunctor& fnr); }; void AppendRadioItem(Gtk::RadioMenuItem& itm, bool is_active, const ActionFunctor& fnr, Gtk::Menu& lnk_list); +void AddNoLinkItem(CommonMenuBuilder& mb, bool exp_link); class EditorMenuBuilder: public CommonMenuBuilder { @@ -125,6 +126,26 @@ MEditorArea& editor; }; +class EndActionMenuBld: public CommonMenuBuilder +{ + typedef CommonMenuBuilder MyParent; + public: + typedef boost::function Functor; + + EndActionMenuBld(PostAction& pa, const ActionFunctor& on_updater, + const Functor& cc_adder); + + void AddConstantItem(const std::string& label, PostActionType typ); + + virtual ActionFunctor CreateAction(Project::MediaItem mi); + virtual void AddConstantChoice(); + + protected: + PostAction& pAct; + const ActionFunctor onUpdater; + const Functor ccAdder; +}; + } // namespace Project #endif // __MGUI_EDITOR_TOOLBAR_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/execution.cpp bombono-dvd-0.8.0/src/mgui/execution.cpp --- bombono-dvd-0.7.0/src/mgui/execution.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/execution.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -25,6 +25,8 @@ #include "dialog.h" #include "gettext.h" +#include + #include #include @@ -45,6 +47,8 @@ kill(pid, SIGTERM); } +Data::Data(): pid(NO_HNDL), userAbort(false) {} + void Data::StopExecution(const std::string& what) { // COPY_N_PASTE - тупо сделал содержимое сообщений как у "TSNAMI-MPEG DVD Author" @@ -53,11 +57,17 @@ % bf::stop, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_YES_NO) ) { userAbort = true; - if( pid != NO_HNDL ) // во время выполнения внешней команды + if( IsAsyncCall() ) Stop(pid); } } +void Data::Init() +{ + ASSERT( !IsAsyncCall() ); + userAbort = false; +} + static bool PulseProgress(Gtk::ProgressBar& prg_bar) { prg_bar.pulse(); @@ -66,7 +76,7 @@ Pulse::Pulse(Gtk::ProgressBar& prg_bar) { - tm.Connect(bl::bind(&PulseProgress, boost::ref(prg_bar)), 500); + tm.Connect(bb::bind(&PulseProgress, boost::ref(prg_bar)), 500); } Pulse::~Pulse() @@ -77,39 +87,65 @@ void SimpleSpawn(const char *commandline, const char* dir) { GPid p = Spawn(dir, commandline); - ASSERT_RTL( p > 0 ); g_spawn_close_pid(p); } +bool ConsoleMode::Flag = false; + +ConsoleMode::ConsoleMode(bool turn_on): origVal(Flag) +{ Flag = turn_on; } +ConsoleMode::~ConsoleMode() +{ Flag = origVal; } + } // namespace Execution -struct ExecOutput +bool ExitData::IsCode(int c) const +{ + return normExit && (code == c); +} + +static bool IsFDOpen(int fd) { - sigc::connection outConn; - RefPtr outChnl; + bool res = true; - ~ExecOutput() { outConn.disconnect(); } -}; + errno = 0; // чистим + io::tell(fd); + if( errno ) + { + // нет такого открытого fd + ASSERT( errno == EBADF ); + res = false; + } + return res; +} + +//static void TestFdState(int fd, bool be_open) +//{ +// ASSERT( IsFDOpen(fd) == be_open ); +//} -class ReadDest +ExecOutput::~ExecOutput() { - public: - virtual ~ReadDest() {} + if( outChnl ) + { + outConn.disconnect(); - virtual void PutData(const char* dat, int sz) = 0; - virtual void OnEnd() = 0; -}; + // хочется точно знать, что дескриптор закрыли + int fd = g_io_channel_unix_get_fd(outChnl->gobj()); + outChnl.reset(); -struct ProgramOutput -{ - ExecOutput outEO; - ExecOutput errEO; + ASSERT( !IsFDOpen(fd) ); + } +} - ReadDest& outRd; - ReadDest& errRd; +void ExecOutput::Watch(int fd, const Functor& fnr, Glib::IOCondition cond) +{ + outConn = Glib::signal_io().connect(wrap_return(fnr), fd, cond); - ProgramOutput(ReadDest& o_rd, ReadDest& e_rd): outRd(o_rd), errRd(e_rd) {} -}; + outChnl = Glib::IOChannel::create_from_fd(fd); + outChnl->set_close_on_unref(true); + outChnl->set_flags(Glib::IO_FLAG_NONBLOCK); +} static ExecOutput& GetEO(ProgramOutput& po, bool is_out) { @@ -160,78 +196,48 @@ static void SetupEO(ProgramOutput& po, int fd, bool is_out) { ExecOutput& eo = GetEO(po, is_out); - using namespace boost; - function fnr = lambda::bind(&OnStreamReadReady, boost::ref(po), is_out, lambda::_1); - eo.outConn = Glib::signal_io().connect(wrap_return(fnr), fd, StreamConditionMask); - - eo.outChnl = Glib::IOChannel::create_from_fd(fd); - eo.outChnl->set_close_on_unref(true); - eo.outChnl->set_flags(Glib::IO_FLAG_NONBLOCK); + eo.Watch(fd, bb::bind(&OnStreamReadReady, boost::ref(po), is_out, _1), StreamConditionMask); } -static void WaitExitCode(ExitData& ed, GPid pid, int status) +ExitData StatusToExitData(int status) { - ed.normExit = true; + ExitData ed; if( WIFEXITED(status) ) - ed.retCode = WEXITSTATUS(status); + ed.code = WEXITSTATUS(status); else if( WIFSIGNALED(status) ) { ed.normExit = false; - ed.retCode = WTERMSIG(status); + ed.code = WTERMSIG(status); } else ASSERT_RTL(0); - g_spawn_close_pid(pid); - Gtk::Main::quit(); + return ed; } -static void TestFdState(int fd, bool be_open) +static ExitData CloseProcData(GPid pid, int status) { - // ожидаемое значение - int need_errno = be_open ? 0 : EBADF; // нет такого открытого fd - - errno = 0; // чистим - io::tell(fd); - ASSERT_OR_UNUSED_VAR( errno == need_errno, need_errno ); + ExitData ed = StatusToExitData(status); + g_spawn_close_pid(pid); + return ed; } -static void LogExecuteAsync(const std::string& str) +ExitData System(const std::string& cmd) { - LOG_INF << io::endl; - LOG_INF << "ExecuteAsync(): " << str << io::endl; - LOG_INF << io::endl; + return StatusToExitData( system(cmd.c_str()) ); } -static ExitData ExecuteAsyncImpl(const char* dir, const char* cmd, ReadDest& out_rd, ReadDest& err_rd, - GPid* pid) +static void WaitExitCode(ExitData& ed, GPid pid, int status) { - LogExecuteAsync("Begin"); - ExitData ed; - int out_err[2]; - { - GPid p = Spawn(dir, cmd, out_err, true); - ASSERT_RTL( p > 0 ); - if( pid ) - *pid = p; - - using namespace boost; - Glib::signal_child_watch().connect(lambda::bind(&WaitExitCode, boost::ref(ed), lambda::_1, lambda::_2), p); - ProgramOutput po(out_rd, err_rd); - SetupEO(po, out_err[0], true); - SetupEO(po, out_err[1], false); - - Gtk::Main::run(); - - ReadPendingData(po, true); - ReadPendingData(po, false); - } - // должны быть закрыты ExecOutput::outStrm - TestFdState(out_err[0], false); - TestFdState(out_err[1], false); + ed = CloseProcData(pid, status); + Gtk::Main::quit(); +} - LogExecuteAsync("End"); - return ed; +static void LogEA(const std::string& str) +{ + LOG_INF << io::endl; + LOG_INF << "ExecuteAsync(): " << str << io::endl; + LOG_INF << io::endl; } class RawRD: public ReadDest @@ -250,7 +256,7 @@ void Put(const char* dat, int sz) { fnr(dat, sz, isOut); } }; -class LinedRD: public RawRD + class LinedRD: public RawRD { typedef RawRD MyParent; public: @@ -310,12 +316,70 @@ return line_up ? new LinedRD(is_out, fnr) : new RawRD(is_out, fnr); } -ExitData ExecuteAsync(const char* dir, const char* cmd, ReadReadyFnr& fnr, +OutErrBlock::OutErrBlock(int out_err[2], const ReadReadyFnr& fnr, + bool line_up): + outRd(CreateReadDest(fnr, true, line_up)), + errRd(CreateReadDest(fnr, false, line_up)), + po(*outRd, *errRd) +{ + SetupEO(po, out_err[0], true); + SetupEO(po, out_err[1], false); +} + +OutErrBlock::~OutErrBlock() +{ + ReadPendingData(po, true); + ReadPendingData(po, false); +} + +static ExitData GUIWaitForExit(GPid pid) +{ + ExitData ed; + Glib::signal_child_watch().connect(bb::bind(&WaitExitCode, boost::ref(ed), _1, _2), pid); + Gtk::Main::run(); + + return ed; +} + +static ExitData ConsoleWaitForExit(GPid pid) +{ + int status; + while( waitpid(pid, &status, 0) == -1 ) + ASSERT_RTL( errno == EINTR ); + + return CloseProcData(pid, status); +} + +ExitData WaitForExit(GPid pid) +{ + return Execution::ConsoleMode::Flag ? ConsoleWaitForExit(pid) : GUIWaitForExit(pid) ; +} + +ExitData ExecuteAsync(const char* dir, const char* cmd, const ReadReadyFnr& fnr, GPid* pid, bool line_up) { - ptr::one o_rd(CreateReadDest(fnr, true, line_up)); - ptr::one e_rd(CreateReadDest(fnr, false, line_up)); - return ExecuteAsyncImpl(dir, cmd, *o_rd, *e_rd, pid); + LogEA("Begin"); + ExitData ed; + + { + int out_err[2]; + GPid p = Spawn(dir, cmd, out_err, true); + if( pid ) + { + ASSERT( *pid == NO_HNDL ); + *pid = p; + } + + OutErrBlock oeb(out_err, fnr, line_up); + + ed = GUIWaitForExit(p); + + if( pid ) + *pid = NO_HNDL; + } + + LogEA("End"); + return ed; } static void ThrowGError(const std::string& dsc, GError* err) @@ -325,7 +389,8 @@ throw std::runtime_error(str); } -GPid Spawn(const char* dir, const char *commandline, int out_err[2], bool need_watch) +GPid Spawn(const char* dir, const char *commandline, int out_err[2], bool need_wait, + int* in_fd) { LOG_INF << "Spawn(" << commandline << ")" << io::endl; //// старый вариант @@ -349,17 +414,20 @@ GSpawnFlags flags = G_SPAWN_SEARCH_PATH; // чтобы exec() проходил после первого fork() и можно было использовать waitpid(), // см. описание waitpid() - if( need_watch ) + if( need_wait ) flags = GSpawnFlags(flags | G_SPAWN_DO_NOT_REAP_CHILD); GPid pid; bool res = g_spawn_async_with_pipes(dir, argv, 0, flags, 0, 0, &pid, - 0, out_err, out_err ? out_err+1 : 0, &error); + in_fd, out_err, out_err ? out_err+1 : 0, &error); //g_strfreev (argv); g_free (user_shell); if( !res ) ThrowGError(std::string("while spawning: ") + argv[0], error); + // считаем, что проверка выше включает действительность pid + ASSERT_RTL( pid > 0 ); + return pid; } @@ -408,10 +476,22 @@ if( ed.IsGood() ) end_str = "normal completion"; else if( ed.normExit ) - end_str = BF_("exit code = %1%") % ed.retCode % bf::stop; + end_str = BF_("exit code = %1%") % ed.code % bf::stop; else - end_str = BF_("broken by signal %1%") % SignalToString(ed.retCode) % bf::stop; + end_str = BF_("broken by signal %1%") % SignalToString(ed.code) % bf::stop; return end_str; } +static void ConcatToStr(const char* buf, int sz, std::string& str) +{ + str += std::string(buf, sz); +} + +// записать в output весь (и out, и err!) вывод команды cmd +ExitData PipeOutput(const std::string& cmd, std::string& output) +{ + ReadReadyFnr fnr = bb::bind(&ConcatToStr, _1, _2, boost::ref(output)); + return ExecuteAsync(0, cmd.c_str(), fnr); +} + diff -Nru bombono-dvd-0.7.0/src/mgui/execution.h bombono-dvd-0.8.0/src/mgui/execution.h --- bombono-dvd-0.7.0/src/mgui/execution.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/execution.h 2010-11-01 21:58:28.000000000 +0000 @@ -22,7 +22,7 @@ #ifndef __MGUI_EXECUTION_H__ #define __MGUI_EXECUTION_H__ -#include +#include // NO_HNDL #include namespace Execution { @@ -32,13 +32,13 @@ GPid pid; bool userAbort; // пользователь сам отменил - Data() { Init(); } + Data(); - void Init() - { - pid = NO_HNDL; - userAbort = false; - } + // в процессе выполнения внешней команды + // установивший pid в конце должен его обнулить снова + bool IsAsyncCall() { return pid != NO_HNDL; } + + void Init(); void StopExecution(const std::string& what); }; @@ -53,28 +53,49 @@ }; void SimpleSpawn(const char *commandline, const char* dir = 0); +void Stop(GPid& pid); + +class ConsoleMode +{ + public: + static bool Flag; // спец. режим для тестов (доп. проверки) + + ConsoleMode(bool turn_on = true); + ~ConsoleMode(); + protected: + bool origVal; +}; } // namespace Exection typedef boost::function ReadReadyFnr; +ReadReadyFnr TextViewAppender(Gtk::TextView& txt_view); struct ExitData { bool normExit; // нет в случае ненормального выхода (по сигналу, например) - int retCode; // если !normExit, то это номер сигнала + int code; // если !normExit, то это номер сигнала // вроде как больше 127 не может быть static const int impossibleRetCode = 128; - ExitData(): normExit(true), retCode(impossibleRetCode) {} + ExitData(): normExit(true), code(impossibleRetCode) {} - bool IsGood() const { return normExit && (retCode == 0); } + bool IsGood() const { return IsCode(0); } + bool IsCode(int c) const; }; +// результат system() интерпретировать так +ExitData StatusToExitData(int status); +ExitData WaitForExit(GPid pid); +ExitData System(const std::string& cmd); // line_up - вывод по строкам, а не по мере поступления данных -ExitData ExecuteAsync(const char* dir, const char* cmd, ReadReadyFnr& fnr, +ExitData ExecuteAsync(const char* dir, const char* cmd, const ReadReadyFnr& fnr, GPid* pid = 0, bool line_up = true); +// записать в output весь (и out, и err!) вывод команды cmd +ExitData PipeOutput(const std::string& cmd, std::string& output); + std::string ExitDescription(const ExitData& ed); // COPY_N_PASTE_ETALON - симбиоз из: @@ -85,10 +106,14 @@ // (подправленный gnome_execute_shell()), но из-за устаревания gnome_executeXXX // перешел на g_spawnXXX // -// need_watch - из-за специфики Unix (waitpid()) требуется явно указывать, -// будем ли наблюдать за запущенным процессом +// need_wait - хотим ли знать/ждать статус окончания работы процесса; если да, то в той +// или иной форме родителю нужно вызывать waitpid(),- в том числе и для удаления этой информации из таблицы процессов +// (неосвобожденный таким образом закончивший работу процесс называют зомби); если нет, то инфо +// о статусе не сохранится по завершению процесса, и waitpid() вызывать не надо +// +// Если происходит ошибка создания процесса, то выкинется исключение std::runtime_error GPid Spawn(const char* dir, const char *commandline, - int out_err[2] = 0, bool need_watch = false); + int out_err[2] = 0, bool need_wait = false, int* in_fd = 0); #endif // #ifndef __MGUI_EXECUTION_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/_extlibs_.h bombono-dvd-0.8.0/src/mgui/_extlibs_.h --- bombono-dvd-0.7.0/src/mgui/_extlibs_.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/_extlibs_.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/_extlibs_.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/gettext.h bombono-dvd-0.8.0/src/mgui/gettext.h --- bombono-dvd-0.7.0/src/mgui/gettext.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/gettext.h 2010-11-01 21:58:28.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mgui/gettext.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MGUI_GETTEXT_H__ #define __MGUI_GETTEXT_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/img-factory.cpp bombono-dvd-0.8.0/src/mgui/img-factory.cpp --- bombono-dvd-0.7.0/src/mgui/img-factory.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/img-factory.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/img-factory.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -45,22 +45,25 @@ return itr->second; } -void CheckEmblem(RefPtr pix, RefPtr emblem) +static void CheckEmblem(RefPtr pix, RefPtr emblem) { Point e_sz(PixbufSize(emblem)); Point p_sz(PixbufSize(pix)); ASSERT( (e_sz.x <= p_sz.x) && (e_sz.y <= p_sz.y) ); } -void StampEmblem(RefPtr pix, const std::string& emblem_str) +RefPtr GetCheckEmblem(RefPtr pix, const std::string& emblem_str) { RefPtr emblem = GetFactoryImage(emblem_str); CheckEmblem(pix, emblem); + return emblem; +} +void StampEmblem(RefPtr pix, const std::string& emblem_str) +{ + RefPtr emblem = GetCheckEmblem(pix, emblem_str); // левый нижний угол - Point e_sz(PixbufSize(emblem)); - Point p_sz(PixbufSize(pix)); - RGBA::AlphaComposite(pix, emblem, RectASz(Point(0, p_sz.y-e_sz.y), e_sz)); + RGBA::AlphaComposite(pix, emblem, Point(0, pix->get_height() - emblem->get_height())); } diff -Nru bombono-dvd-0.7.0/src/mgui/img-factory.h bombono-dvd-0.8.0/src/mgui/img-factory.h --- bombono-dvd-0.7.0/src/mgui/img-factory.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/img-factory.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/img-factory.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -30,7 +30,9 @@ RefPtr GetFactoryImage(const std::string& img_str); // наложить изображение emblem_str на pix, в левом нижнем углу void StampEmblem(RefPtr pix, const std::string& emblem_str); -void CheckEmblem(RefPtr pix, RefPtr emblem); + +//void CheckEmblem(RefPtr pix, RefPtr emblem); +RefPtr GetCheckEmblem(RefPtr pix, const std::string& emblem_str); #endif // #ifndef __MGUI_IMG_FACTORY_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/img_utils.cpp bombono-dvd-0.8.0/src/mgui/img_utils.cpp --- bombono-dvd-0.7.0/src/mgui/img_utils.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/img_utils.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/img_utils.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -427,29 +427,20 @@ namespace RGBA { -Pixel::Pixel(const unsigned int rgba) -{ - FromUint(rgba); -} +//Pixel::Pixel(const Gdk::Color& clr): +// red(FromGdkComponent(clr.get_red())), green(FromGdkComponent(clr.get_green())), +// blue(FromGdkComponent(clr.get_blue())), alpha(MaxClr) +//{} -Pixel::Pixel(const Gdk::Color& clr): - red(FromGdkComponent(clr.get_red())), green(FromGdkComponent(clr.get_green())), - blue(FromGdkComponent(clr.get_blue())), alpha(MaxClr) -{} - -Pixel& Pixel::FromUint(const unsigned int rgba) +Pixel ColorToPixel(const Gdk::Color& clr) { - red = rgba >> 24; - green = (rgba & 0x00ff0000) >> 16; - blue = (rgba & 0x0000ff00) >> 8; - alpha = (rgba & 0x000000ff); - - return *this; + return Pixel(FromGdkComponent(clr.get_red()), FromGdkComponent(clr.get_green()), + FromGdkComponent(clr.get_blue()), Pixel::MaxClr); } -unsigned int Pixel::ToUint() +unsigned int ToUint(const Gdk::Color& clr) { - return (red << 24) | (green << 16) | (blue << 8) | alpha; + return ColorToPixel(clr).ToUint(); } gushort ToGdkComponent(unsigned char n) diff -Nru bombono-dvd-0.7.0/src/mgui/img_utils.h bombono-dvd-0.8.0/src/mgui/img_utils.h --- bombono-dvd-0.7.0/src/mgui/img_utils.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/img_utils.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/img_utils.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -22,11 +22,10 @@ #ifndef __MGUI_IMG_UTILS_H__ #define __MGUI_IMG_UTILS_H__ -#include - #include "mguiconst.h" -inline int Round(double val) { return int(round(val)); } +#include +#include // Вспомогательные функции для работы с Pixbuf и Cairo @@ -164,36 +163,8 @@ namespace RGBA { -#include PACK_ON -struct Pixel -{ - typedef unsigned char ClrType; - static const ClrType MinClr = 0; - static const ClrType MaxClr = 255; - - ClrType red; - ClrType green; - ClrType blue; - ClrType alpha; - - Pixel(): red(MinClr), green(MinClr), blue(MinClr), alpha(MaxClr) {} - Pixel(ClrType r, ClrType g, ClrType b, ClrType a = MaxClr): - red(r), green(g), blue(b), alpha(a) {} - Pixel(const unsigned int rgba); - Pixel(const Gdk::Color& clr); - - Pixel& FromUint(const unsigned int rgba); -unsigned int ToUint(); - - static double FromQuant(ClrType c) { return (double)c/MaxClr; } - static ClrType ToQuant(double c) { return ClrType( Round(c*MaxClr) ); } -}; -#include PACK_OFF - -inline unsigned int ToUint(const Gdk::Color& clr) -{ - return Pixel(clr).ToUint(); -} +Pixel ColorToPixel(const Gdk::Color& clr); +unsigned int ToUint(const Gdk::Color& clr); // перевод в GdkColor Gdk::Color PixelToColor(const Pixel& pxl); @@ -205,12 +176,13 @@ void PutPixel(RefPtr pix, const Point& pnt, const Pixel& pxl); void Scale(RefPtr dst, RefPtr src, const Rect& plc); -inline void Scale(RefPtr dst, RefPtr src) -{ - Scale(dst, src, PixbufBounds(dst)); -} +void Scale(RefPtr dst, RefPtr src); + +void CopyOrScale(RefPtr& pix, RefPtr src); void AlphaComposite(RefPtr dst, RefPtr src, const Rect& plc); +void AlphaComposite(RefPtr dst, RefPtr src, const Point& a); + void CopyAlphaComposite(RefPtr dst, RefPtr src, bool mult = false); // добавляет альфа-канал, если не 4 void AddAlpha(RefPtr& pix); diff -Nru bombono-dvd-0.7.0/src/mgui/init.h bombono-dvd-0.8.0/src/mgui/init.h --- bombono-dvd-0.7.0/src/mgui/init.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/init.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/init.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/menu-rgn.h bombono-dvd-0.8.0/src/mgui/menu-rgn.h --- bombono-dvd-0.7.0/src/mgui/menu-rgn.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/menu-rgn.h 2010-11-01 21:58:28.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/menu-rgn.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -54,6 +54,8 @@ Point Size() { return FramePlacement().Size(); } // = Canvas(), только ограничен размерами Size() RefPtr FramePixbuf(); + // граница области рендеринга, FramePixbuf() (используются + // относительные координаты!) Rect FrameRect() { Rect rct = FramePlacement(); diff -Nru bombono-dvd-0.7.0/src/mgui/mux.cpp bombono-dvd-0.8.0/src/mgui/mux.cpp --- bombono-dvd-0.7.0/src/mgui/mux.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/mux.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -41,6 +41,11 @@ AppendNewText(txt_view, std::string(dat, sz), is_out); } +ReadReadyFnr TextViewAppender(Gtk::TextView& txt_view) +{ + return bb::bind(&OnNewText, boost::ref(txt_view), _1, _2, _3); +} + static void OnResponse(Execution::Data& edat, int resp) { if( resp == Gtk::RESPONSE_CANCEL) @@ -51,9 +56,9 @@ } } -void SetDialogStrict(Gtk::Dialog& dlg, int min_wdh, int min_hgt) +void SetDialogStrict(Gtk::Dialog& dlg, int min_wdh, int min_hgt, bool set_resizable) { - dlg.set_resizable(false); // чтоб при закрытии экспандера диалог уменьшался + dlg.set_resizable(set_resizable); // чтоб при закрытии экспандера диалог уменьшался // размер окна пошире GdkGeometry geom; geom.min_width = min_wdh; @@ -81,7 +86,7 @@ dlg.get_action_area()->set_layout(Gtk::BUTTONBOX_CENTER); dlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); - dlg.signal_response().connect(bl::bind(&OnResponse, boost::ref(edat), bl::_1)); + dlg.signal_response().connect(bb::bind(&OnResponse, boost::ref(edat), _1)); dlg.show_all(); } @@ -90,10 +95,9 @@ ExitData ed; { Execution::Pulse pls(prg_bar); - ReadReadyFnr fnr = bl::bind(&OnNewText, boost::ref(txt_view), bl::_1, bl::_2, bl::_3); std::string cmd = boost::format("mplex -f 8 -o %1% %2%") % dest_path % args % bf::stop; AppendCommandText(txt_view, cmd); - ed = ExecuteAsync(0, cmd.c_str(), fnr, &edat.pid); + ed = ExecuteAsync(0, cmd.c_str(), TextViewAppender(txt_view), &edat.pid); } if( !ed.IsGood() && !edat.userAbort ) @@ -190,7 +194,7 @@ CompleteDialog(dlg); } - v_btn.signal_selection_changed().connect(bl::bind(&OnVideoSelected, boost::ref(v_btn), boost::ref(a_btn), boost::ref(sc))); + v_btn.signal_selection_changed().connect(bb::bind(&OnVideoSelected, boost::ref(v_btn), boost::ref(a_btn), boost::ref(sc))); if( !src_fname.empty() ) { if( get_extension(src_fname) == "m2v" ) diff -Nru bombono-dvd-0.7.0/src/mgui/prefs.cpp bombono-dvd-0.8.0/src/mgui/prefs.cpp --- bombono-dvd-0.7.0/src/mgui/prefs.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/prefs.cpp 2010-11-01 21:58:28.000000000 +0000 @@ -22,14 +22,18 @@ #include #include "prefs.h" +#include "design.h" #include #include +#include #include #include #include #include +#include // Serialize(Archieve& ar, Point& pnt) + #include #include @@ -39,11 +43,9 @@ #include #include // fs::create_directories() -template -GtkObj& AddWidget(RefPtr wdg_sg, GtkObj& wdg) +DialogVBox& PackDialogVBox(Gtk::Box& box) { - wdg_sg->add_widget(wdg); - return wdg; + return PackStart(box, NewManaged(false, 10), Gtk::PACK_EXPAND_WIDGET); } DialogVBox& AddHIGedVBox(Gtk::Dialog& dlg) @@ -53,44 +55,52 @@ Gtk::VBox& box = *dlg.get_vbox(); //return Add(PackStart(box, NewPaddingAlg(10, 10, 10, 10), Gtk::PACK_EXPAND_WIDGET), NewManaged(false, 10)); - DialogVBox& vbox = PackStart(box, NewManaged(false, 10), Gtk::PACK_EXPAND_WIDGET); + DialogVBox& vbox = PackDialogVBox(box); vbox.set_border_width(10); return vbox; } -void AppendWithLabel(DialogVBox& vbox, Gtk::Widget& wdg, const char* label) +Gtk::HBox& PackNamedWidget(Gtk::VBox& vbox, Gtk::Widget& name_wdg, Gtk::Widget& wdg, + RefPtr sg, Gtk::PackOptions opt) { Gtk::HBox& hbox = PackStart(vbox, NewManaged()); + + Add(PackStart(hbox, NewPaddingAlg(0, 0, 0, 5)), AddWidget(sg, name_wdg)); + PackStart(hbox, wdg, opt); + return hbox; +} + +Gtk::Label& LabelForWidget(const char* label, Gtk::Widget& wdg) +{ Gtk::Label& lbl = NewManaged(label, true); SetAlign(lbl); lbl.set_mnemonic_widget(wdg); - Add(PackStart(hbox, NewPaddingAlg(0, 0, 0, 5)), AddWidget(vbox.labelSg, lbl)); - - PackStart(hbox, wdg, Gtk::PACK_EXPAND_WIDGET); + return lbl; } -void SetDialogStrict(Gtk::Dialog& dlg, int min_wdh, int min_hgt); - -void Preferences::Init() +void AppendWithLabel(DialogVBox& vbox, Gtk::Widget& wdg, const char* label, Gtk::PackOptions opt) { - isPAL = true; - player = paTOTEM; - authorPath = (fs::path(Glib::get_user_cache_dir()) / "bombono-dvd-video").string(); + PackNamedWidget(vbox, LabelForWidget(label, wdg), wdg, vbox.labelSg, opt); } -const int PREFS_VERSION = 2; +static std::string PreferencesPath(const char* fname) +{ + return GetConfigDir() + "/" + fname; +} -void SavePrefs(Project::ArchieveFnr afnr, const std::string& fname) +void SavePrefs(Project::ArchieveFnr afnr, const char* fname, int version) { xmlpp::Document doc; xmlpp::Element* root_node = doc.create_root_node("BmD"); - root_node->set_attribute("Version", boost::lexical_cast(PREFS_VERSION)); + root_node->set_attribute("Version", boost::lexical_cast(version)); root_node->add_child_comment("Preferences for Bombono DVD"); Project::DoSaveArchieve(root_node, afnr); - doc.write_to_file_formatted(fname); + doc.write_to_file_formatted(PreferencesPath(fname)); } +const int PREFS_VERSION = 2; + void SerializePrefs(Project::Archieve& ar) { int load_ver = PREFS_VERSION; @@ -105,23 +115,42 @@ ar("DefAuthorPath", Prefs().authorPath); } -std::string PrefsPath() +static bool LoadPrefs(const char* fname, const Project::ArchieveFnr& fnr) { - return GetConfigDir() + "/preferences.xml"; -} - -void LoadPrefs() -{ - std::string cfg_path = PrefsPath(); + bool res = false; + std::string cfg_path = PreferencesPath(fname); try { - Project::DoLoadArchieve(cfg_path, &SerializePrefs, "BmD"); + if( fs::exists(cfg_path) ) + { + Project::DoLoadArchieve(cfg_path, fnr, "BmD"); + res = true; + } } catch (const std::exception& err) { LOG_WRN << "Couldn't load preferences from " << cfg_path << ": " << err.what() << io::endl; - Prefs().Init(); } + return res; +} + +// +// Preferences +// + +void Preferences::Init() +{ + isPAL = true; + player = paTOTEM; + authorPath = (fs::path(Glib::get_user_cache_dir()) / "bombono-dvd-video").string(); +} + +const char* PrefsName = "preferences.xml"; + +void LoadPrefs() +{ + if( !LoadPrefs(PrefsName, &SerializePrefs) ) + Prefs().Init(); } void TrySetDirectory(Gtk::FileChooser& fc, const std::string& dir_path) @@ -174,7 +203,70 @@ Prefs().player = (PlayAuthoring)pl_cmb.get_active_row_number(); Prefs().authorPath = a_btn.get_filename(); - SavePrefs(&SerializePrefs, PrefsPath()); + SavePrefs(&SerializePrefs, PrefsName, PREFS_VERSION); } } +// +// UnnamedPreferences +// + +void UnnamedPreferences::Init() +{ + isLoaded = false; // appPos неопределен + + appSz = CalcBeautifulRect(APPLICATION_WDH); + fbWdh = FCW_WDH; + mdBrw1Wdh = BROWSER_WDH; +} + +const int UNNAMED_PREFS_VERSION = 1; + +void SerializeUnnamedPrefs(Project::Archieve& ar) +{ + //int load_ver = UNNAMED_PREFS_VERSION; + //if( ar.IsLoad() ) + // ar("Version", load_ver); + UnnamedPreferences& up = UnnamedPreferences::Instance(); + + ar( "AppSizes", up.appSz ) + ( "AppPosition", up.appPos ) + ( "FileBrowserWidth", up.fbWdh ) + ( "MDBrowserWidth", up.mdBrw1Wdh ); +} + +const char* UnnamedPrefsName = "unnamed_preferences.xml"; + +UnnamedPreferences& UnnamedPrefs() +{ + UnnamedPreferences& up = UnnamedPreferences::Instance(); + + static bool first_time = true; + if( first_time ) + { + first_time = false; + if( LoadPrefs(UnnamedPrefsName, &SerializeUnnamedPrefs) ) + up.isLoaded = true; + else + up.Init(); + } + + return up; +} + +void SaveUnnamedPrefs() +{ + SavePrefs(&SerializeUnnamedPrefs, UnnamedPrefsName, UNNAMED_PREFS_VERSION); +} + +static void UpdatePosition(Gtk::HPaned& hpaned, int& saved_pos) +{ + saved_pos = hpaned.get_position(); +} + +void SetUpdatePos(Gtk::HPaned& hpaned, int& saved_pos) +{ + hpaned.set_position(saved_pos); + hpaned.signal_hide().connect(bb::bind(&UpdatePosition, b::ref(hpaned), b::ref(saved_pos))); +} + diff -Nru bombono-dvd-0.7.0/src/mgui/prefs.h bombono-dvd-0.8.0/src/mgui/prefs.h --- bombono-dvd-0.7.0/src/mgui/prefs.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/prefs.h 2010-11-01 21:58:28.000000000 +0000 @@ -62,6 +62,27 @@ TrySetDirectory(fc, Prefs().authorPath); } +// +// Восстановление размеров с прошлого запуска +// + +struct UnnamedPreferences: public Singleton +{ + bool isLoaded; // настройки были загружены, а не по умолчанию + + Point appSz; // размеры и положение приложения + Point appPos; + int fbWdh; // ширина File Browser + int mdBrw1Wdh; // ширина Media Browser на Sources + + UnnamedPreferences() { Init(); } + void Init(); +}; + +UnnamedPreferences& UnnamedPrefs(); +void SaveUnnamedPrefs(); + +void SetUpdatePos(Gtk::HPaned& hpaned, int& saved_pos); #endif // #ifndef __MGUI_PREFS_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/project/add.cpp bombono-dvd-0.8.0/src/mgui/project/add.cpp --- bombono-dvd-0.7.0/src/mgui/project/add.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/add.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mgui/project/add.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include diff -Nru bombono-dvd-0.7.0/src/mgui/project/add.h bombono-dvd-0.8.0/src/mgui/project/add.h --- bombono-dvd-0.7.0/src/mgui/project/add.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/add.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mgui/project/add.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #ifndef __MGUI_PROJECT_ADD_H__ #define __MGUI_PROJECT_ADD_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/project/browser.cpp bombono-dvd-0.8.0/src/mgui/project/browser.cpp --- bombono-dvd-0.7.0/src/mgui/project/browser.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/browser.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -203,7 +203,7 @@ FillThumbnail(ms->get_iter(LocalPath(&obj)), ms, true); } -static void RedrawThumbnail(MediaItem mi) +void RedrawThumbnail(MediaItem mi) { if( mi ) { @@ -325,9 +325,7 @@ void SetRendererFnr(Gtk::TreeView::Column& name_cln, Gtk::CellRendererText& rndr, RefPtr os, RFFunctor fnr) { - using namespace boost; - name_cln.set_cell_data_func( - rndr, lambda::bind(&RenderField, lambda::_1, os, lambda::_2, fnr)); + name_cln.set_cell_data_func(rndr, bb::bind(&RenderField, _1, os, _2, fnr)); } void RenderMediaName(Gtk::CellRendererText* rndr, MediaItem mi) @@ -348,8 +346,7 @@ { name_cln.pack_start(rndr); rndr.property_editable() = true; - using namespace boost; - rndr.signal_edited().connect( lambda::bind(&OnTitleEdited, os, lambda::_1, lambda::_2) ); + rndr.signal_edited().connect( bb::bind(&OnTitleEdited, os, _1, _2) ); SetRendererFnr(name_cln, rndr, os, &RenderMediaName); } diff -Nru bombono-dvd-0.7.0/src/mgui/project/browser.h bombono-dvd-0.8.0/src/mgui/project/browser.h --- bombono-dvd-0.7.0/src/mgui/project/browser.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/browser.h 2010-11-01 21:58:29.000000000 +0000 @@ -122,6 +122,9 @@ pth = Gtk::TreePath(); } +typedef boost::function RightButtonFunctor; +void SetOnRightButton(ObjectBrowser& brw, const RightButtonFunctor& fnr); + } // namespace Project #endif // #ifndef __MGUI_PROJECT_BROWSER_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/project/dnd.h bombono-dvd-0.8.0/src/mgui/project/dnd.h --- bombono-dvd-0.7.0/src/mgui/project/dnd.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/dnd.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/project/dnd.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/project/mb-actions.cpp bombono-dvd-0.8.0/src/mgui/project/mb-actions.cpp --- bombono-dvd-0.7.0/src/mgui/project/mb-actions.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/mb-actions.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -58,7 +59,8 @@ void FillThumbnail(const Gtk::TreeIter& itr, RefPtr ms, Media& md) { - RefPtr thumb_pix = itr->get_value(ms->columns.thumbnail); + Gtk::TreeModelColumn > thumb_cln = MediaStore::Fields().thumbnail; + RefPtr thumb_pix = itr->get_value(thumb_cln); if( !thumb_pix ) { // * серый фон @@ -66,7 +68,7 @@ thumb_pix = CreatePixbuf(thumb_sz); thumb_pix->fill(RGBA::ToUint(Gdk::Color("light grey"))); - itr->set_value(ms->columns.thumbnail, thumb_pix); + itr->set_value(thumb_cln, thumb_pix); } Point thumb_sz(PixbufSize(thumb_pix)); @@ -116,7 +118,7 @@ void PublishMedia(const Gtk::TreeIter& itr, RefPtr ms, MediaItem mi) { FillThumbnail(itr, ms, *mi); - (*itr)[ms->columns.media] = mi; + (*itr)[MediaStore::Fields().media] = mi; PublishMediaVis vis(itr, ms); mi->Accept(vis); @@ -316,7 +318,7 @@ PackFileChooserWidget(fcw_hpaned, bb::bind(&MediaBrowserAdd, boost::ref(brw), _2), false); Gtk::HPaned& hpaned = *Gtk::manage(new Gtk::HPaned); - hpaned.set_position(BROWSER_WDH); + SetUpdatePos(hpaned, UnnamedPrefs().mdBrw1Wdh); fcw_hpaned.add2(hpaned); // * diff -Nru bombono-dvd-0.7.0/src/mgui/project/mconstructor.cpp bombono-dvd-0.8.0/src/mgui/project/mconstructor.cpp --- bombono-dvd-0.7.0/src/mgui/project/mconstructor.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/mconstructor.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -31,7 +31,7 @@ #include // new Editor::Kit() #include // CalcAbsSizes() #include -#include // VideoSizeSum() +#include // ProjectSizeSum() #include // PackOutput() #include @@ -73,21 +73,34 @@ return AData().GetData(); } -static bool ClearEndAction(VideoItem vi, MediaItem mi) +static void ClearPA(PostAction& pa, MediaItem del_mi) { - PostAction& pa = vi->PAction(); - if( pa.paLink == mi ) + if( pa.paLink == del_mi ) { pa.paLink = 0; pa.paTyp = patAUTO; } +} + +static bool ClearEndAction(VideoItem vi, MediaItem mi) +{ + ClearPA(vi->PAction(), mi); + return true; +} + +static bool ClearEndActionM(Menu mn, MediaItem mi) +{ + ClearPA(mn->MtnData().pAct, mi); return true; } static void OnDeleteEndAction(MediaItem mi, const char* action) { if( mi && (strcmp("OnDelete", action) == 0) ) + { ForeachVideo(bb::bind(ClearEndAction, _1, mi)); + ForeachMenu(bb::bind(ClearEndActionM, _1, mi)); + } } // создать списки медиа и меню @@ -105,7 +118,7 @@ return as; } -static Rect GetAllocation(Gtk::Widget& wdg) +Rect GetAllocation(Gtk::Widget& wdg) { return MakeRect(*wdg.get_allocation().gobj()); } @@ -329,7 +342,7 @@ dlg->set_name(APROJECT_NAME); dlg->set_version(APROJECT_VERSION); - dlg->set_copyright("Copyright \xc2\xa9 2007-2009 Ilya Murav'jov"); + dlg->set_copyright("Copyright \xc2\xa9 2007-2010 Ilya Murav'jov"); //dlg->set_license(license); dlg->set_website("http://www.bombono.org"); dlg->set_comments(_("Bombono DVD is a DVD authoring program with nice and clean GUI")); @@ -577,9 +590,9 @@ size); } -static std::string ToSizeString(gint64 size) +std::string ToSizeString(gint64 size, bool round) { - gchar* c_str = brasero_utils_get_size_string(size, TRUE, TRUE); + gchar* c_str = brasero_utils_get_size_string(size, TRUE, round ? TRUE : FALSE); std::string str_res = c_str; g_free(c_str); @@ -589,7 +602,7 @@ void UpdateDVDSize() { SizeBar& sz_bar = Application().SB(); - io::pos sz = Author::VideoSizeSum(); + io::pos sz = Author::ProjectSizeSum(); io::pos typ_sz = DVDTypeSize((DVDType)sz_bar.dvdTypes.get_active_row_number()); std::string sz_str; @@ -598,7 +611,7 @@ const int AUX_DVD_STUFF = 512*1024; sz += AUX_DVD_STUFF; // зарезервируем для IFO, BUP, VIDEO_TS-файлов - sz_str = ToSizeString(sz); + sz_str = ToSizeString(sz, true); if( sz > typ_sz ) sz_str = "" + sz_str + ""; sz_str += " of "; @@ -739,7 +752,7 @@ dvd_types.set_focus_on_click(false); for( int i = 0; i" - + name + "", true); + Gtk::Label& lbl = NewBoldItalicLabel(name, true); // попытка сделать вертикальные закладки читабельными //switch( nbook.get_tab_pos() ) @@ -800,13 +812,43 @@ GetNthGo(*this, pos)->add(NewManaged(name, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, true)); } +static bool UpdateAppSizes(GdkEventConfigure* event) +{ + Gtk::Window& win = Application().win; + UnnamedPreferences& up = UnnamedPrefs(); + + up.appSz.x = event->width; + up.appSz.y = event->height; + + win.get_position(up.appPos.x, up.appPos.y); + return false; +} + ActionFunctor BuildConstructor(ConstructorApp& app, const std::string& prj_file_name) { // * InitAStores(); // * LoadApp(prj_file_name); - SetAppWindowSize(app.win, 1000); + + // * установка размеров и положения программы + // не смотря на то, что документация повторяет N>5 раз (см., например, + // gtk_window_get_position()), что WM должен устанавливать положение (а лучше и размеры) + // окон на экране, в реальности все по-другому (всем по^Wнас^Wвсе равно); в то время, когда + // народ жаждет запоминания расположения программ на рабочем столе (http://brainstorm.ubuntu.com/idea/1442/), + // разработчики Gnome перекладывают ответственность на разработчиков приложений, последним + // угрожают,- "ничего не трогать, это забота WM" (Rhythmbox, Evince сделали вид, плохо слышат); + // а WM-ы ничего не могут и не хотят (без помощи от разработчиков приложений),- эпический провал (c) + // + // Отписался по проблеме тут: https://bugzilla.gnome.org/show_bug.cgi?id=79285 + UnnamedPreferences& up = UnnamedPrefs(); + // используем мягкую форму вместо gtk_window_resize(), чтобы + // не уродовали наш продукт (два раза ку) уменьшением размеров до нуля + app.win.set_default_size(up.appSz.x, up.appSz.y); + if( up.isLoaded ) + app.win.move(up.appPos.x, up.appPos.y); + app.win.signal_configure_event().connect(&UpdateAppSizes, false); + // * AStores& as = GetAStores(); RefPtr md_store = as.mdStore; @@ -833,22 +875,26 @@ LoadPrefs(); AData().SetPalTvSystem(Prefs().isPAL); - SingletonStack app_ssi; - SingletonStack edt_ssi; - // * - ConstructorApp& app = Application(); - app.askSaveOnExit = ask_save_on_exit; - - std::list > pix_lst; - static const fs::directory_iterator end_itr; - for( fs::directory_iterator itr(fs::path(GetDataDir())/"icons"); - itr != end_itr; ++itr ) - pix_lst.push_back(Gdk::Pixbuf::create_from_file(itr->string())); - Gtk::Window::set_default_icon_list(pix_lst); - - ActionFunctor after_fnr = BuildConstructor(app, prj_file_name); - RunWindow(app.win); - after_fnr(); + { + SingletonStack app_ssi; + SingletonStack edt_ssi; + // * + ConstructorApp& app = Application(); + app.askSaveOnExit = ask_save_on_exit; + + std::list > pix_lst; + static const fs::directory_iterator end_itr; + for( fs::directory_iterator itr(fs::path(GetDataDir())/"icons"); + itr != end_itr; ++itr ) + pix_lst.push_back(Gdk::Pixbuf::create_from_file(itr->string())); + Gtk::Window::set_default_icon_list(pix_lst); + + ActionFunctor after_fnr = BuildConstructor(app, prj_file_name); + RunWindow(app.win); + after_fnr(); + } + // сохраняем настройки после закрытия (=> обновления информации) окон + SaveUnnamedPrefs(); } } // namespace Project diff -Nru bombono-dvd-0.7.0/src/mgui/project/media-browser.cpp bombono-dvd-0.8.0/src/mgui/project/media-browser.cpp --- bombono-dvd-0.7.0/src/mgui/project/media-browser.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/media-browser.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -44,9 +44,21 @@ namespace Project { +MediaStore::TrackFields& MediaStore::Fields() +{ + return GetColumnFields(); +} + +MediaStore::MediaStore() { set_column_types(GetColumnRecord()); } + +MediaItem MediaStore::Get(const Gtk::TreeRow& row) +{ + return row.get_value(Fields().media); +} + MediaItem MediaStore::GetMedia(const Gtk::TreeIter& itr) const { - return itr->get_value(columns.media); + return Get(*itr); } bool MediaStore::row_drop_possible_vfunc(const TreeModel::Path& dest, const Gtk::SelectionData& data) const @@ -101,56 +113,57 @@ TryAddMedias(paths, brw, brw_pth, insert_after); } -static void SetConstEALink(PostAction& pa, PostActionType typ) +static void SetConstEALink(PostAction& pa, PostActionType typ, const ActionFunctor& on_updater) { ASSERT_RTL( typ != patEXP_LINK ); pa.paTyp = typ; pa.paLink = 0; + + on_updater(); } -static void SetEALink(PostAction& pa, MediaItem mi) +static void SetEALink(PostAction& pa, MediaItem mi, const ActionFunctor& on_updater) { ASSERT_RTL(mi); // пустая явная ссылка? - нет пути! pa.paTyp = patEXP_LINK; pa.paLink = mi; + + on_updater(); } -class EndActionMenuBld: public CommonMenuBuilder +EndActionMenuBld::EndActionMenuBld(PostAction& pa, const ActionFunctor& on_updater, + const Functor& cc_adder) +: MyParent(pa.paLink, false), pAct(pa), onUpdater(on_updater), ccAdder(cc_adder) { - typedef CommonMenuBuilder MyParent; - public: - EndActionMenuBld(PostAction& pa): pAct(pa), MyParent(pa.paLink, false) {} - - virtual ActionFunctor CreateAction(Project::MediaItem mi) - { - return bl::bind(&SetEALink, boost::ref(pAct), mi); - } - - virtual void AddConstantChoice(Gtk::Menu& lnk_list); - - protected: - PostAction& pAct; + ASSERT( onUpdater ); + ASSERT( ccAdder ); +} -void AddConstantItem(Gtk::Menu& lnk_list, const std::string& label, PostActionType typ); -}; +ActionFunctor EndActionMenuBld::CreateAction(Project::MediaItem mi) +{ + return bb::bind(&SetEALink, boost::ref(pAct), mi, onUpdater); +} -void EndActionMenuBld::AddConstantItem(Gtk::Menu& lnk_list, const std::string& label, PostActionType typ) +void EndActionMenuBld::AddConstantItem(const std::string& label, PostActionType typ) { - Gtk::RadioMenuItem& itm = NewManaged(radioGrp); - SetAlign(Add(itm, NewMarkupLabel("" + label + ""))); - AppendRadioItem(itm, typ == pAct.paTyp, bl::bind(&SetConstEALink, boost::ref(pAct), typ), lnk_list); + AddPredefinedItem(label, typ == pAct.paTyp, + bb::bind(&SetConstEALink, boost::ref(pAct), typ, onUpdater)); } -int MenusCnt(); +void EndActionMenuBld::AddConstantChoice() +{ + ccAdder(*this); +} -void EndActionMenuBld::AddConstantChoice(Gtk::Menu& lnk_list) +static void VideoAddConstantChoice(EndActionMenuBld& bld) { - const char* real_cmd = MenusCnt() ? _("Previous Menu") : _("Next Video") ; - AddConstantItem(lnk_list, BF_("Auto (%1%)") % real_cmd % bf::stop, patAUTO); - AddConstantItem(lnk_list, _("Next Video"), patNEXT_TITLE); + void AddPA(EndActionMenuBld& bld, PostActionType pat, bool is_video); + AddPA(bld, patAUTO, true); + AddPA(bld, patNEXT_TITLE, true); + AddPA(bld, patPLAY_ALL, true); } -static bool OnMBButtonPress(MediaBrowser& brw, GdkEventButton* event) +static bool OnOBButtonPress(ObjectBrowser& brw, const RightButtonFunctor& fnr, GdkEventButton* event) { // :TRICKY: переопределением on_button_press_event() было бы все проще; // но пусть будет - как пример Gtk::Widget::event() @@ -174,27 +187,35 @@ if( IsRightButton(event) ) if( MediaItem mi = GetCurMedia(brw) ) - { - Gtk::Menu& mn = NewPopupMenu(); - Gtk::MenuItem& ea_itm = AppendMI(mn, NewManaged(_("End Action"))); - // пока только видео (позже - постдействие для интерактивных меню) - VideoItem vi = IsVideo(mi); - ea_itm.set_sensitive(vi); - if( vi ) - ea_itm.set_submenu(EndActionMenuBld(vi->PAction()).Create()); - Popup(mn, event, true); - } + fnr(brw, mi, event); return true; } +static void OnMBButtonPress(MediaItem mi, GdkEventButton* event) +{ + Gtk::Menu& mn = NewPopupMenu(); + Gtk::MenuItem& ea_itm = AppendMI(mn, NewManaged(_("End Action"))); + // пока только видео (позже - постдействие для интерактивных меню) + VideoItem vi = IsVideo(mi); + if( SetEnabled(ea_itm, vi) ) + ea_itm.set_submenu(EndActionMenuBld(vi->PAction(), boost::function_identity, + VideoAddConstantChoice).Create()); + Popup(mn, event, true); +} + +void SetOnRightButton(ObjectBrowser& brw, const RightButtonFunctor& fnr) +{ + sig::connect(brw.signal_button_press_event(), bb::bind(&OnOBButtonPress, boost::ref(brw), fnr, _1), false); +} + MediaBrowser::MediaBrowser(RefPtr a_lst) { set_model(a_lst); BuildStructure(); - SetupURIDrop(*this, bl::bind(&OnURIsDrop, boost::ref(*this), bl::_1, bl::_2)); - sig::connect(signal_button_press_event(), bb::bind(&OnMBButtonPress, boost::ref(*this), _1), false); + SetupURIDrop(*this, bb::bind(&OnURIsDrop, boost::ref(*this), _1, _2)); + SetOnRightButton(*this, bb::bind(&OnMBButtonPress, _2, _3)); } // Названия типов для i18n @@ -210,7 +231,7 @@ void MediaBrowser::BuildStructure() { RefPtr ms = GetMediaStore(); - const MediaStore::TrackFields& trk_fields = ms->columns; + const MediaStore::TrackFields& trk_fields = MediaStore::Fields(); SetupBrowser(*this, trk_fields.media.index(), true); @@ -269,9 +290,7 @@ void DeleteMediaFromBrowser(MediaBrowser& mb) { - using namespace boost; - ExecuteForMedia(mb, lambda::bind(&ConfirmDeleteBrowserMedia, lambda::_1, lambda::_2, - mb.GetMediaStore())); + ExecuteForMedia(mb, bb::bind(&ConfirmDeleteBrowserMedia, _1, _2, mb.GetMediaStore())); } void MediaBrowser::DeleteMedia() @@ -313,7 +332,7 @@ static void SetDefaultButtonOnEveryMap(Gtk::Button& btn) { // при смене вкладки, например, теряется фокус по умолчанию - btn.signal_map().connect(boost::lambda::bind(&SetDefaultButton, boost::ref(btn))); + btn.signal_map().connect(bb::bind(&SetDefaultButton, boost::ref(btn))); } void PackMediaBrowserAll(Gtk::Container& contr, MediaBrowser& brw, ActionFunctor add_media_fnr, @@ -357,7 +376,7 @@ // управление состоянием кнопки edit_btn->set_sensitive(false); brw.signal_cursor_changed().connect( - boost::lambda::bind(&OnMBChangeCursor, boost::ref(brw), edit_btn) ); + bb::bind(&OnMBChangeCursor, boost::ref(brw), edit_btn) ); } } } diff -Nru bombono-dvd-0.7.0/src/mgui/project/media-browser.h bombono-dvd-0.8.0/src/mgui/project/media-browser.h --- bombono-dvd-0.7.0/src/mgui/project/media-browser.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/media-browser.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/project/media-browser.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -24,6 +24,8 @@ #include "browser.h" +#include + namespace Project { @@ -32,22 +34,25 @@ typedef ObjectStore MyParent; public: - struct TrackFields : public Gtk::TreeModelColumnRecord + struct TrackFields { //Gtk::TreeModelColumn title; Gtk::TreeModelColumn > thumbnail; Gtk::TreeModelColumn media; - TrackFields() + TrackFields(Gtk::TreeModelColumnRecord& rec) { //add(title); - add(thumbnail); - add(media); + rec.add(thumbnail); + rec.add(media); } }; - const TrackFields columns; + //const TrackFields columns; + + MediaStore(); - MediaStore() { set_column_types(columns); } + static TrackFields& Fields(); + static MediaItem Get(const Gtk::TreeRow& row); virtual MediaItem GetMedia(const Gtk::TreeIter& itr) const; diff -Nru bombono-dvd-0.7.0/src/mgui/project/menu-actions.cpp bombono-dvd-0.8.0/src/mgui/project/menu-actions.cpp --- bombono-dvd-0.7.0/src/mgui/project/menu-actions.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/menu-actions.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -193,11 +193,10 @@ void EraseLinkedMenus(MenuPack& mp) { - using namespace boost; CanvasBuf& cb = mp.thRgn.GetCanvasBuf(); - ForeachLinked(mp.Owner(), lambda::bind(&UpdateMenuRegionObject, - boost::lambda::_1, boost::cref(cb.Size()), - boost::ref(cb.RenderList()))); + ForeachLinked(mp.Owner(), bb::bind(&UpdateMenuRegionObject, + _1, boost::cref(cb.Size()), + boost::ref(cb.RenderList()))); } void RegionEraserVis::ProcessImpl(bool exceed) @@ -220,9 +219,8 @@ void RegionEraserVis::Process() { - using namespace boost; static int RecurseDepth = 0; - LimitedRecursiveCall( lambda::bind(&RegionEraserVis::ProcessImpl, this, lambda::_1), RecurseDepth ); + LimitedRecursiveCall( bb::bind(&RegionEraserVis::ProcessImpl, this, _1), RecurseDepth ); } void MenuRegionEraserVis::CalcSubRegions(RectListRgn& lst) @@ -279,8 +277,8 @@ static void UpdateMenusFor(MediaItem mi, bool del_link) { - ForeachLinked(mi, bl::bind(&UpdateMenuObject, bl::_1, del_link, false)); - ForeachWithPoster(mi, bl::bind(&UpdateFTO, bl::_1, del_link)); + ForeachLinked(mi, bb::bind(&UpdateMenuObject, _1, del_link, false)); + ForeachWithPoster(mi, bb::bind(&UpdateFTO, _1, del_link)); } static void UpdateRedrawMenusFor(MediaItem mi, bool del_link, RefPtr mn_store) diff -Nru bombono-dvd-0.7.0/src/mgui/project/menu-actions.h bombono-dvd-0.8.0/src/mgui/project/menu-actions.h --- bombono-dvd-0.7.0/src/mgui/project/menu-actions.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/menu-actions.h 2010-11-01 21:58:29.000000000 +0000 @@ -44,6 +44,7 @@ void RenderMenuSystem(Menu changed_mn, RectListRgn& rct_lst); bool IsMenuToBe4_3(); +bool Is4_3(Menu mn); } // namespace Project diff -Nru bombono-dvd-0.7.0/src/mgui/project/menu-browser.cpp bombono-dvd-0.8.0/src/mgui/project/menu-browser.cpp --- bombono-dvd-0.7.0/src/mgui/project/menu-browser.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/menu-browser.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -30,12 +30,22 @@ #include #include #include +#include #include +#include #include #include #include +#include #include +#include + +guint64 FFmpegSizeForDVD(double sec) +{ + int brate = 6000000; // bit/s, умолчание в ffmpeg для -target *-dvd + return brate/8 * (gint64)sec; +} namespace Project { @@ -55,6 +65,424 @@ return dest.get_depth() == 1; } +/////////////////////////////// +// Настройки меню + +static Gtk::RadioButton& AddAudioChoice(const char* label, Gtk::VBox& vbox, Gtk::RadioButtonGroup& grp, + Gtk::Widget& wdg, RefPtr sg) +{ + Gtk::RadioButton& r_btn = *Gtk::manage(new Gtk::RadioButton(grp, label, true)); + PackNamedWidget(vbox, r_btn, wdg, sg, Gtk::PACK_EXPAND_WIDGET); + return r_btn; +} + +static Gtk::Label& NewBoldLabel(const std::string& label) +{ + return NewMarkupLabel("" + label + "", true); +} + +static void OnMotionChoice(Gtk::CheckButton& mtn_btn, Gtk::VBox& vbox) +{ + vbox.set_sensitive(mtn_btn.get_active()); +} + +static void OnAudioTypeChoice(Gtk::RadioButton& prj_btn, Gtk::Button& a_btn, + Gtk::FileChooserButton& ext_btn) +{ + bool is_project = prj_btn.get_active(); + a_btn.set_sensitive(is_project); + ext_btn.set_sensitive(!is_project); +} + +static void SetMediaLabel(Gtk::Label& lbl, MediaItem mi) +{ + std::string text(_("No Link")); + if( mi ) + { + text = mi->mdName; + if( ChapterItem ci = IsChapter(mi) ) + // \xc2\xbb \xe2\x80\xa3 \xe2\x80\xba \xe2\x96\xb8 + text = boost::format("%1% \xe2\x80\xa3 %2%") % ci->owner->mdName % text % bf::stop; + } + + lbl.set_text(text); +} + +// выпадающее меню вместо нажатия (потому ToggleButton) +class MenuButton: public Gtk::ToggleButton +{ + public: + MenuButton(); + + protected: + Gtk::Label& label; + + virtual CommonMenuBuilder* MakeBuilder() = 0; + +bool OnLinkButtonPress(GdkEventButton *event); +}; + +class AudioButton: public MenuButton +{ + typedef MenuButton MyParent; + public: + + MediaItem GetMI() { return mItem; } + void SetMI(MediaItem mi); + + protected: + MediaItem mItem; + + virtual CommonMenuBuilder* MakeBuilder(); +}; + +class MenuPAButton: public MenuButton +{ + typedef MenuButton MyParent; + public: + + PostAction PAction() { return pAct; } + void SetPAction(const PostAction& pa) + { + pAct = pa; + Update(); + } + + void Update(); + + protected: + PostAction pAct; + + virtual CommonMenuBuilder* MakeBuilder(); +}; + +MenuButton::MenuButton(): label(NewManaged()) +{ + Gtk::Button& a_btn = *this; + sig::connect(a_btn.signal_button_press_event(), bb::bind(&MenuButton::OnLinkButtonPress, this, _1), false); + Gtk::HBox& box = Add(a_btn, NewManaged(false, 4)); + + //priv->image = gtk_image_new (); + //gtk_box_pack_start (GTK_BOX (box), priv->image, FALSE, FALSE, 0); + //gtk_widget_show (priv->image); + + //SetMediaLabel(label, mItem); + Gtk::Label& lbl = PackStart(box, label, Gtk::PACK_EXPAND_WIDGET); + lbl.set_ellipsize(Pango::ELLIPSIZE_END); + SetAlign(lbl); + + PackStart(box, NewManaged()); + //PackStart(box, NewManaged(Gtk::Stock::OPEN, Gtk::ICON_SIZE_MENU)); + PackStart(box, NewManaged(Gtk::ARROW_DOWN, Gtk::SHADOW_NONE)); +} + +Rect GetAllocation(Gtk::Widget& wdg); + +static void CoordBelow(Gtk::ToggleButton* btn, int& x, int& y, bool& push_in) +{ + RefPtr win = btn->get_window(); + ASSERT( win ); + Rect plc = GetAllocation(*btn); + win->get_root_coords(plc.lft, plc.btm, x, y); + + push_in = true; +} + +// по аналогии с GtkComboBox +bool MenuButton::OnLinkButtonPress(GdkEventButton *event) +{ + if( event->type == GDK_BUTTON_PRESS && IsLeftButton(event) ) + { + //if( focus_on_click && !GTK_WIDGET_HAS_FOCUS(priv->button) ) + // gtk_widget_grab_focus (priv->button); + + ptr::one bld(MakeBuilder()); + Gtk::Menu& mn = bld->Create(); + SetDeleteOnDone(mn); + + // интерактив кнопки + set_active(true); + mn.signal_hide().connect(bb::bind(&Gtk::ToggleButton::set_active, this, false)); + + //Popup(mn, event, true); + mn.show_all(); + mn.popup(bb::bind(&CoordBelow, this, _1, _2, _3), event->button, event->time); + + return true; + } + return false; +} + +void AudioButton::SetMI(MediaItem mi) +{ + mItem = mi; + SetMediaLabel(label, mItem); +} + +class AudioMenuBld: public CommonMenuBuilder +{ + typedef CommonMenuBuilder MyParent; + public: + AudioMenuBld(AudioButton* btn_): + MyParent(btn_->GetMI(), true, true), aBtn(btn_) {} + + virtual ActionFunctor CreateAction(Project::MediaItem mi) + { + return bb::bind(&AudioButton::SetMI, aBtn, mi); + } + + protected: + AudioButton* aBtn; +}; + +CommonMenuBuilder* AudioButton::MakeBuilder() { return new AudioMenuBld(this); } + +std::string Pat2Name(PostActionType pat, bool is_video) +{ + std::string res; + switch( pat ) + { + case patAUTO: + if( is_video ) + { + const char* real_cmd = MenusCnt() ? _("Previous Menu") : _("Next Video") ; + res = BF_("Auto (%1%)") % real_cmd % bf::stop; + } + else + res = _("Loop"); + break; + case patNEXT_TITLE: + if( is_video ) + res = _("Next Video"); + break; + case patPLAY_ALL: + res = _("Play All"); + case patEXP_LINK: + default: + // запрещены + break; + } + + ASSERT( !res.empty() ); + return res; +} + +void AddPA(EndActionMenuBld& bld, PostActionType pat, bool is_video) +{ + bld.AddConstantItem(Pat2Name(pat, is_video), pat); +} + +static void MenuAddConstantChoice(EndActionMenuBld& bld) +{ + AddPA(bld, patAUTO, false); + AddPA(bld, patPLAY_ALL, false); +} + +CommonMenuBuilder* MenuPAButton::MakeBuilder() +{ + return new EndActionMenuBld(pAct, bb::bind(&MenuPAButton::Update, this), + &MenuAddConstantChoice); +} + +void MenuPAButton::Update() +{ + if( pAct.paTyp == patEXP_LINK ) + SetMediaLabel(label, pAct.paLink); + else + label.set_markup(BoldItalicText(Pat2Name(pAct.paTyp, false))); +} + +// установка пустой строки в Gtk::FileChooser почему-то устанавливает +// текущий путь в него (в режиме открытия файла); и далее, последующий +// get_filename() выдает текущий путь вместо "пусто" +bool SetFilename(Gtk::FileChooser& fc, const std::string& fpath) +{ + bool not_empty = !fpath.empty(); + if( not_empty ) + fc.set_filename(fpath); + + return not_empty; +} + +static void OnDurationChanged(Gtk::SpinButton& dur_btn, Gtk::Label& sz_lbl) +{ + std::string ToSizeString(gint64 size, bool round); + std::string str = ToSizeString(FFmpegSizeForDVD(dur_btn.get_value()), false); + sz_lbl.set_label(str); +} + +static DialogVBox& AddDialogPage(Gtk::Notebook& nbook, const char* label, bool homogeneous = false) +{ + DialogVBox& vbox = NewManaged(homogeneous, 10); + vbox.set_border_width(5); + nbook.append_page(vbox, label, true); + + return vbox; +} + +static void RestoreSPColors(Gtk::ColorButton& sel_btn, Gtk::ColorButton& act_btn) +{ + SetColor(sel_btn, RGBA::Pixel(HIGH_CLR)); + SetColor(act_btn, RGBA::Pixel(SELECT_CLR)); +} + +static void PackColorButton(DialogVBox& vbox, Gtk::ColorButton& btn, const RGBA::Pixel& pxl, + const char* label) +{ + ConfigureRGBAButton(btn, pxl); + AppendWithLabel(vbox, btn, label); +} + +static Gtk::VBox& PackParaBox(Gtk::VBox& vbox) +{ + return PackStart(vbox, NewManaged(false, 4)); +} + +static Gtk::VBox& PackParaBox(Gtk::VBox& vbox, const char* name) +{ + Gtk::VBox& box = PackParaBox(vbox); + Gtk::Label& a_lbl = PackStart(box, NewBoldLabel(name)); + SetAlign(a_lbl); + + return box; +} +void MenuSettings(Menu mn, Gtk::Window* win) +{ + Gtk::Dialog dlg(_("Menu Settings"), true); + if( win ) + dlg.set_transient_for(*win); + SetDialogStrict(dlg, 420, -1, true); + + //DialogVBox& vbox_all = AddHIGedVBox(dlg); + Gtk::Notebook& nbook = Add(*dlg.get_vbox(), NewManaged()); + nbook.set_border_width(2); + + MotionData& mtn_dat = mn->MtnData(); + Gtk::CheckButton& mtn_btn = NewManaged(); + Gtk::SpinButton& dur_btn = NewManaged(); + Gtk::CheckButton& sp_btn = NewManaged(_("_Still picture"), true); + + Gtk::RadioButton* prj_choice = 0; + AudioButton& a_btn = NewManaged(); + Gtk::FileChooserButton& a_ext_btn = NewManaged( + _("Select external audio file"), Gtk::FILE_CHOOSER_ACTION_OPEN); + MenuPAButton& pa_btn = NewManaged(); + { + Gtk::VBox& vbox_all = AddDialogPage(nbook, _("_Motion menu")); + + Add(mtn_btn, NewBoldLabel(_("_Motion menu"))); + mtn_btn.set_active(mtn_dat.isMotion); + PackStart(vbox_all, mtn_btn); + + // вроде и без отступа хорошо + DialogVBox& vbox = PackDialogVBox(vbox_all); + OnMotionChoice(mtn_btn, vbox); + mtn_btn.signal_toggled().connect(bb::bind(&OnMotionChoice, boost::ref(mtn_btn), boost::ref(vbox))); + + // основное + { + Gtk::VBox& box = PackParaBox(vbox); + // длительность + { + Gtk::HBox& hbox = PackNamedWidget(box, LabelForWidget(SMCLN_("_Duration (in seconds)"), dur_btn), + dur_btn, vbox.labelSg, Gtk::PACK_SHRINK); + Gtk::Label& sz_lbl = NewManaged(); + sz_lbl.set_padding(5, 0); + PackStart(hbox, sz_lbl, Gtk::PACK_SHRINK); + + OnDurationChanged(dur_btn, sz_lbl); + dur_btn.signal_value_changed().connect(bb::bind(&OnDurationChanged, b::ref(dur_btn), b::ref(sz_lbl))); + } + ConfigureSpin(dur_btn, mtn_dat.duration, MAX_MOTION_DURATION); + + // Still Picture + sp_btn.set_active(mtn_dat.isStillPicture); + SetTip(sp_btn, _("Still menu with audio in the background")); + PackStart(box, sp_btn); + } + + // аудио + { + Gtk::VBox& a_box = PackParaBox(vbox, _("Audio")); + Gtk::RadioButtonGroup grp; + + a_btn.SetMI(mtn_dat.audioRef.lock()); + prj_choice = &AddAudioChoice(SMCLN_("_From the project"), a_box, grp, a_btn, vbox.labelSg); + + SetFilename(a_ext_btn, mtn_dat.audioExtPath); + Gtk::RadioButton& ext_choice = AddAudioChoice( + SMCLN_("_External audio"), a_box, grp, a_ext_btn, vbox.labelSg); + if( !mtn_dat.isIntAudio ) + ext_choice.set_active(true); + + OnAudioTypeChoice(*prj_choice, a_btn, a_ext_btn); + prj_choice->signal_toggled().connect( + bb::bind(&OnAudioTypeChoice, boost::ref(*prj_choice), boost::ref(a_btn), + boost::ref(a_ext_btn))); + } + + pa_btn.SetPAction(mtn_dat.pAct); + // постдействие + { + Gtk::VBox& pa_box = PackParaBox(vbox, _("End Action")); + PackNamedWidget(pa_box, NewManaged(), pa_btn, vbox.labelSg, Gtk::PACK_EXPAND_WIDGET); + } + } + + // цвета для субкартинок (subpicture) + SubpicturePalette& pal = mn->subPal; + Gtk::ColorButton& sel_btn = NewManaged(); + Gtk::ColorButton& act_btn = NewManaged(); + { + DialogVBox& vbox = AddDialogPage(nbook, _("_Subpicture Colors"), true); + + PackColorButton(vbox, sel_btn, pal.selClr, SMCLN_("S_elected item color")); + PackColorButton(vbox, act_btn, pal.actClr, SMCLN_("_Activated item color")); + + Gtk::Button& btn = PackStart(vbox, NewManaged(_("_Restore default colors"), true)); + btn.signal_clicked().connect(bb::bind(&RestoreSPColors, b::ref(sel_btn), b::ref(act_btn))); + } + + CompleteDialog(dlg); + + if( Gtk::RESPONSE_OK == dlg.run() ) + { + mtn_dat.isMotion = mtn_btn.get_active(); + mtn_dat.duration = dur_btn.get_value(); + mtn_dat.isStillPicture = sp_btn.get_active(); + + mtn_dat.isIntAudio = prj_choice->get_active(); + mtn_dat.audioRef = a_btn.GetMI(); + mtn_dat.audioExtPath = a_ext_btn.get_filename(); + + mtn_dat.pAct = pa_btn.PAction(); + + pal.selClr = GetColor(sel_btn); + pal.actClr = GetColor(act_btn); + + // факт изменения отобразить + void RedrawThumbnail(MediaItem mi); + RedrawThumbnail(mn); + // :TRICKY: рассмотреть вариант обновления через обработчик, + // потому как вызов UpdateDVDSize() требует наличия Application() + // (и валится в противном случае) + void UpdateDVDSize(); + UpdateDVDSize(); + } +} + +/////////////////////////////// + +static void OnRightButton(ObjectBrowser& brw, MediaItem mi, GdkEventButton* event) +{ + Menu mn = IsMenu(mi); + ASSERT(mn); + + Gtk::Menu& gmn = NewPopupMenu(); + AddEnabledItem(gmn, DOTS_("Menu Settings"), bb::bind(&MenuSettings, mn, GetTopWindow(brw))); + Popup(gmn, event, true); +} + MenuBrowser::MenuBrowser(RefPtr ms) { set_name("MenuBrowser"); @@ -78,6 +506,8 @@ append_column(name_cln); } + + SetOnRightButton(*this, bb::bind(&OnRightButton, _1, _2, _3)); } void DeleteMenuFromBrowser(MenuBrowser& brw) @@ -166,19 +596,6 @@ edit_fnr(); } -class SetLinkMenuVis: public ObjVisitor -{ - public: - SetLinkMenuVis(RefPtr mn_store, RefPtr md_store) - :mnStore(mn_store), mdStore(md_store) {} - - virtual void Visit(MenuMD& obj); - - protected: - RefPtr mnStore; - RefPtr mdStore; -}; - static void AddNoStaffItem(Gtk::Menu& lnk_list, const std::string& label) { Gtk::MenuItem& mn_itm = NewManaged(Glib::ustring(label)); @@ -191,21 +608,6 @@ return mi ? mi->mdName + " (" + gettext(mi->TypeString().c_str()) + ")" : _("No Link") ; } -class LinkMenuBuilder: public EditorMenuBuilder -{ - typedef EditorMenuBuilder MyParent; - public: - LinkMenuBuilder(SetLinkMenu& slm, MEditorArea& ed) - :MyParent(slm.newLink, ed, slm.isForBack) {} - - virtual ActionFunctor CreateAction(MediaItem mi); -}; - -ActionFunctor LinkMenuBuilder::CreateAction(MediaItem mi) -{ - return bl::bind(SetSelObjectsLinks, mi, forPoster); -} - void AppendRadioItem(Gtk::RadioMenuItem& itm, bool is_active, const ActionFunctor& fnr, Gtk::Menu& lnk_list) { itm.set_active(is_active); @@ -214,24 +616,41 @@ lnk_list.append(itm); } -CommonMenuBuilder::CommonMenuBuilder(MediaItem cur_itm, bool for_poster): - curItm(cur_itm), forPoster(for_poster), resMenu(NewManaged()) {} +CommonMenuBuilder::CommonMenuBuilder(MediaItem cur_itm, bool for_poster, bool only_with_audio): + curItm(cur_itm), forPoster(for_poster), resMenu(NewManaged()), onlyWithAudio(only_with_audio) {} + +static Gtk::RadioMenuItem& +AddMediaItemChoice(CommonMenuBuilder& mb, Gtk::Menu& lnk_list, MediaItem mi, const std::string& name, + bool exp_link) +{ + std::string itm_name = name.empty() ? MakeMediaItemNameForMenu(mi) : name ; + Gtk::RadioMenuItem& itm = NewManaged(mb.radioGrp, itm_name); + AppendRadioItem(itm, exp_link && (mi == mb.curItm), mb.CreateAction(mi), lnk_list); + return itm; +} Gtk::RadioMenuItem& CommonMenuBuilder::AddMediaItemChoice(Gtk::Menu& lnk_list, MediaItem mi, const std::string& name) { - std::string itm_name = name.empty() ? MakeMediaItemNameForMenu(mi) : name ; + return Project::AddMediaItemChoice(*this, lnk_list, mi, name, true); +} - Gtk::RadioMenuItem& itm = NewManaged(radioGrp, itm_name); - AppendRadioItem(itm, mi == curItm, CreateAction(mi), lnk_list); - return itm; +void CommonMenuBuilder::AddPredefinedItem(const std::string& label, bool is_active, const ActionFunctor& fnr) +{ + Gtk::RadioMenuItem& itm = NewManaged(radioGrp); + SetAlign(Add(itm, NewBoldItalicLabel(label))); + AppendRadioItem(itm, is_active, fnr, resMenu); +} + +void AddNoLinkItem(CommonMenuBuilder& mb, bool exp_link) +{ + AddMediaItemChoice(mb, mb.resMenu, MediaItem(), "", exp_link); } -void CommonMenuBuilder::AddConstantChoice(Gtk::Menu& lnk_list) +void CommonMenuBuilder::AddConstantChoice() { - // No Link - AddMediaItemChoice(lnk_list, MediaItem()); + AddNoLinkItem(*this, true); } Gtk::Menu& CommonMenuBuilder::Create() @@ -247,7 +666,7 @@ // и при вызове set_active() он тоже отработает ("отжали кнопку") Gtk::RadioMenuItem empty_itm(grp); - AddConstantChoice(lnk_list); + AddConstantChoice(); lnk_list.append(NewManaged()); // * Menus if( !forPoster ) @@ -290,7 +709,10 @@ AddMediaItemChoice(lnk_list, mi); } else if( ptr::dynamic_pointer_cast(mi) ) - AddMediaItemChoice(lnk_list, mi).set_sensitive(forPoster); + { + bool is_sensitive = forPoster && !onlyWithAudio; + AddMediaItemChoice(lnk_list, mi).set_sensitive(is_sensitive); + } } } else @@ -299,18 +721,31 @@ return lnk_list; } -void SetLinkMenuVis::Visit(MenuMD& obj) -{ - SetLinkMenu& slm = obj.GetData(); - - MenuPack& mp = obj.GetData(); - if( !mp.editor ) - { - LOG_ERR << "SetLinkMenuVis::Visit: where is editor?" << io::endl; - return; - } - slm.linkMenu = &LinkMenuBuilder(slm, *mp.editor).Create(); -} +//class SetLinkMenuVis: public ObjVisitor +//{ +// public: +// SetLinkMenuVis(RefPtr mn_store, RefPtr md_store) +// :mnStore(mn_store), mdStore(md_store) {} +// +// virtual void Visit(MenuMD& obj); +// +// protected: +// RefPtr mnStore; +// RefPtr mdStore; +//}; +// +//void SetLinkMenuVis::Visit(MenuMD& obj) +//{ +// SetLinkMenu& slm = obj.GetData(); +// +// MenuPack& mp = obj.GetData(); +// if( !mp.editor ) +// { +// LOG_ERR << "SetLinkMenuVis::Visit: where is editor?" << io::endl; +// return; +// } +// slm.linkMenu = &LinkMenuBuilder(slm, *mp.editor).Create(); +//} void PackMenusWindow(Gtk::Container& contr, RefPtr ms, RefPtr md_store) { @@ -322,7 +757,7 @@ meditor.StandAlone() = false; RegisterOnChangeName(new EdtOnChangeNameVis(meditor, title_lbl)); RegisterOnDelete(new EdtOnDeleteVis(meditor, title_lbl)); - RegisterHandler(new SetLinkMenuVis(ms, md_store), "SetLinkMenu"); + //RegisterHandler(new SetLinkMenuVis(ms, md_store), "SetLinkMenu"); Gtk::HPaned& hp = NewManaged(); // :TRICKY: @@ -349,24 +784,23 @@ //Gtk::HBox& hb = *Gtk::manage(new Gtk::HBox(true, 4)); Gtk::HButtonBox& hb = Add(alg, CreateMListButtonBox()); { - using namespace boost; Gtk::Button* add_btn = CreateButtonWithIcon("", Gtk::Stock::ADD, _("Add Menu")); hb.pack_start(*add_btn); - add_btn->signal_clicked().connect(lambda::bind(&InsertMenuIntoBrowser, boost::ref(menu_brw))); + add_btn->signal_clicked().connect(bb::bind(&InsertMenuIntoBrowser, boost::ref(menu_brw))); Gtk::Button* rm_btn = CreateButtonWithIcon("", Gtk::Stock::REMOVE, _("Remove Menu")); hb.pack_start(*rm_btn); - rm_btn->signal_clicked().connect(lambda::bind(&DeleteMenuFromBrowser, boost::ref(menu_brw))); + rm_btn->signal_clicked().connect(bb::bind(&DeleteMenuFromBrowser, boost::ref(menu_brw))); //const char* edit_text = C_("MenuBrowser", "Edit"); const char* edit_text = ""; Gtk::Button* edit_btn = CreateButtonWithIcon(edit_text, Gtk::Stock::YES, _("Edit Menu")); hb.pack_start(*edit_btn); ActionFunctor edit_fnr = - lambda::bind(&EditMenu, boost::ref(menu_brw), boost::ref(meditor), boost::ref(title_lbl)); + bb::bind(&EditMenu, boost::ref(menu_brw), boost::ref(meditor), boost::ref(title_lbl)); edit_btn->signal_clicked().connect(edit_fnr); - menu_brw.signal_row_activated().connect( lambda::bind(&OnMenuBrowserRowActivated, edit_fnr) ); + menu_brw.signal_row_activated().connect( bb::bind(&OnMenuBrowserRowActivated, edit_fnr) ); } // * diff -Nru bombono-dvd-0.7.0/src/mgui/project/menu-render.cpp bombono-dvd-0.8.0/src/mgui/project/menu-render.cpp --- bombono-dvd-0.7.0/src/mgui/project/menu-render.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/menu-render.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -28,7 +28,11 @@ #include #include +#include // IsMotion() +#include + #include // ThemeOrDef() +#include // MakeColor() #include #include // Mpeg::set_hms @@ -145,6 +149,7 @@ static void RenderThumbnail(MenuPack& mn_pack, RefPtr src_pix, const Rect& plc, const Rect& union_rect) { + RefPtr thumb = mn_pack.thumbPix; // * //RGBA::Scale(mnPack.thumbPix, src_pix); // * @@ -153,9 +158,17 @@ //RGBA::RgnPixelDrawer drw(mnPack.thumbPix, &one_lst); //drw.ScalePixbuf(src_pix, plc); // * - самый быстрый вариант - RGBA::ScalePixbuf(mn_pack.thumbPix, src_pix, plc, union_rect); + RGBA::ScalePixbuf(thumb, src_pix, plc, union_rect); + + Menu mn = mn_pack.Owner(); + StampFPEmblem(mn, thumb); - StampFPEmblem(mn_pack.Owner(), mn_pack.thumbPix); + // эмблема как признак анимационности + if( IsMotion(mn) ) + { + RefPtr emblem = GetCheckEmblem(thumb, "emblems/tmp/applications-multimedia.png"); + RGBA::AlphaComposite(thumb, emblem, Point(thumb->get_width()-emblem->get_width()-2, 2)); + } } void RenderThumbnail(MenuPack& mn_pack) @@ -248,53 +261,27 @@ /////////////////////////////////////////////////////////////////////// // Преобразования MenuItem <-> MenuRegion -static std::string ToString(const RGBA::Pixel& pxl) +static void LoadBackground(MenuRegion& menu_rgn, Menu mn) { - using Mpeg::set_hms; - return (str::stream("#") << std::hex - << set_hms() << (int)pxl.red - << set_hms() << (int)pxl.green - << set_hms() << (int)pxl.blue << (int)pxl.alpha).str(); -} - -// как pango_color_parse() -static bool ParseHex2(const char* src, unsigned char& c) -{ - bool res = true; - int len = 2; - for( const char* end = src + len; src != end; src++ ) - if( g_ascii_isxdigit(*src) ) - c = (c << 4) | g_ascii_xdigit_value(*src); - else - { - res = false; - break; - } - return res; -} + const MenuParams& prms = mn->Params(); //mn ? mn->Params() : AData().GetDefMP() ; + menu_rgn.GetParams() = prms; + menu_rgn.BgRef().SetLink(mn->BgRef()); -bool ParseColor(RGBA::Pixel& pxl, const std::string& clr_str) -{ - bool res = false; - if( (clr_str.size() == 1+8) && (clr_str[0] == '#') ) - { - if( ParseHex2(clr_str.c_str()+1, pxl.red) && - ParseHex2(clr_str.c_str()+3, pxl.green) && - ParseHex2(clr_str.c_str()+5, pxl.blue) && - ParseHex2(clr_str.c_str()+7, pxl.alpha) ) - res = true; - } + menu_rgn.BgColor() = MakeColor(mn->Color()); + menu_rgn.BgColor().alpha = RGBA::Pixel::MaxClr; // форсируем непрозрачность - if( !res ) - pxl = RGBA::Pixel(); // черный если ошибки - return res; +// SimpleOverObj* bg_soo = new SimpleOverObj; +// SetOwnerMenu(bg_soo, mn.get()); +// bg_soo->SetPlacement(Rect0Sz(prms.Size())); +// if( mn ) +// bg_soo->MediaItem().SetLink(mn->BgRef()); +// menu_rgn.Ins(*bg_soo); } -RGBA::Pixel MakeColor(const std::string& clr_str) +static void LoadMenuItem(Comp::MediaObj* obj, MenuItem mi) { - RGBA::Pixel clr; - ParseColor(clr, clr_str); - return clr; + obj->MediaItem().SetLink(mi->Ref()); + obj->PlayAll() = mi->playAll; } TextObj* CreateEditorText(TextItemMD& txt_md) @@ -309,26 +296,14 @@ MEdt::CheckDescNonNull(style); obj->Load(text, txt_md.Placement(), style); - obj->MediaItem().SetLink(txt_md.Ref()); + LoadMenuItem(obj, &txt_md); return obj; } -static void LoadBackground(MenuRegion& menu_rgn, Menu mn) +FrameThemeObj* NewFTO(const std::string& theme, const Rect& lct) { - const MenuParams& prms = mn->Params(); //mn ? mn->Params() : AData().GetDefMP() ; - menu_rgn.GetParams() = prms; - menu_rgn.BgRef().SetLink(mn->BgRef()); - - menu_rgn.BgColor() = MakeColor(mn->Color()); - menu_rgn.BgColor().alpha = RGBA::Pixel::MaxClr; // форсируем непрозрачность - -// SimpleOverObj* bg_soo = new SimpleOverObj; -// SetOwnerMenu(bg_soo, mn.get()); -// bg_soo->SetPlacement(Rect0Sz(prms.Size())); -// if( mn ) -// bg_soo->MediaItem().SetLink(mn->BgRef()); -// menu_rgn.Ins(*bg_soo); + return new FrameThemeObj(Project::ThemeOrDef(theme).c_str(), lct); } void AddMenuItem(MenuRegion& menu_rgn, Comp::Object* obj) @@ -337,15 +312,6 @@ SetOwnerMenu(obj, GetOwnerMenu(&menu_rgn)); } -FrameThemeObj* AddFTOItem(MenuRegion& menu_rgn, const std::string& theme, const Rect& lct, MediaItem mi) -{ - FrameThemeObj* fto = new FrameThemeObj(Project::ThemeOrDef(theme).c_str(), lct); - fto->MediaItem().SetLink(mi); - - AddMenuItem(menu_rgn, fto); - return fto; -} - void ClearMenuSavedData(Menu mn) { // * очищаем хранительный вариант меню @@ -374,11 +340,10 @@ } else if( FrameItemMD* frame_mi = dynamic_cast(mi.get()) ) { - //FrameThemeObj* fto = new FrameThemeObj(frame_mi->Theme().c_str(), mi->Placement()); - //fto->MediaItem() = mi->Ref(); - //AddMenuItem(menu_rgn, fto); - FrameThemeObj* fto = AddFTOItem(menu_rgn, frame_mi->Theme(), mi->Placement(), mi->Ref()); + FrameThemeObj* fto = NewFTO(frame_mi->Theme(), frame_mi->Placement()); + LoadMenuItem(fto, frame_mi); fto->PosterItem().SetLink(frame_mi->Poster()); + AddMenuItem(menu_rgn, fto); } else ASSERT(0); @@ -391,6 +356,7 @@ { mi->Placement() = m_obj->Placement(); mi->Ref() = m_obj->MediaItem(); + mi->playAll = m_obj->PlayAll(); } void SaveMenu(Menu mn) diff -Nru bombono-dvd-0.7.0/src/mgui/project/serialize.cpp bombono-dvd-0.8.0/src/mgui/project/serialize.cpp --- bombono-dvd-0.7.0/src/mgui/project/serialize.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/serialize.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mgui/project/serialize.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include @@ -18,6 +38,7 @@ #include #include +#include // bl::var #include namespace Project diff -Nru bombono-dvd-0.7.0/src/mgui/project/serialize.h bombono-dvd-0.8.0/src/mgui/project/serialize.h --- bombono-dvd-0.7.0/src/mgui/project/serialize.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/serialize.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mgui/project/serialize.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MGUI_PROJECT_SERIALIZE_H__ #define __MGUI_PROJECT_SERIALIZE_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/project/thumbnail.cpp bombono-dvd-0.8.0/src/mgui/project/thumbnail.cpp --- bombono-dvd-0.7.0/src/mgui/project/thumbnail.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/project/thumbnail.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/project/thumbnail.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -52,7 +52,7 @@ ptr::weak_intrusive curVI; Mpeg::FwdPlayer player; - BrowserCache() { SetOutputFormat(player, fofRGB); } + BrowserCache() { RGBOpen(player); } }; static Mpeg::FwdPlayer& OpenCachePlayer(VideoItem vmd) @@ -61,28 +61,54 @@ if( (cache.curVI.lock() != vmd) || !cache.player.IsOpened() ) { cache.curVI = vmd; - bool is_open = cache.player.Open(GetFilename(*vmd).c_str()); - ASSERT_OR_UNUSED(is_open); + CheckOpen(cache.player, GetFilename(*vmd)); } return cache.player; } -RefPtr GetVideoFrame(VideoItem vmd, double time, const Point& sz) +//RefPtr GetVideoFrame(VideoItem vmd, double time, const Point& sz) +//{ +// Mpeg::FwdPlayer& player = OpenCachePlayer(vmd); +// RefPtr pix = CreatePixbuf(sz); +// return GetFrame(pix, time, player); +//} + +const double VIDEO_THUMB_TIME = 0.; + +VideoStart GetVideoStart(MediaItem mi) { - Mpeg::FwdPlayer& player = OpenCachePlayer(vmd); - RefPtr pix = CreatePixbuf(sz); - return GetFrame(pix, time, player); + VideoStart res; + + if( VideoItem vi = IsVideo(mi) ) + { + res.first = vi; + res.second = VIDEO_THUMB_TIME; + } + else if( ChapterItem ci = IsChapter(mi) ) + { + res.first = ci->owner; + res.second = ci->chpTime; + } + else + ASSERT(0); + return res; +} + +VideoPE::VideoPE(VideoStart vs): plyr(OpenCachePlayer(vs.first)), time(vs.second) {} + +static VideoPE* CreateVideoPE(Media& md) +{ + return new VideoPE(GetVideoStart(&md)); } void PrimaryShotGetter::Visit(VideoMD& obj) { - const double VIDEO_THUMB_TIME = 0.; - pixExt = new VideoPE(OpenCachePlayer(&obj), VIDEO_THUMB_TIME); + pixExt = CreateVideoPE(obj); } void PrimaryShotGetter::Visit(VideoChapterMD& obj) { - pixExt = new VideoPE(OpenCachePlayer(obj.owner), obj.chpTime); + pixExt = CreateVideoPE(obj); } void PrimaryShotGetter::Visit(ColorMD& obj) @@ -251,8 +277,7 @@ RefPtr GetCalcedShot(MediaItem mi) { - using namespace boost; - return GetInteractiveLRS( lambda::bind(&GetCalcedShotImpl, mi) ); + return GetInteractiveLRS( bb::bind(&GetCalcedShotImpl, mi) ); } void SetDirtyCacheShot(MediaItem mi) @@ -303,13 +328,7 @@ static void FillPixbuf(RefPtr& pix, RefPtr src, bool read_only) { if( pix ) - { - Point sz = PixbufSize(src); - if( sz == PixbufSize(pix) ) - src->copy_area(0, 0, sz.x, sz.y, pix, 0, 0); - else - RGBA::Scale(pix, src); - } + RGBA::CopyOrScale(pix, src); else pix = PixbufSource(src, read_only).RWPixbuf(); } @@ -365,15 +384,10 @@ if( AData().FirstPlayItem() != mi ) return; bool is_menu = IsMenu(mi); - RefPtr emblem = GetFactoryImage(is_menu ? "copy-n-paste/HelixPlayer_Activity-watch-listen/28.png" - : "copy-n-paste/HelixPlayer_Activity-watch-listen/16.png"); - CheckEmblem(pix, emblem); - - // местоположение - Point e_sz(PixbufSize(emblem)); - Point p_sz(PixbufSize(pix)); - Rect plc = RectASz(Point(2, is_menu ? (p_sz.y-e_sz.y)/2 : 2), e_sz); - RGBA::AlphaComposite(pix, emblem, plc); + RefPtr emblem = GetCheckEmblem(pix, is_menu + ? "copy-n-paste/HelixPlayer_Activity-watch-listen/28.png" + : "copy-n-paste/HelixPlayer_Activity-watch-listen/16.png"); + RGBA::AlphaComposite(pix, emblem, Point(2, is_menu ? (pix->get_height() - emblem->get_height())/2 : 2)); } } // namespace Project diff -Nru bombono-dvd-0.7.0/src/mgui/redivide.cpp bombono-dvd-0.8.0/src/mgui/redivide.cpp --- bombono-dvd-0.7.0/src/mgui/redivide.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/redivide.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/redivide.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/render/rgba.cpp bombono-dvd-0.8.0/src/mgui/render/rgba.cpp --- bombono-dvd-0.7.0/src/mgui/render/rgba.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/render/rgba.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -26,18 +26,34 @@ namespace RGBA { +void CopyArea(RefPtr dst, RefPtr src, + const Rect& plc, const Rect& drw_rgn) +{ + src->copy_area(drw_rgn.lft-plc.lft, drw_rgn.top-plc.top, drw_rgn.Width(), drw_rgn.Height(), + dst, drw_rgn.lft, drw_rgn.top); +} + // plc - местоположение, куда отображаем картинку // drw_rgn - та часть plc, которую хотим отобразить/отрисовать (не затрагивая остальное) void ScalePixbuf(RefPtr dst, RefPtr src, const Rect& plc, const Rect& drw_rgn) { Point sz = plc.Size(); - Point drw_sz = drw_rgn.Size(); - - src->scale(dst, drw_rgn.lft, drw_rgn.top, drw_sz.x, drw_sz.y, plc.lft, plc.top, - (double)sz.x/src->get_width(), - (double)sz.y/src->get_height(), - Gdk::INTERP_BILINEAR); + if( sz == PixbufSize(src) ) + { + // gdk_pixbuf_scale() недостаточно умен, чтобы самостоятельно заменить скалирование + // копированием в этом случае + CopyArea(dst, src, plc, drw_rgn); + } + else + { + Point drw_sz = drw_rgn.Size(); + + src->scale(dst, drw_rgn.lft, drw_rgn.top, drw_sz.x, drw_sz.y, plc.lft, plc.top, + (double)sz.x/src->get_width(), + (double)sz.y/src->get_height(), + Gdk::INTERP_BILINEAR); + } } void AlphaCompositePixbuf(RefPtr dst, RefPtr src, @@ -57,11 +73,32 @@ ScalePixbuf(dst, src, plc, plc); } +void Scale(RefPtr dst, RefPtr src) +{ + Scale(dst, src, PixbufBounds(dst)); +} + +void CopyOrScale(RefPtr& pix, RefPtr src) +{ + // ScalePixbuf() умеет сам распознавать, когда достаточно скопировать + //Point sz = PixbufSize(src); + //if( sz == PixbufSize(pix) ) + // src->copy_area(0, 0, sz.x, sz.y, pix, 0, 0); + //else + // Scale(pix, src); + Scale(pix, src); +} + void AlphaComposite(RefPtr dst, RefPtr src, const Rect& plc) { AlphaCompositePixbuf(dst, src, plc, plc); } +void AlphaComposite(RefPtr dst, RefPtr src, const Point& a) +{ + AlphaComposite(dst, src, RectASz(a, PixbufSize(src))); +} + /////////////////////////////////////////////////////////// // RGBA::Drawer @@ -278,14 +315,12 @@ !is_horiz ? cut_rct.btm : cut_rct.top ); } -using namespace boost; - void RgnPixelDrawer::LineToImpl(int to_x, int to_y) { bool is_horiz = curY == to_y; Rect lin_rct(curX, curY, is_horiz ? to_x : to_x+1, !is_horiz ? to_y : to_y+1); - DrwFunctor drw_fnr = lambda::bind(&RgnPixelDrawer::LineToImplRect, this, lambda::_1, is_horiz); + DrwFunctor drw_fnr = bb::bind(&RgnPixelDrawer::LineToImplRect, this, _1, is_horiz); DrawWithFunctor(lin_rct, drw_fnr); } @@ -300,20 +335,20 @@ { Rect rct(curX, curY, to_x, to_y); - DrwFunctor drw_fnr = lambda::bind(&RgnPixelDrawer::RectToImplRect, this, lambda::_1); + DrwFunctor drw_fnr = bb::bind(&RgnPixelDrawer::RectToImplRect, this, _1); DrawWithFunctor(rct, drw_fnr); } void RgnPixelDrawer::ScalePixbuf(RefPtr pix, const RgnType& plc) { //DrwFunctor drw_fnr = bind(&Scale1, canvPix, pix, plc, _1); - DrwFunctor drw_fnr = lambda::bind(&RGBA::ScalePixbuf, canvPix, pix, plc, lambda::_1); + DrwFunctor drw_fnr = bb::bind(&RGBA::ScalePixbuf, canvPix, pix, plc, _1); DrawWithFunctor(plc, drw_fnr); } void RgnPixelDrawer::CompositePixbuf(RefPtr pix, const RgnType& plc) { - DrwFunctor drw_fnr = lambda::bind(&RGBA::AlphaCompositePixbuf, canvPix, pix, plc, lambda::_1); + DrwFunctor drw_fnr = bb::bind(&RGBA::AlphaCompositePixbuf, canvPix, pix, plc, _1); DrawWithFunctor(plc, drw_fnr); } diff -Nru bombono-dvd-0.7.0/src/mgui/render/rgba.h bombono-dvd-0.8.0/src/mgui/render/rgba.h --- bombono-dvd-0.7.0/src/mgui/render/rgba.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/render/rgba.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/render/rgba.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -142,6 +142,9 @@ void AlphaCompositePixbuf(RefPtr dst, RefPtr src, const Rect& plc, const Rect& drw_rgn); +void CopyArea(RefPtr dst, RefPtr src, + const Rect& plc, const Rect& drw_rgn); + } // namespace RGBA // нарисовать рамку (для объекта с координатами plc_rct) diff -Nru bombono-dvd-0.7.0/src/mgui/SConscript bombono-dvd-0.8.0/src/mgui/SConscript --- bombono-dvd-0.7.0/src/mgui/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/SConscript 2010-11-01 21:58:28.000000000 +0000 @@ -69,8 +69,11 @@ #'sdk/magick_pixbuf.cpp', 'sdk/cairo_utils.cpp', 'sdk/clearlooks.cpp', + 'sdk/menu.cpp', 'sdk/player_utils.cpp', 'sdk/textview.cpp', + 'sdk/widget.cpp', + 'sdk/window.cpp', #'sdk/libgnome/gnome-exec.c', 'sdk/libgnome/gnome-util.c', @@ -89,9 +92,11 @@ # SetPCH() function' argument 'additional_envs', like bin_mgui_env here! user_options_dict['SetPCH'](lib_mgui_env, '_pc_.h', [bin_mgui_env]) -mgui_lib_name = 'MdEditor' lib_mgui_objs = lib_mgui_env.StaticObject(lib_src_files) -lib_mgui_env.Library( target = lib_path+'/'+mgui_lib_name, source = lib_mgui_objs ) +# build binaries directly, without slow-building static libraries +Export('lib_mgui_objs') +#mgui_lib_name = 'MdEditor' +#lib_mgui_env.Library( target = lib_path+'/'+mgui_lib_name, source = lib_mgui_objs ) ###### # bin diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/browser.h bombono-dvd-0.8.0/src/mgui/sdk/browser.h --- bombono-dvd-0.7.0/src/mgui/sdk/browser.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/browser.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/sdk/browser.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -34,10 +34,15 @@ namespace Project { +typedef std::pair VideoStart; +VideoStart GetVideoStart(MediaItem mi); + // чтение кадров с видео class VideoPE: public PixExtractor { public: + VideoPE(VideoStart vs); + VideoPE(Mpeg::FwdPlayer& plyr_, double time_) : plyr(plyr_), time(time_) {} diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/ioblock.h bombono-dvd-0.8.0/src/mgui/sdk/ioblock.h --- bombono-dvd-0.7.0/src/mgui/sdk/ioblock.h 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/ioblock.h 2010-11-01 21:58:29.000000000 +0000 @@ -0,0 +1,77 @@ +// +// mgui/sdk/ioblock.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __MGUI_SDK_IOBLOCK_H__ +#define __MGUI_SDK_IOBLOCK_H__ + +#include // ReadReadyFnr + +#include + +struct ExecOutput +{ + typedef boost::function Functor; + + sigc::connection outConn; + RefPtr outChnl; + + ~ExecOutput(); + + void Watch(int fd, const Functor& fnr, Glib::IOCondition cond); +}; + +class ReadDest +{ + public: + virtual ~ReadDest() {} + + virtual void PutData(const char* dat, int sz) = 0; + virtual void OnEnd() = 0; +}; + +struct ProgramOutput +{ + ExecOutput outEO; + ExecOutput errEO; + + ReadDest& outRd; + ReadDest& errRd; + + ProgramOutput(ReadDest& o_rd, ReadDest& e_rd): outRd(o_rd), errRd(e_rd) {} +}; + +// в пределах жизни этого блока в fnr будут поступать данные с выходов out_err, +// а после последние будут закрыты +class OutErrBlock +{ + public: + + OutErrBlock(int out_err[2], const ReadReadyFnr& fnr, bool line_up = true); + ~OutErrBlock(); + + protected: + ptr::one outRd; + ptr::one errRd; + ProgramOutput po; +}; + +#endif // #ifndef __MGUI_SDK_IOBLOCK_H__ + diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/menu.cpp bombono-dvd-0.8.0/src/mgui/sdk/menu.cpp --- bombono-dvd-0.7.0/src/mgui/sdk/menu.cpp 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/menu.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -0,0 +1,62 @@ +// +// mgui/sdk/menu.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include + +#include "menu.h" + +Gtk::MenuItem& AppendMI(Gtk::MenuShell& ms, Gtk::MenuItem& mi) +{ + ms.append(mi); + return mi; +} + +Gtk::Menu& MakeSubmenu(Gtk::MenuItem& mi) +{ + Gtk::Menu& sub_menu = NewManaged(); + mi.set_submenu(sub_menu); + return sub_menu; +} + +Gtk::MenuItem& MakeAppendMI(Gtk::MenuShell& ms, const char* name) +{ + return AppendMI(ms, NewManaged(name)); +} + +void AppendSeparator(Gtk::MenuShell& ms) +{ + ms.append(NewManaged()); +} + +void Popup(Gtk::Menu& mn, GdkEventButton* event, bool show_all) +{ + if( show_all ) + mn.show_all(); + mn.popup(event->button, event->time); +} + +void AddEnabledItem(Gtk::Menu& menu, const char* name, const ActionFunctor& fnr, bool is_enabled) +{ + Gtk::MenuItem& itm = MakeAppendMI(menu, name); + itm.set_sensitive(is_enabled); + itm.signal_activate().connect(fnr); +} + diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/menu.h bombono-dvd-0.8.0/src/mgui/sdk/menu.h --- bombono-dvd-0.7.0/src/mgui/sdk/menu.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/menu.h 2010-11-01 21:58:29.000000000 +0000 @@ -24,28 +24,15 @@ #include "packing.h" -inline Gtk::MenuItem& AppendMI(Gtk::MenuShell& ms, Gtk::MenuItem& mi) -{ - ms.append(mi); - return mi; -} - -inline Gtk::Menu& MakeSubmenu(Gtk::MenuItem& mi) -{ - Gtk::Menu& sub_menu = NewManaged(); - mi.set_submenu(sub_menu); - return sub_menu; -} - -inline Gtk::MenuItem& MakeAppendMI(Gtk::MenuShell& ms, const char* name) -{ - return AppendMI(ms, NewManaged(name)); -} - -inline void AppendSeparator(Gtk::MenuShell& ms) -{ - ms.append(NewManaged()); -} +#include + +Gtk::MenuItem& AppendMI(Gtk::MenuShell& ms, Gtk::MenuItem& mi); + +Gtk::Menu& MakeSubmenu(Gtk::MenuItem& mi); + +Gtk::MenuItem& MakeAppendMI(Gtk::MenuShell& ms, const char* name); + +void AppendSeparator(Gtk::MenuShell& ms); // // NewPopupMenu() - создание контекстного меню @@ -53,13 +40,11 @@ // Замечание: для таких меню обычно перед Popup() следует вызвать show_all() // Gtk::Menu& NewPopupMenu(); -inline void Popup(Gtk::Menu& mn, GdkEventButton* event, bool show_all = false) -{ - if( show_all ) - mn.show_all(); - mn.popup(event->button, event->time); -} +void Popup(Gtk::Menu& mn, GdkEventButton* event, bool show_all = false); + +void SetDeleteOnDone(Gtk::Menu& menu); +void AddEnabledItem(Gtk::Menu& menu, const char* name, const ActionFunctor& fnr, bool is_enabled = true); #endif // __MGUI_SDK_MENU_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/packing.h bombono-dvd-0.8.0/src/mgui/sdk/packing.h --- bombono-dvd-0.7.0/src/mgui/sdk/packing.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/packing.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/sdk/packing.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -96,6 +96,13 @@ return wdg; } +template +GtkObj& AddWidget(Glib::RefPtr wdg_sg, GtkObj& wdg) +{ + wdg_sg->add_widget(wdg); + return wdg; +} + // Разное void PackHSeparator(Gtk::VBox& vbox); diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/player_utils.cpp bombono-dvd-0.8.0/src/mgui/sdk/player_utils.cpp --- bombono-dvd-0.7.0/src/mgui/sdk/player_utils.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/player_utils.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/sdk/player_utils.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -32,6 +32,13 @@ plyr.VLine().GetParseContext().m2d.SetOutputFormat(fof); } +void RGBOpen(Mpeg::FwdPlayer& plyr, const std::string& fname) +{ + SetOutputFormat(plyr, fofRGB); + if( !fname.empty() ) + CheckOpen(plyr, fname); +} + static RefPtr GetRawFrame(Mpeg::Player& plyr) { RefPtr res_pix; @@ -92,7 +99,8 @@ res = true; // заполняем кадр if( pix ) - RGBA::Scale(pix, img_pix); + //RGBA::Scale(pix, img_pix); + RGBA::CopyOrScale(pix, img_pix); else pix = img_pix->copy(); } diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/player_utils.h bombono-dvd-0.8.0/src/mgui/sdk/player_utils.h --- bombono-dvd-0.7.0/src/mgui/sdk/player_utils.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/player_utils.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/sdk/player_utils.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -28,6 +28,7 @@ // установить до первого применения void SetOutputFormat(Mpeg::FwdPlayer& plyr, FrameOutputFrmt fof); +void RGBOpen(Mpeg::FwdPlayer& plyr, const std::string& fname = std::string()); // вернуть кадр только на чтение (если не смог перейти, то вернет ноль) RefPtr GetRawFrame(double time, Mpeg::FwdPlayer& plyr); diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/widget.cpp bombono-dvd-0.8.0/src/mgui/sdk/widget.cpp --- bombono-dvd-0.7.0/src/mgui/sdk/widget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/widget.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -0,0 +1,59 @@ +// +// mgui/sdk/widget.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include + +#include "widget.h" +#include + +void SetScaleSecondary(Gtk::HScale& scl) +{ + scl.property_draw_value() = false; + scl.property_can_focus() = false; +} + +void ConfigureSpin(Gtk::SpinButton& btn, double val, double max) +{ + // по мотивам gtk_spin_button_new_with_range() + int step = 1; + btn.configure(*Gtk::manage(new Gtk::Adjustment(val, 1, max, step, 10*step, 0)), step, 0); + btn.set_numeric(true); +} + +RGBA::Pixel GetColor(const Gtk::ColorButton& btn) +{ + RGBA::Pixel pxl(RGBA::ColorToPixel(btn.get_color())); + pxl.alpha = RGBA::FromGdkComponent(btn.get_alpha()); + return pxl; +} + +void SetColor(Gtk::ColorButton& btn, const RGBA::Pixel& pxl) +{ + btn.set_color(RGBA::PixelToColor(pxl)); + btn.set_alpha(RGBA::ToGdkComponent(pxl.alpha)); +} + +void ConfigureRGBAButton(Gtk::ColorButton& btn, const RGBA::Pixel& pxl) +{ + btn.set_use_alpha(); + SetColor(btn, pxl); +} + diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/widget.h bombono-dvd-0.8.0/src/mgui/sdk/widget.h --- bombono-dvd-0.7.0/src/mgui/sdk/widget.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/widget.h 2010-11-01 21:58:29.000000000 +0000 @@ -22,18 +22,16 @@ #ifndef __MGUI_SDK_WIDGET_H__ #define __MGUI_SDK_WIDGET_H__ +#include + #include void SetPercent(Gtk::ProgressBar& bar, double percent); -// "прокрутить" очередь сообщений (по сути Muzzle'овский CheckBreak()) +// "прокрутить" очередь сообщений void IteratePendingEvents(); -inline void SetScaleSecondary(Gtk::HScale& scl) -{ - scl.property_draw_value() = false; - scl.property_can_focus() = false; -} +void SetScaleSecondary(Gtk::HScale& scl); inline void SetAlign(Gtk::Label& lbl, bool is_left = true) { @@ -55,6 +53,9 @@ Gtk::Label& NewMarkupLabel(const std::string& label, bool use_underline = false); +std::string BoldItalicText(const std::string& txt); +Gtk::Label& NewBoldItalicLabel(const std::string& label, bool use_underline = false); + // // GtkRadioButton, GtkRadioMenuItem и др. "radio"-виджеты отрабатывают toggled на оба состояния; // реально же действие хочется выполнить только на выбор. @@ -84,5 +85,13 @@ itm.signal_toggled().connect(RadioToggleCaller(itm, fnr)); } +void ConfigureSpin(Gtk::SpinButton& btn, double val, double max); + +RGBA::Pixel GetColor(const Gtk::ColorButton& btn); +void SetColor(Gtk::ColorButton& btn, const RGBA::Pixel& pxl); +void ConfigureRGBAButton(Gtk::ColorButton& btn, const RGBA::Pixel& pxl); + +bool SetEnabled(Gtk::Widget& wdg, bool is_enabled); + #endif // #ifndef __MGUI_SDK_WIDGET_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/window.cpp bombono-dvd-0.8.0/src/mgui/sdk/window.cpp --- bombono-dvd-0.7.0/src/mgui/sdk/window.cpp 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/window.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -0,0 +1,47 @@ +// +// mgui/sdk/window.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include + +#include "window.h" + +void RunWindow(Gtk::Window& win) +{ + win.show_all(); + Gtk::Main::run(win); +} + +Gtk::Window* GetTopWindow(Gtk::Widget& wdg) +{ + return dynamic_cast(wdg.get_toplevel()); +} + +Point CalcBeautifulRect(int wdh) +{ + return Point(wdh, wdh*3/5); +} + +void SetAppWindowSize(Gtk::Window& win, int wdh) +{ + Point sz = CalcBeautifulRect(wdh); + win.set_default_size(sz.x, sz.y); +} + diff -Nru bombono-dvd-0.7.0/src/mgui/sdk/window.h bombono-dvd-0.8.0/src/mgui/sdk/window.h --- bombono-dvd-0.7.0/src/mgui/sdk/window.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/sdk/window.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/sdk/window.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -22,21 +22,15 @@ #ifndef __MGUI_SDK_WINDOW_H__ #define __MGUI_SDK_WINDOW_H__ -inline void RunWindow(Gtk::Window& win) -{ - win.show_all(); - Gtk::Main::run(win); -} - -inline Gtk::Window* GetTopWindow(Gtk::Widget& wdg) -{ - return dynamic_cast(wdg.get_toplevel()); -} - -inline void SetAppWindowSize(Gtk::Window& win, int wdh) -{ - win.set_default_size(wdh, wdh*3/5); -} +#include + +void RunWindow(Gtk::Window& win); + +Gtk::Window* GetTopWindow(Gtk::Widget& wdg); + +Point CalcBeautifulRect(int wdh); + +void SetAppWindowSize(Gtk::Window& win, int wdh); #endif // __MGUI_SDK_WINDOW_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/tests/mgui_test.h bombono-dvd-0.8.0/src/mgui/tests/mgui_test.h --- bombono-dvd-0.7.0/src/mgui/tests/mgui_test.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/mgui_test.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/mgui_test.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -74,5 +74,7 @@ } // namespace DND +std::string GetTestFNameContents(const std::string& fname); + #endif // __MGUI_MGUI_TEST_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/tests/SConscript bombono-dvd-0.8.0/src/mgui/tests/SConscript --- bombono-dvd-0.7.0/src/mgui/tests/SConscript 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/SConscript 2010-11-01 21:58:29.000000000 +0000 @@ -1,9 +1,9 @@ #!/usr/bin/env python -Import('mgui_tests_env', 'user_options_dict', 'UnitTest') +Import('mgui_tests_env', 'user_options_dict', 'UnitTest', 'lib_mgui_objs') bin_mgui_tests_env = mgui_tests_env.Clone() -bin_mgui_tests_env.Prepend( LIBS = ['MdEditor', 'mbase_tests', 'mdemux_tests', 'mlib_tests', 'MdBase', +bin_mgui_tests_env.Prepend( LIBS = ['mbase_tests', 'mdemux_tests', 'mlib_tests', 'MdBase', 'MdDemuxer', 'MdLib'] ) test_prg_name = 'mgui_tests' @@ -22,6 +22,7 @@ 'test_mbrowser.cpp', 'test_mux.cpp', 'test_redivide.cpp', + 'test_render.cpp', 'test_stream_utils.cpp', #'test_scaled_text.cpp', 'test_text.cpp', @@ -32,7 +33,7 @@ # Precompiled header install user_options_dict['SetPCH'](bin_mgui_tests_env, '_pc_.h') -bin_mgui_tests_env.Program( target = test_prg_name, source = source_files ) +bin_mgui_tests_env.Program(target=test_prg_name, source = source_files+lib_mgui_objs) import os if os.environ.has_key('DISPLAY'): diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_author.cpp bombono-dvd-0.8.0/src/mgui/tests/test_author.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_author.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_author.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_author.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -38,7 +38,7 @@ std::string err_str; BOOST_CHECK( ClearAllFiles(dir, err_str) ); - return AuthorDVD(dir); + return Author::IsGood(AuthorDVD(dir)); } @@ -47,7 +47,7 @@ GtkmmDBInit gd_init; InitAndLoadPrj(prj_fname); - CheckAuthorMode cam; + Execution::ConsoleMode cam; BOOST_CHECK( AuthorDVDTest(out_dir) ); } diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_author.h bombono-dvd-0.8.0/src/mgui/tests/test_author.h --- bombono-dvd-0.7.0/src/mgui/tests/test_author.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_author.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_author.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_bmd.cpp bombono-dvd-0.8.0/src/mgui/tests/test_bmd.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_bmd.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_bmd.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mgui/tests/test_bmd.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_burn.cpp bombono-dvd-0.8.0/src/mgui/tests/test_burn.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_burn.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_burn.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_burn.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -27,6 +27,12 @@ #include #include +std::string GetTestFNameContents(const std::string& fname) +{ + std::string path = GetTestFileName(fname.c_str()); + return Glib::file_get_contents(path); +} + namespace Author { @@ -47,8 +53,7 @@ static DVDInfo ParseDVDInfoExample(bool is_good, const std::string& fname) { - std::string path = GetTestFileName(("dvd+rw-mediainfo/" + fname).c_str()); - return ParseDVDInfo(is_good, Glib::file_get_contents(path)); + return ParseDVDInfo(is_good, GetTestFNameContents("dvd+rw-mediainfo/" + fname)); } static DVDType ParseDVDTypeExample(bool is_good, const std::string& fname) diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_compile.cpp bombono-dvd-0.8.0/src/mgui/tests/test_compile.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_compile.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_compile.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_compile.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_execute.cpp bombono-dvd-0.8.0/src/mgui/tests/test_execute.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_execute.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_execute.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -83,9 +83,8 @@ std::string ho_str, he_str; std::string cmd_str = SetupHelloCommand(ho_str, he_str); - using namespace boost; std::string out_str, err_str; - ReadReadyFnr fnr = lambda::bind(&AppendToStrings, lambda::_1, lambda::_2, lambda::_3, + ReadReadyFnr fnr = bb::bind(&AppendToStrings, _1, _2, _3, boost::ref(out_str), boost::ref(err_str)); ExitData ed = ExecuteAsync(0, cmd_str.c_str(), fnr, 0, line_up); @@ -99,8 +98,8 @@ // теста (!) химичит с UNIX-сигналами, и из-за этого ExecuteAsyncImpl() не прекращает работу,- // не приходит событие завершения процесса в WaitExitCode() // -// Долбаные сигналы UNIX!!! Вы - проклятье всех POSIX-систем из-за своей несовершенности= -// =устаревшести и должны сдохнуть в корчах. +// Долбаные сигналы UNIX! Вы - проклятье всех POSIX-систем из-за того, что вами никто +// нормально пользоваться не умеет. BOOST_AUTO_TEST_CASE( TestAsyncReadingFalse ) { InitGtkmm(); @@ -137,6 +136,8 @@ ExecState& es; }; +ReadReadyFnr OF2RRF(OutputFilter& of); + static void OnExecuteCommand(Gtk::ComboBoxEntryText& cmd_ent, Gtk::FileChooserButton& ch_btn) { @@ -158,7 +159,7 @@ AppendCommandText(txt_view, "Execute Command: '" + cmd + "'"); ConsoleOF cof; - ExitData ed = ExecuteAsync(ch_btn.get_filename().c_str(), cmd.c_str(), cof, &edat.pid); + ExitData ed = ExecuteAsync(ch_btn.get_filename().c_str(), cmd.c_str(), OF2RRF(cof), &edat.pid); std::string exit_str = ExitDescription(ed); @@ -181,11 +182,10 @@ ExecState& es = GetInitedES(); Gtk::TextView& txt_view = es.detailsView; //NewManaged(); - using namespace boost; Gtk::ComboBoxEntryText& cmd_ent = NewManaged(); Gtk::Entry& ent = *cmd_ent.get_entry(); ent.set_activates_default(true); - cmd_ent.signal_changed().connect(lambda::bind(&GrabFocus, boost::ref(ent))); + cmd_ent.signal_changed().connect(bb::bind(&GrabFocus, boost::ref(ent))); Gtk::FileChooserButton& ch_btn = NewManaged("Select folder for execution", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); //ch_btn.set_filename(Project::MakeAbsolutePath("../t").string()); @@ -203,7 +203,7 @@ Gtk::Button& btn = es.ExecButton(); SetConsoleState(es, false); - btn.signal_clicked().connect(lambda::bind(&OnExecuteCommand, boost::ref(cmd_ent), boost::ref(ch_btn))); + btn.signal_clicked().connect(bb::bind(&OnExecuteCommand, boost::ref(cmd_ent), boost::ref(ch_btn))); PackStart(vbox, btn); SetDefaultButton(btn); diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_main.cpp bombono-dvd-0.8.0/src/mgui/tests/test_main.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_main.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_main.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_main.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_mbrowser.cpp bombono-dvd-0.8.0/src/mgui/tests/test_mbrowser.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_mbrowser.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_mbrowser.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -66,10 +66,11 @@ } } -static void CopyRow(Gtk::TreeRow& dst, Gtk::TreeRow& src, RefPtr ms) +static void CopyRow(Gtk::TreeRow& dst, Gtk::TreeRow& src) { - dst.set_value(ms->columns.media, src.get_value(ms->columns.media)); - dst.set_value(ms->columns.thumbnail, src.get_value(ms->columns.thumbnail)); + MediaStore::TrackFields& columns = MediaStore::Fields(); + dst.set_value(columns.media, src.get_value(columns.media)); + dst.set_value(columns.thumbnail, src.get_value(columns.thumbnail)); } // (переносим только картинку => главы переносить не надо) @@ -78,7 +79,7 @@ int cnt = GetMediasSize(ms); Gtk::TreeRow row = ms->children()[from_pos]; Gtk::TreeRow new_row = *ms->insert(ms->children()[to_pos]); - CopyRow(new_row, row, ms); + CopyRow(new_row, row); if( from_pos < to_pos ) SyncOnDragReceived(ms->get_path(new_row), ms->get_path(row), ms); else diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_meditor.cpp bombono-dvd-0.8.0/src/mgui/tests/test_meditor.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_meditor.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_meditor.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_meditor.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_render.cpp bombono-dvd-0.8.0/src/mgui/tests/test_render.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_render.cpp 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_render.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -0,0 +1,112 @@ +// +// mgui/tests/test_render.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include + +#include "test_author.h" +#include "test_mbrowser.h" + +#include +#include +#include +#include + +#include + +namespace Project { + +BOOST_AUTO_TEST_CASE( TestRenderTranscoding ) +{ + return; + std::string fname = "/home/ilya/opt/programming/atom-project/Autumn.mpg"; + std::string a_fname = "/home/ilya/opt/programming/atom-project/transition.mpg"; + + Mpeg::FwdPlayer plyr; + RGBOpen(plyr, fname); + + bool is_pal = plyr.MInfo().vidSeq.hgt == 576; + + int fps = 30; + double shift = 1. / fps; + double end = 1.; // секунда + + std::string ffmpeg_cmd = boost::format("ffmpeg -r %1% -f image2pipe -vcodec ppm -i pipe: %2%") + % fps % FFmpegPostArgs("../dvd_out/trans.vob", false, is_pal, a_fname, 6) % bf::stop; + + ExitData ed; + { + FFmpegCloser pc(ed); + pc.pid = Spawn(0, ffmpeg_cmd.c_str(), 0, true, &pc.inFd); + ASSERT( pc.inFd != NO_HNDL ); + + int i = 0; + PPMWriter ppm_writer(pc.inFd); + for( double cur = 0; cur < end; cur += shift, i++ ) + { + RefPtr img = GetRawFrame(cur, plyr); + ASSERT( img ); + + ppm_writer.Write(img); + } + } +} + +BOOST_AUTO_TEST_CASE( TestStillTranscoding ) +{ + return; + std::string fname = "/home/ilya/opt/programming/atom-project/dvd_out/3.Menu 4/Menu.png"; + + // в случае автономной работы ffmpeg указываем длительность аргументом + double duration = 15; + std::string ffmpeg_cmd = boost::format("ffmpeg -t %3$.2f -loop_input -i \"%1%\" %2%") + % fname % FFmpegPostArgs("../dvd_out/trans.vob", false, true) % duration % bf::stop; + + io::cout << ffmpeg_cmd << io::endl; + //Execution::SimpleSpawn(ffmpeg_cmd.c_str()); + ExitData ed = System(ffmpeg_cmd); + BOOST_CHECK( ed.IsGood() ); +} + +BOOST_AUTO_TEST_CASE( TestMenuSettings ) +{ + return; + GtkmmDBInit gd_init; + RefPtr ms = InitAndLoadPrj(TestProjectPath()).mnStore; + ASSERT( Size(ms) ); + + Menu mn = GetMenu(ms, ms->children().begin()); + void MenuSettings(Menu mn, Gtk::Window* win); + MenuSettings(mn, 0); +} + +BOOST_AUTO_TEST_CASE( TestCheckFFmpeg ) +{ + std::string conts = GetTestFNameContents("ffmpeg05_valid_dvd_encoders.txt"); + //std::string conts = Glib::file_get_contents("/home/ilya/opt/programming/atom-project/hardy_formats_.txt"); + //std::string conts = Glib::file_get_contents("/home/ilya/opt/programming/atom-project/lucid_formats.txt"); + + void TestFFmpegForDVDEncoding(const std::string& conts); + TestFFmpegForDVDEncoding(conts); +} + +} // namespace Project + + diff -Nru bombono-dvd-0.7.0/src/mgui/tests/test_trk_win.cpp bombono-dvd-0.8.0/src/mgui/tests/test_trk_win.cpp --- bombono-dvd-0.7.0/src/mgui/tests/test_trk_win.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/tests/test_trk_win.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/tests/test_trk_win.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -99,9 +99,7 @@ //ASSERT( plyr.Open("/opt/src/Video/MonaLisa/ml_02_6.vob") ); //ASSERT( plyr.Open("/opt/src/Video/Billiard/vts_01_1.vob") ); std::string fname = "/opt/src/Video/elephantsdream.mpg"; - bool is_open = plyr.Open(fname.c_str()); - //bool is_open = plyr.Open("../Autumn.mpg"); - ASSERT_OR_UNUSED( is_open ); + CheckOpen(plyr, fname); CurrVideo->MakeByPath(fname); double fps = Mpeg::GetFrameFPS(plyr); diff -Nru bombono-dvd-0.7.0/src/mgui/theme.h bombono-dvd-0.8.0/src/mgui/theme.h --- bombono-dvd-0.7.0/src/mgui/theme.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/theme.h 2010-11-01 21:58:29.000000000 +0000 @@ -50,7 +50,7 @@ class ThemeCache: protected std::list, public Singleton { - typedef std::vector MyParent; + //typedef std::vector MyParent; public: // получить тему по названию static const ThemeData& GetTheme(const std::string& theme_name); diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/dvdmark.h bombono-dvd-0.8.0/src/mgui/timeline/dvdmark.h --- bombono-dvd-0.7.0/src/mgui/timeline/dvdmark.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/dvdmark.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mgui/timeline/dvdmark.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #ifndef __MGUI_TIMELINE_DVDMARK_H__ #define __MGUI_TIMELINE_DVDMARK_H__ diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/layout.cpp bombono-dvd-0.8.0/src/mgui/timeline/layout.cpp --- bombono-dvd-0.7.0/src/mgui/timeline/layout.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/layout.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -374,10 +374,9 @@ Gtk::Button* btn = Gtk::manage(new SquareButton); SetNonActiveButton(*btn, "ScaleTrackButton"); - using namespace boost; int add = is_plus ? 1 : -1 ; btn->signal_clicked().connect( - wrap_return(lambda::bind(&MoveAdj, boost::ref(trk_lay.TrkScale()), add, true)) ); + wrap_return(bb::bind(&MoveAdj, boost::ref(trk_lay.TrkScale()), add, true)) ); return btn; } @@ -524,7 +523,7 @@ Gtk::Button* dvd_btn = Gtk::manage(new Gtk::Button); SetNonActiveButton(*dvd_btn, "DVDLabelButton"); SetTip(*dvd_btn, _("Add Chapter Point")); - dvd_btn->signal_clicked().connect( boost::lambda::bind(&InsertDVDMark, boost::ref(layout)) ); + dvd_btn->signal_clicked().connect( bb::bind(&InsertDVDMark, boost::ref(layout)) ); Gtk::Image* dvd_img = Gtk::manage(new Gtk::Image(GetFactoryImage("dvdmark.png"))); dvd_btn->add(*dvd_img); diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/monitor.cpp bombono-dvd-0.8.0/src/mgui/timeline/monitor.cpp --- bombono-dvd-0.7.0/src/mgui/timeline/monitor.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/monitor.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/timeline/monitor.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -41,8 +41,9 @@ DAMonitor::DAMonitor(): VideoArea(false) { //SetOutputFormat(fofYCBCR); - SetOutputFormat(plyr, fofRGB); //SetOutputFormat(fofRGBA); + //SetOutputFormat(plyr, fofRGB); + RGBOpen(plyr); } Point DAMonitor::GetAspectRadio() diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/mviewer.cpp bombono-dvd-0.8.0/src/mgui/timeline/mviewer.cpp --- bombono-dvd-0.7.0/src/mgui/timeline/mviewer.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/mviewer.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -251,7 +252,7 @@ // 1 окно выбора файлов Gtk::FileChooserWidget& fcw = *Gtk::manage(new Gtk::FileChooserWidget(Gtk::FILE_CHOOSER_ACTION_OPEN)); vbox.pack_start(fcw, true, true, 0); - ActionFunctor open_fnr = boost::lambda::bind(&OpenFile, boost::ref(fcw), fnr); + ActionFunctor open_fnr = bb::bind(&OpenFile, boost::ref(fcw), fnr); fcw.set_local_only(true); // для добавления множества файлов в проект @@ -287,7 +288,7 @@ SetFilter(fcw, fftALL_FORMATS); combo.signal_changed().connect( - boost::lambda::bind(&OnChangeFCWFilter, boost::ref(combo), boost::ref(fcw)) ); + bb::bind(&OnChangeFCWFilter, boost::ref(combo), boost::ref(fcw)) ); vbox.pack_start(combo, Gtk::PACK_SHRINK); } @@ -363,7 +364,7 @@ vpaned.add1(vbox); Gtk::HPaned& hpaned = *Gtk::manage(new Gtk::HPaned); - hpaned.set_position(BROWSER_WDH); + SetUpdatePos(hpaned, UnnamedPrefs().fbWdh); vbox.pack_start(hpaned, true, true, 0); tw_fnr(hpaned, mon, layout); @@ -381,14 +382,13 @@ gtk_container_child_set(vpaned.Gtk::Container::gobj(), vpaned.get_child2()->gobj(), "resize", FALSE, NULL); - vpaned.signal_realize().connect(boost::lambda::bind(&SetGarmonicHeightForTrk, boost::ref(vpaned))); + vpaned.signal_realize().connect(bb::bind(&SetGarmonicHeightForTrk, boost::ref(vpaned))); } void PackMonitor(Gtk::HPaned& hpaned, Timeline::DAMonitor& mon, TrackLayout& layout) { // 1 окно выбора файлов - using namespace boost; - PackFileChooserWidget(hpaned, lambda::bind(&OpenFileWithTrackLayout, boost::ref(layout), lambda::_1), + PackFileChooserWidget(hpaned, bb::bind(&OpenFileWithTrackLayout, boost::ref(layout), _1), true); // 1.1 монитор @@ -401,8 +401,7 @@ win.set_title("MViewer"); win.set_default_size(800, 600); - using namespace boost; - PackTrackWindow(win, lambda::bind(&PackMonitor, lambda::_1, lambda::_2, lambda::_3)); + PackTrackWindow(win, bb::bind(&PackMonitor, _1, _2, _3)); RunWindow(win); } diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/mviewer.h bombono-dvd-0.8.0/src/mgui/timeline/mviewer.h --- bombono-dvd-0.7.0/src/mgui/timeline/mviewer.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/mviewer.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/timeline/mviewer.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008-2009 Ilya Murav'jov +// Copyright (c) 2008-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/mviewer-main.cpp bombono-dvd-0.8.0/src/mgui/timeline/mviewer-main.cpp --- bombono-dvd-0.7.0/src/mgui/timeline/mviewer-main.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/mviewer-main.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/timeline/mviewer-main.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/select.cpp bombono-dvd-0.8.0/src/mgui/timeline/select.cpp --- bombono-dvd-0.7.0/src/mgui/timeline/select.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/select.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -143,7 +143,7 @@ Gtk::CheckButton& add_btn = NewManaged(_("A_dd to project"), true); RefPtr add_ref(MakeRefPtr(&add_btn)); - if( ChooseFileSaveTo(fnam, _("Save Frame..."), mon, bl::bind(&OnSaveFrameDialog, bl::_1, boost::ref(add_btn))) ) + if( ChooseFileSaveTo(fnam, _("Save Frame..."), mon, bb::bind(&OnSaveFrameDialog, _1, boost::ref(add_btn))) ) { // находим расширение и по нему сохраняем int i = fnam.rfind('.'); @@ -172,13 +172,11 @@ Gtk::CheckButton* cbtn = 0; { Gtk::VBox& vbox = AddHIGedVBox(add_dlg); + Gtk::HBox& hbox = PackStart(vbox, NewManaged()); Add(PackStart(hbox, NewPaddingAlg(0, 0, 0, 40)), NewManaged(_("Interval between Chapters:"))); btn = &PackStart(hbox, NewManaged()); - // по мотивам gtk_spin_button_new_with_range() - int step = 1; - btn->configure(*Gtk::manage(new Gtk::Adjustment(5, 1, 1000, step, 10*step, 0)), step, 0); - btn->set_numeric(true); + ConfigureSpin(*btn, 5, 1000); // 5 мин. по умолчанию Gtk::Label& lbl = PackStart(hbox, NewManaged(_("min."))); lbl.set_padding(2, 0); @@ -211,10 +209,9 @@ { popupActions = Gtk::ActionGroup::create("Actions"); - using namespace boost; // Add popupActions->add( Gtk::Action::create("Add Chapter", _("Add Chapter Point")), - lambda::bind(&InsertDVDMark, boost::ref(trkLay)) ); + bb::bind(&InsertDVDMark, boost::ref(trkLay)) ); // Delete RefPtr act = Gtk::Action::create("Delete Chapter", _("Delete Chapter Point")); act->set_sensitive(false); @@ -223,21 +220,21 @@ act = Gtk::Action::create("Delete All", _("Delete All Chapter Points")); if( DVDMarks().size() == 0 ) act->set_sensitive(false); - popupActions->add( act, lambda::bind(&DeleteAllDVDMarks, boost::ref(trkLay)) ); + popupActions->add( act, bb::bind(&DeleteAllDVDMarks, boost::ref(trkLay)) ); // Add at Intervals popupActions->add( Gtk::Action::create("Add at Intervals", DOTS_("Add Chapter Points at Intervals")), - bl::bind(&InsertChapters, boost::ref(trkLay)) ); + bb::bind(&InsertChapters, boost::ref(trkLay)) ); // Save - ActionFunctor save_fnr = lambda::constant(0); // если не mon, то пустой + ActionFunctor save_fnr = boost::function_identity; // bl::constant(0); // если не mon, то пустой DAMonitor* mon = dynamic_cast(&trkLay.GetMonitor()); if( mon ) - save_fnr = lambda::bind(&SaveFrame, boost::ref(*mon)); + save_fnr = bb::bind(&SaveFrame, boost::ref(*mon)); popupActions->add( Gtk::Action::create("Save Frame", Gtk::Stock::SAVE, DOTS_("Save Current Frame")), save_fnr ); popupActions->add( Gtk::Action::create("Play in Totem", Gtk::Stock::MEDIA_PLAY, BF_("_Play in %1%") % "Totem" % bf::stop), - bl::bind(&PlayInTotem, boost::ref(trkLay)) ); + bb::bind(&PlayInTotem, boost::ref(trkLay)) ); } void ContextMenuHook::AtDVDMark(int idx) @@ -248,7 +245,7 @@ act = popupActions->get_action("Delete Chapter"); act->set_sensitive(true); - act->signal_activate().connect( boost::lambda::bind(&DeleteDVDMark, boost::ref(trkLay), idx) ); + act->signal_activate().connect( bb::bind(&DeleteDVDMark, boost::ref(trkLay), idx) ); } void ContextMenuHook::Process() @@ -738,12 +735,11 @@ ent.set_alignment(Gtk::ALIGN_CENTER); // сигналы - using namespace boost; - ent.signal_activate().connect( lambda::bind(&EditBigLabelTL::EndState, this, boost::ref(trk), true) ); + ent.signal_activate().connect( bb::bind(&EditBigLabelTL::EndState, this, boost::ref(trk), true) ); ent.signal_focus_out_event().connect( - wrap_return(lambda::bind(&OnFocusOutBigLabel, boost::ref(trk))) ); + wrap_return(bb::bind(&OnFocusOutBigLabel, boost::ref(trk))) ); ent.signal_key_press_event().connect( - wrap_return(lambda::bind(&OnKeyPressBigLabel, boost::ref(trk), lambda::_1)) ); + wrap_return(bb::bind(&OnKeyPressBigLabel, boost::ref(trk), _1)) ); LimitTextInput(ent, AllowedChars); sz = FindAForCenteredRect(sz, lct); diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/service.cpp bombono-dvd-0.8.0/src/mgui/timeline/service.cpp --- bombono-dvd-0.7.0/src/mgui/timeline/service.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/service.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/timeline/service.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/timeline/service.h bombono-dvd-0.8.0/src/mgui/timeline/service.h --- bombono-dvd-0.7.0/src/mgui/timeline/service.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/timeline/service.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mgui/timeline/service.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mgui/win_utils.cpp bombono-dvd-0.8.0/src/mgui/win_utils.cpp --- bombono-dvd-0.7.0/src/mgui/win_utils.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mgui/win_utils.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -270,15 +270,20 @@ dialog.set_default_response(Gtk::RESPONSE_OK); } -static void OnMenuSelectionDone(Gtk::Menu& mn) +static void OnMenuSelectionDone(Gtk::Menu* mn) { - delete &mn; + delete mn; +} + +void SetDeleteOnDone(Gtk::Menu& menu) +{ + menu.signal_selection_done().connect(bb::bind(OnMenuSelectionDone, &menu)); } Gtk::Menu& NewPopupMenu() { Gtk::Menu& menu = NewManaged(); - menu.signal_selection_done().connect(boost::lambda::bind(OnMenuSelectionDone, boost::ref(menu))); + SetDeleteOnDone(menu); return menu; } @@ -385,7 +390,7 @@ // на основе Gtk::Dialog; при этом придется копировать стандартный функционал MessageDialog // int label_num = 0; - ForAllWidgets(static_cast(mdlg).gobj(), bl::bind(&ActivateLinksFor2Label, bl::_1, boost::ref(label_num))); + ForAllWidgets(static_cast(mdlg).gobj(), bb::bind(&ActivateLinksFor2Label, _1, boost::ref(label_num))); } Gtk::Alignment& NewPaddingAlg(int top, int btm, int lft, int rgt) @@ -412,3 +417,13 @@ return lbl; } +std::string BoldItalicText(const std::string& txt) +{ + return "" + txt + ""; +} + +Gtk::Label& NewBoldItalicLabel(const std::string& label, bool use_underline) +{ + return NewMarkupLabel(BoldItalicText(label), use_underline); +} + diff -Nru bombono-dvd-0.7.0/src/mlib/any_iterator.h bombono-dvd-0.8.0/src/mlib/any_iterator.h --- bombono-dvd-0.7.0/src/mlib/any_iterator.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/any_iterator.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/any_iterator.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_ANY_ITERATOR_H__ #define __MLIB_ANY_ITERATOR_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/bind.h bombono-dvd-0.8.0/src/mlib/bind.h --- bombono-dvd-0.7.0/src/mlib/bind.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/bind.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mlib/bind.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #ifndef __MLIB_BIND_H__ #define __MLIB_BIND_H__ @@ -8,5 +28,9 @@ using boost::bind; } +namespace b { +using boost::ref; +} + #endif // __MLIB_BIND_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/filesystem.cpp bombono-dvd-0.8.0/src/mlib/filesystem.cpp --- bombono-dvd-0.7.0/src/mlib/filesystem.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/filesystem.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/filesystem.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -33,6 +33,11 @@ return directory_iterator(dir_path) == end_itr; } +std::string operator / (const path& f, to_string_enum /*to_str*/) +{ + return f.string(); +} + } } // namepspace filesystem, boost std::string get_basename(const fs::path& pth) diff -Nru bombono-dvd-0.7.0/src/mlib/filesystem.h bombono-dvd-0.8.0/src/mlib/filesystem.h --- bombono-dvd-0.7.0/src/mlib/filesystem.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/filesystem.h 2010-11-01 21:58:29.000000000 +0000 @@ -31,9 +31,15 @@ bool is_empty_directory(const path & dir_path); +// вместо (path).string() используем +// path/fs::to_str +enum to_string_enum { to_str }; +std::string operator / (const path& f, to_string_enum /*to_str*/); + } } // namepspace filesystem, boost namespace fs = boost::filesystem; + std::string get_basename(const fs::path& pth); std::string get_extension(const fs::path& pth); diff -Nru bombono-dvd-0.7.0/src/mlib/foreach.h bombono-dvd-0.8.0/src/mlib/foreach.h --- bombono-dvd-0.7.0/src/mlib/foreach.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/foreach.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/foreach.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_FOREACH_H__ #define __MLIB_FOREACH_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/format.h bombono-dvd-0.8.0/src/mlib/format.h --- bombono-dvd-0.7.0/src/mlib/format.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/format.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/format.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_FORMAT_H__ #define __MLIB_FORMAT_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/function.h bombono-dvd-0.8.0/src/mlib/function.h --- bombono-dvd-0.7.0/src/mlib/function.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/function.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/function.h // This file is part of Bombono DVD project. // -// Copyright (c) 2009 Ilya Murav'jov +// Copyright (c) 2009-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -26,6 +26,10 @@ typedef boost::function ActionFunctor; +namespace boost { +inline void function_identity() {} +} + // Выполнить действие в конце блока // // Замечание: удобнее использовать при быстрой разработке diff -Nru bombono-dvd-0.7.0/src/mlib/instantiate.cpp bombono-dvd-0.8.0/src/mlib/instantiate.cpp --- bombono-dvd-0.7.0/src/mlib/instantiate.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/instantiate.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mlib/instantiate.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include "format.h" @@ -14,6 +34,7 @@ INST_BFRMT_PERCENT(char const* const) INST_BFRMT_PERCENT(unsigned long long) // для uint64_t INST_BFRMT_PERCENT(const double) +INST_BFRMT_PERCENT(double) // :KLUDGE: в зависимости от режима оптимизации компиляции инстанцировать приходится разные объекты, // в зависимости от того, inline'ит компилятор operator%() и feed() или нет diff -Nru bombono-dvd-0.7.0/src/mlib/lambda.h bombono-dvd-0.8.0/src/mlib/lambda.h --- bombono-dvd-0.7.0/src/mlib/lambda.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/lambda.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/lambda.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mlib/mstdio_sync_filebuf.h bombono-dvd-0.8.0/src/mlib/mstdio_sync_filebuf.h --- bombono-dvd-0.7.0/src/mlib/mstdio_sync_filebuf.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/mstdio_sync_filebuf.h 2010-11-01 21:58:29.000000000 +0000 @@ -33,7 +33,7 @@ // mstdio_sync_filebuf.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007,2009 Ilya Murav'jov +// Copyright (c) 2007,2009-2010 Ilya Murav'jov // // Используется в проекте "Атом" как безопасная (в плане буферизации) // обертка над FILE* и int (файловый дескриптор) diff -Nru bombono-dvd-0.7.0/src/mlib/ptr.h bombono-dvd-0.8.0/src/mlib/ptr.h --- bombono-dvd-0.7.0/src/mlib/ptr.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/ptr.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/ptr.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mlib/range/any_range.h bombono-dvd-0.8.0/src/mlib/range/any_range.h --- bombono-dvd-0.7.0/src/mlib/range/any_range.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/range/any_range.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/range/any_range.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_RANGE_ANY_RANGE_H__ #define __MLIB_RANGE_ANY_RANGE_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/range/my_adaptors.h bombono-dvd-0.8.0/src/mlib/range/my_adaptors.h --- bombono-dvd-0.7.0/src/mlib/range/my_adaptors.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/range/my_adaptors.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/range/my_adaptors.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_RANGE_MY_ADAPTORS_H__ #define __MLIB_RANGE_MY_ADAPTORS_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/read_stream.cpp bombono-dvd-0.8.0/src/mlib/read_stream.cpp --- bombono-dvd-0.7.0/src/mlib/read_stream.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/read_stream.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/read_stream.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -21,7 +21,9 @@ #include "const.h" #include "read_stream.h" -#include "lambda.h" +//#include "lambda.h" +#include "bind.h" +#include "sdk/stream_util.h" bool ReadStream(ReadFunctor fnr, io::stream& strm, io::pos len) { @@ -40,6 +42,37 @@ return is_break; } +bool ReadAllStream(ReadFunctor fnr, io::stream& strm) +{ + return ReadStream(fnr, strm, StreamSize(strm)); +} + +static char* CopyToString(char* buf, int sz, std::string& res) +{ + res += std::string(buf, sz); + return buf; +} + +static std::string ReadAllStream(io::stream& strm) +{ + std::string res; + ReadAllStream(bb::bind(&CopyToString, _1, _2, boost::ref(res)), strm); + + return res; +} + +std::string ReadAllStream(const fs::path& path) +{ + io::stream strm(path.string().c_str(), iof::in); + return ReadAllStream(strm); +} + +void WriteAllStream(const fs::path& path, const std::string& str) +{ + io::stream strm(path.string().c_str(), iof::out); + strm.write(str.c_str(), str.size()); +} + static char* CopyFilePart(io::stream& dst, char* buf, int len) { dst.write(buf, len); @@ -48,7 +81,7 @@ ReadFunctor MakeWriter(io::stream& dst_strm) { - return bl::bind(&CopyFilePart, boost::ref(dst_strm), bl::_1, bl::_2); + return bb::bind(&CopyFilePart, boost::ref(dst_strm), _1, _2); } static char* ShiftBuf(char* buf, int len) @@ -59,6 +92,6 @@ ReadFunctor MakeBufShifter() { - return bl::bind(&ShiftBuf, bl::_1, bl::_2); + return bb::bind(&ShiftBuf, _1, _2); } diff -Nru bombono-dvd-0.7.0/src/mlib/read_stream.h bombono-dvd-0.8.0/src/mlib/read_stream.h --- bombono-dvd-0.7.0/src/mlib/read_stream.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/read_stream.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/read_stream.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -22,14 +22,21 @@ #ifndef __MLIB_READ_STREAM_H__ #define __MLIB_READ_STREAM_H__ -#include - #include "stream.h" +#include "filesystem.h" + +#include typedef boost::function ReadFunctor; // чтение порциями по STRM_BUF_SZ // fnr должен возвращать либо buf, либо 0 (если хотим прекратить чтение) bool ReadStream(ReadFunctor fnr, io::stream& strm, io::pos len); +// указатель чтения должен быть в начале потока +bool ReadAllStream(ReadFunctor fnr, io::stream& strm); +std::string ReadAllStream(const fs::path& path); + +// записать в fname содержимое str +void WriteAllStream(const fs::path& path, const std::string& str); // Пример: скопировать n байт из одного потока в другой // ReadStream(MakeWriter(dst_strm), src_strm, n); diff -Nru bombono-dvd-0.7.0/src/mlib/regex.cpp bombono-dvd-0.8.0/src/mlib/regex.cpp --- bombono-dvd-0.7.0/src/mlib/regex.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/regex.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mlib/regex.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include "regex.h" diff -Nru bombono-dvd-0.7.0/src/mlib/regex.h bombono-dvd-0.8.0/src/mlib/regex.h --- bombono-dvd-0.7.0/src/mlib/regex.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/regex.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mlib/regex.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #ifndef __MLIB_REGEX_H__ #define __MLIB_REGEX_H__ @@ -161,5 +181,11 @@ } // namespace re +#define RG_BW "\\<" // начало слова +#define RG_EW "\\>" // конец слова +#define RG_SPS "[[:space:]]*" // пробелы +#define RG_NUM "([0-9]+)" // число +#define RG_CMD_BEG RG_BW // "^"RG_SPS // начало команды + #endif // #ifndef __MLIB_REGEX_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/resingleton.h bombono-dvd-0.8.0/src/mlib/resingleton.h --- bombono-dvd-0.7.0/src/mlib/resingleton.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/resingleton.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/resingleton.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_RESINGLETON_H__ #define __MLIB_RESINGLETON_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/sdk/stream_util.cpp bombono-dvd-0.8.0/src/mlib/sdk/stream_util.cpp --- bombono-dvd-0.7.0/src/mlib/sdk/stream_util.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/sdk/stream_util.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/sdk/stream_utils.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007 Ilya Murav'jov +// Copyright (c) 2007, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -21,6 +21,14 @@ #include "stream_util.h" +#include +#include + +#include // S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH +#include +#include // strcmp() +#include + void CleanEof(io::stream& strm) { if( strm.eof() ) @@ -39,3 +47,57 @@ return strm.is_open(); } +// открыть файл: только для чтения (is_read) или только для записи +int OpenFileAsArg(const char* fpath, bool is_read) +{ + int fd = is_read ? IN_HNDL : OUT_HNDL ; + int opts = is_read ? O_RDONLY : O_WRONLY|O_CREAT|O_TRUNC ; + + if( strcmp( fpath, "-" ) != 0 ) + { + // обязательно выставляем режим mode с S_IRUSR|S_IWUSR, + // иначе у нас не будет прав на изменение/удаление этого + // же файла во второй раз (при перезаписи)! + mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH; + fd = open(fpath, opts, mode); + } + + if( fd == NO_HNDL ) + Error("Cant open one of files!"); + + return fd; +} + +bool writeall(int fd, const void* buf, size_t nbyte) +{ + bool res = true; + + ssize_t cnt = 0; + for( ssize_t n; cnt < (ssize_t)nbyte; ) + { + n = write(fd, (const char*)buf+cnt, nbyte-cnt); + if( n == -1 ) + { + if( errno != EINTR ) + { + // все плохо, и даже уже записанное не может + // нас интересовать + res = false; + break; + } + } + else + cnt += n; + } + + // не было ошибок и записали сколько требовалось + return res && (cnt == (ssize_t)nbyte); +} + +// writeall() + ASSERT_RTL() +void checked_writeall(int fd, const void* buf, size_t nbyte) +{ + bool res = writeall(fd, buf, nbyte); + ASSERT_RTL( res ); +} + diff -Nru bombono-dvd-0.7.0/src/mlib/sdk/stream_util.h bombono-dvd-0.8.0/src/mlib/sdk/stream_util.h --- bombono-dvd-0.7.0/src/mlib/sdk/stream_util.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/sdk/stream_util.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/sdk/stream_util.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -75,6 +75,15 @@ } //namespace msys +// открыть файл: только для чтения (is_read) или только для записи +int OpenFileAsArg(const char* fpath, bool is_read); +// вызов write(int) не такой простой как кажется (см. "Advanced Unix Programming"), +// особенно при запись в канал (возможно прерывание EINTR); данная функция призвана +// надежно обернуть write() в этом плане и вернет false в случае действительной ошибки +// Замечание: только для блокируемых fd, для неблокируемых может быть еще EAGAIN +bool writeall(int fd, const void* buf, size_t nbyte); +// writeall() + ASSERT_RTL() +void checked_writeall(int fd, const void* buf, size_t nbyte); #endif // #ifndef __MLIB_SDK_STREAM_UTIL_H__ diff -Nru bombono-dvd-0.7.0/src/mlib/sigc.h bombono-dvd-0.8.0/src/mlib/sigc.h --- bombono-dvd-0.7.0/src/mlib/sigc.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/sigc.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/sigc.h // This file is part of Bombono DVD project. // -// Copyright (c) 2008 Ilya Murav'jov +// Copyright (c) 2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mlib/tech.h bombono-dvd-0.8.0/src/mlib/tech.h --- bombono-dvd-0.7.0/src/mlib/tech.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tech.h 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/tech.h // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mlib/tests/any_iterator/boost_iterator_library_example_test.cpp bombono-dvd-0.8.0/src/mlib/tests/any_iterator/boost_iterator_library_example_test.cpp --- bombono-dvd-0.7.0/src/mlib/tests/any_iterator/boost_iterator_library_example_test.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/any_iterator/boost_iterator_library_example_test.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -166,7 +166,7 @@ static void check_range(Iterator& run, Iterator& end) { //std::cout << *run << "\n"; - //std::cout << "!!!" << print_range_to_str(run, end) << "!!!" << std::endl; + //std::cout << "!?" << print_range_to_str(run, end) << "!?" << std::endl; BOOST_CHECK_EQUAL( print_range_to_str(run, end), "42 43 44;43 44;44;" ); } diff -Nru bombono-dvd-0.7.0/src/mlib/tests/test_instantiate.cpp bombono-dvd-0.8.0/src/mlib/tests/test_instantiate.cpp --- bombono-dvd-0.7.0/src/mlib/tests/test_instantiate.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/test_instantiate.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mlib/tests/test_instantiate.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include diff -Nru bombono-dvd-0.7.0/src/mlib/tests/test_iterator.cpp bombono-dvd-0.8.0/src/mlib/tests/test_iterator.cpp --- bombono-dvd-0.7.0/src/mlib/tests/test_iterator.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/test_iterator.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,23 @@ +// +// mlib/tests/test_iterator.cpp +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// #include diff -Nru bombono-dvd-0.7.0/src/mlib/tests/test_ptr.cpp bombono-dvd-0.8.0/src/mlib/tests/test_ptr.cpp --- bombono-dvd-0.7.0/src/mlib/tests/test_ptr.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/test_ptr.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/tests/test_ptr.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2008 Ilya Murav'jov +// Copyright (c) 2007-2008, 2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mlib/tests/test_stream.cpp bombono-dvd-0.8.0/src/mlib/tests/test_stream.cpp --- bombono-dvd-0.7.0/src/mlib/tests/test_stream.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/test_stream.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -2,7 +2,7 @@ // mlib/tests/test_stream.cpp // This file is part of Bombono DVD project. // -// Copyright (c) 2007-2009 Ilya Murav'jov +// Copyright (c) 2007-2010 Ilya Murav'jov // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru bombono-dvd-0.7.0/src/mlib/tests/test_utils.cpp bombono-dvd-0.8.0/src/mlib/tests/test_utils.cpp --- bombono-dvd-0.7.0/src/mlib/tests/test_utils.cpp 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/test_utils.cpp 2010-11-01 21:58:29.000000000 +0000 @@ -151,7 +151,6 @@ pth = "/ttt"; BOOST_CHECK( Project::MakeRelativeToDir(pth, dir) && (pth == fs::path("../../ttt")) ); } - //BOOST_CHECK( !fs::exists("/root/.config") ); #ifdef NDEBUG @@ -165,6 +164,11 @@ } catch(const fs::filesystem_error&) {} #endif + + // вместо (path).string() используем + // path/fs::to_str + std::string abc = fs::path("abc") / fs::to_str; + BOOST_CHECK_EQUAL( abc.c_str(), "abc" ); } BOOST_AUTO_TEST_CASE( TestStringstream ) diff -Nru bombono-dvd-0.7.0/src/mlib/tests/turn_on_test_main.h bombono-dvd-0.8.0/src/mlib/tests/turn_on_test_main.h --- bombono-dvd-0.7.0/src/mlib/tests/turn_on_test_main.h 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/src/mlib/tests/turn_on_test_main.h 2010-11-01 21:58:29.000000000 +0000 @@ -1,3 +1,24 @@ +// +// mlib/tests/turn_on_test_main.h +// This file is part of Bombono DVD project. +// +// Copyright (c) 2010 Ilya Murav'jov +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + #ifndef __MLIB_TESTS_TEST_TOTM_H__ #define __MLIB_TESTS_TEST_TOTM_H__ diff -Nru bombono-dvd-0.7.0/tools/scripts/bombono-dvd.spec bombono-dvd-0.8.0/tools/scripts/bombono-dvd.spec --- bombono-dvd-0.7.0/tools/scripts/bombono-dvd.spec 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/tools/scripts/bombono-dvd.spec 2010-11-01 21:58:29.000000000 +0000 @@ -7,7 +7,7 @@ # So, maybe adjustments required for other RPM-based distros. Name: bombono-dvd -Version: 0.7.0 +Version: 0.8.0 Summary: DVD authoring program with nice and clean GUI License: GPL Release: 0 @@ -16,7 +16,7 @@ Packager: Ilya Murav'jov Source: %{name}-%{version}.tar.bz2 BuildRequires: scons libdvdread-devel gtkmm2-devel libxml++-devel -Requires: dvdauthor mjpegtools dvd+rw-tools scons toolame +Requires: dvdauthor mjpegtools dvd+rw-tools scons toolame ffmpeg BuildRoot: %{_tmppath}/%{name}-%{version}-build # :TODO: diff -Nru bombono-dvd-0.7.0/tools/scripts/BuildVars.py bombono-dvd-0.8.0/tools/scripts/BuildVars.py --- bombono-dvd-0.7.0/tools/scripts/BuildVars.py 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/tools/scripts/BuildVars.py 2010-11-01 21:58:29.000000000 +0000 @@ -490,8 +490,8 @@ env = GetDefEnv().Environment(ENV = os.environ, toolpath = ['tools/scripts'], **kw) env.Prepend(CPPPATH = [GetSrcBuildDir(), '#/' + GetSrcDirPath()]) # thin archives ('T' option) are to speed up static libraries build - # :TODO: libmpeg2.a and etc should be built directly to build/lib (withour copying/symlinking) - #env.Replace(ARFLAGS = str(env['ARFLAGS']) + 'T') + # :TRICKY: libmpeg2.a and etc have to be built directly to build/lib (withour copying/symlinking) + env.Replace(ARFLAGS = str(env['ARFLAGS']) + 'T') return env def IsToBuildQuick(): diff -Nru bombono-dvd-0.7.0/tools/test-data/ffmpeg05_valid_dvd_encoders.txt bombono-dvd-0.8.0/tools/test-data/ffmpeg05_valid_dvd_encoders.txt --- bombono-dvd-0.7.0/tools/test-data/ffmpeg05_valid_dvd_encoders.txt 1970-01-01 00:00:00.000000000 +0000 +++ bombono-dvd-0.8.0/tools/test-data/ffmpeg05_valid_dvd_encoders.txt 2010-11-01 21:58:29.000000000 +0000 @@ -0,0 +1,402 @@ +File formats: + E 3g2 3GP2 format + E 3gp 3GP format + D 4xm 4X Technologies format + D IFF IFF format + D ISS Funcom ISS format + D MTV MTV format + DE RoQ raw id RoQ format + D aac raw ADTS AAC + DE ac3 raw AC-3 + E adts ADTS AAC + DE aiff Audio IFF + DE alaw PCM A-law format + DE alsa ALSA audio output + DE amr 3GPP AMR file format + D apc CRYO APC format + D ape Monkey's Audio + DE asf ASF format + E asf_stream ASF format + DE ass SSA/ASS format + DE au SUN AU format + DE avi AVI format + E avm2 Flash 9 (AVM2) format + D avs AVS format + D bethsoftvid Bethesda Softworks VID format + D bfi Brute Force & Ignorance + D c93 Interplay C93 + D cavsvideo raw Chinese AVS video + E crc CRC testing format + DE daud D-Cinema audio format + DE dirac raw Dirac + DE dnxhd raw DNxHD (SMPTE VC-3) + D dsicin Delphine Software International CIN format + DE dts raw DTS + DE dv DV video format + D dv1394 DV1394 A/V grab + E dvd MPEG-2 PS format (DVD VOB) + D dxa DXA + D ea Electronic Arts Multimedia Format + D ea_cdata Electronic Arts cdata + DE eac3 raw E-AC-3 + DE f32be PCM 32 bit floating-point big-endian format + DE f32le PCM 32 bit floating-point little-endian format + DE f64be PCM 64 bit floating-point big-endian format + DE f64le PCM 64 bit floating-point little-endian format + DE ffm FFM (FFserver live feed) format + D film_cpk Sega FILM/CPK format + DE flac raw FLAC + D flic FLI/FLC/FLX animation format + DE flv FLV format + E framecrc framecrc testing format + E gif GIF Animation + D gsm raw GSM + DE gxf GXF format + DE h261 raw H.261 + DE h263 raw H.263 + DE h264 raw H.264 video format + D idcin id Cinematic format + DE image2 image2 sequence + DE image2pipe piped image2 sequence + D ingenient raw Ingenient MJPEG + D ipmovie Interplay MVE format + E ipod iPod H.264 MP4 format + D libdc1394 dc1394 v.2 A/V grab + D lmlm4 lmlm4 raw format + DE m4v raw MPEG-4 video format + DE matroska Matroska file format + DE mjpeg raw MJPEG video + D mlp raw MLP + D mm American Laser Games MM format + DE mmf Yamaha SMAF + E mov MOV format + D mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG-4/Motion JPEG 2000 format + E mp2 MPEG audio layer 2 + DE mp3 MPEG audio layer 3 + E mp4 MP4 format + D mpc Musepack + D mpc8 Musepack SV8 + DE mpeg MPEG-1 System format + E mpeg1video raw MPEG-1 video + E mpeg2video raw MPEG-2 video + DE mpegts MPEG-2 transport stream format + D mpegtsraw MPEG-2 raw transport stream format + D mpegvideo raw MPEG video + E mpjpeg MIME multipart JPEG format + D msnwctcp MSN TCP Webcam stream + DE mulaw PCM mu-law format + D mvi Motion Pixels MVI format + DE mxf Material eXchange Format + E mxf_d10 Material eXchange Format, D-10 Mapping + D nc NC camera feed format + D nsv Nullsoft Streaming Video + E null raw null video format + DE nut NUT format + D nuv NuppelVideo format + DE ogg Ogg + D oma Sony OpenMG audio + DE oss Open Sound System playback + E psp PSP MP4 format + D psxstr Sony Playstation STR format + D pva TechnoTrend PVA file and stream format + D r3d REDCODE R3D format + DE rawvideo raw video format + E rcv VC-1 test bitstream + D redir Redirector format + D rl2 RL2 format + DE rm RealMedia format + D rpl RPL/ARMovie format + E rtp RTP output format + D rtsp RTSP input format + DE s16be PCM signed 16 bit big-endian format + DE s16le PCM signed 16 bit little-endian format + DE s24be PCM signed 24 bit big-endian format + DE s24le PCM signed 24 bit little-endian format + DE s32be PCM signed 32 bit big-endian format + DE s32le PCM signed 32 bit little-endian format + DE s8 PCM signed 8 bit format + D sdp SDP + D shn raw Shorten + D siff Beam Software SIFF + D smk Smacker video + D sol Sierra SOL format + E svcd MPEG-2 PS format (VOB) + DE swf Flash format + D thp THP + D tiertexseq Tiertex Limited SEQ format + D tta True Audio + D txd Renderware TeXture Dictionary + DE u16be PCM unsigned 16 bit big-endian format + DE u16le PCM unsigned 16 bit little-endian format + DE u24be PCM unsigned 24 bit big-endian format + DE u24le PCM unsigned 24 bit little-endian format + DE u32be PCM unsigned 32 bit big-endian format + DE u32le PCM unsigned 32 bit little-endian format + DE u8 PCM unsigned 8 bit format + D vc1 raw VC-1 + D vc1test VC-1 test bitstream format + E vcd MPEG-1 System format (VCD) + D video4linux Video4Linux device grab + D video4linux2 Video4Linux2 device grab + D vmd Sierra VMD format + E vob MPEG-2 PS format (VOB) + DE voc Creative Voice file format + DE wav WAV format + D wc3movie Wing Commander III movie format + D wsaud Westwood Studios audio format + D wsvqa Westwood Studios VQA format + D wv WavPack + D x11grab X11grab + D xa Maxis XA File Format + DE yuv4mpegpipe YUV4MPEG pipe format + +Codecs: + D V 4xm 4X Movie + D V D 8bps QuickTime 8BPS video + D A 8svx_exp 8SVX exponential + D A 8svx_fib 8SVX fibonacci + D A aac Advanced Audio Coding + D V D aasc Autodesk RLE + DEA ac3 ATSC A/52A (AC-3) + D A adpcm_4xm ADPCM 4X Movie + DEA adpcm_adx SEGA CRI ADX ADPCM + D A adpcm_ct ADPCM Creative Technology + D A adpcm_ea ADPCM Electronic Arts + D A adpcm_ea_maxis_xa ADPCM Electronic Arts Maxis CDROM XA + D A adpcm_ea_r1 ADPCM Electronic Arts R1 + D A adpcm_ea_r2 ADPCM Electronic Arts R2 + D A adpcm_ea_r3 ADPCM Electronic Arts R3 + D A adpcm_ea_xas ADPCM Electronic Arts XAS + D A adpcm_ima_amv ADPCM IMA AMV + D A adpcm_ima_dk3 ADPCM IMA Duck DK3 + D A adpcm_ima_dk4 ADPCM IMA Duck DK4 + D A adpcm_ima_ea_eacs ADPCM IMA Electronic Arts EACS + D A adpcm_ima_ea_sead ADPCM IMA Electronic Arts SEAD + D A adpcm_ima_iss ADPCM IMA Funcom ISS + DEA adpcm_ima_qt ADPCM IMA QuickTime + D A adpcm_ima_smjpeg ADPCM IMA Loki SDL MJPEG + DEA adpcm_ima_wav ADPCM IMA WAV + D A adpcm_ima_ws ADPCM IMA Westwood + DEA adpcm_ms ADPCM Microsoft + D A adpcm_sbpro_2 ADPCM Sound Blaster Pro 2-bit + D A adpcm_sbpro_3 ADPCM Sound Blaster Pro 2.6-bit + D A adpcm_sbpro_4 ADPCM Sound Blaster Pro 4-bit + DEA adpcm_swf ADPCM Shockwave Flash + D A adpcm_thp ADPCM Nintendo Gamecube THP + D A adpcm_xa ADPCM CDROM XA + DEA adpcm_yamaha ADPCM Yamaha + DEA alac ALAC (Apple Lossless Audio Codec) + D V amv AMV Video + D A ape Monkey's Audio + DEV D asv1 ASUS V1 + DEV D asv2 ASUS V2 + D A atrac3 Atrac 3 (Adaptive TRansform Acoustic Coding 3) + D V D avs AVS (Audio Video Standard) video + D V bethsoftvid Bethesda VID video + D V bfi Brute Force & Ignorance + DEV bmp BMP image + D V D c93 Interplay C93 + D V D camstudio CamStudio + D V D camtasia TechSmith Screen Capture Codec + D V D cavs Chinese AVS video (AVS1-P2, JiZhun profile) + D V D cinepak Cinepak + D V D cljr Cirrus Logic AccuPak + D A cook COOK + D V D cyuv Creative YUV (CYUV) + D A dca DCA (DTS Coherent Acoustics) + DEV D dnxhd VC3/DNxHD + D A dsicinaudio Delphine Software International CIN audio + D V D dsicinvideo Delphine Software International CIN video + DES dvbsub DVB subtitles + DES dvdsub DVD subtitles + DEV D dvvideo DV (Digital Video) + D V dxa Feeble Files/ScummVM DXA + D A eac3 ATSC A/52B (AC-3, E-AC-3) + D V D eacmv Electronic Arts CMV video + D V D eatgq Electronic Arts TGQ video + D V eatgv Electronic Arts TGV video + D V D eatqi Electronic Arts TQI Video + D V D escape124 Escape 124 + DEV D ffv1 FFmpeg codec #1 + DEVSD ffvhuff Huffyuv FFmpeg variant + DEA flac FLAC (Free Lossless Audio Codec) + DEV D flashsv Flash Screen Video + D V D flic Autodesk Animator Flic video + DEVSD flv Flash Video (FLV) + D V D fraps Fraps + DEA g726 G.726 ADPCM + DEV gif GIF (Graphics Interchange Format) + DEV D h261 H.261 + DEVSDT h263 H.263 / H.263-1996 + D VSD h263i Intel H.263 + EV h263p H.263+ / H.263-1998 / H.263 version 2 + D V D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 + D V D h264_vdpau H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration) + DEVSD huffyuv Huffyuv / HuffYUV + D V D idcinvideo id Quake II CIN video + D A imc IMC (Intel Music Coder) + D V D indeo2 Intel Indeo 2 + D V indeo3 Intel Indeo 3 + D A interplay_dpcm DPCM Interplay + D V D interplayvideo Interplay MVE video + DEV D jpegls JPEG-LS + D V kmvc Karl Morton's video codec + EV libdirac libdirac Dirac 2.2 + D A libfaad libfaad AAC (Advanced Audio Codec) + DEA libgsm libgsm GSM + DEA libgsm_ms libgsm GSM Microsoft variant + EA libmp3lame libmp3lame MP3 (MPEG audio layer 3) + D V libopenjpeg OpenJPEG based JPEG 2000 decoder + DEV libschroedinger libschroedinger Dirac 2.2 + D A libspeex libspeex Speex + EV libtheora libtheora Theora + EA libvorbis libvorbis Vorbis + EV libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 + EV libxvid libxvidcore MPEG-4 part 2 + EV ljpeg Lossless JPEG + D V D loco LOCO + D A mace3 MACE (Macintosh Audio Compression/Expansion) 3:1 + D A mace6 MACE (Macintosh Audio Compression/Expansion) 6:1 + D V D mdec Sony PlayStation MDEC (Motion DECoder) + D V D mimic Mimic + DEV D mjpeg MJPEG (Motion JPEG) + D V D mjpegb Apple MJPEG-B + D A mlp MLP (Meridian Lossless Packing)/TrueHD + D V D mmvideo American Laser Games MM Video + D V D motionpixels Motion Pixels video + D A mp1 MP1 (MPEG audio layer 1) + DEA mp2 MP2 (MPEG audio layer 2) + D A mp3 MP3 (MPEG audio layer 3) + D A mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3) + D A mp3on4 MP3onMP4 + D A mpc7 Musepack SV7 + D A mpc8 Musepack SV8 + DEVSDT mpeg1video MPEG-1 video + D V DT mpeg1video_vdpau MPEG-1 video (VDPAU acceleration) + DEVSDT mpeg2video MPEG-2 video + DEVSDT mpeg4 MPEG-4 part 2 + D VSDT mpegvideo MPEG-1 video + D V DT mpegvideo_vdpau MPEG-1/2 video (VDPAU acceleration) + D VSDT mpegvideo_xvmc MPEG-1/2 video XvMC (X-Video Motion Compensation) + DEVSD msmpeg4 MPEG-4 part 2 Microsoft variant version 3 + DEVSD msmpeg4v1 MPEG-4 part 2 Microsoft variant version 1 + DEVSD msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2 + D V D msrle Microsoft RLE + D V D msvideo1 Microsoft Video 1 + D V D mszh LCL (LossLess Codec Library) MSZH + DEA nellymoser Nellymoser Asao + D V D nuv NuppelVideo/RTJPEG + DEV pam PAM (Portable AnyMap) image + DEV pbm PBM (Portable BitMap) image + DEA pcm_alaw PCM A-law + D A pcm_dvd PCM signed 20|24-bit big-endian + DEA pcm_f32be PCM 32-bit floating point big-endian + DEA pcm_f32le PCM 32-bit floating point little-endian + DEA pcm_f64be PCM 64-bit floating point big-endian + DEA pcm_f64le PCM 64-bit floating point little-endian + DEA pcm_mulaw PCM mu-law + DEA pcm_s16be PCM signed 16-bit big-endian + DEA pcm_s16le PCM signed 16-bit little-endian + D A pcm_s16le_planar PCM 16-bit little-endian planar + DEA pcm_s24be PCM signed 24-bit big-endian + DEA pcm_s24daud PCM D-Cinema audio signed 24-bit + DEA pcm_s24le PCM signed 24-bit little-endian + DEA pcm_s32be PCM signed 32-bit big-endian + DEA pcm_s32le PCM signed 32-bit little-endian + DEA pcm_s8 PCM signed 8-bit + DEA pcm_u16be PCM unsigned 16-bit big-endian + DEA pcm_u16le PCM unsigned 16-bit little-endian + DEA pcm_u24be PCM unsigned 24-bit big-endian + DEA pcm_u24le PCM unsigned 24-bit little-endian + DEA pcm_u32be PCM unsigned 32-bit big-endian + DEA pcm_u32le PCM unsigned 32-bit little-endian + DEA pcm_u8 PCM unsigned 8-bit + DEA pcm_zork PCM Zork + D V pcx PC Paintbrush PCX image + DEV pgm PGM (Portable GrayMap) image + DEV pgmyuv PGMYUV (Portable GrayMap YUV) image + DEV png PNG image + DEV ppm PPM (Portable PixelMap) image + D V ptx V.Flash PTX image + D A qcelp QCELP / PureVoice + D A qdm2 QDesign Music Codec 2 + D V D qdraw Apple QuickDraw + D V D qpeg Q-team QPEG + DEV D qtrle QuickTime Animation (RLE) video + DEV rawvideo raw video + D A real_144 RealAudio 1.0 (14.4K) + D A real_288 RealAudio 2.0 (28.8K) + D V D rl2 RL2 video + DEA roq_dpcm id RoQ DPCM + DEV D roqvideo id RoQ video + D V D rpza QuickTime video (RPZA) + DEV D rv10 RealVideo 1.0 + DEV D rv20 RealVideo 2.0 + D V D rv30 RealVideo 3.0 + D V D rv40 RealVideo 4.0 + DEV sgi SGI image + D A shorten Shorten + D A smackaud Smacker audio + D V smackvid Smacker video + D V D smc QuickTime Graphics (SMC) + DEV snow Snow + D A sol_dpcm DPCM Sol + DEA sonic Sonic + EA sonicls Sonic lossless + D V D sp5x Sunplus JPEG (SP5X) + D V sunrast Sun Rasterfile image + DEV D svq1 Sorenson Vector Quantizer 1 + D VSD svq3 Sorenson Vector Quantizer 3 + DEV targa Truevision Targa image + D V theora Theora + D V D thp Nintendo Gamecube THP video + D V D tiertexseqvideo Tiertex Limited SEQ video + DEV tiff TIFF image + D V D truemotion1 Duck TrueMotion 1.0 + D V D truemotion2 Duck TrueMotion 2.0 + D A truespeech DSP Group TrueSpeech + D A tta True Audio (TTA) + D V txd Renderware TXD (TeXture Dictionary) image + D V D ultimotion IBM UltiMotion + D V vb Beam Software VB + D V vc1 SMPTE VC-1 + D V D vc1_vdpau SMPTE VC-1 VDPAU + D V D vcr1 ATI VCR1 + D A vmdaudio Sierra VMD audio + D V D vmdvideo Sierra VMD video + D V vmnc VMware Screen Codec / VMware Video + DEA vorbis Vorbis + D V vp3 On2 VP3 + D V D vp5 On2 VP5 + D V D vp6 On2 VP6 + D V D vp6a On2 VP6 (Flash version, with alpha channel) + D V D vp6f On2 VP6 (Flash version) + D V D vqavideo Westwood Studios VQA (Vector Quantized Animation) video + D A wavpack WavPack + DEA wmav1 Windows Media Audio 1 + DEA wmav2 Windows Media Audio 2 + DEVSD wmv1 Windows Media Video 7 + DEVSD wmv2 Windows Media Video 8 + D V wmv3 Windows Media Video 9 + D V D wmv3_vdpau Windows Media Video 9 VDPAU + D V D wnv1 Winnov WNV1 + D A ws_snd1 Westwood Audio (SND1) + D A xan_dpcm DPCM Xan + D V D xan_wc3 Wing Commander III / Xan + D V D xl Miro VideoXL + D S xsub XSUB + DEV D zlib LCL (LossLess Codec Library) ZLIB + DEV zmbv Zip Motion Blocks Video + +Bitstream filters: + text2movsub remove_extra noise mov2textsub mp3decomp mp3comp mjpegadump imxdump h264_mp4toannexb dump_extra +Supported file protocols: + file: gopher: http: pipe: rtp: tcp: udp: +Frame size, frame rate abbreviations: + ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif + +Note, the names of encoders and decoders do not always match, so there are +several cases where the above table shows encoder only or decoder only entries +even though both encoding and decoding are supported. For example, the h263 +decoder corresponds to the h263 and h263p encoders, for file formats it is even +worse. diff -Nru bombono-dvd-0.7.0/tools/test-data/menus.xml bombono-dvd-0.8.0/tools/test-data/menus.xml --- bombono-dvd-0.7.0/tools/test-data/menus.xml 2010-10-07 22:20:09.000000000 +0000 +++ bombono-dvd-0.8.0/tools/test-data/menus.xml 2010-11-01 21:58:29.000000000 +0000 @@ -1,6 +1,6 @@ - - + + @@ -12,6 +12,7 @@ 9.7999999999999989 20 30 + 38.439999999999998 @@ -24,47 +25,59 @@ - + + + + + - + - + - + - + - + + + + + - + - + + + + + - + - + - +